msvcrt: Fix a possible memory leak in _wsystem for the NULL command case.
[wine.git] / include / msvcrt / string.h
blob5c836319ae9f830047c818f2b9a2813f2354a8a3
1 /*
2 * String definitions
4 * Derived from the mingw header written by Colin Peters.
5 * Modified for Wine use by Jon Griffiths and Francois Gouget.
6 * This file is in the public domain.
7 */
8 #ifndef __WINE_STRING_H
9 #define __WINE_STRING_H
11 #include <crtdefs.h>
13 #ifndef _NLSCMP_DEFINED
14 #define _NLSCMPERROR ((unsigned int)0x7fffffff)
15 #define _NLSCMP_DEFINED
16 #endif
18 #ifndef NULL
19 #ifdef __cplusplus
20 #define NULL 0
21 #else
22 #define NULL ((void *)0)
23 #endif
24 #endif
26 #ifdef __cplusplus
27 extern "C" {
28 #endif
30 #ifndef _CRT_MEMORY_DEFINED
31 #define _CRT_MEMORY_DEFINED
32 void* __cdecl memchr(const void*,int,size_t);
33 int __cdecl memcmp(const void*,const void*,size_t);
34 void* __cdecl memcpy(void*,const void*,size_t);
35 errno_t __cdecl memcpy_s(void*,size_t,const void*,size_t);
36 void* __cdecl memset(void*,int,size_t);
37 void* __cdecl _memccpy(void*,const void*,int,unsigned int);
38 int __cdecl _memicmp(const void*,const void*,unsigned int);
40 static inline int memicmp(const void* s1, const void* s2, size_t len) { return _memicmp(s1, s2, len); }
41 static inline void* memccpy(void *s1, const void *s2, int c, size_t n) { return _memccpy(s1, s2, c, n); }
42 #endif /* _CRT_MEMORY_DEFINED */
44 int __cdecl _strcmpi(const char*,const char*);
45 char* __cdecl _strdup(const char*);
46 char* __cdecl _strerror(const char*);
47 errno_t __cdecl strerror_s(char*,size_t,int);
48 int __cdecl _stricmp(const char*,const char*);
49 int __cdecl _stricoll(const char*,const char*);
50 char* __cdecl _strlwr(char*);
51 errno_t __cdecl _strlwr_s(char*,size_t);
52 int __cdecl _strnicmp(const char*,const char*,size_t);
53 char* __cdecl _strnset(char*,int,size_t);
54 char* __cdecl _strrev(char*);
55 char* __cdecl _strset(char*,int);
56 char* __cdecl _strupr(char*);
58 void* __cdecl memmove(void*,const void*,size_t);
59 errno_t __cdecl memmove_s(void*,size_t,const void*,size_t);
60 char* __cdecl strcat(char*,const char*);
61 errno_t __cdecl strcat_s(char*,size_t,const char*);
62 char* __cdecl strchr(const char*,int);
63 int __cdecl strcmp(const char*,const char*);
64 int __cdecl strcoll(const char*,const char*);
65 char* __cdecl strcpy(char*,const char*);
66 errno_t __cdecl strcpy_s(char*,size_t,const char*);
67 size_t __cdecl strcspn(const char*,const char*);
68 char* __cdecl strerror(int);
69 size_t __cdecl strlen(const char*);
70 char* __cdecl strncat(char*,const char*,size_t);
71 errno_t __cdecl strncat_s(char*,size_t,const char*,size_t);
72 int __cdecl strncmp(const char*,const char*,size_t);
73 char* __cdecl strncpy(char*,const char*,size_t);
74 errno_t __cdecl strncpy_s(char*,size_t,const char*,size_t);
75 size_t __cdecl strnlen(const char*,size_t);
76 char* __cdecl strpbrk(const char*,const char*);
77 char* __cdecl strrchr(const char*,int);
78 size_t __cdecl strspn(const char*,const char*);
79 char* __cdecl strstr(const char*,const char*);
80 char* __cdecl strtok(char*,const char*);
81 char* __cdecl strtok_s(char*,const char*,char**);
82 size_t __cdecl strxfrm(char*,const char*,size_t);
84 #ifndef _WSTRING_DEFINED
85 #define _WSTRING_DEFINED
86 wchar_t* __cdecl _wcsdup(const wchar_t*);
87 int __cdecl _wcsicmp(const wchar_t*,const wchar_t*);
88 int __cdecl _wcsicoll(const wchar_t*,const wchar_t*);
89 wchar_t* __cdecl _wcslwr(wchar_t*);
90 int __cdecl _wcsnicmp(const wchar_t*,const wchar_t*,size_t);
91 int __cdecl _wcsnicoll(const wchar_t*,const wchar_t*,size_t);
92 wchar_t* __cdecl _wcsnset(wchar_t*,wchar_t,size_t);
93 wchar_t* __cdecl _wcsrev(wchar_t*);
94 wchar_t* __cdecl _wcsset(wchar_t*,wchar_t);
95 wchar_t* __cdecl _wcsupr(wchar_t*);
97 wchar_t* __cdecl wcscat(wchar_t*,const wchar_t*);
98 errno_t __cdecl wcscat_s(wchar_t*,size_t,const wchar_t*);
99 wchar_t* __cdecl wcschr(const wchar_t*,wchar_t);
100 int __cdecl wcscmp(const wchar_t*,const wchar_t*);
101 int __cdecl wcscoll(const wchar_t*,const wchar_t*);
102 wchar_t* __cdecl wcscpy(wchar_t*,const wchar_t*);
103 errno_t __cdecl wcscpy_s(wchar_t*,size_t,const wchar_t*);
104 size_t __cdecl wcscspn(const wchar_t*,const wchar_t*);
105 size_t __cdecl wcslen(const wchar_t*);
106 wchar_t* __cdecl wcsncat(wchar_t*,const wchar_t*,size_t);
107 int __cdecl wcsncmp(const wchar_t*,const wchar_t*,size_t);
108 wchar_t* __cdecl wcsncpy(wchar_t*,const wchar_t*,size_t);
109 errno_t __cdecl wcsncpy_s(wchar_t*,size_t,const wchar_t*,size_t);
110 wchar_t* __cdecl wcspbrk(const wchar_t*,const wchar_t*);
111 wchar_t* __cdecl wcsrchr(const wchar_t*,wchar_t wcFor);
112 size_t __cdecl wcsspn(const wchar_t*,const wchar_t*);
113 wchar_t* __cdecl wcsstr(const wchar_t*,const wchar_t*);
114 wchar_t* __cdecl wcstok(wchar_t*,const wchar_t*);
115 size_t __cdecl wcsxfrm(wchar_t*,const wchar_t*,size_t);
116 #endif /* _WSTRING_DEFINED */
118 #ifdef __cplusplus
120 #endif
123 static inline int strcasecmp(const char* s1, const char* s2) { return _stricmp(s1, s2); }
124 static inline int strcmpi(const char* s1, const char* s2) { return _strcmpi(s1, s2); }
125 static inline char* strdup(const char* buf) { return _strdup(buf); }
126 static inline int stricmp(const char* s1, const char* s2) { return _stricmp(s1, s2); }
127 static inline int stricoll(const char* s1, const char* s2) { return _stricoll(s1, s2); }
128 static inline char* strlwr(char* str) { return _strlwr(str); }
129 static inline int strncasecmp(const char *str1, const char *str2, size_t n) { return _strnicmp(str1, str2, n); }
130 static inline int strnicmp(const char* s1, const char* s2, size_t n) { return _strnicmp(s1, s2, n); }
131 static inline char* strnset(char* str, int value, unsigned int len) { return _strnset(str, value, len); }
132 static inline char* strrev(char* str) { return _strrev(str); }
133 static inline char* strset(char* str, int value) { return _strset(str, value); }
134 static inline char* strupr(char* str) { return _strupr(str); }
136 static inline wchar_t* wcsdup(const wchar_t* str) { return _wcsdup(str); }
137 static inline int wcsicoll(const wchar_t* str1, const wchar_t* str2) { return _wcsicoll(str1, str2); }
138 static inline wchar_t* wcslwr(wchar_t* str) { return _wcslwr(str); }
139 static inline int wcsnicmp(const wchar_t* str1, const wchar_t* str2, size_t n) { return _wcsnicmp(str1, str2, n); }
140 static inline wchar_t* wcsnset(wchar_t* str, wchar_t c, size_t n) { return _wcsnset(str, c, n); }
141 static inline wchar_t* wcsrev(wchar_t* str) { return _wcsrev(str); }
142 static inline wchar_t* wcsset(wchar_t* str, wchar_t c) { return _wcsset(str, c); }
143 static inline wchar_t* wcsupr(wchar_t* str) { return _wcsupr(str); }
145 #endif /* __WINE_STRING_H */