ReactOS 0.4.16-dev-1484-g212a1a5
string.c File Reference
#include <stdarg.h>
#include "windef.h"
#include "winbase.h"
#include "winnls.h"
#include "shlwapi.h"
#include "winternl.h"
#include "kernelbase.h"
#include "wine/debug.h"
#include "wine/exception.h"
Include dependency graph for string.c:

Go to the source code of this file.

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (string)
 
static BOOL char_compare (WORD ch1, WORD ch2, DWORD flags)
 
int WINAPI lstrcmpA (LPCSTR str1, LPCSTR str2)
 
int WINAPI lstrcmpW (LPCWSTR str1, LPCWSTR str2)
 
int WINAPI lstrcmpiA (LPCSTR str1, LPCSTR str2)
 
int WINAPI lstrcmpiW (LPCWSTR str1, LPCWSTR str2)
 
LPSTR WINAPI KERNELBASE_lstrcpynA (LPSTR dst, LPCSTR src, INT n)
 
LPWSTR WINAPI KERNELBASE_lstrcpynW (LPWSTR dst, LPCWSTR src, INT n)
 
INT WINAPI KERNELBASE_lstrlenA (LPCSTR str)
 
INT WINAPI KERNELBASE_lstrlenW (LPCWSTR str)
 
DWORD WINAPI StrCmpCA (const char *str, const char *cmp)
 
DWORD WINAPI StrCmpCW (const WCHAR *str, const WCHAR *cmp)
 
DWORD WINAPI StrCmpICA (const char *str, const char *cmp)
 
DWORD WINAPI StrCmpICW (const WCHAR *str, const WCHAR *cmp)
 
DWORD WINAPI StrCmpNICA (const char *str, const char *cmp, DWORD len)
 
DWORD WINAPI StrCmpNICW (const WCHAR *str, const WCHAR *cmp, DWORD len)
 
char *WINAPI StrChrA (const char *str, WORD ch)
 
WCHAR *WINAPI StrChrW (const WCHAR *str, WCHAR ch)
 
char *WINAPI StrChrIA (const char *str, WORD ch)
 
WCHAR *WINAPI StrChrIW (const WCHAR *str, WCHAR ch)
 
WCHAR *WINAPI StrChrNW (const WCHAR *str, WCHAR ch, UINT max_len)
 
char *WINAPI StrDupA (const char *str)
 
WCHAR *WINAPI StrDupW (const WCHAR *str)
 
BOOL WINAPI ChrCmpIA (WORD ch1, WORD ch2)
 
BOOL WINAPI ChrCmpIW (WCHAR ch1, WCHAR ch2)
 
char *WINAPI StrStrA (const char *str, const char *search)
 
WCHAR *WINAPI StrStrW (const WCHAR *str, const WCHAR *search)
 
WCHAR *WINAPI StrStrNW (const WCHAR *str, const WCHAR *search, UINT max_len)
 
int WINAPI StrCmpNIA (const char *str, const char *cmp, int len)
 
WCHAR *WINAPI StrStrNIW (const WCHAR *str, const WCHAR *search, UINT max_len)
 
int WINAPI StrCmpNA (const char *str, const char *comp, int len)
 
int WINAPI StrCmpNW (const WCHAR *str, const WCHAR *comp, int len)
 
DWORD WINAPI StrCmpNCA (const char *str, const char *comp, int len)
 
DWORD WINAPI StrCmpNCW (const WCHAR *str, const WCHAR *comp, int len)
 
int WINAPI StrCmpNIW (const WCHAR *str, const WCHAR *comp, int len)
 
int WINAPI StrCmpW (const WCHAR *str, const WCHAR *comp)
 
int WINAPI StrCmpIW (const WCHAR *str, const WCHAR *comp)
 
WCHAR *WINAPI StrCpyNW (WCHAR *dst, const WCHAR *src, int count)
 
char *WINAPI StrStrIA (const char *str, const char *search)
 
WCHAR *WINAPI StrStrIW (const WCHAR *str, const WCHAR *search)
 
int WINAPI StrSpnA (const char *str, const char *match)
 
int WINAPI StrSpnW (const WCHAR *str, const WCHAR *match)
 
int WINAPI StrCSpnA (const char *str, const char *match)
 
int WINAPI StrCSpnW (const WCHAR *str, const WCHAR *match)
 
int WINAPI StrCSpnIA (const char *str, const char *match)
 
int WINAPI StrCSpnIW (const WCHAR *str, const WCHAR *match)
 
char *WINAPI StrRChrA (const char *str, const char *end, WORD ch)
 
WCHAR *WINAPI StrRChrW (const WCHAR *str, const WCHAR *end, WORD ch)
 
char *WINAPI StrRChrIA (const char *str, const char *end, WORD ch)
 
WCHAR *WINAPI StrRChrIW (const WCHAR *str, const WCHAR *end, WORD ch)
 
char *WINAPI StrRStrIA (const char *str, const char *end, const char *search)
 
WCHAR *WINAPI StrRStrIW (const WCHAR *str, const WCHAR *end, const WCHAR *search)
 
char *WINAPI StrPBrkA (const char *str, const char *match)
 
WCHAR *WINAPI StrPBrkW (const WCHAR *str, const WCHAR *match)
 
BOOL WINAPI StrTrimA (char *str, const char *trim)
 
BOOL WINAPI StrTrimW (WCHAR *str, const WCHAR *trim)
 
BOOL WINAPI StrToInt64ExA (const char *str, DWORD flags, LONGLONG *ret)
 
BOOL WINAPI StrToInt64ExW (const WCHAR *str, DWORD flags, LONGLONG *ret)
 
BOOL WINAPI StrToIntExA (const char *str, DWORD flags, INT *ret)
 
BOOL WINAPI StrToIntExW (const WCHAR *str, DWORD flags, INT *ret)
 
int WINAPI StrToIntA (const char *str)
 
int WINAPI StrToIntW (const WCHAR *str)
 
char *WINAPI StrCpyNXA (char *dst, const char *src, int len)
 
WCHAR *WINAPI StrCpyNXW (WCHAR *dst, const WCHAR *src, int len)
 
LPSTR WINAPI CharLowerA (char *str)
 
DWORD WINAPI CharLowerBuffA (char *str, DWORD len)
 
DWORD WINAPI CharLowerBuffW (WCHAR *str, DWORD len)
 
LPWSTR WINAPI CharLowerW (WCHAR *str)
 
LPSTR WINAPI CharNextA (const char *ptr)
 
LPSTR WINAPI CharNextExA (WORD codepage, const char *ptr, DWORD flags)
 
LPWSTR WINAPI CharNextW (const WCHAR *x)
 
LPSTR WINAPI CharPrevA (const char *start, const char *ptr)
 
LPSTR WINAPI CharPrevExA (WORD codepage, const char *start, const char *ptr, DWORD flags)
 
LPWSTR WINAPI CharPrevW (const WCHAR *start, const WCHAR *x)
 
LPSTR WINAPI CharUpperA (LPSTR str)
 
DWORD WINAPI CharUpperBuffA (LPSTR str, DWORD len)
 
DWORD WINAPI CharUpperBuffW (WCHAR *str, DWORD len)
 
LPWSTR WINAPI CharUpperW (WCHAR *str)
 
INT WINAPI DECLSPEC_HOTPATCH LoadStringW (HINSTANCE instance, UINT resource_id, LPWSTR buffer, INT buflen)
 
INT WINAPI DECLSPEC_HOTPATCH LoadStringA (HINSTANCE instance, UINT resource_id, LPSTR buffer, INT buflen)
 
int WINAPI StrCmpLogicalW (const WCHAR *str, const WCHAR *comp)
 
BOOL WINAPI StrIsIntlEqualA (BOOL case_sensitive, const char *str, const char *cmp, int len)
 
BOOL WINAPI StrIsIntlEqualW (BOOL case_sensitive, const WCHAR *str, const WCHAR *cmp, int len)
 
char *WINAPI StrCatBuffA (char *str, const char *cat, INT max_len)
 
WCHAR *WINAPI StrCatBuffW (WCHAR *str, const WCHAR *cat, INT max_len)
 
DWORD WINAPI StrCatChainW (WCHAR *str, DWORD max_len, DWORD at, const WCHAR *cat)
 
DWORD WINAPI SHTruncateString (char *str, DWORD size)
 
HRESULT WINAPI SHLoadIndirectString (const WCHAR *src, WCHAR *dst, UINT dst_len, void **reserved)
 

Function Documentation

◆ char_compare()

static BOOL char_compare ( WORD  ch1,
WORD  ch2,
DWORD  flags 
)
static

Definition at line 33 of file string.c.

34{
35 char str1[3], str2[3];
36
37 str1[0] = LOBYTE(ch1);
38 if (IsDBCSLeadByte(str1[0]))
39 {
40 str1[1] = HIBYTE(ch1);
41 str1[2] = '\0';
42 }
43 else
44 str1[1] = '\0';
45
46 str2[0] = LOBYTE(ch2);
47 if (IsDBCSLeadByte(str2[0]))
48 {
49 str2[1] = HIBYTE(ch2);
50 str2[2] = '\0';
51 }
52 else
53 str2[1] = '\0';
54
55 return CompareStringA(GetThreadLocale(), flags, str1, -1, str2, -1) - CSTR_EQUAL;
56}
LCID WINAPI GetThreadLocale(void)
Definition: locale.c:2803
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
GLbitfield flags
Definition: glext.h:7161
#define LOBYTE(W)
Definition: jmemdos.c:487
#define HIBYTE(W)
Definition: jmemdos.c:486
#define CSTR_EQUAL
Definition: winnls.h:476

Referenced by ChrCmpIA(), StrChrA(), and StrRChrA().

◆ CharLowerA()

LPSTR WINAPI CharLowerA ( char str)

Definition at line 1043 of file string.c.

1044{
1045 if (IS_INTRESOURCE(str))
1046 {
1047 char ch = LOWORD(str);
1048 CharLowerBuffA( &ch, 1 );
1049 return (LPSTR)(UINT_PTR)(BYTE)ch;
1050 }
1051
1052 __TRY
1053 {
1055 }
1057 {
1059 return NULL;
1060 }
1061 __ENDTRY
1062 return str;
1063}
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
#define NULL
Definition: types.h:112
#define ERROR_INVALID_PARAMETER
Definition: compat.h:101
#define SetLastError(x)
Definition: compat.h:752
#define __TRY
Definition: compat.h:80
#define __ENDTRY
Definition: compat.h:82
#define __EXCEPT_PAGE_FAULT
Definition: compat.h:81
#define IS_INTRESOURCE(x)
Definition: loader.c:613
DWORD WINAPI CharLowerBuffA(char *str, DWORD len)
Definition: string.c:1065
unsigned __int3264 UINT_PTR
Definition: mstsclib_h.h:274
#define LOWORD(l)
Definition: pedump.c:82
const WCHAR * str
char * LPSTR
Definition: xmlstorage.h:182
unsigned char BYTE
Definition: xxhash.c:193

