ReactOS 0.4.16-dev-2207-geb15453
string.c File Reference
#include "config.h"
#include "wine/port.h"
#include <math.h>
#include <stdarg.h>
#include <stdio.h>
#include <string.h>
#include "windef.h"
#include "winbase.h"
#include "shlwapi.h"
#include "wingdi.h"
#include "winuser.h"
#include "shlobj.h"
#include "mlang.h"
#include "ddeml.h"
#include "wine/unicode.h"
#include "wine/debug.h"
#include "resource.h"
Include dependency graph for string.c:

Go to the source code of this file.

Classes

struct  tagSHLWAPI_BYTEFORMATS
 

Macros

#define NONAMELESSUNION
 
#define NO_SHLWAPI_REG
 
#define NO_SHLWAPI_STREAM
 
#define KB   ((ULONGLONG)1024)
 
#define MB   (KB*KB)
 
#define GB   (KB*KB*KB)
 
#define TB   (KB*KB*KB*KB)
 
#define PB   (KB*KB*KB*KB*KB)
 

Typedefs

typedef struct tagSHLWAPI_BYTEFORMATS SHLWAPI_BYTEFORMATS
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (shell)
 
static HRESULT _SHStrDupAA (LPCSTR, LPSTR *)
 
static HRESULT _SHStrDupAW (LPCWSTR, LPSTR *)
 
static void FillNumberFmt (NUMBERFMTW *fmt, LPWSTR decimal_buffer, int decimal_bufwlen, LPWSTR thousand_buffer, int thousand_bufwlen)
 
static int FormatInt (LONGLONG qdwValue, LPWSTR pszBuf, int cchBuf)
 
static int FormatDouble (double value, int decimals, LPWSTR pszBuf, int cchBuf)
 
static BOOL SHLWAPI_ChrCmpHelperA (WORD ch1, WORD ch2, DWORD dwFlags)
 
static BOOL WINAPI SHLWAPI_ChrCmpA (WORD ch1, WORD ch2)
 
BOOL WINAPI ChrCmpIA (WORD ch1, WORD ch2)
 
BOOL WINAPI ChrCmpIW (WCHAR ch1, WCHAR ch2)
 
LPSTR WINAPI StrChrA (LPCSTR lpszStr, WORD ch)
 
LPWSTR WINAPI StrChrW (LPCWSTR lpszStr, WCHAR ch)
 
LPSTR WINAPI StrChrIA (LPCSTR lpszStr, WORD ch)
 
LPWSTR WINAPI StrChrIW (LPCWSTR lpszStr, WCHAR ch)
 
LPWSTR WINAPI StrChrNW (LPCWSTR lpszStr, WCHAR ch, UINT cchMax)
 
int WINAPI StrCmpIW (LPCWSTR lpszStr, LPCWSTR lpszComp)
 
INT WINAPI StrCmpNA (LPCSTR lpszStr, LPCSTR lpszComp, INT iLen)
 
INT WINAPI StrCmpNW (LPCWSTR lpszStr, LPCWSTR lpszComp, INT iLen)
 
int WINAPI StrCmpNIA (LPCSTR lpszStr, LPCSTR lpszComp, int iLen)
 
INT WINAPI StrCmpNIW (LPCWSTR lpszStr, LPCWSTR lpszComp, int iLen)
 
int WINAPI StrCmpW (LPCWSTR lpszStr, LPCWSTR lpszComp)
 
LPWSTR WINAPI StrCatW (LPWSTR lpszStr, LPCWSTR lpszSrc)
 
DWORD WINAPI StrCatChainW (LPWSTR lpszStr, DWORD cchMax, DWORD ichAt, LPCWSTR lpszCat)
 
LPWSTR WINAPI StrCpyW (LPWSTR lpszStr, LPCWSTR lpszSrc)
 
LPWSTR WINAPI StrCpyNW (LPWSTR dst, LPCWSTR src, int count)
 
static LPSTR SHLWAPI_StrStrHelperA (LPCSTR lpszStr, LPCSTR lpszSearch, INT(WINAPI *pStrCmpFn)(LPCSTR, LPCSTR, INT))
 
LPSTR WINAPI StrStrA (LPCSTR lpszStr, LPCSTR lpszSearch)
 
LPWSTR WINAPI StrStrW (LPCWSTR lpszStr, LPCWSTR lpszSearch)
 
LPSTR WINAPI StrRStrIA (LPCSTR lpszStr, LPCSTR lpszEnd, LPCSTR lpszSearch)
 
LPWSTR WINAPI StrRStrIW (LPCWSTR lpszStr, LPCWSTR lpszEnd, LPCWSTR lpszSearch)
 
LPSTR WINAPI StrStrIA (LPCSTR lpszStr, LPCSTR lpszSearch)
 
LPWSTR WINAPI StrStrIW (LPCWSTR lpszStr, LPCWSTR lpszSearch)
 
LPWSTR WINAPI StrStrNW (LPCWSTR lpFirst, LPCWSTR lpSrch, UINT cchMax)
 
LPWSTR WINAPI StrStrNIW (LPCWSTR lpFirst, LPCWSTR lpSrch, UINT cchMax)
 
int WINAPI StrToIntA (LPCSTR lpszStr)
 
int WINAPI StrToIntW (LPCWSTR lpszStr)
 
BOOL WINAPI StrToIntExA (LPCSTR lpszStr, DWORD dwFlags, int *lpiRet)
 
BOOL WINAPI StrToInt64ExA (LPCSTR lpszStr, DWORD dwFlags, LONGLONG *lpiRet)
 
BOOL WINAPI StrToIntExW (LPCWSTR lpszStr, DWORD dwFlags, int *lpiRet)
 
BOOL WINAPI StrToInt64ExW (LPCWSTR lpszStr, DWORD dwFlags, LONGLONG *lpiRet)
 
LPSTR WINAPI StrDupA (LPCSTR lpszStr)
 
LPWSTR WINAPI StrDupW (LPCWSTR lpszStr)
 
static int SHLWAPI_StrSpnHelperA (LPCSTR lpszStr, LPCSTR lpszMatch, LPSTR(WINAPI *pStrChrFn)(LPCSTR, WORD), BOOL bInvert)
 
int WINAPI StrSpnA (LPCSTR lpszStr, LPCSTR lpszMatch)
 
int WINAPI StrSpnW (LPCWSTR lpszStr, LPCWSTR lpszMatch)
 
int WINAPI StrCSpnA (LPCSTR lpszStr, LPCSTR lpszMatch)
 
int WINAPI StrCSpnW (LPCWSTR lpszStr, LPCWSTR lpszMatch)
 
int WINAPI StrCSpnIA (LPCSTR lpszStr, LPCSTR lpszMatch)
 
int WINAPI StrCSpnIW (LPCWSTR lpszStr, LPCWSTR lpszMatch)
 
LPSTR WINAPI StrPBrkA (LPCSTR lpszStr, LPCSTR lpszMatch)
 
LPWSTR WINAPI StrPBrkW (LPCWSTR lpszStr, LPCWSTR lpszMatch)
 
static LPSTR SHLWAPI_StrRChrHelperA (LPCSTR lpszStr, LPCSTR lpszEnd, WORD ch, BOOL(WINAPI *pChrCmpFn)(WORD, WORD))
 
LPSTR WINAPI StrRChrA (LPCSTR lpszStr, LPCSTR lpszEnd, WORD ch)
 
LPWSTR WINAPI StrRChrW (LPCWSTR str, LPCWSTR end, WORD ch)
 
LPSTR WINAPI StrRChrIA (LPCSTR lpszStr, LPCSTR lpszEnd, WORD ch)
 
LPWSTR WINAPI StrRChrIW (LPCWSTR str, LPCWSTR end, WORD ch)
 
LPSTR WINAPI StrCatBuffA (LPSTR lpszStr, LPCSTR lpszCat, INT cchMax)
 
LPWSTR WINAPI StrCatBuffW (LPWSTR lpszStr, LPCWSTR lpszCat, INT cchMax)
 
HRESULT WINAPI StrRetToBufA (LPSTRRET src, const ITEMIDLIST *pidl, LPSTR dest, UINT len)
 
HRESULT WINAPI StrRetToBufW (LPSTRRET src, const ITEMIDLIST *pidl, LPWSTR dest, UINT len)
 
HRESULT WINAPI StrRetToStrA (LPSTRRET lpStrRet, const ITEMIDLIST *pidl, LPSTR *ppszName)
 
HRESULT WINAPI StrRetToStrW (LPSTRRET lpStrRet, const ITEMIDLIST *pidl, LPWSTR *ppszName)
 
static HRESULT _SHStrDupAToBSTR (LPCSTR src, BSTR *pBstrOut)
 
HRESULT WINAPI StrRetToBSTR (STRRET *lpStrRet, LPCITEMIDLIST pidl, BSTR *pBstrOut)
 
LPSTR WINAPI StrFormatKBSizeA (LONGLONG llBytes, LPSTR lpszDest, UINT cchMax)
 
LPWSTR WINAPI StrFormatKBSizeW (LONGLONG llBytes, LPWSTR lpszDest, UINT cchMax)
 
LPSTR WINAPI StrNCatA (LPSTR lpszStr, LPCSTR lpszCat, INT cchMax)
 
LPWSTR WINAPI StrNCatW (LPWSTR lpszStr, LPCWSTR lpszCat, INT cchMax)
 
BOOL WINAPI StrTrimA (LPSTR lpszStr, LPCSTR lpszTrim)
 
BOOL WINAPI StrTrimW (LPWSTR lpszStr, LPCWSTR lpszTrim)
 
HRESULT WINAPI SHStrDupA (LPCSTR lpszStr, LPWSTR *lppszDest)
 
HRESULT WINAPI SHStrDupW (LPCWSTR src, LPWSTR *dest)
 
static LPWSTR SHLWAPI_WriteReverseNum (LPWSTR lpszOut, DWORD dwNum)
 
static int SHLWAPI_FormatSignificant (LPWSTR lpszNum, int dwDigits)
 
static int SHLWAPI_WriteTimeClass (LPWSTR lpszOut, DWORD dwValue, UINT uClassStringId, int iDigits)
 
INT WINAPI StrFromTimeIntervalA (LPSTR lpszStr, UINT cchMax, DWORD dwMS, int iDigits)
 
INT WINAPI StrFromTimeIntervalW (LPWSTR lpszStr, UINT cchMax, DWORD dwMS, int iDigits)
 
BOOL WINAPI StrIsIntlEqualA (BOOL bCase, LPCSTR lpszStr, LPCSTR lpszComp, int iLen)
 
BOOL WINAPI StrIsIntlEqualW (BOOL bCase, LPCWSTR lpszStr, LPCWSTR lpszComp, int iLen)
 
LPSTR WINAPI StrCpyNXA (LPSTR lpszDest, LPCSTR lpszSrc, int iLen)
 
LPWSTR WINAPI StrCpyNXW (LPWSTR lpszDest, LPCWSTR lpszSrc, int iLen)
 
INT WINAPI StrCmpLogicalW (LPCWSTR lpszStr, LPCWSTR lpszComp)
 
LPWSTR WINAPI StrFormatByteSizeW (LONGLONG llBytes, LPWSTR lpszDest, UINT cchMax)
 
LPSTR WINAPI StrFormatByteSize64A (LONGLONG llBytes, LPSTR lpszDest, UINT cchMax)
 
LPSTR WINAPI StrFormatByteSizeA (DWORD dwBytes, LPSTR lpszDest, UINT cchMax)
 
DWORD WINAPI SHTruncateString (LPSTR lpStr, DWORD size)
 
char WINAPI SHStripMneumonicA (LPCSTR lpszStr)
 
WCHAR WINAPI SHStripMneumonicW (LPCWSTR lpszStr)
 
DWORD WINAPI SHAnsiToUnicodeCP (DWORD dwCp, LPCSTR lpSrcStr, LPWSTR lpDstStr, int iLen)
 
DWORD WINAPI SHAnsiToUnicode (LPCSTR lpSrcStr, LPWSTR lpDstStr, int iLen)
 
DWORD WINAPI SHUnicodeToAnsiCP (UINT CodePage, LPCWSTR lpSrcStr, LPSTR lpDstStr, int dstlen)
 
INT WINAPI SHUnicodeToAnsi (LPCWSTR lpSrcStr, LPSTR lpDstStr, INT iLen)
 
DWORD WINAPI SHAnsiToAnsi (LPCSTR lpszSrc, LPSTR lpszDst, int iLen)
 
DWORD WINAPI SHUnicodeToUnicode (LPCWSTR lpszSrc, LPWSTR lpszDst, int iLen)
 
BOOL WINAPI DoesStringRoundTripA (LPCSTR lpSrcStr, LPSTR lpDst, INT iLen)
 
BOOL WINAPI DoesStringRoundTripW (LPCWSTR lpSrcStr, LPSTR lpDst, INT iLen)
 
HRESULT WINAPI SHLoadIndirectString (LPCWSTR src, LPWSTR dst, UINT dst_len, void **reserved)
 
BOOL WINAPI IsCharSpaceA (CHAR c)
 
BOOL WINAPI IsCharSpaceW (WCHAR wc)
 

Variables

HINSTANCE shlwapi_hInstance
 

Macro Definition Documentation

◆ GB

#define GB   (KB*KB*KB)

◆ KB

#define KB   ((ULONGLONG)1024)

◆ MB

#define MB   (KB*KB)

◆ NO_SHLWAPI_REG

#define NO_SHLWAPI_REG

Definition at line 34 of file string.c.

◆ NO_SHLWAPI_STREAM

#define NO_SHLWAPI_STREAM

Definition at line 35 of file string.c.

◆ NONAMELESSUNION

#define NONAMELESSUNION

Definition at line 30 of file string.c.

◆ PB

#define PB   (KB*KB*KB*KB*KB)

◆ TB

#define TB   (KB*KB*KB*KB)

Typedef Documentation

◆ SHLWAPI_BYTEFORMATS

Function Documentation

◆ _SHStrDupAA()

static HRESULT _SHStrDupAA ( LPCSTR  src,
LPSTR dest 
)
static

Definition at line 2053 of file string.c.

2054{
2055 HRESULT hr;
2056 int len = 0;
2057
2058 if (src) {
2059 len = lstrlenA(src) + 1;
2061 } else {
2062 *dest = NULL;
2063 }
2064
2065 if (*dest) {
2066 lstrcpynA(*dest,src, len);
2067 hr = S_OK;
2068 } else {
2069 hr = E_OUTOFMEMORY;
2070 }
2071
2072 TRACE("%s->(%p)\n", debugstr_a(src), *dest);
2073 return hr;
2074}
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define NULL
Definition: types.h:112
#define lstrcpynA
Definition: compat.h:751
GLenum src
Definition: glext.h:6340
GLenum GLsizei len
Definition: glext.h:6722
LPVOID WINAPI CoTaskMemAlloc(SIZE_T size)
Definition: ifs.c:426
#define S_OK
Definition: intsafe.h:52
#define debugstr_a
Definition: kernel32.h:31
int WINAPI lstrlenA(LPCSTR lpString)
Definition: lstring.c:145
static char * dest
Definition: rtl.c:135
HRESULT hr
Definition: shlfolder.c:183
#define TRACE(s)
Definition: solgame.cpp:4

