summaryrefslogtreecommitdiffstats
path: root/include/iprt/nocrt/string.h
blob: b83d003680ea647c44e39d624184ecbc16bfe9d1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
/** @file
 * IPRT / No-CRT - string.h.
 */

/*
 * Copyright (C) 2006-2022 Oracle and/or its affiliates.
 *
 * This file is part of VirtualBox base platform packages, as
 * available from https://www.virtualbox.org.
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation, in version 3 of the
 * License.
 *
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, see <https://www.gnu.org/licenses>.
 *
 * The contents of this file may alternatively be used under the terms
 * of the Common Development and Distribution License Version 1.0
 * (CDDL), a copy of it is provided in the "COPYING.CDDL" file included
 * in the VirtualBox distribution, in which case the provisions of the
 * CDDL are applicable instead of those of the GPL.
 *
 * You may elect to license modified versions of this file under the
 * terms and conditions of either the GPL or the CDDL or both.
 *
 * SPDX-License-Identifier: GPL-3.0-only OR CDDL-1.0
 */

#ifndef IPRT_INCLUDED_nocrt_string_h
#define IPRT_INCLUDED_nocrt_string_h
#ifndef RT_WITHOUT_PRAGMA_ONCE
# pragma once
#endif

#include <iprt/types.h>

/* Dummy for now, fix when/if needed. */
typedef struct RT_NOCRT(mbstate_t)
{
    unsigned long whatever;
} RT_NOCRT(mbstate_t);


RT_C_DECLS_BEGIN

void       *RT_NOCRT(memchr)(const void *pv, int ch, size_t cb);
int         RT_NOCRT(memcmp)(const void *pv1, const void *pv2, size_t cb);
void       *RT_NOCRT(memcpy)(void *pvDst, const void *pvSrc, size_t cb);
void       *RT_NOCRT(mempcpy)(void *pvDst, const void *pvSrc, size_t cb);
void       *RT_NOCRT(memrchr)(const void *pv, int ch, size_t cb);
void       *RT_NOCRT(memmove)(void *pvDst, const void *pvSrc, size_t cb);
void       *RT_NOCRT(memset)(void *pvDst, int ch, size_t cb);

char       *RT_NOCRT(strcat)(char *pszDst, const char *pszSrc);
char       *RT_NOCRT(strncat)(char *pszDst, const char *pszSrc, size_t cch);
char       *RT_NOCRT(strchr)(const char *psz, int ch);
char       *RT_NOCRT(strrchr)(const char *psz, int ch);
int         RT_NOCRT(strcmp)(const char *psz1, const char *psz2);
int         RT_NOCRT(strncmp)(const char *psz1, const char *psz2, size_t cch);
int         RT_NOCRT(stricmp)(const char *psz1, const char *psz2);
int         RT_NOCRT(strnicmp)(const char *psz1, const char *psz2, size_t cch);
int         RT_NOCRT(strcmpcase)(const char *psz1, const char *psz2, size_t cch);
int         RT_NOCRT(strcoll)(const char *psz1, const char *psz2);
char       *RT_NOCRT(strcpy)(char *pszDst, const char *pszSrc);
char       *RT_NOCRT(strncpy)(char *pszDst, const char *pszSrc, size_t cch);
char       *RT_NOCRT(strcat)(char *pszDst, const char *pszSrc);
char       *RT_NOCRT(strncat)(char *pszDst, const char *pszSrc, size_t cch);
size_t      RT_NOCRT(strlen)(const char *psz);
size_t      RT_NOCRT(strnlen)(const char *psz, size_t cch);
size_t      RT_NOCRT(strspn)(const char *psz, const char *pszBreakChars);
size_t      RT_NOCRT(strcspn)(const char *psz, const char *pszBreakChars);
char       *RT_NOCRT(strpbrk)(const char *psz, const char *pszBreakChars);
char       *RT_NOCRT(strstr)(const char *psz, const char *pszSub);
char       *RT_NOCRT(strtok)(char *psz, const char *pszDelim);
char       *RT_NOCRT(strtok_r)(char *psz, const char *pszDelim, char **ppszSave);
#if 0 /* C++11:  */
char       *RT_NOCRT(strtok_s)(char *psz, /*rsize_t*/ size_t cchMax, const char *pszDelim, char **ppszSave);
#else /* Microsoft: */
char       *RT_NOCRT(strtok_s)(char *psz, const char *pszDelim, char **ppszSave);
#endif
size_t      RT_NOCRT(strxfrm)(char *pszDst, const char *pszSrc, size_t cch);