Referenced by CharLowerTest(), ComboWndProc_common(), and extract_test_proc().

◆ CharLowerBuffA()

DWORD WINAPI CharLowerBuffA ( char str,
DWORD  len 
)

Definition at line 1065 of file string.c.

1066{
1067 DWORD lenW;
1068 WCHAR buffer[32];
1069 WCHAR *strW = buffer;
1070
1071 if (!str) return 0; /* YES */
1072
1073 lenW = MultiByteToWideChar(CP_ACP, 0, str, len, NULL, 0);
1074 if (lenW > ARRAY_SIZE(buffer))
1075 {
1076 strW = HeapAlloc(GetProcessHeap(), 0, lenW * sizeof(WCHAR));
1077 if (!strW) return 0;
1078 }
1079 MultiByteToWideChar(CP_ACP, 0, str, len, strW, lenW);
1080 CharLowerBuffW(strW, lenW);
1081 len = WideCharToMultiByte(CP_ACP, 0, strW, lenW, str, len, NULL, NULL);
1082 if (strW != buffer) HeapFree(GetProcessHeap(), 0, strW);
1083 return len;
1084}
#define ARRAY_SIZE(A)
Definition: main.h:20
#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 WideCharToMultiByte
Definition: compat.h:111
#define MultiByteToWideChar
Definition: compat.h:110
DWORD WINAPI CharLowerBuffW(WCHAR *str, DWORD len)
Definition: string.c:1086
unsigned long DWORD
Definition: ntddk_ex.h:95
GLuint buffer
Definition: glext.h:5915
GLenum GLsizei len
Definition: glext.h:6722
WCHAR strW[12]
Definition: clipboard.c:2025
__wchar_t WCHAR
Definition: xmlstorage.h:180

Referenced by CharLowerA(), ATL::ChTraitsCRT< char >::MakeLower(), and test_ExtractAssociatedIcon().

◆ CharLowerBuffW()

DWORD WINAPI CharLowerBuffW ( WCHAR str,
DWORD  len 
)

Definition at line 1086 of file string.c.

1087{
1088 if (!str) return 0; /* YES */
1090}
INT WINAPI LCMapStringW(LCID lcid, DWORD flags, LPCWSTR src, INT srclen, LPWSTR dst, INT dstlen)
Definition: locale.c:3808
#define LOCALE_USER_DEFAULT
#define LCMAP_LOWERCASE
Definition: winnls.h:197

Referenced by CharLowerBuffA(), CharLowerW(), EDIT_EM_ReplaceSel(), and ATL::ChTraitsCRT< _CharType >::MakeLower().

◆ CharLowerW()

◆ CharNextA()

◆ CharNextExA()

LPSTR WINAPI CharNextExA ( WORD  codepage,
const char ptr,
DWORD  flags 
)

Definition at line 1114 of file string.c.

1115{
1116 if (!*ptr) return (LPSTR)ptr;
1117 if (IsDBCSLeadByteEx( codepage, ptr[0] ) && ptr[1]) return (LPSTR)(ptr + 2);
1118 return (LPSTR)(ptr + 1);
1119}
BOOL WINAPI IsDBCSLeadByteEx(UINT codepage, BYTE testchar)
Definition: locale.c:2106
int codepage
Definition: win_iconv.c:156

Referenced by CharPrevExA(), testCharNext(), testStatCharNext(), and testStatCodePageCharNext().

◆ CharNextW()

LPWSTR WINAPI CharNextW ( const WCHAR x)

Definition at line 1121 of file string.c.

1122{
1123 if (*x) x++;
1124
1125 return (WCHAR *)x;
1126}
GLint GLint GLint GLint GLint x
Definition: gl.h:1548

Referenced by _CopyAndUnquoteText(), _FindFirstField(), _FindNextArg(), SHELL_StripIllegalFsNameCharacters(), testCharNext(), and testStatCharNext().

◆ CharPrevA()

LPSTR WINAPI CharPrevA ( const char start,
const char ptr 
)

Definition at line 1128 of file string.c.

1129{
1130 while (*start && (start < ptr))
1131 {
1133 if (next >= ptr) break;
1134 start = next;
1135 }
1136 return (LPSTR)start;
1137}
LPSTR WINAPI CharNextA(const char *ptr)
Definition: string.c:1107
GLuint start
Definition: gl.h:1545
static unsigned __int64 next
Definition: rand_nt.c:6
const char * LPCSTR
Definition: xmlstorage.h:183

Referenced by myPathRemoveBackslashA(), PathRemoveArgsA(), PathRemoveBackslashA(), StrTrimA(), testCharPrev(), testCharPrevA(), and testStatCharPrev().

◆ CharPrevExA()

LPSTR WINAPI CharPrevExA ( WORD  codepage,
const char start,
const char ptr,
DWORD  flags 
)

Definition at line 1139 of file string.c.

1140{
1141 while (*start && (start < ptr))
1142 {
1144 if (next >= ptr) break;
1145 start = next;
1146 }
1147 return (LPSTR)start;
1148}
LPSTR WINAPI CharNextExA(WORD codepage, const char *ptr, DWORD flags)
Definition: string.c:1114

Referenced by testCharPrev(), testCharPrevA(), testStatCharPrev(), and testStatCodePageCharPrev().

◆ CharPrevW()

LPWSTR WINAPI CharPrevW ( const WCHAR start,
const WCHAR x 
)

Definition at line 1150 of file string.c.

1151{
1152 if (x > start) return (LPWSTR)(x - 1);
1153 else return (LPWSTR)x;
1154}

Referenced by _CopyAndUnquoteText(), PathQualifyExW(), testCharPrev(), testCharPrevW(), and testStatCharPrev().

◆ CharUpperA()

LPSTR WINAPI CharUpperA ( LPSTR  str)

Definition at line 1156 of file string.c.

1157{
1158 if (IS_INTRESOURCE(str))
1159 {
1160 char ch = LOWORD(str);
1161 CharUpperBuffA(&ch, 1);
1162 return (LPSTR)(UINT_PTR)(BYTE)ch;
1163 }
1164
1165 __TRY
1166 {
1168 }
1170 {
1172 return NULL;
1173 }
1174 __ENDTRY
1175 return str;
1176}
DWORD WINAPI CharUpperBuffA(LPSTR str, DWORD len)
Definition: string.c:1178

Referenced by CharUpperTest(), ComboWndProc_common(), MD_GetNotifyCode(), MD_msgdump(), and MD_msgresult().

◆ CharUpperBuffA()

DWORD WINAPI CharUpperBuffA ( LPSTR  str,
DWORD  len 
)

Definition at line 1178 of file string.c.

1179{
1180 DWORD lenW;
1181 WCHAR buffer[32];
1182 WCHAR *strW = buffer;
1183
1184 if (!str) return 0; /* YES */
1185
1186 lenW = MultiByteToWideChar(CP_ACP, 0, str, len, NULL, 0);
1187 if (lenW > ARRAY_SIZE(buffer))
1188 {
1189 strW = HeapAlloc(GetProcessHeap(), 0, lenW * sizeof(WCHAR));
1190 if (!strW) return 0;
1191 }
1192 MultiByteToWideChar(CP_ACP, 0, str, len, strW, lenW);
1193 CharUpperBuffW(strW, lenW);
1194 len = WideCharToMultiByte(CP_ACP, 0, strW, lenW, str, len, NULL, NULL);
1195 if (strW != buffer) HeapFree(GetProcessHeap(), 0, strW);
1196 return len;
1197}
DWORD WINAPI CharUpperBuffW(WCHAR *str, DWORD len)
Definition: string.c:1199

Referenced by CharUpperA(), and ATL::ChTraitsCRT< char >::MakeUpper().

◆ CharUpperBuffW()

DWORD WINAPI CharUpperBuffW ( WCHAR str,
DWORD  len 
)

◆ CharUpperW()

LPWSTR WINAPI CharUpperW ( WCHAR str)

Definition at line 1205 of file string.c.

1206{
1207 if (!IS_INTRESOURCE(str))
1208 {
1210 return str;
1211 }
1212 else
1213 {
1214 WCHAR ch = LOWORD(str);
1215 CharUpperBuffW(&ch, 1);
1216 return (LPWSTR)(UINT_PTR)ch;
1217 }
1218}

Referenced by COMBO_WindowProc(), ComboWndProc_common(), DIALOG_DlgDirListW(), InatCreateIconBySize(), MSI_InstallPackage(), str_dup_upper(), test_SetTargetComputer(), and testFmtId().

◆ ChrCmpIA()

BOOL WINAPI ChrCmpIA ( WORD  ch1,
WORD  ch2 
)

Definition at line 334 of file string.c.

335{
336 TRACE("%#x, %#x\n", ch1, ch2);
337
338 return char_compare(ch1, ch2, NORM_IGNORECASE);
339}
static BOOL char_compare(WORD ch1, WORD ch2, DWORD flags)
Definition: string.c:33
#define TRACE(s)
Definition: solgame.cpp:4
#define NORM_IGNORECASE
Definition: winnls.h:187

Referenced by StrChrIA(), StrRChrIA(), and StrRStrIA().

◆ ChrCmpIW()

BOOL WINAPI ChrCmpIW ( WCHAR  ch1,
WCHAR  ch2 
)

Definition at line 341 of file string.c.

342{
343 return CompareStringW(GetThreadLocale(), NORM_IGNORECASE, &ch1, 1, &ch2, 1) - CSTR_EQUAL;
344}
INT WINAPI CompareStringW(LCID lcid, DWORD flags, LPCWSTR str1, INT len1, LPCWSTR str2, INT len2)
Definition: locale.c:4017

Referenced by CAutoComplete::DoAutoAppend(), StrCmpLogicalW(), StrRChrIW(), StrRStrIW(), url_guess_scheme(), and URL_GuessScheme().

◆ KERNELBASE_lstrcpynA()

LPSTR WINAPI KERNELBASE_lstrcpynA ( LPSTR  dst,
LPCSTR  src,
INT  n 
)

Definition at line 90 of file string.c.

91{
92 /* Note: this function differs from the UNIX strncpy, it _always_ writes
93 * a terminating \0.
94 *
95 * Note: n is an INT but Windows treats it as unsigned, and will happily
96 * copy a gazillion chars if n is negative.
97 */
98 __TRY
99 {
100 LPSTR d = dst;
101 LPCSTR s = src;
102 UINT count = n;
103
104 while ((count > 1) && *s)
105 {
106 count--;
107 *d++ = *s++;
108 }
109 if (count) *d = 0;
110 }
112 {
114 return 0;
115 }
117 return dst;
118}
GLuint GLuint GLsizei count
Definition: gl.h:1545
GLdouble s
Definition: gl.h:2039
GLdouble n
Definition: glext.h:7729
GLenum src
Definition: glext.h:6340
GLenum GLenum dst
Definition: glext.h:6340
#define d
Definition: ke_i.h:81
unsigned int UINT
Definition: ndis.h:50