Referenced by StrRetToStrA().

◆ _SHStrDupAToBSTR()

static HRESULT _SHStrDupAToBSTR ( LPCSTR  src,
BSTR pBstrOut 
)
static

Definition at line 1794 of file string.c.

1795{
1796 *pBstrOut = NULL;
1797
1798 if (src)
1799 {
1800 INT len = MultiByteToWideChar(CP_ACP, 0, src, -1, NULL, 0);
1801 WCHAR* szTemp = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
1802
1803 if (szTemp)
1804 {
1805 MultiByteToWideChar(CP_ACP, 0, src, -1, szTemp, len);
1806 *pBstrOut = SysAllocString(szTemp);
1807 HeapFree(GetProcessHeap(), 0, szTemp);
1808
1809 if (*pBstrOut)
1810 return S_OK;
1811 }
1812 }
1813 return E_OUTOFMEMORY;
1814}
#define GetProcessHeap()
Definition: compat.h:736
#define CP_ACP
Definition: compat.h:109
#define HeapAlloc
Definition: compat.h:733
#define HeapFree(x, y, z)
Definition: compat.h:735
#define MultiByteToWideChar
Definition: compat.h:110
BSTR WINAPI SysAllocString(LPCOLESTR str)
Definition: oleaut.c:238
int32_t INT
Definition: typedefs.h:58
__wchar_t WCHAR
Definition: xmlstorage.h:180

Referenced by StrRetToBSTR().

◆ _SHStrDupAW()

static HRESULT _SHStrDupAW ( LPCWSTR  src,
LPSTR dest 
)
static

Definition at line 2120 of file string.c.

2121{
2122 HRESULT hr;
2123 int len = 0;
2124
2125 if (src) {
2126 len = WideCharToMultiByte(CP_ACP, 0, src, -1, NULL, 0, NULL, NULL);
2128 } else {
2129 *dest = NULL;
2130 }
2131
2132 if (*dest) {
2134 hr = S_OK;
2135 } else {
2136 hr = E_OUTOFMEMORY;
2137 }
2138
2139 TRACE("%s->(%p)\n", debugstr_w(src), *dest);
2140 return hr;
2141}
#define WideCharToMultiByte
Definition: compat.h:111
#define debugstr_w
Definition: kernel32.h:32

Referenced by StrRetToStrA().

◆ ChrCmpIA()

BOOL WINAPI ChrCmpIA ( WORD  ch1,
WORD  ch2 
)

Definition at line 205 of file string.c.

206{
207 TRACE("(%d,%d)\n", ch1, ch2);
208
209 return SHLWAPI_ChrCmpHelperA(ch1, ch2, NORM_IGNORECASE);
210}
static BOOL SHLWAPI_ChrCmpHelperA(WORD ch1, WORD ch2, DWORD dwFlags)
Definition: string.c:157
#define NORM_IGNORECASE
Definition: winnls.h:187

◆ ChrCmpIW()

BOOL WINAPI ChrCmpIW ( WCHAR  ch1,
WCHAR  ch2 
)

Definition at line 217 of file string.c.

218{
219 return CompareStringW(GetThreadLocale(), NORM_IGNORECASE, &ch1, 1, &ch2, 1) - CSTR_EQUAL;
220}
LCID WINAPI GetThreadLocale(void)
Definition: locale.c:2803
INT WINAPI CompareStringW(LCID lcid, DWORD flags, LPCWSTR str1, INT len1, LPCWSTR str2, INT len2)
Definition: locale.c:4017
#define CSTR_EQUAL
Definition: winnls.h:500

◆ DoesStringRoundTripA()

BOOL WINAPI DoesStringRoundTripA ( LPCSTR  lpSrcStr,
LPSTR  lpDst,
INT  iLen 
)

Definition at line 2984 of file string.c.

2985{
2986 lstrcpynA(lpDst, lpSrcStr, iLen);
2987 return TRUE;
2988}
#define TRUE
Definition: types.h:120

◆ DoesStringRoundTripW()

BOOL WINAPI DoesStringRoundTripW ( LPCWSTR  lpSrcStr,
LPSTR  lpDst,
INT  iLen 
)

Definition at line 3004 of file string.c.

3005{
3006 WCHAR szBuff[MAX_PATH];
3007
3008 SHUnicodeToAnsi(lpSrcStr, lpDst, iLen);
3009 SHAnsiToUnicode(lpDst, szBuff, MAX_PATH);
3010 return !strcmpW(lpSrcStr, szBuff);
3011}
#define MAX_PATH
Definition: compat.h:34
DWORD WINAPI SHAnsiToUnicode(LPCSTR lpSrcStr, LPWSTR lpDstStr, int iLen)
Definition: string.c:2803
INT WINAPI SHUnicodeToAnsi(LPCWSTR lpSrcStr, LPSTR lpDstStr, INT iLen)
Definition: string.c:2927
#define strcmpW(s1, s2)
Definition: unicode.h:44

◆ FillNumberFmt()

static void FillNumberFmt ( NUMBERFMTW fmt,
LPWSTR  decimal_buffer,
int  decimal_bufwlen,
LPWSTR  thousand_buffer,
int  thousand_bufwlen 
)
static

Definition at line 55 of file string.c.

57{
58 WCHAR grouping[64];
59 WCHAR *c;
60
61 GetLocaleInfoW(LOCALE_USER_DEFAULT, LOCALE_ILZERO|LOCALE_RETURN_NUMBER, (LPWSTR)&fmt->LeadingZero, sizeof(fmt->LeadingZero)/sizeof(WCHAR));
62 GetLocaleInfoW(LOCALE_USER_DEFAULT, LOCALE_INEGNUMBER|LOCALE_RETURN_NUMBER, (LPWSTR)&fmt->LeadingZero, sizeof(fmt->NegativeOrder)/sizeof(WCHAR));
63 fmt->NumDigits = 0;
64 GetLocaleInfoW(LOCALE_USER_DEFAULT, LOCALE_SDECIMAL, decimal_buffer, decimal_bufwlen);
65 GetLocaleInfoW(LOCALE_USER_DEFAULT, LOCALE_STHOUSAND, thousand_buffer, thousand_bufwlen);
66 fmt->lpThousandSep = thousand_buffer;
67 fmt->lpDecimalSep = decimal_buffer;
68
69 /*
70 * Converting grouping string to number as described on
71 * http://blogs.msdn.com/oldnewthing/archive/2006/04/18/578251.aspx
72 */
73 fmt->Grouping = 0;
74 GetLocaleInfoW(LOCALE_USER_DEFAULT, LOCALE_SGROUPING, grouping, sizeof(grouping)/sizeof(WCHAR));
75 for (c = grouping; *c; c++)
76 if (*c >= '0' && *c < '9')
77 {
78 fmt->Grouping *= 10;
79 fmt->Grouping += *c - '0';
80 }
81
82 if (fmt->Grouping % 10 == 0)
83 fmt->Grouping /= 10;
84 else
85 fmt->Grouping *= 10;
86}
INT WINAPI GetLocaleInfoW(LCID lcid, LCTYPE lctype, LPWSTR buffer, INT len)
Definition: locale.c:1675
const GLubyte * c
Definition: glext.h:8905
#define c
Definition: ke_i.h:80
#define LOCALE_USER_DEFAULT
Definition: dsound.c:943
#define LOCALE_SGROUPING
Definition: winnls.h:51
#define LOCALE_SDECIMAL
Definition: winnls.h:49
#define LOCALE_STHOUSAND
Definition: winnls.h:50
#define LOCALE_INEGNUMBER
Definition: winnls.h:54
#define LOCALE_ILZERO
Definition: winnls.h:53
WCHAR * LPWSTR
Definition: xmlstorage.h:184

Referenced by FormatDouble(), and FormatInt().

◆ FormatDouble()

static int FormatDouble ( double  value,
int  decimals,
LPWSTR  pszBuf,
int  cchBuf 
)
static

Definition at line 129 of file string.c.

130{
131 static const WCHAR flfmt[] = {'%','f',0};
132 WCHAR buf[64];
134 WCHAR decimal[8], thousand[8];
135
136 snprintfW(buf, 64, flfmt, value);
137
138 FillNumberFmt(&fmt, decimal, sizeof decimal / sizeof (WCHAR),
139 thousand, sizeof thousand / sizeof (WCHAR));
140 fmt.NumDigits = decimals;
141 return GetNumberFormatW(LOCALE_USER_DEFAULT, 0, buf, &fmt, pszBuf, cchBuf);
142}
static void FillNumberFmt(NUMBERFMTW *fmt, LPWSTR decimal_buffer, int decimal_bufwlen, LPWSTR thousand_buffer, int thousand_bufwlen)
Definition: string.c:55
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
INT WINAPI GetNumberFormatW(LCID lcid, DWORD dwFlags, LPCWSTR lpszValue, const NUMBERFMTW *lpFormat, LPWSTR lpNumberStr, int cchOut)
Definition: lcformat.c:1208
_In_ UINT cchBuf
Definition: shlwapi.h:378
Definition: pdh_main.c:96
#define snprintfW
Definition: unicode.h:66

Referenced by StrFormatByteSizeW().

◆ FormatInt()

static int FormatInt ( LONGLONG  qdwValue,
LPWSTR  pszBuf,
int  cchBuf 
)
static

Definition at line 96 of file string.c.

97{
99 WCHAR decimal[8], thousand[8];
100 WCHAR buf[24];
101 WCHAR *c;
102 BOOL neg = (qdwValue < 0);
103
104 FillNumberFmt(&fmt, decimal, sizeof decimal / sizeof (WCHAR),
105 thousand, sizeof thousand / sizeof (WCHAR));
106
107 c = &buf[24];
108 *(--c) = 0;
109 do
110 {
111 *(--c) = '0' + (qdwValue%10);
112 qdwValue /= 10;
113 } while (qdwValue > 0);
114 if (neg)
115 *(--c) = '-';
116
117 return GetNumberFormatW(LOCALE_USER_DEFAULT, 0, c, &fmt, pszBuf, cchBuf);
118}
unsigned int BOOL
Definition: ntddk_ex.h:94

Referenced by StrFormatKBSizeW().

◆ IsCharSpaceA()

BOOL WINAPI IsCharSpaceA ( CHAR  c)

Definition at line 3082 of file string.c.

3083{
3084 WORD CharType;
3085 return GetStringTypeA(GetSystemDefaultLCID(), CT_CTYPE1, &c, 1, &CharType) && (CharType & C1_SPACE);
3086}
BOOL WINAPI GetStringTypeA(LCID locale, DWORD type, LPCSTR src, INT count, LPWORD chartype)
Definition: locale.c:3212
LCID WINAPI GetSystemDefaultLCID(void)
Definition: locale.c:1235
unsigned short WORD
Definition: ntddk_ex.h:93
#define C1_SPACE
Definition: unicode.h:34
#define CT_CTYPE1
Definition: winnls.h:255

◆ IsCharSpaceW()

BOOL WINAPI IsCharSpaceW ( WCHAR  wc)

Definition at line 3100 of file string.c.

3101{
3102 WORD CharType;
3103
3104 return GetStringTypeW(CT_CTYPE1, &wc, 1, &CharType) && (CharType & C1_SPACE);
3105}
BOOL WINAPI GetStringTypeW(DWORD type, LPCWSTR src, INT count, LPWORD chartype)
Definition: locale.c:3098

◆ SHAnsiToAnsi()

DWORD WINAPI SHAnsiToAnsi ( LPCSTR  lpszSrc,
LPSTR  lpszDst,
int  iLen 
)

Definition at line 2946 of file string.c.

2947{
2948 LPSTR lpszRet;
2949
2950 TRACE("(%s,%p,0x%08x)\n", debugstr_a(lpszSrc), lpszDst, iLen);
2951
2952 lpszRet = StrCpyNXA(lpszDst, lpszSrc, iLen);
2953 return lpszRet - lpszDst + 1;
2954}
LPSTR WINAPI StrCpyNXA(LPSTR lpszDest, LPCSTR lpszSrc, int iLen)
Definition: string.c:2393
char * LPSTR
Definition: xmlstorage.h:182

◆ SHAnsiToUnicode()

◆ SHAnsiToUnicodeCP()

DWORD WINAPI SHAnsiToUnicodeCP ( DWORD  dwCp,
LPCSTR  lpSrcStr,
LPWSTR  lpDstStr,
int  iLen 
)

Definition at line 2778 of file string.c.

2779{
2780 DWORD dwRet;
2781
2782 dwRet = MultiByteToWideChar(dwCp, 0, lpSrcStr, -1, lpDstStr, iLen);
2783 TRACE("%s->%s,ret=%d\n", debugstr_a(lpSrcStr), debugstr_w(lpDstStr), dwRet);
2784 return dwRet;
2785}
unsigned long DWORD
Definition: ntddk_ex.h:95

Referenced by SHAnsiToUnicode().

◆ SHLoadIndirectString()

HRESULT WINAPI SHLoadIndirectString ( LPCWSTR  src,
LPWSTR  dst,
UINT  dst_len,
void **  reserved 
)

Definition at line 3020 of file string.c.