size_t      RT_NOCRT(wcslen)(const wchar_t *pwsz);
wchar_t    *RT_NOCRT(wcscat)(wchar_t *pwszDst, const wchar_t *pwszSrc);
wchar_t    *RT_NOCRT(wcschr)(const wchar_t *pwsz, wchar_t wc);
wchar_t    *RT_NOCRT(wcscpy)(wchar_t *pwszDst, const wchar_t *pwszSrc);
int         RT_NOCRT(wcsicmp)(const wchar_t *pwsz1, const wchar_t *pwsz2);
size_t      RT_NOCRT(wcstombs)(char *pszDst, const wchar_t *pszSrc, size_t cbDst);


/* Underscored versions for MSC compatibility (mesa #defines regular to _regular
   a lot, which is why we really need these prototypes). */
void       *RT_NOCRT(_memchr)(const void *pv, int ch, size_t cb);
int         RT_NOCRT(_memcmp)(const void *pv1, const void *pv2, size_t cb);
void       *RT_NOCRT(_memcpy)(void *pvDst, const void *pvSrc, size_t cb);
void       *RT_NOCRT(_mempcpy)(void *pvDst, const void *pvSrc, size_t cb);
void       *RT_NOCRT(_memrchr)(const void *pv, int ch, size_t cb);
void       *RT_NOCRT(_memmove)(void *pvDst, const void *pvSrc, size_t cb);
void       *RT_NOCRT(_memset)(void *pvDst, int ch, size_t cb);

char       *RT_NOCRT(_strcat)(char *pszDst, const char *pszSrc);
char       *RT_NOCRT(_strncat)(char *pszDst, const char *pszSrc, size_t cch);
char       *RT_NOCRT(_strchr)(const char *psz, int ch);
char       *RT_NOCRT(_strrchr)(const char *psz, int ch);
int         RT_NOCRT(_strcmp)(const char *psz1, const char *psz2);
int         RT_NOCRT(_strncmp)(const char *psz1, const char *psz2, size_t cch);
int         RT_NOCRT(_stricmp)(const char *psz1, const char *psz2);
int         RT_NOCRT(_strnicmp)(const char *psz1, const char *psz2, size_t cch);
int         RT_NOCRT(_strcmpcase)(const char *psz1, const char *psz2, size_t cch);
int         RT_NOCRT(_strcoll)(const char *psz1, const char *psz2);
char       *RT_NOCRT(_strcpy)(char *pszDst, const char *pszSrc);
char       *RT_NOCRT(_strncpy)(char *pszDst, const char *pszSrc, size_t cch);
char       *RT_NOCRT(_strcat)(char *pszDst, const char *pszSrc);
char       *RT_NOCRT(_strncat)(char *pszDst, const char *pszSrc, size_t cch);
size_t      RT_NOCRT(_strlen)(const char *psz);
size_t      RT_NOCRT(_strnlen)(const char *psz, size_t cch);
size_t      RT_NOCRT(_strspn)(const char *psz, const char *pszBreakChars);
size_t      RT_NOCRT(_strcspn)(const char *psz, const char *pszBreakChars);
char       *RT_NOCRT(_strpbrk)(const char *psz, const char *pszBreakChars);
char       *RT_NOCRT(_strstr)(const char *psz, const char *pszSub);
char       *RT_NOCRT(_strtok)(char *psz, const char *pszDelim);
char       *RT_NOCRT(_strtok_r)(char *psz, const char *pszDelim, char **ppszSave);
#if 0 /* C++11:  */
char       *RT_NOCRT(_strtok_s)(char *psz, /*rsize_t*/ size_t cchMax, const char *pszDelim, char **ppszSave);
#else /* Microsoft: */
char       *RT_NOCRT(_strtok_s)(char *psz, const char *pszDelim, char **ppszSave);
#endif
size_t      RT_NOCRT(_strxfrm)(char *pszDst, const char *pszSrc, size_t cch);

size_t      RT_NOCRT(_wcslen)(const wchar_t *pwsz);
wchar_t    *RT_NOCRT(_wcscat)(wchar_t *pwszDst, const wchar_t *pwszSrc);
wchar_t    *RT_NOCRT(_wcschr)(const wchar_t *pwsz, wchar_t wc);
wchar_t    *RT_NOCRT(_wcscpy)(wchar_t *pwszDst, const wchar_t *pwszSrc);
int         RT_NOCRT(_wcsicmp)(const wchar_t *pwsz1, const wchar_t *pwsz2);
size_t      RT_NOCRT(_wcstombs)(char *pszDst, const wchar_t *pszSrc, size_t cbDst);


#if !defined(RT_WITHOUT_NOCRT_WRAPPERS) && !defined(RT_WITHOUT_NOCRT_WRAPPER_ALIASES)
# define memchr         RT_NOCRT(memchr)
# define memcmp         RT_NOCRT(memcmp)
# define memcpy         RT_NOCRT(memcpy)
# define mempcpy        RT_NOCRT(mempcpy)
# define memrchr        RT_NOCRT(memrchr)
# define memmove        RT_NOCRT(memmove)
# define memset         RT_NOCRT(memset)