◆ KERNELBASE_lstrcpynW()

LPWSTR WINAPI KERNELBASE_lstrcpynW ( LPWSTR  dst,
LPCWSTR  src,
INT  n 
)

Definition at line 120 of file string.c.

121{
122 /* Note: this function differs from the UNIX strncpy, it _always_ writes
123 * a terminating \0
124 *
125 * Note: n is an INT but Windows treats it as unsigned, and will happily
126 * copy a gazillion chars if n is negative.
127 */
128 __TRY
129 {
130 LPWSTR d = dst;
131 LPCWSTR s = src;
132 UINT count = n;
133
134 while ((count > 1) && *s)
135 {
136 count--;
137 *d++ = *s++;
138 }
139 if (count) *d = 0;
140 }
142 {
144 return 0;
145 }
147 return dst;
148}
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185

◆ KERNELBASE_lstrlenA()

INT WINAPI KERNELBASE_lstrlenA ( LPCSTR  str)

Definition at line 150 of file string.c.

151{
152 INT ret;
153 __TRY
154 {
155 ret = strlen(str);
156 }
158 {
160 return 0;
161 }
163 return ret;
164}
return ret
Definition: mutex.c:146
int32_t INT
Definition: typedefs.h:58

◆ KERNELBASE_lstrlenW()

INT WINAPI KERNELBASE_lstrlenW ( LPCWSTR  str)

Definition at line 166 of file string.c.

167{
168 INT ret;
169 __TRY
170 {
171 ret = wcslen(str);
172 }
174 {
176 return 0;
177 }
179 return ret;
180}
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)

◆ LoadStringA()

INT WINAPI DECLSPEC_HOTPATCH LoadStringA ( HINSTANCE  instance,
UINT  resource_id,
LPSTR  buffer,
INT  buflen 
)

Definition at line 1263 of file string.c.

1264{
1265 DWORD retval = 0;
1266 HGLOBAL hmem;
1267 HRSRC hrsrc;
1268
1269 TRACE("instance = %p, id = %04x, buffer = %p, length = %d\n", instance, resource_id, buffer, buflen);
1270
1271 if (!buflen) return -1;
1272
1273 /* Use loword (incremented by 1) as resourceid */
1274 if ((hrsrc = FindResourceW(instance, MAKEINTRESOURCEW((LOWORD(resource_id) >> 4) + 1), (LPWSTR)RT_STRING )) &&
1275 (hmem = LoadResource(instance, hrsrc)))
1276 {
1277 const WCHAR *p = LockResource(hmem);
1278 unsigned int id = resource_id & 0x000f;
1279
1280 while (id--) p += *p + 1;
1281
1282 RtlUnicodeToMultiByteN(buffer, buflen - 1, &retval, p + 1, *p * sizeof(WCHAR));
1283 }
1284 buffer[retval] = 0;
1285 TRACE("returning %s\n", debugstr_a(buffer));
1286 return retval;
1287}
static HINSTANCE instance
Definition: main.c:40
HRSRC WINAPI FindResourceW(HINSTANCE hModule, LPCWSTR name, LPCWSTR type)
Definition: res.c:176
LPVOID WINAPI LockResource(HGLOBAL handle)
Definition: res.c:550
HGLOBAL WINAPI LoadResource(HINSTANCE hModule, HRSRC hRsrc)
Definition: res.c:532
GLfloat GLfloat p
Definition: glext.h:8902
#define debugstr_a
Definition: kernel32.h:31
_Use_decl_annotations_ NTSTATUS NTAPI RtlUnicodeToMultiByteN(_Out_ PCHAR MbString, _In_ ULONG MbSize, _Out_opt_ PULONG ResultSize, _In_ PCWCH UnicodeString, _In_ ULONG UnicodeSize)
Definition: nlsboot.c:107
#define RT_STRING
Definition: pedump.c:368
int retval
Definition: wcstombs.cpp:91
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582

Referenced by DirectDrawEnumerateExA(), extract_rev_infos(), BtrfsContextMenu::GetCommandString(), GetPredefinedClipboardFormatName(), GetStateTextA(), HCR_GetClassNameA(), HTTPREQ_QueryOption(), ldap_err2stringA(), LoadResourceString(), mciGetErrorStringA(), PRINTDLG_UpdatePrinterInfoTextsA(), RetrieveClipboardFormatName(), run_tests(), ShellMessageBoxA(), test_LoadStringA(), UIINSERTOBJECTDLG_AddControl(), UIINSERTOBJECTDLG_BrowseFile(), WINHELP_CreateHelpWindow(), WINHELP_CreateIndexWindow(), WINHELP_GetOpenFileName(), WINHELP_GetWindowInfo(), and WINHELP_MessageBoxIDS_s().

◆ LoadStringW()

INT WINAPI DECLSPEC_HOTPATCH LoadStringW ( HINSTANCE  instance,
UINT  resource_id,
LPWSTR  buffer,
INT  buflen 
)

Definition at line 1220 of file string.c.

1221{
1222 int string_num, i;
1223 HGLOBAL hmem;
1224 HRSRC hrsrc;
1225 WCHAR *p;
1226
1227 TRACE("instance = %p, id = %04x, buffer = %p, length = %d\n", instance, resource_id, buffer, buflen);
1228
1229 if (!buffer)
1230 return 0;
1231
1232 if (!(hrsrc = FindResourceW(instance, MAKEINTRESOURCEW((LOWORD(resource_id) >> 4) + 1), (LPWSTR)RT_STRING)) ||
1233 !(hmem = LoadResource(instance, hrsrc)))
1234 {
1235 TRACE( "Failed to load string.\n" );
1236 if (buflen > 0) buffer[0] = 0;
1237 return 0;
1238 }
1239
1240 p = LockResource(hmem);
1241 string_num = resource_id & 0x000f;
1242 for (i = 0; i < string_num; i++)
1243 p += *p + 1;
1244
1245 TRACE("strlen = %d\n", (int)*p );
1246
1247 /*if buflen == 0, then return a read-only pointer to the resource itself in buffer
1248 it is assumed that buffer is actually a (LPWSTR *) */
1249 if (buflen == 0)
1250 {
1251 *((LPWSTR *)buffer) = p + 1;
1252 return *p;
1253 }
1254
1255 i = min(buflen - 1, *p);
1256 memcpy(buffer, p + 1, i * sizeof(WCHAR));
1257 buffer[i] = 0;
1258
1259 TRACE("returning %s\n", debugstr_w(buffer));
1260 return i;
1261}
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
#define debugstr_w
Definition: kernel32.h:32
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
#define min(a, b)
Definition: monoChain.cc:55