3021{
3022 WCHAR *dllname = NULL;
3023 HMODULE hmod = NULL;
3024 HRESULT hr = E_FAIL;
3025#ifdef __REACTOS__
3026 WCHAR szExpanded[512];
3027#endif
3028
3029 TRACE("(%s %p %08x %p)\n", debugstr_w(src), dst, dst_len, reserved);
3030
3031 if(src[0] == '@')
3032 {
3033 WCHAR *index_str;
3034 int index;
3035
3036#ifdef __REACTOS__
3037 if (wcschr(src, '%') != NULL)
3038 {
3039 ExpandEnvironmentStringsW(src, szExpanded, ARRAY_SIZE(szExpanded));
3040 src = szExpanded;
3041 }
3042#endif
3043 dst[0] = 0;
3044 dllname = StrDupW(src + 1);
3045 index_str = strchrW(dllname, ',');
3046
3047 if(!index_str) goto end;
3048
3049 *index_str = 0;
3050 index_str++;
3051 index = atoiW(index_str);
3052
3053#ifdef __REACTOS__
3055#else
3056 hmod = LoadLibraryW(dllname);
3057#endif
3058 if(!hmod) goto end;
3059
3060 if(index < 0)
3061 {
3062 if(LoadStringW(hmod, -index, dst, dst_len))
3063 hr = S_OK;
3064 }
3065 else
3066 FIXME("can't handle non-negative indices (%d)\n", index);
3067 }
3068 else
3069 {
3070 if(dst != src)
3071 lstrcpynW(dst, src, dst_len);
3072 hr = S_OK;
3073 }
3074
3075 TRACE("returning %s\n", debugstr_w(dst));
3076end:
3077 if(hmod) FreeLibrary(hmod);
3078 LocalFree(dllname);
3079 return hr;
3080}
#define index(s, c)
Definition: various.h:29
#define ARRAY_SIZE(A)
Definition: main.h:20
#define FIXME(fmt,...)
Definition: precomp.h:53
#define E_FAIL
Definition: ddrawi.h:102
#define wcschr
Definition: compat.h:17
#define FreeLibrary(x)
Definition: compat.h:748
#define LoadLibraryW(x)
Definition: compat.h:747
#define lstrcpynW
Definition: compat.h:738
DWORD WINAPI ExpandEnvironmentStringsW(IN LPCWSTR lpSrc, IN LPWSTR lpDst, IN DWORD nSize)
Definition: environ.c:520
HINSTANCE WINAPI DECLSPEC_HOTPATCH LoadLibraryExW(LPCWSTR lpLibFileName, HANDLE hFile, DWORD dwFlags)
Definition: loader.c:288
INT WINAPI DECLSPEC_HOTPATCH LoadStringW(HINSTANCE instance, UINT resource_id, LPWSTR buffer, INT buflen)
Definition: string.c:1220
WCHAR *WINAPI StrDupW(const WCHAR *str)
Definition: string.c:313
r reserved
Definition: btrfs.c:3006
GLuint GLuint end
Definition: gl.h:1545
GLuint index
Definition: glext.h:6031
GLenum GLenum dst
Definition: glext.h:6340
HLOCAL NTAPI LocalFree(HLOCAL hMem)
Definition: heapmem.c:1594
static PEXPLICIT_ACCESSW *static HMODULE hmod
Definition: security.c:143
#define LOAD_LIBRARY_AS_DATAFILE
Definition: winbase.h:338
#define atoiW(s)
Definition: unicode.h:60
#define strchrW(s, c)
Definition: unicode.h:40

◆ SHLWAPI_ChrCmpA()

static BOOL WINAPI SHLWAPI_ChrCmpA ( WORD  ch1,
WORD  ch2 
)
static

Definition at line 187 of file string.c.

188{
189 return SHLWAPI_ChrCmpHelperA(ch1, ch2, 0);
190}

Referenced by StrChrA(), and StrRChrA().

◆ SHLWAPI_ChrCmpHelperA()

static BOOL SHLWAPI_ChrCmpHelperA ( WORD  ch1,
WORD  ch2,
DWORD  dwFlags 
)
static

Definition at line 157 of file string.c.

158{
159 char str1[3], str2[3];
160
161 str1[0] = LOBYTE(ch1);
162 if (IsDBCSLeadByte(str1[0]))
163 {
164 str1[1] = HIBYTE(ch1);
165 str1[2] = '\0';
166 }
167 else
168 str1[1] = '\0';
169
170 str2[0] = LOBYTE(ch2);
171 if (IsDBCSLeadByte(str2[0]))
172 {
173 str2[1] = HIBYTE(ch2);
174 str2[2] = '\0';
175 }
176 else
177 str2[1] = '\0';
178
180}
BOOL WINAPI IsDBCSLeadByte(BYTE testchar)
Definition: locale.c:2126
INT WINAPI CompareStringA(LCID lcid, DWORD flags, LPCSTR str1, INT len1, LPCSTR str2, INT len2)
Definition: locale.c:4086
#define LOBYTE(W)
Definition: jmemdos.c:487
#define HIBYTE(W)
Definition: jmemdos.c:486
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
Definition: netsh.h:141
XML_HIDDEN void xmlParserErrors const char const xmlChar const xmlChar * str2
Definition: parser.h:35
XML_HIDDEN void xmlParserErrors const char const xmlChar * str1
Definition: parser.h:35

Referenced by ChrCmpIA(), and SHLWAPI_ChrCmpA().

◆ SHLWAPI_FormatSignificant()

static int SHLWAPI_FormatSignificant ( LPWSTR  lpszNum,
int  dwDigits 
)
inlinestatic

Definition at line 2196 of file string.c.

2197{
2198 /* Zero non significant digits, return remaining significant digits */
2199 while (*lpszNum)
2200 {
2201 lpszNum++;
2202 if (--dwDigits == 0)
2203 {
2204 while (*lpszNum)
2205 *lpszNum++ = '0';
2206 return 0;
2207 }
2208 }
2209 return dwDigits;
2210}

Referenced by SHLWAPI_WriteTimeClass().

◆ SHLWAPI_StrRChrHelperA()