# define strcat         RT_NOCRT(strcat)
# define strncat        RT_NOCRT(strncat)
# define strchr         RT_NOCRT(strchr)
# define strrchr        RT_NOCRT(strrchr)
# define strcmp         RT_NOCRT(strcmp)
# define strncmp        RT_NOCRT(strncmp)
# define stricmp        RT_NOCRT(stricmp)
# define strnicmp       RT_NOCRT(strnicmp)
# define strcmpcase     RT_NOCRT(strcmpcase)
# define strcoll        RT_NOCRT(strcoll)
# define strcpy         RT_NOCRT(strcpy)
# define strncpy        RT_NOCRT(strncpy)
# define strcat         RT_NOCRT(strcat)
# define strncat        RT_NOCRT(strncat)
# define strlen         RT_NOCRT(strlen)
# define strnlen        RT_NOCRT(strnlen)
# define strspn         RT_NOCRT(strspn)
# define strcspn        RT_NOCRT(strcspn)
# define strpbrk        RT_NOCRT(strpbrk)
# define strstr         RT_NOCRT(strstr)
# define strtok         RT_NOCRT(strtok)
# define strtok_r       RT_NOCRT(strtok_r)
# define strtok_s       RT_NOCRT(strtok_s)
# define strxfrm        RT_NOCRT(strxfrm)

# define wcslen         RT_NOCRT(wcslen)
# define wcscat         RT_NOCRT(wcscat)
# define wcschr         RT_NOCRT(wcschr)
# define wcscpy         RT_NOCRT(wcscpy)
# define wcsicmp        RT_NOCRT(wcsicmp)
# define wcstombs       RT_NOCRT(wcstombs)

/* Underscored: */
# define _memchr        RT_NOCRT(memchr)
# define _memcmp        RT_NOCRT(memcmp)
# define _memcpy        RT_NOCRT(memcpy)
# define _mempcpy       RT_NOCRT(mempcpy)
# define _memrchr       RT_NOCRT(memrchr)
# define _memmove       RT_NOCRT(memmove)
# define _memset        RT_NOCRT(memset)

# define _strcat        RT_NOCRT(strcat)
# define _strncat       RT_NOCRT(strncat)
# define _strchr        RT_NOCRT(strchr)
# define _strrchr       RT_NOCRT(strrchr)
# define _strcmp        RT_NOCRT(strcmp)
# define _strncmp       RT_NOCRT(strncmp)
# define _stricmp       RT_NOCRT(stricmp)
# define _strnicmp      RT_NOCRT(strnicmp)
# define _strcmpcase    RT_NOCRT(strcmpcase)
# define _strcoll       RT_NOCRT(strcoll)
# define _strcpy        RT_NOCRT(strcpy)
# define _strncpy       RT_NOCRT(strncpy)
# define _strcat        RT_NOCRT(strcat)
# define _strncat       RT_NOCRT(strncat)
# define _strlen        RT_NOCRT(strlen)
# define _strnlen       RT_NOCRT(strnlen)
# define _strspn        RT_NOCRT(strspn)
# define _strcspn       RT_NOCRT(strcspn)
# define _strpbrk       RT_NOCRT(strpbrk)
# define _strstr        RT_NOCRT(strstr)
# define _strtok        RT_NOCRT(strtok)
# define _strtok_r      RT_NOCRT(strtok_r)
# define _strtok_s      RT_NOCRT(strtok_s)
# define _strxfrm       RT_NOCRT(strxfrm)

# define _wcslen        RT_NOCRT(wcslen)
# define _wcscat        RT_NOCRT(wcscat)
# define _wcschr        RT_NOCRT(wcschr)
# define _wcscpy        RT_NOCRT(wcscpy)
# define _wcsicmp       RT_NOCRT(wcsicmp)
# define _wcstombs      RT_NOCRT(wcstombs)
#endif


#ifdef IPRT_NO_CRT_FOR_3RD_PARTY
/*
 * Only for external libraries and such.
 */

const char *RT_NOCRT(strerror)(int iErrNo);
char       *RT_NOCRT(strdup)(const char *pszSrc);

/* Underscored: */
const char *RT_NOCRT(_strerror)(int iErrNo);
char       *RT_NOCRT(_strdup)(const char *pszSrc);

# if !defined(RT_WITHOUT_NOCRT_WRAPPERS) && !defined(RT_WITHOUT_NOCRT_WRAPPER_ALIASES)
#  define strerror  RT_NOCRT(strerror)
#  define strdup    RT_NOCRT(strdup)

/* Underscored: */
#  define _strerror RT_NOCRT(strerror)
#  define _strdup   RT_NOCRT(strdup)
# endif

#endif /* IPRT_NO_CRT_FOR_3RD_PARTY */

RT_C_DECLS_END

#endif /* !IPRT_INCLUDED_nocrt_string_h */