Referenced by _CmdWndProc(), CBandSiteMenu::_CreateNewISFBand(), CFSDropTarget::_GetUniqueFileName(), _InsertMenuItemW(), _LoadResources(), _SetOperationTitle(), _SHGetDefaultValue(), _ShowContextMenu(), CBandSiteMenu::_ShowToolbarError(), About(), AboutDialogProc(), AboutDlgProc(), AckPageDlgProc(), ACTION_HandleStandardAction(), ActionDlg_OnBrowse(), add_cert_columns(), add_cert_to_list(), add_cert_to_view(), add_local_oid_text_to_control(), add_purpose_dlg_proc(), add_string_id_and_value_to_list(), add_string_resource_to_control(), add_string_resource_with_paraformat_to_control(), add_tb_button(), CUIFBalloonWindow::AddButton(), COpenWithMenu::AddChooseProgramItem(), AddColumns(), AddCustomItem(), AddDlg_OnCommand(), AddDlg_OnInitDialog(), AddEntryToList(), CMenuToolbarBase::AddPlaceholder(), CStartMenuBtnCtxMenu::AddStartContextMenuItems(), CDefaultContextMenu::AddStaticContextMenusToMenu(), AddTextButton(), AddToInputListView(), AddUserProfile(), AdvancedPageProc(), AdvProcDetailsDlgProc(), AffinityDialogWndProc(), AllocAndLoadString(), AllocAndLoadStringsCat(), AllSysInfo(), AppendMenuItems(), ApplicationPageOnNotify(), ApplicationPageWndProc(), ask_confirm(), ask_overwrite_value(), AskForReboot(), AVIBuildFilterW(), AVIFILE_LoadFile(), AVISaveOptionsUpdate(), BrFolder_NewFolder(), COpenWithDialog::Browse(), BrowseSelectedFolder(), build_systeminfo_tree(), BuildFilterStrings(), call_set_active_object(), CBindStatusCallback_UpdateProgress(), cert_mgr_do_remove(), CFn_WMCommand(), CFn_WMInitDialog(), ChangeListViewText(), ChangeRequiredButton(), check_printer_setup(), ChildWndProc(), CHSourceDlgProc(), CLBarInatItem::CLBarInatItem(), ClearEvents(), CommDlgProc(), ComputerPageDlgProc(), Confirm(), ConfirmDialog(), ConResPrintf(), ConResPuts(), ConSrvInitConsole(), Control_CreateListView(), Control_DoInterface(), Control_LoadApplet(), Control_WndProc(), CClassNode::ConvertResourceDescriptorToString(), CopyEventEntry(), CopyHardwareProfile(), CRAM_GetInfo(), CStartButton::Create(), create_listview_columns(), create_rebar(), create_show_list(), create_taskdialog_template(), CreateHelpDialogProc(), CreateListColumns(), CreateListView(), CreateListViewColumns(), CNewMenu::CreateNewFolder(), CreateNewKey(), CreateNewValue(), CreateRequirementsListColumns(), CreateResourceColumns(), CreateResourceListColumns(), CreateSendToDeskLink(), CreateSendToZip(), CreateStandardProfile(), CreateToolTipForButtons(), CreateTreeListColumns(), CreateVdmMenu(), CredDialogCreateBalloonTip(), CredDialogInit(), CredDialogShowCapsLockBalloon(), CredDialogShowIncorrectPasswordBalloon(), CRYPT_FormatAltNameEntry(), CRYPT_FormatAuthorityInfoAccess(), CRYPT_FormatBasicConstraints2(), CRYPT_FormatCertIssuer(), CRYPT_FormatCRLDistPoints(), CRYPT_FormatEnhancedKeyUsage(), CRYPT_FormatHexStringWithPrefix(), CRYPT_FormatKeyUsage(), CRYPT_FormatNetscapeCertType(), CRYPT_FormatReason(), CRYPT_FormatSpcFinancialCriteria(), CRYPT_FormatUserNotice(), CryptExtOpenCERW(), D3DTests(), DDEnumerateCallback(), DDTests(), default_page_paint_hook(), DeleteKey(), DelScheme(), DIALOG_AddFilterItem(), DIALOG_COPY_MOVE_DlgProc(), DIALOG_GoTo_DialogProc(), DIALOG_StatusBarUpdateEncoding(), DIALOG_StatusBarUpdateLineEndings(), DirectInputEnumDevCb(), DisplayError(), DisplayMessageV(), DisplayResourceText(), DisplayStatusMessage(), DisplayUsage(), dlg_invalid_portname(), dlg_nothingtoconfig(), dlg_port_already_exists(), dlg_win32error(), DlgInitHandler(), DlgProc(), do_error_dialog(), CMainWindow::DoCreate(), CMiniatureWindow::DoCreate(), CPaintToolBar::DoCreate(), CDefaultContextMenu::DoCreateNewFolder(), DoLoadStrings(), DoSetPriority(), DoUnlock(), download_proc(), DrawNCPreview(), DrawTextFromResource(), DriverDetailsDlgProc(), DrivesContextMenuCallback(), DSEnumCallback(), EditDlg_OnCommand(), EnumerateServiceProviders(), EnumEventsThread(), EnumThemeColors(), EnumThemeSizes(), error(), error_code_messagebox(), error_exit(), EventDetailsCtrl(), EventLogPropProc(), events_OnOverwrite(), CTrayWindow::ExecResourceCmd(), export_file_dlg_proc(), export_finish_dlg_proc(), export_password_mismatch(), export_private_key_dlg_proc(), export_validate_filename(), export_welcome_dlg_proc(), ExportRegistryFile(), failure_msgbox(), FD31_MapOfnStructA(), field_format_public_key(), file_dlg_proc(), FileDialog_constructor(), FILEDLG95_InitControls(), FILEDLG95_OnOpen(), FILEDLG95_OnOpenMessage(), FILEDLG95_OnOpenMultipleFiles(), FileTypesDlg_Initialize(), FileTypesDlg_InitListView(), fill_language_information(), FillCharacterSetComboList(), FillGroupByComboList(), FillResolutionsAndColors(), FillServerAddressCombo(), CMenuSFToolbar::FillToolbar(), FindNextMessageBox(), FinishDlgProc(), FolderBrowseCallback(), FontTypeChange(), FormatByteSize(), FormatDlgProcWorker(), FormatMessageBox(), FormatString(), FormatVerisignExtension(), GeneralPropertyPageLocalesEnumProc(), get_cert_usages(), get_descriptors(), get_print_file_filter(), get_unique_folder_name(), get_vbscript_string(), GetAddressBarAccessKey(), CAddressBand::GetBandInfo(), CSearchBar::GetBandInfo(), BtrfsContextMenu::GetCommandString(), CCabFolder::GetDetailsOf(), GetDeviceDisplayInfo(), CDrivesFolder::GetDisplayNameOf(), GetDriveNameWithLetter(), GetEventMessage(), GetEventType(), GetExtensionDefaultDescription(), GetFriendlyVerb(), GetInfo(), GetInterfaceType(), GetInterruptType(), GetLayoutName(), GetMemoryAccess(), GetNextString(), GetPortType(), GetPredefinedClipboardFormatName(), GetProfileName(), GetResourceType(), GetRoleTextW(), GetShareDisposition(), GetStateTextW(), GetThemeDocumentationProperty(), CTravelLog::GetToolTipText(), GetUName(), GetUniqueConnectionName(), Ghost_OnClose(), Ghost_OnCreate(), HCR_GetClassNameW(), HelpContext(), HH_LoadString(), HOTKEY_NCCreate(), HTMLWindow2_alert(), HTMLWindow2_confirm(), ICCVID_GetInfo(), icm_choose_compressor_dlgproc(), IFileDialog2_fnSetOptions(), ImageView_Main(), import_finish_dlg_proc(), import_store_dlg_proc(), import_validate_filename(), import_warning(), import_welcome_dlg_proc(), ImportRegistryFile(), CCompButtonFrameWindow::Init(), CDefCompFrameWindow::Init(), COpenWithDialog::Init(), init_columns(), init_listview_columns(), init_oid_info(), InitAudioDlg(), CDrvDefExt::InitGeneralPage(), CFileDefExt::InitGeneralPage(), initialize_purpose_selection(), InitializeDialog(), InitializeFormatDriveDlg(), InitializeLANStatusUiDlg(), InitializeListView(), InitializeProfiles(), InitializeProgramFilesDir(), InitializeRecycleBinDlg(), InitializeSystemPage(), InitializeTcpipAdvancedIpDlg(), InitializeTcpipAdvancedOptDlg(), InitInstance(), InitListViewColumns(), CLBarInatItem::InitMenu(), CFileDefExt::InitMultifilePageThread(), CFileDefExt::InitOpensWithField(), InitPropertiesDlg(), InitSystemUptime(), InitUnitsSysCB(), InitUtilsList(), InitVolumeControls(), InputPageInitListViewColumns(), InsertColumnToListView(), InsertDefaultClusterSizeForFs(), InsertIpAddressToListView(), CModalMenu::InsertItem(), InsertItemToListView(), InsertMenuItem(), CMainWindow::InsertSelectionFromHBITMAP(), CNewMenu::InsertShellNewItems(), InsertTabCtrlItem(), Internal_EnumSystemLanguageGroups(), InternetGetConnectedStateExW(), CSearchBar::Invoke(), IPersistFile_fnLoad(), IShellBrowserImpl_ICommDlgBrowser_OnStateChange(), LANStatusUiAdvancedDlg(), LaunchAdvancedTcpipSettings(), ldap_err2stringW(), ListWndNotifyProc(), load_mui_string(), load_str(), load_string(), LoadAllocStringW(), LoadBoard(), LoadClipboardFromFile(), LoadDialogCtrls(), LoadHive(), LoadRecoveryOptions(), LoadResourceString(), LoadResourceStringEx(), LoadSoundFiles(), ATL::CComBSTR::LoadString(), LoadStringWrapW(), LocaleDlgProc(), LocalesEnumProc(), LV_OnDelete(), MACRO_About(), MAIN_MessageBoxIDS(), MAIN_MessageBoxIDS_s(), MainProc(), MainWnd_OnAbout(), MainWnd_OnClose(), MainWnd_OnCreate(), MainWnd_OnExport(), MainWnd_OnImport(), MainWnd_OnOpenRegKey(), MainWndCommand(), make_export_file_filter(), make_import_file_filter(), MAPISendMail(), MAPISendMailW(), MB_GetString(), MCI_GetCommandTable(), MCI_GetDevTypeFromResource(), MCI_HandleReturnValues(), MCI_Open(), MCI_SysInfo(), mciGetErrorStringW(), MDI_RefreshMenu(), MenuHelp(), midiOutGetErrorTextW(), modify_binary_dlgproc(), modify_dword_dlgproc(), modify_multi_string_dlgproc(), modify_string_dlgproc(), MONTHCAL_PaintTodayTitle(), MONTHCAL_RButtonUp(), MoreOptDlgProc(), MouseOnDialogInit(), msi_get_error_message(), NetIDPage_OnInitDialog(), NetworkDlg_OnInitDialog(), NetworkDlg_OnOK(), NetworkDomainPageDlgProc(), newfile_proc(), oid_init_localizednames(), OleUIAddVerbMenuW(), on_default_action(), OnAbout(), OnChooseOption(), OnCommand(), CMainWindow::OnCommand(), OnCreate(), OnGetDispInfo(), CShellLink::OnInitDialog(), OnInitDialog(), OnInitSecurityDlg(), OnMainCreate(), CInternetToolbar::OnMenuDropDown(), OnMenuSelect(), OnProfileTypeInit(), OnResolutionChanged(), OnTimer(), CAddressBand::OnTipText(), OSK_About(), OSK_Paint(), OSK_SetText(), output_error(), output_message(), output_value(), OwnerPageDlgProc(), pagesetup_common(), PanelOnCreate(), paraformat_proc(), ParseResources(), pCDevSettings_GetMonitorName(), PerfDataRefresh(), PerformancePageRefreshThread(), PerformRegAction(), PickIconProc(), Preview_ToggleSlideShowEx(), Preview_UpdateTitle(), PrintAllJobs(), PRINTDLG_UpdatePrintDlgA(), PRINTDLG_UpdatePrintDlgW(), PRINTDLG_UpdatePrinterInfoTextsW(), PrintErrorMsgBox(), PrintJobDetails(), printm(), PrintMemory(), PrintResourceString(), PrintResString(), PrintRow(), ProcessorDlgProc(), ProcessPage_OnDebug(), ProcessPage_OnEndProcess(), ProcessPage_OnEndProcessTree(), ProcessPage_OnSetAffinity(), ProductPageDlgProc(), prompt_dlgproc(), promptdisk_init(), PROPSHEET_CollectPageInfo(), PROPSHEET_DialogProc(), PROPSHEET_Paint(), PROPSHEET_SetTitleW(), CNewMenu::QueryContextMenu(), COpenWithMenu::QueryContextMenu(), RControlService(), ReadString(), RegisterDialogClasses(), RenameHardwareProfile(), ResourceMessageBox(), RetrieveClipboardFormatName(), RSetServiceStatus(), RtlLoadUnicodeString(), RunDlgProc(), SafeRemovalDlgProc(), SafeRemoveDevice(), SaveClipboardToFile(), SaveColumnSettings(), SaveSettings(), ScmLoadService(), ScmStopThread(), select_cert_dlg_proc(), select_store_dlg_proc(), SelectNode(), set_default_templates(), set_margin_groupbox_title(), set_status(), set_status_text(), set_statustext(), SetDeviceDetails(), SetFileInfo(), SetFontStylesToCombo2(), SetKeyboardLayoutName(), SetLockMessage(), SetMacro(), CTrayIconWnd::SetMainIcon(), SetTimeZoneName(), SetUserLocaleName(), SetWindowResourceText(), SetWindowResPrintfVW(), SetWindowResTextW(), SH_FormatByteSize(), SHELL32_AssocGetFSDirectoryDescription(), SHELL32_PropertySheet(), SHELL_ConfirmDialogW(), SHELL_ErrorBoxHelper(), ShellAboutW(), ShellExecCmdLine(), ShellMessageBoxA(), ShellMessageBoxW(), ShellMessageBoxWrapW(), SHLoadIndirectString(), SHLWAPI_WriteTimeClass(), show_export_details(), show_import_details(), ShowAboutBox(), ShowAboutDlg(), ShowCreateShortcutWizard(), ShowErrorTip(), ShowItemError(), ShowNetworkIconContextMenu(), ShowStepError(), ShowUsage(), ShutdownOnInit(), SoundsDlgProc(), StartD3DTest(), StartDDTest(), StartDlgProc(), StartInstaller(), StartShell(), StartWithDesktop(), StatusMessageWindowProc(), STDMETHODIMP_(), StrFormatByteSizeW(), STRING_LoadStrings(), SyncNTPStatusInit(), taskdialog_gettext(), taskkill_message(), taskkill_message_printfW(), TaskManager_OnFileNew(), TaskManager_OnMenuSelect(), TaskManager_OnTabWndSelChange(), TcpipAddDNSDlg(), TcpipAddIpDlg(), TcpipAddSuffixDlg(), TcpipAdvancedDnsDlg(), TcpipAdvancedIpDlg(), TcpipAdvGwDlg(), TcpipFilterPortDlg(), test_LoadStringW(), ThemePageDlgProc(), throw_error(), toggle_num_pages(), TOOLBAR_AddStringW(), TOOLBAR_CustomizeDialogProc(), TOOLTIPS_GetDispInfoA(), TOOLTIPS_GetDispInfoW(), TOOLTIPS_GetTipText(), TrayIcon_Update(), TreeWndNotifyProc(), UIINSERTOBJECTDLG_AddControl(), UIINSERTOBJECTDLG_SelChange(), UIINSERTOBJECTDLG_SelectCreateFromFile(), UManStartDlg(), UnloadHive(), update_counter(), update_preview_statusbar(), update_result_text(), update_security_level(), update_zone_info(), UpdateColumnDataHints(), CFileDefExt::UpdateDirStatsResults(), UpdateKeySettingsListView(), UpdateLanStatusUiDlg(), UpdateSelection(), UpdateShutdownDesc(), CDefView::UpdateStatusbar(), CDefView::UpdateStatusbarLocation(), UpdateUsersShellFolderSettings(), UpdateVdmMenuDisks(), UpdateVdmMenuMouse(), UXTHEME_FormatLocalMsg(), Volume_Init(), Volume_Update(), warning(), waveOutGetErrorTextW(), WelcomeDlgProc(), WhoamiLoadRcString(), WININET_InvalidCertificateDialog(), Winver_FormatCompatInfo(), Winver_GetFormattedSpkInfo(), wmain(), WndProc(), wnetInit(), WriteComputerSettings(), WriteDateTimeSettings(), WriteDefaultLogonData(), wWinMain(), XCOPY_LoadMessage(), and ZoomWnd_OnDraw().