static LPSTR SHLWAPI_StrRChrHelperA ( LPCSTR  lpszStr,
LPCSTR  lpszEnd,
WORD  ch,
BOOL(WINAPI *pChrCmpFn)(WORD, WORD  
)
static

Definition at line 1425 of file string.c.

1428{
1429 LPCSTR lpszRet = NULL;
1430
1431 if (lpszStr)
1432 {
1433 WORD ch2;
1434
1435 if (!lpszEnd)
1436 lpszEnd = lpszStr + lstrlenA(lpszStr);
1437
1438 while (*lpszStr && lpszStr <= lpszEnd)
1439 {
1440 ch2 = IsDBCSLeadByte(*lpszStr)? *lpszStr << 8 | lpszStr[1] : *lpszStr;
1441
1442 if (!pChrCmpFn(ch, ch2))
1443 lpszRet = lpszStr;
1444 lpszStr = CharNextA(lpszStr);
1445 }
1446 }
1447 return (LPSTR)lpszRet;
1448}
LPSTR WINAPI CharNextA(const char *ptr)
Definition: string.c:1107
unsigned char ch[4][2]
Definition: console.c:118
const char * LPCSTR
Definition: xmlstorage.h:183

Referenced by StrRChrA(), and StrRChrIA().

◆ SHLWAPI_StrSpnHelperA()

static int SHLWAPI_StrSpnHelperA ( LPCSTR  lpszStr,
LPCSTR  lpszMatch,
LPSTR(WINAPI *pStrChrFn)(LPCSTR, WORD ,
BOOL  bInvert 
)
static

Definition at line 1252 of file string.c.

1255{
1256 LPCSTR lpszRead = lpszStr;
1257 if (lpszStr && *lpszStr && lpszMatch)
1258 {
1259 while (*lpszRead)
1260 {
1261 LPCSTR lpszTest = pStrChrFn(lpszMatch, *lpszRead);
1262
1263 if (!bInvert && !lpszTest)
1264 break;
1265 if (bInvert && lpszTest)
1266 break;
1267 lpszRead = CharNextA(lpszRead);
1268 };
1269 }
1270 return lpszRead - lpszStr;
1271}
static BOOL bInvert
Definition: win.c:51

Referenced by StrCSpnA(), StrCSpnIA(), and StrSpnA().

◆ SHLWAPI_StrStrHelperA()

static LPSTR SHLWAPI_StrStrHelperA ( LPCSTR  lpszStr,
LPCSTR  lpszSearch,
INT(WINAPI *pStrCmpFn)(LPCSTR, LPCSTR, INT  
)
static

Definition at line 561 of file string.c.

563{
564 size_t iLen;
565 LPCSTR end;
566
567 if (!lpszStr || !lpszSearch || !*lpszSearch)
568 return NULL;
569
570 iLen = strlen(lpszSearch);
571 end = lpszStr + strlen(lpszStr);
572
573 while (lpszStr + iLen <= end)
574 {
575 if (!pStrCmpFn(lpszStr, lpszSearch, iLen))
576 return (LPSTR)lpszStr;
577 lpszStr = CharNextA(lpszStr);
578 }
579 return NULL;
580}
size_t __cdecl strlen(const char *str)
Definition: string.c:1592

Referenced by StrStrA(), and StrStrIA().

◆ SHLWAPI_WriteReverseNum()

static LPWSTR SHLWAPI_WriteReverseNum ( LPWSTR  lpszOut,
DWORD  dwNum 
)
inlinestatic

Definition at line 2176 of file string.c.

2177{
2178 *lpszOut-- = '\0';
2179
2180 /* Write a decimal number to a string, backwards */
2181 do
2182 {
2183 DWORD dwNextDigit = dwNum % 10;
2184 *lpszOut-- = '0' + dwNextDigit;
2185 dwNum = (dwNum - dwNextDigit) / 10;
2186 } while (dwNum > 0);
2187
2188 return lpszOut;
2189}

Referenced by SHLWAPI_WriteTimeClass().

◆ SHLWAPI_WriteTimeClass()

static int SHLWAPI_WriteTimeClass ( LPWSTR  lpszOut,
DWORD  dwValue,
UINT  uClassStringId,
int  iDigits 
)
static

Definition at line 2217 of file string.c.

2219{
2220 WCHAR szBuff[64], *szOut = szBuff + 32;
2221
2222 szOut = SHLWAPI_WriteReverseNum(szOut, dwValue);
2223 iDigits = SHLWAPI_FormatSignificant(szOut + 1, iDigits);
2224 *szOut = ' ';
2225 LoadStringW(shlwapi_hInstance, uClassStringId, szBuff + 32, 32);
2226 strcatW(lpszOut, szOut);
2227 return iDigits;
2228}
static int SHLWAPI_FormatSignificant(LPWSTR lpszNum, int dwDigits)
Definition: string.c:2196
static LPWSTR SHLWAPI_WriteReverseNum(LPWSTR lpszOut, DWORD dwNum)
Definition: string.c:2176
HINSTANCE shlwapi_hInstance
Definition: shlwapi_main.c:33
#define strcatW(d, s)
Definition: unicode.h:36

Referenced by StrFromTimeIntervalW().

◆ SHStrDupA()

HRESULT WINAPI SHStrDupA ( LPCSTR  lpszStr,
LPWSTR lppszDest 
)

Definition at line 2090 of file string.c.

2091{
2092 HRESULT hRet;
2093 int len = 0;
2094
2095 if (lpszStr)
2096 {
2097 len = MultiByteToWideChar(CP_ACP, 0, lpszStr, -1, NULL, 0) * sizeof(WCHAR);
2098 *lppszDest = CoTaskMemAlloc(len);
2099 }
2100 else
2101 *lppszDest = NULL;
2102
2103 if (*lppszDest)
2104 {
2105 MultiByteToWideChar(CP_ACP, 0, lpszStr, -1, *lppszDest, len/sizeof(WCHAR));
2106 hRet = S_OK;
2107 }
2108 else
2109 hRet = E_OUTOFMEMORY;
2110
2111 TRACE("%s->(%p)\n", debugstr_a(lpszStr), *lppszDest);
2112 return hRet;
2113}

Referenced by StrRetToStrW(), and TestFilenameA().

◆ SHStrDupW()

HRESULT WINAPI SHStrDupW ( LPCWSTR  src,
LPWSTR dest 
)

◆ SHStripMneumonicA()

char WINAPI SHStripMneumonicA ( LPCSTR  lpszStr)

Definition at line 2711 of file string.c.

2712{
2713 LPSTR lpszIter, lpszTmp;
2714 char ch;
2715
2716 TRACE("(%s)\n", debugstr_a(lpszStr));
2717
2718 ch = *lpszStr;
2719
2720 if ((lpszIter = StrChrA(lpszStr, '&')))
2721 {
2722 lpszTmp = CharNextA(lpszIter);
2723 if (*lpszTmp)
2724 {
2725 if (*lpszTmp != '&')
2726 ch = *lpszTmp;
2727
2728 memmove( lpszIter, lpszTmp, strlen(lpszTmp) + 1 );
2729 }
2730 }
2731
2732 return ch;
2733}
LPSTR WINAPI StrChrA(LPCSTR lpszStr, WORD ch)
Definition: string.c:266
#define memmove(s1, s2, n)
Definition: mkisofs.h:881

◆ SHStripMneumonicW()

WCHAR WINAPI SHStripMneumonicW ( LPCWSTR  lpszStr)

Definition at line 2740 of file string.c.

2741{
2742 LPWSTR lpszIter, lpszTmp;
2743 WCHAR ch;
2744
2745 TRACE("(%s)\n", debugstr_w(lpszStr));
2746
2747 ch = *lpszStr;
2748
2749 if ((lpszIter = StrChrW(lpszStr, '&')))
2750 {
2751 lpszTmp = lpszIter + 1;
2752 if (*lpszTmp)
2753 {
2754 if (*lpszTmp != '&')
2755 ch = *lpszTmp;
2756
2757 memmove( lpszIter, lpszTmp, (strlenW(lpszTmp) + 1) * sizeof(WCHAR) );
2758 }
2759 }
2760
2761 return ch;
2762}
WCHAR *WINAPI StrChrW(const WCHAR *str, WCHAR ch)
Definition: string.c:229
#define strlenW(s)
Definition: unicode.h:34

◆ SHTruncateString()

DWORD WINAPI SHTruncateString ( LPSTR  lpStr,
DWORD  size 
)

Definition at line 2680 of file string.c.

2681{
2682 if (lpStr && size)
2683 {
2684 LPSTR lastByte = lpStr + size - 1;
2685
2686 while(lpStr < lastByte)
2687 lpStr += IsDBCSLeadByte(*lpStr) ? 2 : 1;
2688
2689 if(lpStr == lastByte && IsDBCSLeadByte(*lpStr))
2690 {
2691 *lpStr = '\0';
2692 size--;
2693 }
2694 return size;
2695 }
2696 return 0;
2697}
GLsizeiptr size
Definition: glext.h:5919

◆ SHUnicodeToAnsi()

◆ SHUnicodeToAnsiCP()

DWORD WINAPI SHUnicodeToAnsiCP ( UINT  CodePage,
LPCWSTR  lpSrcStr,
LPSTR  lpDstStr,
int  dstlen 
)

Definition at line 2828 of file string.c.

2829{
2830 static const WCHAR emptyW[] = { '\0' };
2831 int len , reqLen;
2832 LPSTR mem;
2833
2834 if (!lpDstStr || !dstlen)
2835 return 0;
2836
2837 if (!lpSrcStr)
2838 lpSrcStr = emptyW;
2839
2840 *lpDstStr = '\0';
2841
2842 len = strlenW(lpSrcStr) + 1;
2843
2844 switch (CodePage)
2845 {
2846 case CP_WINUNICODE:
2847 CodePage = CP_UTF8; /* Fall through... */
2848 case 0x0000C350: /* FIXME: CP_ #define */
2849 case CP_UTF7:
2850 case CP_UTF8:
2851 {
2852 DWORD dwMode = 0;
2853 INT lenW = len - 1;
2854 INT needed = dstlen - 1;
2855 HRESULT hr;
2856
2857 /* try the user supplied buffer first */
2858 hr = ConvertINetUnicodeToMultiByte(&dwMode, CodePage, lpSrcStr, &lenW, lpDstStr, &needed);
2859 if (hr == S_OK)
2860 {
2861 lpDstStr[needed] = '\0';
2862 return needed + 1;
2863 }
2864
2865 /* user buffer too small. exclude termination and copy as much as possible */
2866 lenW = len;
2867 hr = ConvertINetUnicodeToMultiByte(&dwMode, CodePage, lpSrcStr, &lenW, NULL, &needed);
2868 needed++;
2869 mem = HeapAlloc(GetProcessHeap(), 0, needed);
2870 if (!mem)
2871 return 0;
2872
2873 hr = ConvertINetUnicodeToMultiByte(&dwMode, CodePage, lpSrcStr, &len, mem, &needed);
2874 if (hr == S_OK)
2875 {
2876 reqLen = SHTruncateString(mem, dstlen);
2877 if (reqLen > 0) memcpy(lpDstStr, mem, reqLen-1);
2878 }
2880 return 0;
2881 }
2882 default:
2883 break;
2884 }
2885
2886 /* try the user supplied buffer first */
2887 reqLen = WideCharToMultiByte(CodePage, 0, lpSrcStr, len, lpDstStr, dstlen, NULL, NULL);
2888
2889 if (!reqLen && GetLastError() == ERROR_INSUFFICIENT_BUFFER)
2890 {
2891 reqLen = WideCharToMultiByte(CodePage, 0, lpSrcStr, len, NULL, 0, NULL, NULL);
2892 if (reqLen)
2893 {
2894 mem = HeapAlloc(GetProcessHeap(), 0, reqLen);
2895 if (mem)
2896 {
2897 WideCharToMultiByte(CodePage, 0, lpSrcStr, len, mem, reqLen, NULL, NULL);
2898
2899 reqLen = SHTruncateString(mem, dstlen -1);
2900 reqLen++;
2901
2902 lstrcpynA(lpDstStr, mem, reqLen);
2904 lpDstStr[reqLen-1] = '\0';
2905 }
2906 }
2907 }
2908 return reqLen;
2909}
#define CP_WINUNICODE
Definition: ddeml.h:33
#define ERROR_INSUFFICIENT_BUFFER
Definition: dderror.h:10
DWORD WINAPI SHTruncateString(LPSTR lpStr, DWORD size)
Definition: string.c:2680
static const WCHAR emptyW[]
Definition: navigate.c:40
static DWORD dstlen
Definition: directory.c:51
#define CP_UTF8
Definition: nls.h:20
Definition: mem.c:349
static CONVERTINETUNICODETOMULTIBYTE ConvertINetUnicodeToMultiByte
Definition: win_iconv.c:706
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
#define CP_UTF7
Definition: winnls.h:253

Referenced by SHUnicodeToAnsi().

◆ SHUnicodeToUnicode()

DWORD WINAPI SHUnicodeToUnicode ( LPCWSTR  lpszSrc,
LPWSTR  lpszDst,
int  iLen 
)

Definition at line 2961 of file string.c.

2962{
2963 LPWSTR lpszRet;
2964
2965 TRACE("(%s,%p,0x%08x)\n", debugstr_w(lpszSrc), lpszDst, iLen);
2966
2967 lpszRet = StrCpyNXW(lpszDst, lpszSrc, iLen);
2968 return lpszRet - lpszDst + 1;
2969}
LPWSTR WINAPI StrCpyNXW(LPWSTR lpszDest, LPCWSTR lpszSrc, int iLen)
Definition: string.c:2412

◆ StrCatBuffA()

LPSTR WINAPI StrCatBuffA ( LPSTR  lpszStr,
LPCSTR  lpszCat,
INT  cchMax 
)

Definition at line 1549 of file string.c.

1550{
1551 INT iLen;
1552
1553 TRACE("(%p,%s,%d)\n", lpszStr, debugstr_a(lpszCat), cchMax);
1554
1555 if (!lpszStr)
1556 {
1557 WARN("Invalid lpszStr would crash under Win32!\n");
1558 return NULL;
1559 }
1560
1561 iLen = strlen(lpszStr);
1562 cchMax -= iLen;
1563
1564 if (cchMax > 0)
1565 StrCpyNA(lpszStr + iLen, lpszCat, cchMax);
1566 return lpszStr;
1567}
UINT cchMax
#define WARN(fmt,...)
Definition: precomp.h:61
#define StrCpyNA
Definition: shlwapi.h:1104

◆ StrCatBuffW()

LPWSTR WINAPI StrCatBuffW ( LPWSTR  lpszStr,
LPCWSTR  lpszCat,
INT  cchMax 
)

Definition at line 1574 of file string.c.

1575{
1576 INT iLen;
1577
1578 TRACE("(%p,%s,%d)\n", lpszStr, debugstr_w(lpszCat), cchMax);
1579
1580 if (!lpszStr)
1581 {
1582 WARN("Invalid lpszStr would crash under Win32!\n");
1583 return NULL;
1584 }
1585
1586 iLen = strlenW(lpszStr);
1587 cchMax -= iLen;
1588
1589 if (cchMax > 0)
1590 StrCpyNW(lpszStr + iLen, lpszCat, cchMax);
1591 return lpszStr;
1592}
WCHAR *WINAPI StrCpyNW(WCHAR *dst, const WCHAR *src, int count)
Definition: string.c:462

◆ StrCatChainW()

DWORD WINAPI StrCatChainW ( LPWSTR  lpszStr,
DWORD  cchMax,
DWORD  ichAt,
LPCWSTR  lpszCat 
)

Definition at line 475 of file string.c.

476{
477 TRACE("(%s,%u,%d,%s)\n", debugstr_w(lpszStr), cchMax, ichAt, debugstr_w(lpszCat));
478
479 if (ichAt == -1)
480 ichAt = strlenW(lpszStr);
481
482 if (!cchMax)
483 return ichAt;
484
485 if (ichAt == cchMax)
486 ichAt--;
487
488 if (lpszCat && ichAt < cchMax)
489 {
490 lpszStr += ichAt;
491 while (ichAt < cchMax - 1 && *lpszCat)
492 {
493 *lpszStr++ = *lpszCat++;
494 ichAt++;
495 }
496 *lpszStr = 0;
497 }
498
499 return ichAt;
500}

◆ StrCatW()

LPWSTR WINAPI StrCatW ( LPWSTR  lpszStr,
LPCWSTR  lpszSrc 
)

Definition at line 452 of file string.c.

453{
454 TRACE("(%s,%s)\n", debugstr_w(lpszStr), debugstr_w(lpszSrc));
455
456 if (lpszStr && lpszSrc)
457 strcatW(lpszStr, lpszSrc);
458 return lpszStr;
459}

Referenced by CRegistryFolder::FormatValueData().

◆ StrChrA()

LPSTR WINAPI StrChrA ( LPCSTR  lpszStr,
WORD  ch 
)

Definition at line 236 of file string.c.

237{
238 TRACE("(%s,%i)\n", debugstr_a(lpszStr), ch);
239
240 if (lpszStr)
241 {
242 while (*lpszStr)
243 {
244 if (!SHLWAPI_ChrCmpA(*lpszStr, ch))
245 return (LPSTR)lpszStr;
246 lpszStr = CharNextA(lpszStr);
247 }
248 }
249 return NULL;
250}
static BOOL WINAPI SHLWAPI_ChrCmpA(WORD ch1, WORD ch2)
Definition: string.c:187

◆ StrChrIA()

LPSTR WINAPI StrChrIA ( LPCSTR  lpszStr,
WORD  ch 
)

Definition at line 282 of file string.c.

283{
284 TRACE("(%s,%i)\n", debugstr_a(lpszStr), ch);
285
286 if (lpszStr)
287 {
288 while (*lpszStr)
289 {
290 if (!ChrCmpIA(*lpszStr, ch))
291 return (LPSTR)lpszStr;
292 lpszStr = CharNextA(lpszStr);
293 }
294 }
295 return NULL;
296}
BOOL WINAPI ChrCmpIA(WORD ch1, WORD ch2)
Definition: string.c:334

◆ StrChrIW()

LPWSTR WINAPI StrChrIW ( LPCWSTR  lpszStr,
WCHAR  ch 
)

Definition at line 303 of file string.c.

304{
305 TRACE("(%s,%i)\n", debugstr_w(lpszStr), ch);
306
307 if (lpszStr)
308 {
309 ch = toupperW(ch);
310 while (*lpszStr)
311 {
312 if (toupperW(*lpszStr) == ch)
313 return (LPWSTR)lpszStr;
314 lpszStr++;
315 }
316 lpszStr = NULL;
317 }
318 return (LPWSTR)lpszStr;
319}
#define toupperW(n)
Definition: unicode.h:51

◆ StrChrNW()

LPWSTR WINAPI StrChrNW ( LPCWSTR  lpszStr,
WCHAR  ch,
UINT  cchMax 
)

Definition at line 324 of file string.c.

325{
326 TRACE("(%s(%i),%i)\n", debugstr_wn(lpszStr,cchMax), cchMax, ch);
327
328 if (lpszStr)
329 {
330 while (*lpszStr && cchMax-- > 0)
331 {
332 if (*lpszStr == ch)
333 return (LPWSTR)lpszStr;
334 lpszStr++;
335 }
336 }
337 return NULL;
338}
#define debugstr_wn
Definition: kernel32.h:33

◆ StrChrW()

LPWSTR WINAPI StrChrW ( LPCWSTR  lpszStr,
WCHAR  ch 
)

Definition at line 257 of file string.c.

258{
259 LPWSTR lpszRet = NULL;
260
261 TRACE("(%s,%i)\n", debugstr_w(lpszStr), ch);
262
263 if (lpszStr)
264 lpszRet = strchrW(lpszStr, ch);
265 return lpszRet;
266}

◆ StrCmpIW()

int WINAPI StrCmpIW ( LPCWSTR  lpszStr,
LPCWSTR  lpszComp 
)

Definition at line 353 of file string.c.

354{
355 TRACE("(%s,%s)\n", debugstr_w(lpszStr),debugstr_w(lpszComp));
356 return CompareStringW(GetThreadLocale(), NORM_IGNORECASE, lpszStr, -1, lpszComp, -1) - CSTR_EQUAL;
357}

◆ StrCmpLogicalW()

INT WINAPI StrCmpLogicalW ( LPCWSTR  lpszStr,
LPCWSTR  lpszComp 
)

Definition at line 2440 of file string.c.

2441{
2442 INT iDiff;
2443
2444 TRACE("(%s,%s)\n", debugstr_w(lpszStr), debugstr_w(lpszComp));
2445
2446 if (lpszStr && lpszComp)
2447 {
2448 while (*lpszStr)
2449 {
2450 if (!*lpszComp)
2451 return 1;
2452 else if (isdigitW(*lpszStr))
2453 {
2454 int iStr, iComp;
2455
2456 if (!isdigitW(*lpszComp))
2457 return -1;
2458
2459 /* Compare the numbers */
2460 StrToIntExW(lpszStr, 0, &iStr);
2461 StrToIntExW(lpszComp, 0, &iComp);
2462
2463 if (iStr < iComp)
2464 return -1;
2465 else if (iStr > iComp)
2466 return 1;
2467
2468 /* Skip */
2469 while (isdigitW(*lpszStr))
2470 lpszStr++;
2471 while (isdigitW(*lpszComp))
2472 lpszComp++;
2473 }
2474 else if (isdigitW(*lpszComp))
2475 return 1;
2476 else
2477 {
2478 iDiff = ChrCmpIW(*lpszStr,*lpszComp);
2479 if (iDiff > 0)
2480 return 1;
2481 else if (iDiff < 0)
2482 return -1;
2483
2484 lpszStr++;
2485 lpszComp++;
2486 }
2487 }
2488 if (*lpszComp)
2489 return -1;
2490 }
2491 return 0;
2492}
BOOL WINAPI ChrCmpIW(WCHAR ch1, WCHAR ch2)
Definition: string.c:341
BOOL WINAPI StrToIntExW(const WCHAR *str, DWORD flags, INT *ret)
Definition: string.c:972
#define isdigitW(n)
Definition: unicode.h:56

◆ StrCmpNA()

INT WINAPI StrCmpNA ( LPCSTR  lpszStr,
LPCSTR  lpszComp,
INT  iLen 
)

Definition at line 373 of file string.c.

374{
375 TRACE("(%s,%s,%i)\n", debugstr_a(lpszStr), debugstr_a(lpszComp), iLen);
376 return CompareStringA(GetThreadLocale(), 0, lpszStr, iLen, lpszComp, iLen) - CSTR_EQUAL;
377}

◆ StrCmpNIA()

int WINAPI StrCmpNIA ( LPCSTR  lpszStr,
LPCSTR  lpszComp,
int  iLen 
)

Definition at line 404 of file string.c.

405{
406 TRACE("(%s,%s,%i)\n", debugstr_a(lpszStr), debugstr_a(lpszComp), iLen);
407 return CompareStringA(GetThreadLocale(), NORM_IGNORECASE, lpszStr, iLen, lpszComp, iLen) - CSTR_EQUAL;
408}

◆ StrCmpNIW()

INT WINAPI StrCmpNIW ( LPCWSTR  lpszStr,
LPCWSTR  lpszComp,
int  iLen 
)

Definition at line 415 of file string.c.

416{
417 TRACE("(%s,%s,%i)\n", debugstr_w(lpszStr), debugstr_w(lpszComp), iLen);
418 return CompareStringW(GetThreadLocale(), NORM_IGNORECASE, lpszStr, iLen, lpszComp, iLen) - CSTR_EQUAL;
419}

◆ StrCmpNW()

INT WINAPI StrCmpNW ( LPCWSTR  lpszStr,
LPCWSTR  lpszComp,
INT  iLen 
)

Definition at line 384 of file string.c.

385{
386 TRACE("(%s,%s,%i)\n", debugstr_w(lpszStr), debugstr_w(lpszComp), iLen);
387 return CompareStringW(GetThreadLocale(), 0, lpszStr, iLen, lpszComp, iLen) - CSTR_EQUAL;
388}

◆ StrCmpW()

int WINAPI StrCmpW ( LPCWSTR  lpszStr,
LPCWSTR  lpszComp 
)

Definition at line 434 of file string.c.

435{
436 TRACE("(%s,%s)\n", debugstr_w(lpszStr), debugstr_w(lpszComp));
437 return CompareStringW(GetThreadLocale(), 0, lpszStr, -1, lpszComp, -1) - CSTR_EQUAL;
438}

◆ StrCpyNW()

LPWSTR WINAPI StrCpyNW ( LPWSTR  dst,
LPCWSTR  src,
int  count 
)

Definition at line 536 of file string.c.

537{
538 LPWSTR d = dst;
539 LPCWSTR s = src;
540
541 TRACE("(%p,%s,%i)\n", dst, debugstr_w(src), count);
542
543 if (s)
544 {
545 while ((count > 1) && *s)
546 {
547 count--;
548 *d++ = *s++;
549 }
550 }
551 if (count) *d = 0;
552
553 return dst;
554}
GLuint GLuint GLsizei count
Definition: gl.h:1545
GLdouble s
Definition: gl.h:2039
#define d
Definition: ke_i.h:81
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185

◆ StrCpyNXA()

LPSTR WINAPI StrCpyNXA ( LPSTR  lpszDest,
LPCSTR  lpszSrc,
int  iLen 
)

Definition at line 2393 of file string.c.

2394{
2395 TRACE("(%p,%s,%i)\n", lpszDest, debugstr_a(lpszSrc), iLen);
2396
2397 if (lpszDest && lpszSrc && iLen > 0)
2398 {
2399 while ((iLen-- > 1) && *lpszSrc)
2400 *lpszDest++ = *lpszSrc++;
2401 if (iLen >= 0)
2402 *lpszDest = '\0';
2403 }
2404 return lpszDest;
2405}
WCHAR lpszDest[260]

◆ StrCpyNXW()

LPWSTR WINAPI StrCpyNXW ( LPWSTR  lpszDest,
LPCWSTR  lpszSrc,
int  iLen 
)

Definition at line 2412 of file string.c.

2413{
2414 TRACE("(%p,%s,%i)\n", lpszDest, debugstr_w(lpszSrc), iLen);
2415
2416 if (lpszDest && lpszSrc && iLen > 0)
2417 {
2418 while ((iLen-- > 1) && *lpszSrc)
2419 *lpszDest++ = *lpszSrc++;
2420 if (iLen >= 0)
2421 *lpszDest = '\0';
2422 }
2423 return lpszDest;
2424}

◆ StrCpyW()

LPWSTR WINAPI StrCpyW ( LPWSTR  lpszStr,
LPCWSTR  lpszSrc 
)

Definition at line 514 of file string.c.

515{
516 TRACE("(%p,%s)\n", lpszStr, debugstr_w(lpszSrc));
517
518 if (lpszStr && lpszSrc)
519 strcpyW(lpszStr, lpszSrc);
520 return lpszStr;
521}
#define strcpyW(d, s)
Definition: unicode.h:35

Referenced by _ShowContextMenu(), PathCreateFromUrlW(), and test_StrCpyW().

◆ StrCSpnA()

int WINAPI StrCSpnA ( LPCSTR  lpszStr,
LPCSTR  lpszMatch 
)

Definition at line 1319 of file string.c.

1320{
1321 TRACE("(%s,%s)\n",debugstr_a(lpszStr), debugstr_a(lpszMatch));
1322
1323 return SHLWAPI_StrSpnHelperA(lpszStr, lpszMatch, StrChrA, TRUE);
1324}
static int SHLWAPI_StrSpnHelperA(LPCSTR lpszStr, LPCSTR lpszMatch, LPSTR(WINAPI *pStrChrFn)(LPCSTR, WORD), BOOL bInvert)
Definition: string.c:1252

◆ StrCSpnIA()

int WINAPI StrCSpnIA ( LPCSTR  lpszStr,
LPCSTR  lpszMatch 
)

Definition at line 1351 of file string.c.

1352{
1353 TRACE("(%s,%s)\n",debugstr_a(lpszStr), debugstr_a(lpszMatch));
1354
1355 return SHLWAPI_StrSpnHelperA(lpszStr, lpszMatch, StrChrIA, TRUE);
1356}
LPSTR WINAPI StrChrIA(LPCSTR lpszStr, WORD ch)
Definition: string.c:610

◆ StrCSpnIW()

int WINAPI StrCSpnIW ( LPCWSTR  lpszStr,
LPCWSTR  lpszMatch 
)

Definition at line 1363 of file string.c.

1364{
1365 LPCWSTR lpszRead = lpszStr;
1366
1367 TRACE("(%s,%s)\n",debugstr_w(lpszStr), debugstr_w(lpszMatch));
1368
1369 if (lpszStr && *lpszStr && lpszMatch)
1370 {
1371 while (*lpszRead)
1372 {
1373 if (StrChrIW(lpszMatch, *lpszRead)) break;
1374 lpszRead++;
1375 }
1376 }
1377 return lpszRead - lpszStr;
1378}
LPWSTR WINAPI StrChrIW(LPCWSTR lpszStr, WCHAR ch)
Definition: string.c:631

◆ StrCSpnW()

int WINAPI StrCSpnW ( LPCWSTR  lpszStr,
LPCWSTR  lpszMatch 
)

Definition at line 1331 of file string.c.

1332{
1333 if (!lpszStr || !lpszMatch) return 0;
1334 return strcspnW( lpszStr, lpszMatch );
1335}
#define strcspnW(d, s)
Definition: unicode.h:37

◆ StrDupA()

LPSTR WINAPI StrDupA ( LPCSTR  lpszStr)

Definition at line 1194 of file string.c.

1195{
1196 int iLen;
1197 LPSTR lpszRet;
1198
1199 TRACE("(%s)\n",debugstr_a(lpszStr));
1200
1201#ifdef __REACTOS__
1202 if (!lpszStr)
1203 return NULL;
1204#endif
1205 iLen = lpszStr ? strlen(lpszStr) + 1 : 1;
1206 lpszRet = LocalAlloc(LMEM_FIXED, iLen);
1207
1208 if (lpszRet)
1209 {
1210 if (lpszStr)
1211 memcpy(lpszRet, lpszStr, iLen);
1212 else
1213 *lpszRet = '\0';
1214 }
1215 return lpszRet;
1216}
HLOCAL NTAPI LocalAlloc(UINT uFlags, SIZE_T dwBytes)
Definition: heapmem.c:1390
#define LMEM_FIXED
Definition: minwinbase.h:81

◆ StrDupW()

LPWSTR WINAPI StrDupW ( LPCWSTR  lpszStr)

Definition at line 1223 of file string.c.

1224{
1225 int iLen;
1226 LPWSTR lpszRet;
1227
1228 TRACE("(%s)\n",debugstr_w(lpszStr));
1229
1230#ifdef __REACTOS__
1231 if (!lpszStr)
1232 return NULL;
1233#endif
1234 iLen = (lpszStr ? strlenW(lpszStr) + 1 : 1) * sizeof(WCHAR);
1235 lpszRet = LocalAlloc(LMEM_FIXED, iLen);
1236
1237 if (lpszRet)
1238 {
1239 if (lpszStr)
1240 memcpy(lpszRet, lpszStr, iLen);
1241 else
1242 *lpszRet = '\0';
1243 }
1244 return lpszRet;
1245}

◆ StrFormatByteSize64A()

LPSTR WINAPI StrFormatByteSize64A ( LONGLONG  llBytes,
LPSTR  lpszDest,
UINT  cchMax 
)

Definition at line 2632 of file string.c.

2633{
2634 WCHAR wszBuff[32];
2635
2636 StrFormatByteSizeW(llBytes, wszBuff, sizeof(wszBuff)/sizeof(WCHAR));
2637
2638 if (lpszDest)
2639 WideCharToMultiByte(CP_ACP, 0, wszBuff, -1, lpszDest, cchMax, 0, 0);
2640 return lpszDest;
2641}
LPWSTR WINAPI StrFormatByteSizeW(LONGLONG llBytes, LPWSTR lpszDest, UINT cchMax)
Definition: string.c:2524

Referenced by CDrivesFolder::GetDetailsOf(), and StrFormatByteSizeA().

◆ StrFormatByteSizeA()

LPSTR WINAPI StrFormatByteSizeA ( DWORD  dwBytes,
LPSTR  lpszDest,
UINT  cchMax 
)

Definition at line 2660 of file string.c.

2661{
2662 TRACE("(%d,%p,%d)\n", dwBytes, lpszDest, cchMax);
2663
2664 return StrFormatByteSize64A(dwBytes, lpszDest, cchMax);
2665}
LPSTR WINAPI StrFormatByteSize64A(LONGLONG llBytes, LPSTR lpszDest, UINT cchMax)
Definition: string.c:2632

Referenced by CCabFolder::GetItemDetails().

◆ StrFormatByteSizeW()

LPWSTR WINAPI StrFormatByteSizeW ( LONGLONG  llBytes,
LPWSTR  lpszDest,
UINT  cchMax 
)

Definition at line 2524 of file string.c.

2525{
2526#define KB ((ULONGLONG)1024)
2527#define MB (KB*KB)
2528#define GB (KB*KB*KB)
2529#define TB (KB*KB*KB*KB)
2530#define PB (KB*KB*KB*KB*KB)
2531
2532 static const SHLWAPI_BYTEFORMATS bfFormats[] =
2533 {
2534#ifdef __REACTOS__
2535 { 10*KB, 10.24, 100.0, 2, IDS_KB_FORMAT }, /* 10 KB */
2536 { 100*KB, 102.4, 10.0, 1, IDS_KB_FORMAT }, /* 100 KB */
2537 { 1000*KB, 1024.0, 1.0, 0, IDS_KB_FORMAT }, /* 1000 KB */
2538 { 10*MB, 10485.76, 100.0, 2, IDS_MB_FORMAT }, /* 10 MB */
2539 { 100*MB, 104857.6, 10.0, 1, IDS_MB_FORMAT }, /* 100 MB */
2540 { 1000*MB, 1048576.0, 1.0, 0, IDS_MB_FORMAT }, /* 1000 MB */
2541 { 10*GB, 10737418.24, 100.0, 2, IDS_GB_FORMAT }, /* 10 GB */
2542 { 100*GB, 107374182.4, 10.0, 1, IDS_GB_FORMAT }, /* 100 GB */
2543 { 1000*GB, 1073741824.0, 1.0, 0, IDS_GB_FORMAT }, /* 1000 GB */
2544 { 10*TB, 10485.76, 100.0, 2, IDS_TB_FORMAT }, /* 10 TB */
2545 { 100*TB, 104857.6, 10.0, 1, IDS_TB_FORMAT }, /* 100 TB */
2546 { 1000*TB, 1048576.0, 1.0, 0, IDS_TB_FORMAT }, /* 1000 TB */
2547 { 10*PB, 10737418.24, 100.00, 2, IDS_PB_FORMAT }, /* 10 PB */
2548 { 100*PB, 107374182.4, 10.00, 1, IDS_PB_FORMAT }, /* 100 PB */
2549 { 1000*PB, 1073741824.0, 1.00, 0, IDS_PB_FORMAT }, /* 1000 PB */
2550 { 0, 10995116277.76, 100.00, 2, IDS_EB_FORMAT } /* EB's, catch all */
2551#else
2552 { 10*KB, 10.24, 100.0, 2, 'K' }, /* 10 KB */
2553 { 100*KB, 102.4, 10.0, 1, 'K' }, /* 100 KB */
2554 { 1000*KB, 1024.0, 1.0, 0, 'K' }, /* 1000 KB */
2555 { 10*MB, 10485.76, 100.0, 2, 'M' }, /* 10 MB */
2556 { 100*MB, 104857.6, 10.0, 1, 'M' }, /* 100 MB */
2557 { 1000*MB, 1048576.0, 1.0, 0, 'M' }, /* 1000 MB */
2558 { 10*GB, 10737418.24, 100.0, 2, 'G' }, /* 10 GB */
2559 { 100*GB, 107374182.4, 10.0, 1, 'G' }, /* 100 GB */
2560 { 1000*GB, 1073741824.0, 1.0, 0, 'G' }, /* 1000 GB */
2561 { 10*TB, 10485.76, 100.0, 2, 'T' }, /* 10 TB */
2562 { 100*TB, 104857.6, 10.0, 1, 'T' }, /* 100 TB */
2563 { 1000*TB, 1048576.0, 1.0, 0, 'T' }, /* 1000 TB */
2564 { 10*PB, 10737418.24, 100.00, 2, 'P' }, /* 10 PB */
2565 { 100*PB, 107374182.4, 10.00, 1, 'P' }, /* 100 PB */
2566 { 1000*PB, 1073741824.0, 1.00, 0, 'P' }, /* 1000 PB */
2567 { 0, 10995116277.76, 100.00, 2, 'E' } /* EB's, catch all */
2568#endif
2569 };
2570#ifdef __REACTOS__
2571 WCHAR szBuff[40], wszFormat[40];
2572#else
2573 WCHAR wszAdd[] = {' ','?','B',0};
2574#endif
2575 double dBytes;
2576 UINT i = 0;
2577
2578 TRACE("(0x%s,%p,%d)\n", wine_dbgstr_longlong(llBytes), lpszDest, cchMax);
2579
2580 if (!lpszDest || !cchMax)
2581 return lpszDest;
2582
2583 if (llBytes < 1024) /* 1K */
2584 {
2585 WCHAR wszBytesFormat[64];
2586 LoadStringW(shlwapi_hInstance, IDS_BYTES_FORMAT, wszBytesFormat, 64);
2587 snprintfW(lpszDest, cchMax, wszBytesFormat, (int)llBytes);
2588 return lpszDest;
2589 }
2590
2591 /* Note that if this loop completes without finding a match, i will be
2592 * pointing at the last entry, which is a catch all for > 1000 PB
2593 */
2594 while (i < sizeof(bfFormats) / sizeof(SHLWAPI_BYTEFORMATS) - 1)
2595 {
2596 if (llBytes < bfFormats[i].dLimit)
2597 break;
2598 i++;
2599 }
2600 /* Above 1 TB we encounter problems with FP accuracy. So for amounts above
2601 * this number we integer shift down by 1 MB first. The table above has
2602 * the divisors scaled down from the '< 10 TB' entry onwards, to account
2603 * for this. We also add a small fudge factor to get the correct result for
2604 * counts that lie exactly on a 1024 byte boundary.
2605 */
2606 if (i > 8)
2607 dBytes = (double)(llBytes >> 20) + 0.001; /* Scale down by 1 MB */
2608 else
2609 dBytes = (double)llBytes + 0.00001;
2610
2611 dBytes = floor(dBytes / bfFormats[i].dDivisor) / bfFormats[i].dNormaliser;
2612
2613#ifdef __REACTOS__
2614 if (!FormatDouble(dBytes, bfFormats[i].nDecimals, szBuff, ARRAYSIZE(szBuff)))
2615 return NULL;
2616 LoadStringW(shlwapi_hInstance, bfFormats[i].nFormatID, wszFormat, ARRAYSIZE(wszFormat));
2617 snprintfW(lpszDest, cchMax, wszFormat, szBuff);
2618#else
2619 if (!FormatDouble(dBytes, bfFormats[i].nDecimals, lpszDest, cchMax))
2620 return NULL;
2621 wszAdd[1] = bfFormats[i].wPrefix;
2622 StrCatBuffW(lpszDest, wszAdd, cchMax);
2623#endif
2624 return lpszDest;
2625}
#define IDS_BYTES_FORMAT
Definition: resource.h:122
#define ARRAYSIZE(array)
Definition: filtermapper.c:47
static __inline const char * wine_dbgstr_longlong(ULONGLONG ll)
Definition: compat.h:49
_ACRTIMP double __cdecl floor(double)
Definition: floor.c:18
#define KB
#define PB
LPWSTR WINAPI StrCatBuffW(LPWSTR lpszStr, LPCWSTR lpszCat, INT cchMax)
Definition: string.c:1574
#define TB
#define GB
#define MB
static int FormatDouble(double value, int decimals, LPWSTR pszBuf, int cchBuf)
Definition: string.c:129
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
static const char mbstate_t *static wchar_t const char mbstate_t *static const wchar_t int *static double
Definition: string.c:91
unsigned int UINT
Definition: ndis.h:50

Referenced by AddUserProfile(), CAvailableApplicationInfo::CAvailableApplicationInfo(), dialog_vcl_add_drives(), FormatFileSizeWithBytes(), CZipFolder::GetDetailsOf(), CDrvDefExt::InitGeneralPage(), InitializeFormatDriveDlg(), InitializeRecycleBinDlg(), InsertDefaultClusterSizeForFs(), CCleanMgrProperties::OnInitDialog(), PerformancePageRefreshThread(), PrintDiskData(), PrintPartitionData(), CDownloaderProgress::SetProgress(), SH_FormatFileSizeWithBytes(), ShortSizeFormatW(), StrFormatByteSize64A(), UpdateLanStatusUiDlg(), CCleanMgrProperties::UpdateSpaceUsed(), and CDefView::UpdateStatusbar().

◆ StrFormatKBSizeA()

LPSTR WINAPI StrFormatKBSizeA ( LONGLONG  llBytes,
LPSTR  lpszDest,
UINT  cchMax 
)

Definition at line 1871 of file string.c.

1872{
1873 WCHAR wszBuf[256];
1874
1875 if (!StrFormatKBSizeW(llBytes, wszBuf, 256))
1876 return NULL;
1877 if (!WideCharToMultiByte(CP_ACP, 0, wszBuf, -1, lpszDest, cchMax, NULL, NULL))
1878 return NULL;
1879 return lpszDest;
1880}
LPWSTR WINAPI StrFormatKBSizeW(LONGLONG llBytes, LPWSTR lpszDest, UINT cchMax)
Definition: string.c:1887

Referenced by CFontExt::GetDetailsOf().

◆ StrFormatKBSizeW()

LPWSTR WINAPI StrFormatKBSizeW ( LONGLONG  llBytes,
LPWSTR  lpszDest,
UINT  cchMax 
)

Definition at line 1887 of file string.c.

1888{
1889 static const WCHAR kb[] = {' ','K','B',0};
1890 LONGLONG llKB = (llBytes + 1023) >> 10;
1891 int len;
1892
1893 TRACE("(0x%s,%p,%d)\n", wine_dbgstr_longlong(llBytes), lpszDest, cchMax);
1894
1895 if (!FormatInt(llKB, lpszDest, cchMax))
1896 return NULL;
1897
1899 if (cchMax - len < 4)
1900 return NULL;
1901 lstrcatW(lpszDest, kb);
1902 return lpszDest;
1903}
static int FormatInt(LONGLONG qdwValue, LPWSTR pszBuf, int cchBuf)
Definition: string.c:96
LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
Definition: lstring.c:274
int64_t LONGLONG
Definition: typedefs.h:68

Referenced by _ILGetFileSize(), CFSFolder::FormatSize(), and StrFormatKBSizeA().

◆ StrFromTimeIntervalA()

INT WINAPI StrFromTimeIntervalA ( LPSTR  lpszStr,
UINT  cchMax,
DWORD  dwMS,
int  iDigits 
)

Definition at line 2261 of file string.c.

2263{
2264 INT iRet = 0;
2265
2266 TRACE("(%p,%d,%d,%d)\n", lpszStr, cchMax, dwMS, iDigits);
2267
2268 if (lpszStr && cchMax)
2269 {
2270 WCHAR szBuff[128];
2271 StrFromTimeIntervalW(szBuff, sizeof(szBuff)/sizeof(WCHAR), dwMS, iDigits);
2272 WideCharToMultiByte(CP_ACP,0,szBuff,-1,lpszStr,cchMax,0,0);
2273 }
2274 return iRet;
2275}
INT WINAPI StrFromTimeIntervalW(LPWSTR lpszStr, UINT cchMax, DWORD dwMS, int iDigits)
Definition: string.c:2283

Referenced by test_StrFromTimeIntervalA().

◆ StrFromTimeIntervalW()

INT WINAPI StrFromTimeIntervalW ( LPWSTR  lpszStr,
UINT  cchMax,
DWORD  dwMS,
int  iDigits 
)

Definition at line 2283 of file string.c.

2285{
2286 INT iRet = 0;
2287
2288 TRACE("(%p,%d,%d,%d)\n", lpszStr, cchMax, dwMS, iDigits);
2289
2290 if (lpszStr && cchMax)
2291 {
2292 WCHAR szCopy[128];
2293 DWORD dwHours, dwMinutes;
2294
2295 if (!iDigits || cchMax == 1)
2296 {
2297 *lpszStr = '\0';
2298 return 0;
2299 }
2300
2301 /* Calculate the time classes */
2302 dwMS = (dwMS + 500) / 1000;
2303 dwHours = dwMS / 3600;
2304 dwMS -= dwHours * 3600;
2305 dwMinutes = dwMS / 60;
2306 dwMS -= dwMinutes * 60;
2307
2308 szCopy[0] = '\0';
2309
2310 if (dwHours)
2311 iDigits = SHLWAPI_WriteTimeClass(szCopy, dwHours, IDS_TIME_INTERVAL_HOURS, iDigits);
2312
2313 if (dwMinutes && iDigits)
2314 iDigits = SHLWAPI_WriteTimeClass(szCopy, dwMinutes, IDS_TIME_INTERVAL_MINUTES, iDigits);
2315
2316 if (iDigits) /* Always write seconds if we have significant digits */
2317 SHLWAPI_WriteTimeClass(szCopy, dwMS, IDS_TIME_INTERVAL_SECONDS, iDigits);
2318
2319 lstrcpynW(lpszStr, szCopy, cchMax);
2320 iRet = strlenW(lpszStr);
2321 }
2322 return iRet;
2323}
#define IDS_TIME_INTERVAL_MINUTES
Definition: resource.h:28
#define IDS_TIME_INTERVAL_HOURS
Definition: resource.h:27
#define IDS_TIME_INTERVAL_SECONDS
Definition: resource.h:29
static int SHLWAPI_WriteTimeClass(LPWSTR lpszOut, DWORD dwValue, UINT uClassStringId, int iDigits)
Definition: string.c:2217

Referenced by dialog_proc(), and StrFromTimeIntervalA().

◆ StrIsIntlEqualA()

BOOL WINAPI StrIsIntlEqualA ( BOOL  bCase,
LPCSTR  lpszStr,
LPCSTR  lpszComp,
int  iLen 
)

Definition at line 2340 of file string.c.

2342{
2343 DWORD dwFlags;
2344
2345 TRACE("(%d,%s,%s,%d)\n", bCase,
2346 debugstr_a(lpszStr), debugstr_a(lpszComp), iLen);
2347
2348 /* FIXME: This flag is undocumented and unknown by our CompareString.
2349 * We need a define for it.
2350 */
2351 dwFlags = 0x10000000;
2352 if (!bCase) dwFlags |= NORM_IGNORECASE;
2353
2354 return (CompareStringA(GetThreadLocale(), dwFlags, lpszStr, iLen, lpszComp, iLen) == CSTR_EQUAL);
2355}

◆ StrIsIntlEqualW()

BOOL WINAPI StrIsIntlEqualW ( BOOL  bCase,
LPCWSTR  lpszStr,
LPCWSTR  lpszComp,
int  iLen 
)

Definition at line 2362 of file string.c.

2364{
2365 DWORD dwFlags;
2366
2367 TRACE("(%d,%s,%s,%d)\n", bCase,
2368 debugstr_w(lpszStr),debugstr_w(lpszComp), iLen);
2369
2370 /* FIXME: This flag is undocumented and unknown by our CompareString.
2371 * We need a define for it.
2372 */
2373 dwFlags = 0x10000000;
2374 if (!bCase) dwFlags |= NORM_IGNORECASE;
2375
2376 return (CompareStringW(GetThreadLocale(), dwFlags, lpszStr, iLen, lpszComp, iLen) == CSTR_EQUAL);
2377}

◆ StrNCatA()

LPSTR WINAPI StrNCatA ( LPSTR  lpszStr,
LPCSTR  lpszCat,
INT  cchMax 
)

Definition at line 1922 of file string.c.

1923{
1924 LPSTR lpszRet = lpszStr;
1925
1926 TRACE("(%s,%s,%i)\n", debugstr_a(lpszStr), debugstr_a(lpszCat), cchMax);
1927
1928 if (!lpszStr)
1929 {
1930 WARN("Invalid lpszStr would crash under Win32!\n");
1931 return NULL;
1932 }
1933
1934 StrCpyNA(lpszStr + strlen(lpszStr), lpszCat, cchMax);
1935 return lpszRet;
1936}

◆ StrNCatW()

LPWSTR WINAPI StrNCatW ( LPWSTR  lpszStr,
LPCWSTR  lpszCat,
INT  cchMax 
)

Definition at line 1943 of file string.c.

1944{
1945 LPWSTR lpszRet = lpszStr;
1946
1947 TRACE("(%s,%s,%i)\n", debugstr_w(lpszStr), debugstr_w(lpszCat), cchMax);
1948
1949 if (!lpszStr)
1950 {
1951 WARN("Invalid lpszStr would crash under Win32\n");
1952 return NULL;
1953 }
1954
1955 StrCpyNW(lpszStr + strlenW(lpszStr), lpszCat, cchMax);
1956 return lpszRet;
1957}

◆ StrPBrkA()

LPSTR WINAPI StrPBrkA ( LPCSTR  lpszStr,
LPCSTR  lpszMatch 
)

Definition at line 1393 of file string.c.

1394{
1395 TRACE("(%s,%s)\n",debugstr_a(lpszStr), debugstr_a(lpszMatch));
1396
1397 if (lpszStr && lpszMatch && *lpszMatch)
1398 {
1399 while (*lpszStr)
1400 {
1401 if (StrChrA(lpszMatch, *lpszStr))
1402 return (LPSTR)lpszStr;
1403 lpszStr = CharNextA(lpszStr);
1404 }
1405 }
1406 return NULL;
1407}

◆ StrPBrkW()

LPWSTR WINAPI StrPBrkW ( LPCWSTR  lpszStr,
LPCWSTR  lpszMatch 
)

Definition at line 1414 of file string.c.

1415{
1416 if (!lpszStr || !lpszMatch) return NULL;
1417 return strpbrkW( lpszStr, lpszMatch );
1418}
#define strpbrkW(str, accept)
Definition: unicode.h:49

◆ StrRChrA()

LPSTR WINAPI StrRChrA ( LPCSTR  lpszStr,
LPCSTR  lpszEnd,
WORD  ch 
)

Definition at line 1465 of file string.c.

1466{
1467 TRACE("(%s,%s,%x)\n", debugstr_a(lpszStr), debugstr_a(lpszEnd), ch);
1468
1469 return SHLWAPI_StrRChrHelperA(lpszStr, lpszEnd, ch, SHLWAPI_ChrCmpA);
1470}
static LPSTR SHLWAPI_StrRChrHelperA(LPCSTR lpszStr, LPCSTR lpszEnd, WORD ch, BOOL(WINAPI *pChrCmpFn)(WORD, WORD))
Definition: string.c:1425

◆ StrRChrIA()

LPSTR WINAPI StrRChrIA ( LPCSTR  lpszStr,
LPCSTR  lpszEnd,
WORD  ch 
)

Definition at line 1506 of file string.c.

1507{
1508 TRACE("(%s,%s,%x)\n", debugstr_a(lpszStr), debugstr_a(lpszEnd), ch);
1509
1510 return SHLWAPI_StrRChrHelperA(lpszStr, lpszEnd, ch, ChrCmpIA);
1511}

◆ StrRChrIW()

LPWSTR WINAPI StrRChrIW ( LPCWSTR  str,
LPCWSTR  end,
WORD  ch 
)

Definition at line 1518 of file string.c.

1519{
1520 WCHAR *ret = NULL;
1521
1522 if (!str) return NULL;
1523 if (!end) end = str + strlenW(str);
1524 while (str < end)
1525 {
1526 if (!ChrCmpIW(*str, ch)) ret = (WCHAR *)str;
1527 str++;
1528 }
1529 return ret;
1530}
return ret
Definition: mutex.c:146
const WCHAR * str

◆ StrRChrW()

LPWSTR WINAPI StrRChrW ( LPCWSTR  str,
LPCWSTR  end,
WORD  ch 
)

Definition at line 1477 of file string.c.

1478{
1479 WCHAR *ret = NULL;
1480
1481 if (!str) return NULL;
1482 if (!end) end = str + strlenW(str);
1483 while (str < end)
1484 {
1485 if (*str == ch) ret = (WCHAR *)str;
1486 str++;
1487 }
1488 return ret;
1489}

◆ StrRetToBSTR()

HRESULT WINAPI StrRetToBSTR ( STRRET lpStrRet,
LPCITEMIDLIST  pidl,
BSTR pBstrOut 
)

Definition at line 1830 of file string.c.

1831{
1832 HRESULT hRet = E_FAIL;
1833
1834 switch (lpStrRet->uType)
1835 {
1836 case STRRET_WSTR:
1837 *pBstrOut = SysAllocString(lpStrRet->u.pOleStr);
1838 if (*pBstrOut)
1839 hRet = S_OK;
1840 CoTaskMemFree(lpStrRet->u.pOleStr);
1841 break;
1842
1843 case STRRET_CSTR:
1844 hRet = _SHStrDupAToBSTR(lpStrRet->u.cStr, pBstrOut);
1845 break;
1846
1847 case STRRET_OFFSET:
1848 hRet = _SHStrDupAToBSTR(((LPCSTR)&pidl->mkid) + lpStrRet->u.uOffset, pBstrOut);
1849 break;
1850
1851 default:
1852 *pBstrOut = NULL;
1853 }
1854
1855 return hRet;
1856}
static HRESULT _SHStrDupAToBSTR(LPCSTR src, BSTR *pBstrOut)
Definition: string.c:1794
VOID WINAPI CoTaskMemFree(LPVOID ptr)
Definition: ifs.c:442
@ STRRET_CSTR
Definition: shtypes.idl:87
@ STRRET_OFFSET
Definition: shtypes.idl:86
@ STRRET_WSTR
Definition: shtypes.idl:85
char cStr[MAX_PATH]
Definition: shtypes.idl:98
UINT uType
Definition: shtypes.idl:93
LPWSTR pOleStr
Definition: shtypes.idl:96
UINT uOffset
Definition: shtypes.idl:97

Referenced by CFolderItem::get_Name(), CFolderItem::get_Path(), SHELL_GetDetailsOfAsStringVariant(), and StrRetToVariantBSTR().

◆ StrRetToBufA()

HRESULT WINAPI StrRetToBufA ( LPSTRRET  src,
const ITEMIDLIST pidl,
LPSTR  dest,
UINT  len 
)

Definition at line 1611 of file string.c.

1612{
1613 /* NOTE:
1614 * This routine is identical to that in dlls/shell32/shellstring.c.
1615 * It was duplicated because not every version of Shlwapi.dll exports
1616 * StrRetToBufA. If you change one routine, change them both.
1617 */
1618 TRACE("dest=%p len=0x%x strret=%p pidl=%p\n", dest, len, src, pidl);
1619
1620 if (!src)
1621 {
1622 WARN("Invalid lpStrRet would crash under Win32!\n");
1623 if (dest)
1624 *dest = '\0';
1625 return E_FAIL;
1626 }
1627
1628 if (!dest || !len)
1629 return E_FAIL;
1630
1631 *dest = '\0';
1632
1633 switch (src->uType)
1634 {
1635 case STRRET_WSTR:
1636 WideCharToMultiByte(CP_ACP, 0, src->u.pOleStr, -1, dest, len, NULL, NULL);
1637 CoTaskMemFree(src->u.pOleStr);
1638 break;
1639
1640 case STRRET_CSTR:
1641 lstrcpynA(dest, src->u.cStr, len);
1642 break;
1643
1644 case STRRET_OFFSET:
1645 lstrcpynA((LPSTR)dest, ((LPCSTR)&pidl->mkid)+src->u.uOffset, len);
1646 break;
1647
1648 default:
1649 FIXME("unknown type!\n");
1650 return E_NOTIMPL;
1651 }
1652 return S_OK;
1653}
#define E_NOTIMPL
Definition: ddrawi.h:99
SHITEMID mkid
Definition: shtypes.idl:34

◆ StrRetToBufW()

HRESULT WINAPI StrRetToBufW ( LPSTRRET  src,
const ITEMIDLIST pidl,
LPWSTR  dest,
UINT  len 
)

Definition at line 1660 of file string.c.

1661{
1662 TRACE("dest=%p len=0x%x strret=%p pidl=%p\n", dest, len, src, pidl);
1663
1664 if (!dest || !len)
1665 return E_FAIL;
1666
1667 if (!src)
1668 {
1669 WARN("Invalid lpStrRet would crash under Win32!\n");
1670 if (dest)
1671 *dest = '\0';
1672 return E_FAIL;
1673 }
1674
1675 *dest = '\0';
1676
1677 switch (src->uType) {
1678 case STRRET_WSTR: {
1679 size_t dst_len;
1680 if (!src->u.pOleStr)
1681 return E_FAIL;
1682 dst_len = strlenW(src->u.pOleStr);
1683 memcpy(dest, src->u.pOleStr, min(dst_len, len-1) * sizeof(WCHAR));
1684 dest[min(dst_len, len-1)] = 0;
1685 CoTaskMemFree(src->u.pOleStr);
1686 if (len <= dst_len)
1687 {
1688 dest[0] = 0;
1690 }
1691 break;
1692 }
1693
1694 case STRRET_CSTR:
1695 if (!MultiByteToWideChar( CP_ACP, 0, src->u.cStr, -1, dest, len ))
1696 dest[len-1] = 0;
1697 break;
1698
1699 case STRRET_OFFSET:
1700 if (pidl)
1701 {
1702 if (!MultiByteToWideChar( CP_ACP, 0, ((LPCSTR)&pidl->mkid)+src->u.uOffset, -1,
1703 dest, len ))
1704 dest[len-1] = 0;
1705 }
1706 break;
1707
1708 default:
1709 FIXME("unknown type!\n");
1710 return E_NOTIMPL;
1711 }
1712
1713 return S_OK;
1714}
#define min(a, b)
Definition: monoChain.cc:55
#define E_NOT_SUFFICIENT_BUFFER
Definition: winerror.h:3437

Referenced by CFSDropTarget::_CopyItems(), CAddressEditBox::AddComboBoxItem(), CISFBand::AddToolbarButtons(), COMDLG32_GetDisplayNameOf(), COMDLG32_UpdateCurrentDir(), DisplayNameOfW(), CMyDocsDropHandler::Drop(), CDeskLinkDropHandler::Drop(), FindExpectedFile(), GetCommandString(), GetDisplayName(), GetDisplayNameOf(), CCommonFolder< TSelf, TItemId, TExtractIcon >::GetDisplayNameOf(), GetFullName(), IEGetNameAndFlagsEx(), ok_displayname_(), SHELL32_CompareDetails(), SHGetPathCchFromIDListW(), SHGetRealIDL(), SHIsRemovableDrive(), SHOpenFolderAndSelectItems(), test_desktop_displaynameof(), test_FolderShortcut(), test_GetDisplayName(), test_LocalizedNames(), test_SHGetNameFromIDList(), and test_SHGetPathFromIDList().

◆ StrRetToStrA()

HRESULT WINAPI StrRetToStrA ( LPSTRRET  lpStrRet,
const ITEMIDLIST pidl,
LPSTR ppszName 
)

Definition at line 1730 of file string.c.

1731{
1732 HRESULT hRet = E_FAIL;
1733
1734 switch (lpStrRet->uType)
1735 {
1736 case STRRET_WSTR:
1737 hRet = _SHStrDupAW(lpStrRet->u.pOleStr, ppszName);
1738 CoTaskMemFree(lpStrRet->u.pOleStr);
1739 break;
1740
1741 case STRRET_CSTR:
1742 hRet = _SHStrDupAA(lpStrRet->u.cStr, ppszName);
1743 break;
1744
1745 case STRRET_OFFSET:
1746 hRet = _SHStrDupAA(((LPCSTR)&pidl->mkid) + lpStrRet->u.uOffset, ppszName);
1747 break;
1748
1749 default:
1750 *ppszName = NULL;
1751 }
1752
1753 return hRet;
1754}
static HRESULT _SHStrDupAA(LPCSTR, LPSTR *)
Definition: string.c:2053
static HRESULT _SHStrDupAW(LPCWSTR, LPSTR *)
Definition: string.c:2120
SIGDN PWSTR * ppszName
Definition: shobjidl.idl:606

◆ StrRetToStrW()

HRESULT WINAPI StrRetToStrW ( LPSTRRET  lpStrRet,
const ITEMIDLIST pidl,
LPWSTR ppszName 
)

Definition at line 1761 of file string.c.

1762{
1763 HRESULT hRet = E_FAIL;
1764
1765 switch (lpStrRet->uType)
1766 {
1767 case STRRET_WSTR:
1768#ifdef __REACTOS__
1769 hRet = lpStrRet->u.pOleStr ? S_OK : E_FAIL;
1770 *ppszName = lpStrRet->u.pOleStr;
1771 lpStrRet->u.pOleStr = NULL; /* Windows does this, presumably in case someone calls SHFree */
1772#else
1773 hRet = SHStrDupW(lpStrRet->u.pOleStr, ppszName);
1774 CoTaskMemFree(lpStrRet->u.pOleStr);
1775#endif
1776 break;
1777
1778 case STRRET_CSTR:
1779 hRet = SHStrDupA(lpStrRet->u.cStr, ppszName);
1780 break;
1781
1782 case STRRET_OFFSET:
1783 hRet = SHStrDupA(((LPCSTR)&pidl->mkid) + lpStrRet->u.uOffset, ppszName);
1784 break;
1785
1786 default:
1787 *ppszName = NULL;
1788 }
1789
1790 return hRet;
1791}
HRESULT WINAPI SHStrDupW(LPCWSTR src, LPWSTR *dest)
Definition: string.c:2148
HRESULT WINAPI SHStrDupA(LPCSTR lpszStr, LPWSTR *lppszDest)
Definition: string.c:2090

Referenced by CEnumMergedFolder::Begin(), GetDetailsOf(), GetDisplayname(), CACListISF::GetDisplayName(), CSendToMenu::LoadAllItems(), CShellBrowser::OnAddToFavorites(), SHELL32_GetFSItemAttributes(), SHELL_DisplayNameOf(), SHGetNameFromIDList(), and TEST_StrRet().

◆ StrRStrIA()

LPSTR WINAPI StrRStrIA ( LPCSTR  lpszStr,
LPCSTR  lpszEnd,
LPCSTR  lpszSearch 
)

Definition at line 627 of file string.c.

628{
629 LPSTR lpszRet = NULL;
630 WORD ch1, ch2;
631 INT iLen;
632
633 TRACE("(%s,%s)\n", debugstr_a(lpszStr), debugstr_a(lpszSearch));
634
635 if (!lpszStr || !lpszSearch || !*lpszSearch)
636 return NULL;
637
638 if (IsDBCSLeadByte(*lpszSearch))
639 ch1 = *lpszSearch << 8 | (UCHAR)lpszSearch[1];
640 else
641 ch1 = *lpszSearch;
642 iLen = lstrlenA(lpszSearch);
643
644 if (!lpszEnd)
645 lpszEnd = lpszStr + lstrlenA(lpszStr);
646 else /* reproduce the broken behaviour on Windows */
647 lpszEnd += min(iLen - 1, lstrlenA(lpszEnd));
648
649 while (lpszStr + iLen <= lpszEnd && *lpszStr)
650 {
651 ch2 = IsDBCSLeadByte(*lpszStr)? *lpszStr << 8 | (UCHAR)lpszStr[1] : *lpszStr;
652 if (!ChrCmpIA(ch1, ch2))
653 {
654 if (!StrCmpNIA(lpszStr, lpszSearch, iLen))
655 lpszRet = (LPSTR)lpszStr;
656 }
657 lpszStr = CharNextA(lpszStr);
658 }
659 return lpszRet;
660}
INT WINAPI StrCmpNIA(LPCSTR lpszStr, LPCSTR lpszComp, INT iLen)
Definition: string.c:296
unsigned char UCHAR
Definition: xmlstorage.h:181

◆ StrRStrIW()

LPWSTR WINAPI StrRStrIW ( LPCWSTR  lpszStr,
LPCWSTR  lpszEnd,
LPCWSTR  lpszSearch 
)

Definition at line 667 of file string.c.

668{
669 LPWSTR lpszRet = NULL;
670 INT iLen;
671
672 TRACE("(%s,%s)\n", debugstr_w(lpszStr), debugstr_w(lpszSearch));
673
674 if (!lpszStr || !lpszSearch || !*lpszSearch)
675 return NULL;
676
677 iLen = strlenW(lpszSearch);
678
679 if (!lpszEnd)
680 lpszEnd = lpszStr + strlenW(lpszStr);
681 else /* reproduce the broken behaviour on Windows */
682 lpszEnd += min(iLen - 1, lstrlenW(lpszEnd));
683
684 while (lpszStr + iLen <= lpszEnd && *lpszStr)
685 {
686 if (!ChrCmpIW(*lpszSearch, *lpszStr))
687 {
688 if (!StrCmpNIW(lpszStr, lpszSearch, iLen))
689 lpszRet = (LPWSTR)lpszStr;
690 }
691 lpszStr++;
692 }
693 return lpszRet;
694}
INT WINAPI StrCmpNIW(LPCWSTR lpszStr, LPCWSTR lpszComp, INT iLen)
Definition: string.c:307

◆ StrSpnA()

int WINAPI StrSpnA ( LPCSTR  lpszStr,
LPCSTR  lpszMatch 
)

Definition at line 1287 of file string.c.

1288{
1289 TRACE("(%s,%s)\n",debugstr_a(lpszStr), debugstr_a(lpszMatch));
1290
1291 return SHLWAPI_StrSpnHelperA(lpszStr, lpszMatch, StrChrA, FALSE);
1292}
#define FALSE
Definition: types.h:117

◆ StrSpnW()

int WINAPI StrSpnW ( LPCWSTR  lpszStr,
LPCWSTR  lpszMatch 
)

Definition at line 1299 of file string.c.

1300{
1301 if (!lpszStr || !lpszMatch) return 0;
1302 return strspnW( lpszStr, lpszMatch );
1303}
#define strspnW(str, accept)
Definition: unicode.h:48

◆ StrStrA()

LPSTR WINAPI StrStrA ( LPCSTR  lpszStr,
LPCSTR  lpszSearch 
)

Definition at line 594 of file string.c.

595{
596 TRACE("(%s,%s)\n", debugstr_a(lpszStr), debugstr_a(lpszSearch));
597
598 return SHLWAPI_StrStrHelperA(lpszStr, lpszSearch, StrCmpNA);
599}
INT WINAPI StrCmpNA(LPCSTR lpszStr, LPCSTR lpszComp, INT iLen)
Definition: string.c:489
static LPSTR SHLWAPI_StrStrHelperA(LPCSTR lpszStr, LPCSTR lpszSearch, INT(WINAPI *pStrCmpFn)(LPCSTR, LPCSTR, INT))
Definition: string.c:561

◆ StrStrIA()

LPSTR WINAPI StrStrIA ( LPCSTR  lpszStr,
LPCSTR  lpszSearch 
)

Definition at line 708 of file string.c.

709{
710 TRACE("(%s,%s)\n", debugstr_a(lpszStr), debugstr_a(lpszSearch));
711
712 return SHLWAPI_StrStrHelperA(lpszStr, lpszSearch, StrCmpNIA);
713}

◆ StrStrIW()

LPWSTR WINAPI StrStrIW ( LPCWSTR  lpszStr,
LPCWSTR  lpszSearch 
)

Definition at line 720 of file string.c.

721{
722 int iLen;
723 LPCWSTR end;
724
725 TRACE("(%s,%s)\n", debugstr_w(lpszStr), debugstr_w(lpszSearch));
726
727 if (!lpszStr || !lpszSearch || !*lpszSearch)
728 return NULL;
729
730 iLen = strlenW(lpszSearch);
731 end = lpszStr + strlenW(lpszStr);
732
733 while (lpszStr + iLen <= end)
734 {
735 if (!StrCmpNIW(lpszStr, lpszSearch, iLen))
736 return (LPWSTR)lpszStr;
737 lpszStr++;
738 }
739 return NULL;
740}

◆ StrStrNIW()

LPWSTR WINAPI StrStrNIW ( LPCWSTR  lpFirst,
LPCWSTR  lpSrch,
UINT  cchMax 
)

Definition at line 790 of file string.c.

791{
792 UINT i;
793 int len;
794
795 TRACE("(%s, %s, %u)\n", debugstr_w(lpFirst), debugstr_w(lpSrch), cchMax);
796
797 if (!lpFirst || !lpSrch || !*lpSrch || !cchMax)
798 return NULL;
799
800 len = strlenW(lpSrch);
801
802 for (i = cchMax; *lpFirst && (i > 0); i--, lpFirst++)
803 {
804 if (!strncmpiW(lpFirst, lpSrch, len))
805 return (LPWSTR)lpFirst;
806 }
807
808 return NULL;
809}
#define strncmpiW(s1, s2, n)
Definition: unicode.h:46

◆ StrStrNW()

LPWSTR WINAPI StrStrNW ( LPCWSTR  lpFirst,
LPCWSTR  lpSrch,
UINT  cchMax 
)

Definition at line 755 of file string.c.

756{
757 UINT i;
758 int len;
759
760 TRACE("(%s, %s, %u)\n", debugstr_w(lpFirst), debugstr_w(lpSrch), cchMax);
761
762 if (!lpFirst || !lpSrch || !*lpSrch || !cchMax)
763 return NULL;
764
765 len = strlenW(lpSrch);
766
767 for (i = cchMax; *lpFirst && (i > 0); i--, lpFirst++)
768 {
769 if (!strncmpW(lpFirst, lpSrch, len))
770 return (LPWSTR)lpFirst;
771 }
772
773 return NULL;
774}
#define strncmpW(s1, s2, n)
Definition: unicode.h:42

◆ StrStrW()

LPWSTR WINAPI StrStrW ( LPCWSTR  lpszStr,
LPCWSTR  lpszSearch 
)

Definition at line 606 of file string.c.

607{
608 TRACE("(%s, %s)\n", debugstr_w(lpszStr), debugstr_w(lpszSearch));
609
610 if (!lpszStr || !lpszSearch || !*lpszSearch) return NULL;
611 return strstrW( lpszStr, lpszSearch );
612}
#define strstrW(d, s)
Definition: unicode.h:38

◆ StrToInt64ExA()

BOOL WINAPI StrToInt64ExA ( LPCSTR  lpszStr,
DWORD  dwFlags,
LONGLONG lpiRet 
)

Definition at line 956 of file string.c.

957{
958#ifdef __REACTOS__
959 if (!lpszStr)
960 return FALSE;
961
962 WCHAR wideBuf[MAX_PATH];
963 if (MultiByteToWideChar(CP_ACP, 0, lpszStr, -1, wideBuf, _countof(wideBuf)) <= 0)
964 return FALSE;
965
966 wideBuf[_countof(wideBuf) - 1] = UNICODE_NULL; // SECURITY: Avoid buffer overrun
967 return StrToInt64ExW(wideBuf, dwFlags, lpiRet);
968#else
969 BOOL bNegative = FALSE;
970 LONGLONG iRet = 0;
971
972 TRACE("(%s,%08X,%p)\n", debugstr_a(lpszStr), dwFlags, lpiRet);
973
974 if (!lpszStr || !lpiRet)
975 {
976 WARN("Invalid parameter would crash under Win32!\n");
977 return FALSE;
978 }
979 if (dwFlags > STIF_SUPPORT_HEX) WARN("Unknown flags %08x\n", dwFlags);
980
981 /* Skip leading space, '+', '-' */
982 while (isspace(*lpszStr))
983 lpszStr = CharNextA(lpszStr);
984
985 if (*lpszStr == '-')
986 {
987 bNegative = TRUE;
988 lpszStr++;
989 }
990 else if (*lpszStr == '+')
991 lpszStr++;
992
994 *lpszStr == '0' && tolower(lpszStr[1]) == 'x')
995 {
996 /* Read hex number */
997 lpszStr += 2;
998
999 if (!isxdigit(*lpszStr))
1000 return FALSE;
1001
1002 while (isxdigit(*lpszStr))
1003 {
1004 iRet = iRet * 16;
1005 if (isdigit(*lpszStr))
1006 iRet += (*lpszStr - '0');
1007 else
1008 iRet += 10 + (tolower(*lpszStr) - 'a');
1009 lpszStr++;
1010 }
1011 *lpiRet = iRet;
1012 return TRUE;
1013 }
1014
1015 /* Read decimal number */
1016 if (!isdigit(*lpszStr))
1017 return FALSE;
1018
1019 while (isdigit(*lpszStr))
1020 {
1021 iRet = iRet * 10;
1022 iRet += (*lpszStr - '0');
1023 lpszStr++;
1024 }
1025 *lpiRet = bNegative ? -iRet : iRet;
1026 return TRUE;
1027#endif
1028}
#define isspace(c)
Definition: acclib.h:69
#define isdigit(c)
Definition: acclib.h:68
#define isxdigit(c)
Definition: acclib.h:70
BOOL WINAPI StrToInt64ExW(const WCHAR *str, DWORD flags, LONGLONG *ret)
Definition: string.c:897
int CDECL tolower(int c)
Definition: ctype.c:572
#define UNICODE_NULL
#define STIF_SUPPORT_HEX
Definition: shlwapi.h:1059
#define _countof(array)
Definition: sndvol32.h:70

◆ StrToInt64ExW()

BOOL WINAPI StrToInt64ExW ( LPCWSTR  lpszStr,
DWORD  dwFlags,
LONGLONG lpiRet 
)

Definition at line 1056 of file string.c.

1057{
1058#ifdef __REACTOS__
1059 if (!lpszStr)
1060 return FALSE;
1061
1062 // Skip spaces
1063 LPCWSTR pch = lpszStr;
1064 while (*pch == L' ' || *pch == L'\n' || *pch == L'\t')
1065 pch++;
1066
1067 BOOL isNegative = FALSE;
1068 if (*pch == L'+' || *pch == L'-')
1069 {
1070 isNegative = (*pch == L'-');
1071 ++pch;
1072 }
1073
1074 ULONGLONG value = 0;
1075 LPCWSTR start = pch;
1076
1077 if ((dwFlags & STIF_SUPPORT_HEX) &&
1078 *pch == L'0' && (pch[1] == L'x' || pch[1] == L'X')) // "0x" or "0X"
1079 {
1080 pch += 2;
1081 start = pch;
1082 for (;;)
1083 {
1084 INT digit;
1085 if (IS_DIGIT(*pch)) digit = *pch - L'0';
1086 else if (L'a' <= *pch && *pch <= L'f') digit = *pch - L'a' + 10;
1087 else if (L'A' <= *pch && *pch <= L'F') digit = *pch - L'A' + 10;
1088 else break;
1089
1090 value *= 16;
1091 value += digit;
1092 ++pch;
1093 }
1094 isNegative = FALSE;
1095 }
1096 else
1097 {
1098 while (IS_DIGIT(*pch))
1099 {
1100 value *= 10;
1101 value += (*pch - L'0');
1102 ++pch;
1103 }
1104 }
1105
1106 if (pch == start)
1107 {
1108 if (lpiRet)
1109 *lpiRet = 0;
1110 return FALSE; // No data
1111 }
1112
1113 if (lpiRet)
1114 *lpiRet = isNegative ? -(LONGLONG)value : (LONGLONG)value;
1115
1116 return TRUE;
1117#else
1118 BOOL bNegative = FALSE;
1119 LONGLONG iRet = 0;
1120
1121 TRACE("(%s,%08X,%p)\n", debugstr_w(lpszStr), dwFlags, lpiRet);
1122
1123 if (!lpszStr || !lpiRet)
1124 {
1125 WARN("Invalid parameter would crash under Win32!\n");
1126 return FALSE;
1127 }
1128 if (dwFlags > STIF_SUPPORT_HEX) WARN("Unknown flags %08x\n", dwFlags);
1129
1130 /* Skip leading space, '+', '-' */
1131 while (isspaceW(*lpszStr)) lpszStr++;
1132
1133 if (*lpszStr == '-')
1134 {
1135 bNegative = TRUE;
1136 lpszStr++;
1137 }
1138 else if (*lpszStr == '+')
1139 lpszStr++;
1140
1141 if (dwFlags & STIF_SUPPORT_HEX &&
1142 *lpszStr == '0' && tolowerW(lpszStr[1]) == 'x')
1143 {
1144 /* Read hex number */
1145 lpszStr += 2;
1146
1147 if (!isxdigitW(*lpszStr))
1148 return FALSE;
1149
1150 while (isxdigitW(*lpszStr))
1151 {
1152 iRet = iRet * 16;
1153 if (isdigitW(*lpszStr))
1154 iRet += (*lpszStr - '0');
1155 else
1156 iRet += 10 + (tolowerW(*lpszStr) - 'a');
1157 lpszStr++;
1158 }
1159 *lpiRet = iRet;
1160 return TRUE;
1161 }
1162
1163 /* Read decimal number */
1164 if (!isdigitW(*lpszStr))
1165 return FALSE;
1166
1167 while (isdigitW(*lpszStr))
1168 {
1169 iRet = iRet * 10;
1170 iRet += (*lpszStr - '0');
1171 lpszStr++;
1172 }
1173 *lpiRet = bNegative ? -iRet : iRet;
1174 return TRUE;
1175#endif
1176}
#define L(x)
Definition: resources.c:13
GLuint start
Definition: gl.h:1545
#define pch(ap)
Definition: match.c:418
#define IS_DIGIT(c)
uint64_t ULONGLONG
Definition: typedefs.h:67
#define tolowerW(n)
Definition: unicode.h:50
#define isxdigitW(n)
Definition: unicode.h:57
#define isspaceW(n)
Definition: unicode.h:58

◆ StrToIntA()

int WINAPI StrToIntA ( LPCSTR  lpszStr)

Definition at line 829 of file string.c.

830{
831#ifdef __REACTOS__
832 if (!lpszStr)
833 return 0;
834
835 INT result = 0;
836 BOOL isNegative = FALSE;
837
838 if (*lpszStr == '-')
839 {
840 isNegative = TRUE;
841 ++lpszStr;
842 }
843
844 while (IS_DIGIT(*lpszStr))
845 {
846 result *= 10;
847 result += (*lpszStr - '0');
848 ++lpszStr;
849 }
850
851 return isNegative ? -result : result;
852#else
853 int iRet = 0;
854
855 TRACE("(%s)\n", debugstr_a(lpszStr));
856
857 if (!lpszStr)
858 {
859 WARN("Invalid lpszStr would crash under Win32!\n");
860 return 0;
861 }
862
863 if (*lpszStr == '-' || isdigit(*lpszStr))
864 StrToIntExA(lpszStr, 0, &iRet);
865 return iRet;
866#endif
867}
BOOL WINAPI StrToIntExA(const char *str, DWORD flags, INT *ret)
Definition: string.c:960
GLuint64EXT * result
Definition: glext.h:11304

◆ StrToIntExA()

BOOL WINAPI StrToIntExA ( LPCSTR  lpszStr,
DWORD  dwFlags,
int lpiRet 
)

Definition at line 935 of file string.c.

936{
937 LONGLONG li;
938 BOOL bRes;
939
940 TRACE("(%s,%08X,%p)\n", debugstr_a(lpszStr), dwFlags, lpiRet);
941
942 bRes = StrToInt64ExA(lpszStr, dwFlags, &li);
943#ifdef __REACTOS__
944 if (lpiRet) *lpiRet = bRes ? (INT)li : 0;
945#else
946 if (bRes) *lpiRet = li;
947#endif
948 return bRes;
949}
BOOL WINAPI StrToInt64ExA(const char *str, DWORD flags, LONGLONG *ret)
Definition: string.c:834
LARGE_INTEGER li
Definition: fxtimerapi.cpp:235
#define INT
Definition: polytest.cpp:20

◆ StrToIntExW()

BOOL WINAPI StrToIntExW ( LPCWSTR  lpszStr,
DWORD  dwFlags,
int lpiRet 
)

Definition at line 1035 of file string.c.

1036{
1037 LONGLONG li;
1038 BOOL bRes;
1039
1040 TRACE("(%s,%08X,%p)\n", debugstr_w(lpszStr), dwFlags, lpiRet);
1041
1042 bRes = StrToInt64ExW(lpszStr, dwFlags, &li);
1043#ifdef __REACTOS__
1044 if (lpiRet) *lpiRet = bRes ? (INT)li : 0;
1045#else
1046 if (bRes) *lpiRet = li;
1047#endif
1048 return bRes;
1049}

◆ StrToIntW()

int WINAPI StrToIntW ( LPCWSTR  lpszStr)

Definition at line 874 of file string.c.

875{
876#ifdef __REACTOS__
877 if (!lpszStr)
878 return 0;
879
880 INT result = 0;
881 BOOL isNegative = FALSE;
882
883 if (*lpszStr == L'-')
884 {
885 isNegative = TRUE;
886 ++lpszStr;
887 }
888
889 while (IS_DIGIT(*lpszStr))
890 {
891 result *= 10;
892 result += (*lpszStr - L'0');
893 ++lpszStr;
894 }
895
896 return isNegative ? -result : result;
897#else
898 int iRet = 0;
899
900 TRACE("(%s)\n", debugstr_w(lpszStr));
901
902 if (!lpszStr)
903 {
904 WARN("Invalid lpszStr would crash under Win32!\n");
905 return 0;
906 }
907
908 if (*lpszStr == '-' || isdigitW(*lpszStr))
909 StrToIntExW(lpszStr, 0, &iRet);
910 return iRet;
911#endif
912}

◆ StrTrimA()

BOOL WINAPI StrTrimA ( LPSTR  lpszStr,
LPCSTR  lpszTrim 
)

Definition at line 1972 of file string.c.

1973{
1974 DWORD dwLen;
1975 LPSTR lpszRead = lpszStr;
1976 BOOL bRet = FALSE;
1977
1978 TRACE("(%s,%s)\n", debugstr_a(lpszStr), debugstr_a(lpszTrim));
1979
1980 if (lpszRead && *lpszRead)
1981 {
1982 while (*lpszRead && StrChrA(lpszTrim, *lpszRead))
1983 lpszRead = CharNextA(lpszRead); /* Skip leading matches */
1984
1985 dwLen = strlen(lpszRead);
1986
1987 if (lpszRead != lpszStr)
1988 {
1989 memmove(lpszStr, lpszRead, dwLen + 1);
1990 bRet = TRUE;
1991 }
1992 if (dwLen > 0)
1993 {
1994 lpszRead = lpszStr + dwLen;
1995 while (StrChrA(lpszTrim, lpszRead[-1]))
1996 lpszRead = CharPrevA(lpszStr, lpszRead); /* Skip trailing matches */
1997
1998 if (lpszRead != lpszStr + dwLen)
1999 {
2000 *lpszRead = '\0';
2001 bRet = TRUE;
2002 }
2003 }
2004 }
2005 return bRet;
2006}
LPSTR WINAPI CharPrevA(const char *start, const char *ptr)
Definition: string.c:1128

◆ StrTrimW()

BOOL WINAPI StrTrimW ( LPWSTR  lpszStr,
LPCWSTR  lpszTrim 
)

Definition at line 2013 of file string.c.

2014{
2015 DWORD dwLen;
2016 LPWSTR lpszRead = lpszStr;
2017 BOOL bRet = FALSE;
2018
2019 TRACE("(%s,%s)\n", debugstr_w(lpszStr), debugstr_w(lpszTrim));
2020
2021 if (lpszRead && *lpszRead)
2022 {
2023 while (*lpszRead && StrChrW(lpszTrim, *lpszRead)) lpszRead++;
2024
2025 dwLen = strlenW(lpszRead);
2026
2027 if (lpszRead != lpszStr)
2028 {
2029 memmove(lpszStr, lpszRead, (dwLen + 1) * sizeof(WCHAR));
2030 bRet = TRUE;
2031 }
2032 if (dwLen > 0)
2033 {
2034 lpszRead = lpszStr + dwLen;
2035 while (StrChrW(lpszTrim, lpszRead[-1]))
2036 lpszRead--; /* Skip trailing matches */
2037
2038 if (lpszRead != lpszStr + dwLen)
2039 {
2040 *lpszRead = '\0';
2041 bRet = TRUE;
2042 }
2043 }
2044 }
2045 return bRet;
2046}

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( shell  )

Variable Documentation

◆ shlwapi_hInstance

HINSTANCE shlwapi_hInstance
extern

Definition at line 33 of file shlwapi_main.c.

Referenced by DllMain(), SHLWAPI_WriteTimeClass(), and StrFormatByteSizeW().