◆ lstrcmpA()

int WINAPI lstrcmpA ( LPCSTR  str1,
LPCSTR  str2 
)

Definition at line 58 of file string.c.

59{
60 if (!str1 && !str2) return 0;
61 if (!str1) return -1;
62 if (!str2) return 1;
63 return CompareStringA( GetThreadLocale(), LOCALE_USE_CP_ACP, str1, -1, str2, -1 ) - 2;
64}
#define LOCALE_USE_CP_ACP
Definition: winnls.h:20

Referenced by StrCmpCA(), and strcomparefunc().

◆ lstrcmpiA()

int WINAPI lstrcmpiA ( LPCSTR  str1,
LPCSTR  str2 
)

Definition at line 74 of file string.c.

75{
76 if (!str1 && !str2) return 0;
77 if (!str1) return -1;
78 if (!str2) return 1;
79 return CompareStringA( GetThreadLocale(), NORM_IGNORECASE|LOCALE_USE_CP_ACP, str1, -1, str2, -1 ) - 2;
80}

Referenced by StrCmpICA().

◆ lstrcmpiW()

int WINAPI lstrcmpiW ( LPCWSTR  str1,
LPCWSTR  str2 
)

Definition at line 82 of file string.c.

83{
84 if (!str1 && !str2) return 0;
85 if (!str1) return -1;
86 if (!str2) return 1;
87 return CompareStringW( GetThreadLocale(), NORM_IGNORECASE, str1, -1, str2, -1 ) - 2;
88}

Referenced by StrCmpICW().

◆ lstrcmpW()

int WINAPI lstrcmpW ( LPCWSTR  str1,
LPCWSTR  str2 
)

Definition at line 66 of file string.c.

67{
68 if (!str1 && !str2) return 0;
69 if (!str1) return -1;
70 if (!str2) return 1;
71 return CompareStringW( GetThreadLocale(), 0, str1, -1, str2, -1 ) - 2;
72}

Referenced by StrCmpCW(), and test_wcscpy_s().

◆ SHLoadIndirectString()

HRESULT WINAPI SHLoadIndirectString ( const WCHAR src,
WCHAR dst,
UINT  dst_len,
void **  reserved 
)

Definition at line 1455 of file string.c.

1456{
1457 WCHAR *dllname = NULL;
1458 HMODULE hmod = NULL;
1459 HRESULT hr = E_FAIL;
1460
1461 TRACE("%s, %p, %#x, %p\n", debugstr_w(src), dst, dst_len, reserved);
1462
1463 if (src[0] == '@')
1464 {
1465 WCHAR *index_str;
1466 int index;
1467
1468 dst[0] = 0;
1469 dllname = StrDupW(src + 1);
1470 index_str = wcschr(dllname, ',');
1471
1472 if(!index_str) goto end;
1473
1474 *index_str = 0;
1475 index_str++;
1476 index = wcstol(index_str, NULL, 10);
1477
1478 hmod = LoadLibraryW(dllname);
1479 if (!hmod) goto end;
1480
1481 if (index < 0)
1482 {
1483 if (LoadStringW(hmod, -index, dst, dst_len))
1484 hr = S_OK;
1485 }
1486 else
1487 FIXME("can't handle non-negative indices (%d)\n", index);
1488 }
1489 else
1490 {
1491 if (dst != src)
1492 lstrcpynW(dst, src, dst_len);
1493 hr = S_OK;
1494 }
1495
1496 TRACE("returning %s\n", debugstr_w(dst));
1497end:
1498 if (hmod) FreeLibrary(hmod);
1499 LocalFree(dllname);
1500 return hr;
1501}
#define index(s, c)
Definition: various.h:29
#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
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
HLOCAL NTAPI LocalFree(HLOCAL hMem)
Definition: heapmem.c:1594
#define S_OK
Definition: intsafe.h:52
static PEXPLICIT_ACCESSW *static HMODULE hmod
Definition: security.c:143
_Check_return_ long __cdecl wcstol(_In_z_ const wchar_t *_Str, _Out_opt_ _Deref_post_z_ wchar_t **_EndPtr, _In_ int _Radix)
HRESULT hr
Definition: shlfolder.c:183

Referenced by AllSysInfo(), execute_test(), CCleanupHandler::ReadProperty(), and SHLoadRegUIStringW().

◆ SHTruncateString()

DWORD WINAPI SHTruncateString ( char str,
DWORD  size 
)

Definition at line 1434 of file string.c.

1435{
1436 char *last_byte;
1437
1438 if (!str || !size)
1439 return 0;
1440
1441 last_byte = str + size - 1;
1442
1443 while (str < last_byte)
1444 str += IsDBCSLeadByte(*str) ? 2 : 1;
1445
1446 if (str == last_byte && IsDBCSLeadByte(*str))
1447 {
1448 *str = '\0';
1449 size--;
1450 }
1451
1452 return size;
1453}
GLsizeiptr size
Definition: glext.h:5919

Referenced by SHUnicodeToAnsiCP().

◆ StrCatBuffA()

char *WINAPI StrCatBuffA ( char str,
const char cat,
INT  max_len 
)

Definition at line 1373 of file string.c.

1374{
1375 INT len;
1376
1377 TRACE("%p, %s, %d\n", str, wine_dbgstr_a(cat), max_len);
1378
1379 if (!str)
1380 return NULL;
1381
1382 len = strlen(str);
1383 max_len -= len;
1384 if (max_len > 0)
1385 StrCpyNA(str + len, cat, max_len);
1386
1387 return str;
1388}
const char int int int static __inline const char * wine_dbgstr_a(const char *s)
Definition: debug.h:187
#define StrCpyNA
Definition: shlwapi.h:1560

◆ StrCatBuffW()

WCHAR *WINAPI StrCatBuffW ( WCHAR str,
const WCHAR cat,
INT  max_len 
)

Definition at line 1390 of file string.c.

1391{
1392 INT len;
1393
1394 TRACE("%p, %s, %d\n", str, wine_dbgstr_w(cat), max_len);
1395
1396 if (!str)
1397 return NULL;
1398
1399 len = lstrlenW(str);
1400 max_len -= len;
1401 if (max_len > 0)
1402 StrCpyNW(str + len, cat, max_len);
1403
1404 return str;
1405}
WCHAR *WINAPI StrCpyNW(WCHAR *dst, const WCHAR *src, int count)
Definition: string.c:462
#define wine_dbgstr_w
Definition: kernel32.h:34

Referenced by SHAboutInfoW(), SHAddToRecentDocs(), and StrFormatByteSizeW().

◆ StrCatChainW()

DWORD WINAPI StrCatChainW ( WCHAR str,
DWORD  max_len,
DWORD  at,
const WCHAR cat 
)

Definition at line 1407 of file string.c.

1408{
1409 TRACE("%s, %lu, %ld, %s\n", wine_dbgstr_w(str), max_len, at, wine_dbgstr_w(cat));
1410
1411 if (at == -1)
1412 at = lstrlenW(str);
1413
1414 if (!max_len)
1415 return at;
1416
1417 if (at == max_len)
1418 at--;
1419
1420 if (cat && at < max_len)
1421 {
1422 str += at;
1423 while (at < max_len - 1 && *cat)
1424 {
1425 *str++ = *cat++;
1426 at++;
1427 }
1428 *str = 0;
1429 }
1430
1431 return at;
1432}

◆ StrChrA()

char *WINAPI StrChrA ( const char str,
WORD  ch 
)

Definition at line 212 of file string.c.

213{
214 TRACE("%s, %#x\n", wine_dbgstr_a(str), ch);
215
216 if (!str)
217 return NULL;
218
219 while (*str)
220 {
221 if (!char_compare(*str, ch, 0))
222 return (char *)str;
223 str = CharNextA(str);
224 }
225
226 return NULL;
227}

◆ StrChrIA()

char *WINAPI StrChrIA ( const char str,
WORD  ch 
)

Definition at line 239 of file string.c.

240{
241 TRACE("%s, %i\n", wine_dbgstr_a(str), ch);
242
243 if (!str)
244 return NULL;
245
246 while (*str)
247 {
248 if (!ChrCmpIA(*str, ch))
249 return (char *)str;
250 str = CharNextA(str);
251 }
252
253 return NULL;
254}
BOOL WINAPI ChrCmpIA(WORD ch1, WORD ch2)
Definition: string.c:334

◆ StrChrIW()

WCHAR *WINAPI StrChrIW ( const WCHAR str,
WCHAR  ch 
)

Definition at line 256 of file string.c.

257{
258 TRACE("%s, %#x\n", wine_dbgstr_w(str), ch);
259
260 if (!str)
261 return NULL;
262
263 ch = towupper(ch);
264 while (*str)
265 {
266 if (towupper(*str) == ch)
267 return (WCHAR *)str;
268 str++;
269 }
270 str = NULL;
271
272 return (WCHAR *)str;
273}
#define towupper(c)
Definition: wctype.h:99

◆ StrChrNW()

WCHAR *WINAPI StrChrNW ( const WCHAR str,
WCHAR  ch,
UINT  max_len 
)

Definition at line 275 of file string.c.

276{
277 TRACE("%s, %#x, %u\n", wine_dbgstr_wn(str, max_len), ch, max_len);
278
279 if (!str)
280 return NULL;
281
282 while (*str && max_len-- > 0)
283 {
284 if (*str == ch)
285 return (WCHAR *)str;
286 str++;
287 }
288
289 return NULL;
290}
#define wine_dbgstr_wn
Definition: testlist.c:2

◆ StrChrW()

WCHAR *WINAPI StrChrW ( const WCHAR str,
WCHAR  ch 
)

Definition at line 229 of file string.c.

230{
231 TRACE("%s, %#x\n", wine_dbgstr_w(str), ch);
232
233 if (!str)
234 return NULL;
235
236 return wcschr(str, ch);
237}

◆ StrCmpCA()

DWORD WINAPI StrCmpCA ( const char str,
const char cmp 
)

Definition at line 182 of file string.c.

183{
184 return lstrcmpA(str, cmp);
185}
int WINAPI lstrcmpA(LPCSTR str1, LPCSTR str2)
Definition: string.c:58
#define cmp(status, error)
Definition: error.c:114

◆ StrCmpCW()

DWORD WINAPI StrCmpCW ( const WCHAR str,
const WCHAR cmp 
)

Definition at line 187 of file string.c.

188{
189 return lstrcmpW(str, cmp);
190}
int WINAPI lstrcmpW(LPCWSTR str1, LPCWSTR str2)
Definition: string.c:66

◆ StrCmpICA()

DWORD WINAPI StrCmpICA ( const char str,
const char cmp 
)

Definition at line 192 of file string.c.

193{
194 return lstrcmpiA(str, cmp);
195}
int WINAPI lstrcmpiA(LPCSTR str1, LPCSTR str2)
Definition: string.c:74

◆ StrCmpICW()

DWORD WINAPI StrCmpICW ( const WCHAR str,
const WCHAR cmp 
)

Definition at line 197 of file string.c.

198{
199 return lstrcmpiW(str, cmp);
200}
int WINAPI lstrcmpiW(LPCWSTR str1, LPCWSTR str2)
Definition: string.c:82

◆ StrCmpIW()

◆ StrCmpLogicalW()

int WINAPI StrCmpLogicalW ( const WCHAR str,
const WCHAR comp 
)

Definition at line 1289 of file string.c.

1290{
1291 TRACE("%s, %s\n", wine_dbgstr_w(str), wine_dbgstr_w(comp));
1292
1293 if (!str || !comp)
1294 return 0;
1295
1296 while (*str)
1297 {
1298 if (!*comp)
1299 return 1;
1300 else if (*str >= '0' && *str <= '9')
1301 {
1302 int str_value, comp_value;
1303
1304 if (*comp < '0' || *comp > '9')
1305 return -1;
1306
1307 /* Compare the numbers */
1308 StrToIntExW(str, 0, &str_value);
1309 StrToIntExW(comp, 0, &comp_value);
1310
1311 if (str_value < comp_value)
1312 return -1;
1313 else if (str_value > comp_value)
1314 return 1;
1315
1316 /* Skip */
1317 while (*str >= '0' && *str <= '9') str++;
1318 while (*comp >= '0' && *comp <= '9') comp++;
1319 }
1320 else if (*comp >= '0' && *comp <= '9')
1321 return 1;
1322 else
1323 {
1324 int diff = ChrCmpIW(*str, *comp);
1325 if (diff > 0)
1326 return 1;
1327 else if (diff < 0)
1328 return -1;
1329
1330 str++;
1331 comp++;
1332 }
1333 }
1334
1335 if (*comp)
1336 return -1;
1337
1338 return 0;
1339}
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
static int comp_value(const WCHAR *ptr, int dpc)
Definition: htmlbody.c:68

Referenced by CompareFunc(), CCabFolder::CompareID(), and SortListView().

◆ StrCmpNA()

int WINAPI StrCmpNA ( const char str,
const char comp,
int  len 
)

Definition at line 422 of file string.c.

423{
424 TRACE("%s, %s, %i\n", wine_dbgstr_a(str), wine_dbgstr_a(comp), len);
425 return CompareStringA(GetThreadLocale(), 0, str, len, comp, len) - CSTR_EQUAL;
426}

◆ StrCmpNCA()

DWORD WINAPI StrCmpNCA ( const char str,
const char comp,
int  len 
)

Definition at line 434 of file string.c.

435{
436 return StrCmpNA(str, comp, len);
437}
INT WINAPI StrCmpNA(LPCSTR lpszStr, LPCSTR lpszComp, INT iLen)
Definition: string.c:489

◆ StrCmpNCW()

DWORD WINAPI StrCmpNCW ( const WCHAR str,
const WCHAR comp,
int  len 
)

Definition at line 439 of file string.c.

440{
441 return StrCmpNW(str, comp, len);
442}
int WINAPI StrCmpNW(const WCHAR *str, const WCHAR *comp, int len)
Definition: string.c:428

◆ StrCmpNIA()

int WINAPI StrCmpNIA ( const char str,
const char cmp,
int  len 
)

Definition at line 396 of file string.c.

397{
398 TRACE("%s, %s, %i\n", wine_dbgstr_a(str), wine_dbgstr_a(cmp), len);
400}

◆ StrCmpNICA()

DWORD WINAPI StrCmpNICA ( const char str,
const char cmp,
DWORD  len 
)

Definition at line 202 of file string.c.

203{
204 return StrCmpNIA(str, cmp, len);
205}
INT WINAPI StrCmpNIA(LPCSTR lpszStr, LPCSTR lpszComp, INT iLen)
Definition: string.c:296

◆ StrCmpNICW()

DWORD WINAPI StrCmpNICW ( const WCHAR str,
const WCHAR cmp,
DWORD  len 
)

Definition at line 207 of file string.c.

208{
209 return StrCmpNIW(str, cmp, len);
210}
INT WINAPI StrCmpNIW(LPCWSTR lpszStr, LPCWSTR lpszComp, INT iLen)
Definition: string.c:307

◆ StrCmpNIW()

int WINAPI StrCmpNIW ( const WCHAR str,
const WCHAR comp,
int  len 
)

Definition at line 444 of file string.c.

445{
446 TRACE("%s, %s, %i\n", wine_dbgstr_w(str), wine_dbgstr_w(comp), len);
448}

◆ StrCmpNW()

int WINAPI StrCmpNW ( const WCHAR str,
const WCHAR comp,
int  len 
)

Definition at line 428 of file string.c.

429{
430 TRACE("%s, %s, %i\n", wine_dbgstr_w(str), wine_dbgstr_w(comp), len);
431 return CompareStringW(GetThreadLocale(), 0, str, len, comp, len) - CSTR_EQUAL;
432}

◆ StrCmpW()

◆ StrCpyNW()

WCHAR *WINAPI StrCpyNW ( WCHAR dst,
const WCHAR src,
int  count 
)

Definition at line 462 of file string.c.

463{
464 const WCHAR *s = src;
465 WCHAR *d = dst;
466
467 TRACE("%p, %s, %i\n", dst, wine_dbgstr_w(src), count);
468
469 if (s)
470 {
471 while ((count > 1) && *s)
472 {
473 count--;
474 *d++ = *s++;
475 }
476 }
477 if (count) *d = 0;
478
479 return dst;
480}

Referenced by CIniPropertyBag::_GetSectionAndName(), CZipExtract::Extract(), PathCreateFromUrlW(), SHCreatePropertyBagOnProfileSection(), Shell_ParseSpecialFolder(), ShellExec_RunDLL_Helper(), SHGlobalCounterCreateNamedW(), SHPathPrepareForWriteW(), StrCatBuffW(), StrNCatW(), and test_StrXXX_overflows().

◆ StrCpyNXA()

char *WINAPI StrCpyNXA ( char dst,
const char src,
int  len 
)

Definition at line 1013 of file string.c.

1014{
1015 TRACE("%p, %s, %i\n", dst, wine_dbgstr_a(src), len);
1016
1017 if (dst && src && len > 0)
1018 {
1019 while ((len-- > 1) && *src)
1020 *dst++ = *src++;
1021 if (len >= 0)
1022 *dst = '\0';
1023 }
1024
1025 return dst;
1026}

Referenced by SHAnsiToAnsi().

◆ StrCpyNXW()

WCHAR *WINAPI StrCpyNXW ( WCHAR dst,
const WCHAR src,
int  len 
)

Definition at line 1028 of file string.c.

1029{
1030 TRACE("%p, %s, %i\n", dst, wine_dbgstr_w(src), len);
1031
1032 if (dst && src && len > 0)
1033 {
1034 while ((len-- > 1) && *src)
1035 *dst++ = *src++;
1036 if (len >= 0)
1037 *dst = '\0';
1038 }
1039
1040 return dst;
1041}

Referenced by SHUnicodeToUnicode().

◆ StrCSpnA()

int WINAPI StrCSpnA ( const char str,
const char match 
)

Definition at line 547 of file string.c.

548{
549 const char *ptr = str;
550
551 TRACE("%s, %s\n", wine_dbgstr_a(str), wine_dbgstr_a(match));
552
553 if (!str || !match) return 0;
554
555 while (*ptr)
556 {
557 if (StrChrA(match, *ptr)) break;
558 ptr = CharNextA(ptr);
559 }
560 return ptr - str;
561}
LPSTR WINAPI StrChrA(LPCSTR lpszStr, WORD ch)
Definition: string.c:266
Definition: match.c:28

◆ StrCSpnIA()

int WINAPI StrCSpnIA ( const char str,
const char match 
)

Definition at line 571 of file string.c.

572{
573 const char *ptr = str;
574
575 TRACE("%s, %s\n", wine_dbgstr_a(str), wine_dbgstr_a(match));
576
577 if (!str || !match) return 0;
578
579 while (*ptr)
580 {
581 if (StrChrIA(match, *ptr)) break;
582 ptr = CharNextA(ptr);
583 }
584 return ptr - str;
585}
LPSTR WINAPI StrChrIA(LPCSTR lpszStr, WORD ch)
Definition: string.c:610

◆ StrCSpnIW()

int WINAPI StrCSpnIW ( const WCHAR str,
const WCHAR match 
)

Definition at line 587 of file string.c.

588{
589 const WCHAR *ptr = str;
590
591 TRACE("%s, %s\n", wine_dbgstr_w(str), wine_dbgstr_w(match));
592
593 if (!str || !*str || !match)
594 return 0;
595
596 while (*ptr)
597 {
598 if (StrChrIW(match, *ptr)) break;
599 ptr++;
600 }
601
602 return ptr - str;
603}
LPWSTR WINAPI StrChrIW(LPCWSTR lpszStr, WCHAR ch)
Definition: string.c:631

◆ StrCSpnW()

int WINAPI StrCSpnW ( const WCHAR str,
const WCHAR match 
)

Definition at line 563 of file string.c.

564{
565 if (!str || !match)
566 return 0;
567
568 return wcscspn(str, match);
569}
_Check_return_ _CRTIMP size_t __cdecl wcscspn(_In_z_ const wchar_t *_Str, _In_z_ const wchar_t *_Control)

◆ StrDupA()

char *WINAPI StrDupA ( const char str)

Definition at line 292 of file string.c.

293{
294 unsigned int len;
295 char *ret;
296
297 TRACE("%s\n", wine_dbgstr_a(str));
298
299 len = str ? strlen(str) + 1 : 1;
301
302 if (ret)
303 {
304 if (str)
305 memcpy(ret, str, len);
306 else
307 *ret = '\0';
308 }
309
310 return ret;
311}
HLOCAL NTAPI LocalAlloc(UINT uFlags, SIZE_T dwBytes)
Definition: heapmem.c:1390
#define LMEM_FIXED
Definition: winbase.h:401

Referenced by SHLWAPI_GetModuleVersion(), TEST_StrDupA(), and test_StrDupA().

◆ StrDupW()

◆ StrIsIntlEqualA()

BOOL WINAPI StrIsIntlEqualA ( BOOL  case_sensitive,
const char str,
const char cmp,
int  len 
)

Definition at line 1341 of file string.c.

1342{
1343 DWORD flags;
1344
1345 TRACE("%d, %s, %s, %d\n", case_sensitive, wine_dbgstr_a(str), wine_dbgstr_a(cmp), len);
1346
1347 /* FIXME: This flag is undocumented and unknown by our CompareString.
1348 * We need a define for it.
1349 */
1350 flags = 0x10000000;
1351 if (!case_sensitive)
1353
1355}

◆ StrIsIntlEqualW()

BOOL WINAPI StrIsIntlEqualW ( BOOL  case_sensitive,
const WCHAR str,
const WCHAR cmp,
int  len 
)

Definition at line 1357 of file string.c.

1358{
1359 DWORD flags;
1360
1361 TRACE("%d, %s, %s, %d\n", case_sensitive, debugstr_w(str), debugstr_w(cmp), len);
1362
1363 /* FIXME: This flag is undocumented and unknown by our CompareString.
1364 * We need a define for it.
1365 */
1366 flags = 0x10000000;
1367 if (!case_sensitive)
1369
1371}

◆ StrPBrkA()

char *WINAPI StrPBrkA ( const char str,
const char match 
)

Definition at line 735 of file string.c.

736{
737 TRACE("%s, %s\n", wine_dbgstr_a(str), wine_dbgstr_a(match));
738
739 if (!str || !match || !*match)
740 return NULL;
741
742 while (*str)
743 {
744 if (StrChrA(match, *str))
745 return (char *)str;
746 str = CharNextA(str);
747 }
748
749 return NULL;
750}

◆ StrPBrkW()

WCHAR *WINAPI StrPBrkW ( const WCHAR str,
const WCHAR match 
)

Definition at line 752 of file string.c.

753{
754 if (!str || !match) return NULL;
755 return wcspbrk(str, match);
756}
_Check_return_ _CRTIMP _CONST_RETURN wchar_t *__cdecl wcspbrk(_In_z_ const wchar_t *_Str, _In_z_ const wchar_t *_Control)

Referenced by CheckEscapesW(), IsIllegalFsFileName(), parse_file_list(), and SHFindAttrW().

◆ StrRChrA()

char *WINAPI StrRChrA ( const char str,
const char end,
WORD  ch 
)

Definition at line 605 of file string.c.

606{
607 const char *ret = NULL;
608
609 TRACE("%s, %s, %#x\n", wine_dbgstr_a(str), wine_dbgstr_a(end), ch);
610
611 if (!str) return NULL;
612 if (!end) end = str + lstrlenA(str);
613 while (*str && str <= end)
614 {
615 WORD ch2 = IsDBCSLeadByte(*str) ? *str << 8 | str[1] : *str;
616 if (!char_compare(ch, ch2, 0)) ret = str;
617 str = CharNextA(str);
618 }
619 return (char *)ret;
620}
unsigned short WORD
Definition: ntddk_ex.h:93
int WINAPI lstrlenA(LPCSTR lpString)
Definition: lstring.c:145

◆ StrRChrIA()

char *WINAPI StrRChrIA ( const char str,
const char end,
WORD  ch 
)

Definition at line 636 of file string.c.

637{
638 const char *ret = NULL;
639
640 TRACE("%s, %s, %#x\n", wine_dbgstr_a(str), wine_dbgstr_a(end), ch);
641
642 if (!str) return NULL;
643 if (!end) end = str + lstrlenA(str);
644
645 while (*str && str <= end)
646 {
647 WORD ch2 = IsDBCSLeadByte(*str) ? *str << 8 | str[1] : *str;
648 if (!ChrCmpIA(ch, ch2)) ret = str;
649 str = CharNextA(str);
650 }
651 return (char *)ret;
652}

◆ StrRChrIW()

WCHAR *WINAPI StrRChrIW ( const WCHAR str,
const WCHAR end,
WORD  ch 
)

Definition at line 654 of file string.c.

655{
656 WCHAR *ret = NULL;
657
658 if (!str) return NULL;
659 if (!end) end = str + lstrlenW(str);
660 while (str < end)
661 {
662 if (!ChrCmpIW(*str, ch)) ret = (WCHAR *)str;
663 str++;
664 }
665 return ret;
666}

◆ StrRChrW()

WCHAR *WINAPI StrRChrW ( const WCHAR str,
const WCHAR end,
WORD  ch 
)

Definition at line 622 of file string.c.

623{
624 WCHAR *ret = NULL;
625
626 if (!str) return NULL;
627 if (!end) end = str + lstrlenW(str);
628 while (str < end)
629 {
630 if (*str == ch) ret = (WCHAR *)str;
631 str++;
632 }
633 return ret;
634}

◆ StrRStrIA()

char *WINAPI StrRStrIA ( const char str,
const char end,
const char search 
)

Definition at line 668 of file string.c.

669{
670 char *ret = NULL;
671 WORD ch1, ch2;
672 int len;
673
675
676 if (!str || !search || !*search)
677 return NULL;
678
680 ch1 = *search << 8 | (UCHAR)search[1];
681 else
682 ch1 = *search;
684
685 if (!end)
686 end = str + lstrlenA(str);
687 else /* reproduce the broken behaviour on Windows */
688 end += min(len - 1, lstrlenA(end));
689
690 while (str + len <= end && *str)
691 {
692 ch2 = IsDBCSLeadByte(*str) ? *str << 8 | (UCHAR)str[1] : *str;
693 if (!ChrCmpIA(ch1, ch2))
694 {
695 if (!StrCmpNIA(str, search, len))
696 ret = (char *)str;
697 }
698
699 str = CharNextA(str);
700 }
701
702 return ret;
703}
static short search(int val, const short *table, int size)
Definition: msg711.c:255
unsigned char UCHAR
Definition: xmlstorage.h:181

◆ StrRStrIW()

WCHAR *WINAPI StrRStrIW ( const WCHAR str,
const WCHAR end,
const WCHAR search 
)

Definition at line 705 of file string.c.

706{
707 WCHAR *ret = NULL;
708 int len;
709
711
712 if (!str || !search || !*search)
713 return NULL;
714
716
717 if (!end)
718 end = str + lstrlenW(str);
719 else
720 end += min(len - 1, lstrlenW(end));
721
722 while (str + len <= end && *str)
723 {
724 if (!ChrCmpIW(*search, *str))
725 {
726 if (!StrCmpNIW(str, search, len))
727 ret = (WCHAR *)str;
728 }
729 str++;
730 }
731
732 return ret;
733}

◆ StrSpnA()

int WINAPI StrSpnA ( const char str,
const char match 
)

Definition at line 525 of file string.c.

526{
527 const char *ptr = str;
528
529 TRACE("%s, %s\n", wine_dbgstr_a(str), wine_dbgstr_a(match));
530
531 if (!str || !match) return 0;
532
533 while (*ptr)
534 {
535 if (!StrChrA(match, *ptr)) break;
536 ptr = CharNextA(ptr);
537 }
538 return ptr - str;
539}

◆ StrSpnW()

int WINAPI StrSpnW ( const WCHAR str,
const WCHAR match 
)

Definition at line 541 of file string.c.

542{
543 if (!str || !match) return 0;
544 return wcsspn(str, match);
545}
_Check_return_ _CRTIMP size_t __cdecl wcsspn(_In_z_ const wchar_t *_Str, _In_z_ const wchar_t *_Control)

◆ StrStrA()

char *WINAPI StrStrA ( const char str,
const char search 
)

Definition at line 346 of file string.c.

347{
348 const char *end;
349 size_t len;
350
352
353 if (!str || !search || !*search) return NULL;
354
355 len = strlen(search);
356 end = str + strlen(str);
357
358 while (str + len <= end)
359 {
360 if (!StrCmpNA(str, search, len)) return (char *)str;
361 str = CharNextA(str);
362 }
363 return NULL;
364}

◆ StrStrIA()

char *WINAPI StrStrIA ( const char str,
const char search 
)

Definition at line 482 of file string.c.

483{
484 const char *end;
485 size_t len;
486
487 TRACE("%s, %s\n", wine_dbgstr_a(str), debugstr_a(search));
488
489 if (!str || !search || !*search) return NULL;
490
491 len = strlen(search);
492 end = str + strlen(str);
493
494 while (str + len <= end)
495 {
496 if (!StrCmpNIA(str, search, len)) return (char *)str;
497 str = CharNextA(str);
498 }
499 return NULL;
500}

◆ StrStrIW()

WCHAR *WINAPI StrStrIW ( const WCHAR str,
const WCHAR search 
)

Definition at line 502 of file string.c.

503{
504 unsigned int len;
505 const WCHAR *end;
506
508
509 if (!str || !search || !*search)
510 return NULL;
511
513 end = str + lstrlenW(str);
514
515 while (str + len <= end)
516 {
517 if (!StrCmpNIW(str, search, len))
518 return (WCHAR *)str;
519 str++;
520 }
521
522 return NULL;
523}

◆ StrStrNIW()

WCHAR *WINAPI StrStrNIW ( const WCHAR str,
const WCHAR search,
UINT  max_len 
)

Definition at line 402 of file string.c.

403{
404 unsigned int i, len;
405
406 TRACE("%s, %s, %u\n", wine_dbgstr_w(str), wine_dbgstr_w(search), max_len);
407
408 if (!str || !search || !*search || !max_len)
409 return NULL;
410
412
413 for (i = max_len; *str && (i > 0); i--, str++)
414 {
415 if (!StrCmpNIW(str, search, len))
416 return (WCHAR *)str;
417 }
418
419 return NULL;
420}

◆ StrStrNW()

WCHAR *WINAPI StrStrNW ( const WCHAR str,
const WCHAR search,
UINT  max_len 
)

Definition at line 376 of file string.c.

377{
378 unsigned int i, len;
379
380 TRACE("%s, %s, %u\n", wine_dbgstr_w(str), wine_dbgstr_w(search), max_len);
381
382 if (!str || !search || !*search || !max_len)
383 return NULL;
384
386
387 for (i = max_len; *str && (i > 0); i--, str++)
388 {
389 if (!wcsncmp(str, search, len))
390 return (WCHAR *)str;
391 }
392
393 return NULL;
394}
_Check_return_ _CRTIMP int __cdecl wcsncmp(_In_reads_or_z_(_MaxCount) const wchar_t *_Str1, _In_reads_or_z_(_MaxCount) const wchar_t *_Str2, _In_ size_t _MaxCount)

◆ StrStrW()

WCHAR *WINAPI StrStrW ( const WCHAR str,
const WCHAR search 
)

Definition at line 366 of file string.c.

367{
369
370 if (!str || !search || !*search)
371 return NULL;
372
373 return wcsstr(str, search);
374}
_CONST_RETURN wchar_t *__cdecl wcsstr(_In_z_ const wchar_t *_Str, _In_z_ const wchar_t *_SubStr)

◆ StrToInt64ExA()

BOOL WINAPI StrToInt64ExA ( const char str,
DWORD  flags,
LONGLONG ret 
)

Definition at line 834 of file string.c.

835{
836 BOOL negative = FALSE;
837 LONGLONG value = 0;
838
839 TRACE("%s, %#lx, %p\n", wine_dbgstr_a(str), flags, ret);
840
841 if (!str || !ret)
842 return FALSE;
843
845 WARN("Unknown flags %#lx\n", flags);
846
847 /* Skip leading space, '+', '-' */
848 while (*str == ' ' || *str == '\t' || *str == '\n') str++;
849
850 if (*str == '-')
851 {
852 negative = TRUE;
853 str++;
854 }
855 else if (*str == '+')
856 str++;
857
858 if (flags & STIF_SUPPORT_HEX && *str == '0' && (str[1] == 'x' || str[1] == 'X'))
859 {
860 /* Read hex number */
861 str += 2;
862
863 if (!isxdigit(*str))
864 return FALSE;
865
866 while (isxdigit(*str))
867 {
868 value *= 16;
869 if (*str >= '0' && *str <= '9')
870 value += (*str - '0');
871 else if (*str >= 'A' && *str <= 'F')
872 value += 10 + *str - 'A';
873 else
874 value += 10 + *str - 'a';
875 str++;
876 }
877
878 *ret = value;
879 return TRUE;
880 }
881
882 /* Read decimal number */
883 if (*str < '0' || *str > '9')
884 return FALSE;
885
886 while (*str >= '0' && *str <= '9')
887 {
888 value *= 10;
889 value += (*str - '0');
890 str++;
891 }
892
893 *ret = negative ? -value : value;
894 return TRUE;
895}
#define isxdigit(c)
Definition: acclib.h:70
#define WARN(fmt,...)
Definition: precomp.h:61
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
unsigned int BOOL
Definition: ntddk_ex.h:94
#define STIF_SUPPORT_HEX
Definition: shlwapi.h:1498
int64_t LONGLONG
Definition: typedefs.h:68
Definition: pdh_main.c:96

Referenced by StrToIntExA().

◆ StrToInt64ExW()

BOOL WINAPI StrToInt64ExW ( const WCHAR str,
DWORD  flags,
LONGLONG ret 
)

Definition at line 897 of file string.c.

898{
899 BOOL negative = FALSE;
900 LONGLONG value = 0;
901
902 TRACE("%s, %#lx, %p\n", wine_dbgstr_w(str), flags, ret);
903
904 if (!str || !ret)
905 return FALSE;
906
908 WARN("Unknown flags %#lx.\n", flags);
909
910 /* Skip leading space, '+', '-' */
911 while (*str == ' ' || *str == '\t' || *str == '\n') str++;
912
913 if (*str == '-')
914 {
915 negative = TRUE;
916 str++;
917 }
918 else if (*str == '+')
919 str++;
920
921 if (flags & STIF_SUPPORT_HEX && *str == '0' && (str[1] == 'x' || str[1] == 'X'))
922 {
923 /* Read hex number */
924 str += 2;
925
926 if (!isxdigit(*str))
927 return FALSE;
928
929 while (isxdigit(*str))
930 {
931 value *= 16;
932 if (*str >= '0' && *str <= '9')
933 value += (*str - '0');
934 else if (*str >= 'A' && *str <= 'Z')
935 value += 10 + (*str - 'A');
936 else
937 value += 10 + (*str - 'a');
938 str++;
939 }
940
941 *ret = value;
942 return TRUE;
943 }
944
945 /* Read decimal number */
946 if (*str < '0' || *str > '9')
947 return FALSE;
948
949 while (*str >= '0' && *str <= '9')
950 {
951 value *= 10;
952 value += (*str - '0');
953 str++;
954 }
955
956 *ret = negative ? -value : value;
957 return TRUE;
958}

Referenced by set_content_length(), and StrToIntExW().

◆ StrToIntA()

int WINAPI StrToIntA ( const char str)

Definition at line 984 of file string.c.

985{
986 int value = 0;
987
988 TRACE("%s\n", wine_dbgstr_a(str));
989
990 if (!str)
991 return 0;
992
993 if (*str == '-' || (*str >= '0' && *str <= '9'))
994 StrToIntExA(str, 0, &value);
995
996 return value;
997}
BOOL WINAPI StrToIntExA(const char *str, DWORD flags, INT *ret)
Definition: string.c:960

◆ StrToIntExA()

BOOL WINAPI StrToIntExA ( const char str,
DWORD  flags,
INT ret 
)

Definition at line 960 of file string.c.

961{
963 BOOL res;
964
965 TRACE("%s, %#lx, %p\n", wine_dbgstr_a(str), flags, ret);
966
968 if (res) *ret = value;
969 return res;
970}
BOOL WINAPI StrToInt64ExA(const char *str, DWORD flags, LONGLONG *ret)
Definition: string.c:834
GLuint res
Definition: glext.h:9613

Referenced by StrToIntA(), and test_StrToIntExA().

◆ StrToIntExW()

BOOL WINAPI StrToIntExW ( const WCHAR str,
DWORD  flags,
INT ret 
)

Definition at line 972 of file string.c.

973{
975 BOOL res;
976
977 TRACE("%s, %#lx, %p\n", wine_dbgstr_w(str), flags, ret);
978
980 if (res) *ret = value;
981 return res;
982}
BOOL WINAPI StrToInt64ExW(const WCHAR *str, DWORD flags, LONGLONG *ret)
Definition: string.c:897

Referenced by CompareVersion(), CAvailableApplicationInfo::RetrieveLanguages(), ShellExec_RunDLL_Helper(), StrCmpLogicalW(), StrToIntW(), test_StrToIntExW(), and UrlUnescapeW().

◆ StrToIntW()

int WINAPI StrToIntW ( const WCHAR str)

Definition at line 999 of file string.c.

1000{
1001 int value = 0;
1002
1003 TRACE("%s\n", wine_dbgstr_w(str));
1004
1005 if (!str)
1006 return 0;
1007
1008 if (*str == '-' || (*str >= '0' && *str <= '9'))
1009 StrToIntExW(str, 0, &value);
1010 return value;
1011}

◆ StrTrimA()

BOOL WINAPI StrTrimA ( char str,
const char trim 
)

Definition at line 758 of file string.c.

759{
760 unsigned int len;
761 BOOL ret = FALSE;
762 char *ptr = str;
763
764 TRACE("%s, %s\n", debugstr_a(str), debugstr_a(trim));
765
766 if (!str || !*str)
767 return FALSE;
768
769 while (*ptr && StrChrA(trim, *ptr))
770 ptr = CharNextA(ptr); /* Skip leading matches */
771
772 len = strlen(ptr);
773
774 if (ptr != str)
775 {
776 memmove(str, ptr, len + 1);
777 ret = TRUE;
778 }
779
780 if (len > 0)
781 {
782 ptr = str + len;
783 while (StrChrA(trim, ptr[-1]))
784 ptr = CharPrevA(str, ptr); /* Skip trailing matches */
785
786 if (ptr != str + len)
787 {
788 *ptr = '\0';
789 ret = TRUE;
790 }
791 }
792
793 return ret;
794}
LPSTR WINAPI CharPrevA(const char *start, const char *ptr)
Definition: string.c:1128
char * trim(char *str, char **last_chr, BOOL strip_quotes)
Definition: inf.c:258
#define memmove(s1, s2, n)
Definition: mkisofs.h:881

◆ StrTrimW()

BOOL WINAPI StrTrimW ( WCHAR str,
const WCHAR trim 
)

Definition at line 796 of file string.c.

797{
798 unsigned int len;
799 WCHAR *ptr = str;
800 BOOL ret = FALSE;
801
802 TRACE("%s, %s\n", wine_dbgstr_w(str), wine_dbgstr_w(trim));
803
804 if (!str || !*str)
805 return FALSE;
806
807 while (*ptr && StrChrW(trim, *ptr))
808 ptr++;
809
810 len = lstrlenW(ptr);
811
812 if (ptr != str)
813 {
814 memmove(str, ptr, (len + 1) * sizeof(WCHAR));
815 ret = TRUE;
816 }
817
818 if (len > 0)
819 {
820 ptr = str + len;
821 while (StrChrW(trim, ptr[-1]))
822 ptr--; /* Skip trailing matches */
823
824 if (ptr != str + len)
825 {
826 *ptr = '\0';
827 ret = TRUE;
828 }
829 }
830
831 return ret;
832}
WCHAR *WINAPI StrChrW(const WCHAR *str, WCHAR ch)
Definition: string.c:229

Referenced by BrFolder_OnOK(), EditActionDlg_OnOK(), EditTypeDlg_OnOK(), EditTypeDlg_OnRemove(), FinishDlgProc(), CFSFolder::GetCustomViewInfo(), NewActionDlg_OnOK(), NewExtDlg_OnOK(), CShellLink::OnNotify(), RunDlgProc(), SHELL32_AssocGetExtensionDescription(), ShellExecCmdLine(), WelcomeDlgProc(), and WindowProc().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( string  )