source: trunk/src/crtdll/crt_string.cpp@ 2618

Last change on this file since 2618 was 2618, checked in by sandervl, 26 years ago

JW: Update

File size: 11.7 KB
Line 
1/* $Id: crt_string.cpp,v 1.1 2000-02-03 21:37:48 sandervl Exp $ */
2
3/*
4 * The C RunTime DLL
5 *
6 * Implements C run-time functionality as known from UNIX.
7 *
8 * Partialy based on Wine
9 *
10 * Copyright 1996,1998 Marcus Meissner
11 * Copyright 1996 Jukka Iivonen
12 * Copyright 1997 Uwe Bonnes
13 * Copyright 1999-2000 Jens Wiessner
14 *
15 * CRTDLL - string functions
16 *
17 */
18
19#include <odin.h>
20#include <os2win.h>
21#include <ctype.h>
22#include <heapstring.h>
23#include <string.h>
24
25
26/*********************************************************************
27 * _strcmpi (CRTDLL.280)
28 */
29void CDECL CRTDLL__strcmpi( LPCSTR s1, LPCSTR s2 )
30{
31 dprintf2(("CRTDLL: _strcmpi(%08xh, %08xh)\n",
32 s1,
33 s2));
34
35 lstrcmpiA( s1, s2 );
36}
37
38
39/*********************************************************************
40 * CRTDLL__strdate (CRTDLL.281)
41 */
42char * CDECL CRTDLL__strdate( char *buf )
43{
44 dprintf2(("CRTDLL: _strdate\n"));
45 return(_strdate(buf));
46}
47
48
49/*********************************************************************
50 * CRTDLL__strdec (CRTDLL.282)
51 */
52char * CDECL CRTDLL__strdec( const char *, const char *p )
53{
54 dprintf2(("CRTDLL: _strdec\n"));
55 return( (char *)(p-1) );
56}
57
58
59/*********************************************************************
60 * CRTDLL__strdup (CRTDLL.283)
61 */
62LPSTR CDECL CRTDLL__strdup(LPCSTR ptr)
63{
64 dprintf2(("CRTDLL: _strdup\n"));
65 return HEAP_strdupA(GetProcessHeap(),0,ptr);
66}
67
68
69/*********************************************************************
70 * _stricmp (CRTDLL.285)
71 */
72int CDECL CRTDLL__stricmp(const LPSTR str1,
73 const LPSTR str2)
74{
75 dprintf2(("CRTDLL: _stricmp(%s,%s)\n",
76 str1,
77 str2));
78
79 return (stricmp(str1, str2));
80}
81
82
83
84/*********************************************************************
85 * CRTDLL__stricoll (CRTDLL.286)
86 */
87int CDECL CRTDLL__stricoll( const char *s1, const char *s2 )
88{
89 dprintf2(("CRTDLL: _stricoll\n"));
90 return stricmp(s1,s2);
91}
92
93
94/*********************************************************************
95 * CRTDLL__strinc (CRTDLL.287)
96 */
97char * CDECL CRTDLL__strinc( const char *p )
98{
99 dprintf2(("CRTDLL: _strinc\n"));
100 return( (char *)(p+1) );
101}
102
103
104/*********************************************************************
105 * _strlwr (CRTDLL.288)
106 */
107CHAR * CDECL CRTDLL__strlwr(char *x)
108{
109 char *y =x;
110
111 dprintf2(("CRTDLL: _strlwr got %s\n", x));
112 while (*y) {
113 if ((*y > 0x40) && (*y< 0x5b))
114 *y = *y + 0x20;
115 y++;
116 }
117 dprintf2((" returned %s\n", x));
118
119 return x;
120}
121
122
123/*********************************************************************
124 * CRTDLL__strncnt (CRTDLL.289)
125 */
126size_t CDECL CRTDLL__strncnt( const char *p, size_t l )
127{
128 dprintf2(("CRTDLL: _strncnt\n"));
129 size_t i;
130 i = strlen(p);
131 return( (i>l) ? l : i );
132}
133
134/*********************************************************************
135 * CRTDLL__strnextc (CRTDLL.290)
136 */
137unsigned int CDECL CRTDLL__strnextc( const char *p )
138{
139 dprintf2(("CRTDLL: _strnextc\n"));
140 return( (unsigned int)*p );
141}
142
143
144/*********************************************************************
145 * CRTDLL__strnicmp (CRTDLL.291)
146 */
147int CDECL CRTDLL__strnicmp( LPCSTR s1, LPCSTR s2, INT n )
148{
149 dprintf2(("CRTDLL: _strnicmp (%s,%s,%d)\n",
150 s1,
151 s2,
152 n));
153
154 // @@@PH: sure it's not a UNICODE API?
155 return (lstrncmpiA(s1,s2,n));
156}
157
158
159/*********************************************************************
160 * CRTDLL__strninc (CRTDLL.292)
161 */
162char * CDECL CRTDLL__strninc( const char *p, size_t l )
163{
164 dprintf2(("CRTDLL: _strninc\n"));
165 return( (char *)(p+l) );
166}
167
168
169/*********************************************************************
170 * CRTDLL__strnset (CRTDLL.293)
171 */
172char * CDECL CRTDLL__strnset(char *string, int c, size_t count)
173{
174 dprintf2(("CRTDLL: _strnset\n"));
175 char *dst;
176
177 dst = string;
178 while (count > 0 && *dst != 0)
179 {
180 *dst++ = (char)c;
181 --count;
182 }
183 return string;
184}
185
186
187/*********************************************************************
188 * CRTDLL__strrev (CRTDLL.294)
189 */
190char * CDECL CRTDLL__strrev( char *string )
191{
192 dprintf2(("CRTDLL: _strrev\n"));
193 char *p, *q, c;
194
195 p = q = string;
196 while (*q != 0)
197 ++q;
198 --q; /* Benign, as string must be != 0 */
199 while ((size_t)q > (size_t)p)
200 {
201 c = *p; *p = *q; *q = c;
202 ++p; --q;
203 }
204 return string;
205}
206
207
208/*********************************************************************
209 * CRTDLL__strset (CRTDLL.295)
210 */
211char * CDECL CRTDLL__strset(char *string, int c)
212{
213 dprintf2(("CRTDLL: _strset\n"));
214 char *dst;
215
216 dst = string;
217 while (*dst != 0)
218 *dst++ = (char)c;
219 return string;
220}
221
222
223/*********************************************************************
224 * CRTDLL__strspnp (CRTDLL.296)
225 */
226char * CDECL CRTDLL__strspnp( const char *p1, const char *p2 )
227{
228 dprintf2(("CRTDLL: _strspnp\n"));
229 return( (*(p1 += strspn(p1,p2))!='\0') ? (char*)p1 : NULL );
230}
231
232
233/*********************************************************************
234 * CRTDLL__strtime (CRTDLL.297)
235 */
236char * CDECL CRTDLL__strtime( char *buf )
237{
238 dprintf2(("CRTDLL: _strtime\n"));
239 return (_strtime(buf));
240}
241
242
243/*********************************************************************
244 * _strupr (CRTDLL.298)
245 */
246LPSTR CDECL CRTDLL__strupr(LPSTR x)
247{
248 dprintf2(("CRTDLL: _strupr(%s)\n",
249 x));
250
251 LPSTR y=x;
252
253 while (*y)
254 {
255 *y=toupper(*y);
256 y++;
257 }
258 return x;
259}
260
261
262/*********************************************************************
263 * strcat (CRTDLL.459)
264 */
265LPSTR CDECL CRTDLL_strcat( LPSTR str1,
266 const LPSTR str2)
267{
268 dprintf2(("CRTDLL: strcat\n"));
269
270 return (strcat(str1, str2));
271}
272
273
274/*********************************************************************
275 * strchr (CRTDLL.460)
276 */
277LPSTR CDECL CRTDLL_strchr(const LPSTR str,
278 int i)
279{
280 dprintf2(("CRTDLL: strchr(%s,%08xh)\n",
281 str,
282 i));
283
284 return (strchr(str, i));
285}
286
287
288/*********************************************************************
289 * strcmp (CRTDLL.461)
290 */
291int CDECL CRTDLL_strcmp(const LPSTR str1,
292 const LPSTR str2)
293{
294 dprintf2(("CRTDLL: strcmp(%s,%s)\n",
295 str1,
296 str2));
297
298 return (strcmp(str1, str2));
299}
300
301
302/*********************************************************************
303 * strcoll (CRTDLL.462)
304 */
305int CDECL CRTDLL_strcoll( const char *s1, const char *s2 )
306{
307 dprintf2(("CRTDLL: strcoll\n"));
308 return strcoll(s1, s2);
309}
310
311
312/*********************************************************************
313 * strcpy (CRTDLL.463)
314 */
315LPSTR CDECL CRTDLL_strcpy( LPSTR str1,
316 const LPSTR str2)
317{
318 dprintf2(("CRTDLL: strcpy\n"));
319
320 return (strcpy(str1, str2));
321}
322
323
324/*********************************************************************
325 * strcspn (CRTDLL.464)
326 */
327size_t CDECL CRTDLL_strcspn(const LPSTR str1,
328 LPSTR str2)
329{
330 dprintf2(("CRTDLL: strcspn(%s,%s)\n",
331 str1,
332 str2));
333
334 return (strcspn(str1, str2));
335}
336
337
338/*********************************************************************
339 * strerror (CRTDLL.465)
340 */
341char * CDECL CRTDLL_strerror( int errnum )
342{
343 dprintf2(("CRTDLL: strerror\n"));
344 return strerror(errnum);
345}
346
347
348/*********************************************************************
349 * strftime (CRTDLL.466)
350 */
351size_t CDECL CRTDLL_strftime( char *s, size_t maxsiz, const char *fmt, const struct tm *tp )
352{
353 dprintf2(("CRTDLL: strftime\n"));
354 return strftime(s, maxsiz, fmt, tp);
355}
356
357
358/*********************************************************************
359 * strlen (CRTDLL.467)
360 */
361size_t CDECL CRTDLL_strlen(const LPSTR str)
362{
363 dprintf2(("CRTDLL: strlen(%s)\n",
364 str));
365
366 return (strlen(str));
367}
368
369
370/*********************************************************************
371 * strncat (CRTDLL.468)
372 */
373LPSTR CDECL CRTDLL_strncat( LPSTR str1,
374 const LPSTR str2,
375 size_t i)
376{
377 dprintf2(("CRTDLL: strncat(%s,%s,%08xh)\n",
378 str1,
379 str2,
380 i));
381
382 return (strncat(str1, str2, i));
383}
384
385
386/*********************************************************************
387 * strncmp (CRTDLL.469)
388 */
389int CDECL CRTDLL_strncmp(const LPSTR str1,
390 const LPSTR str2,
391 size_t i)
392{
393 dprintf2(("CRTDLL: strncmp(%s,%s,%08xh)\n",
394 str1,
395 str2,
396 i));
397
398 return (strncmp(str1, str2, i));
399}
400
401
402/*********************************************************************
403 * strncpy (CRTDLL.470)
404 */
405LPSTR CDECL CRTDLL_strncpy(const LPSTR str1,
406 const LPSTR str2,
407 size_t i)
408{
409 dprintf2(("CRTDLL: strncpy(%s,%s,%08xh)\n",
410 str1,
411 str2,
412 i));
413
414 return (strncpy(str1, str2, i));
415}
416
417
418/*********************************************************************
419 * strpbrk (CRTDLL.471)
420 */
421LPSTR CDECL CRTDLL_strpbrk(const LPSTR str1,
422 const LPSTR str2)
423{
424 dprintf2(("CRTDLL: strpbrk(%s,%s)\n",
425 str1,
426 str2));
427
428 return (strpbrk(str1, str2));
429}
430
431
432/*********************************************************************
433 * strrchr (CRTDLL.472)
434 */
435LPSTR CDECL CRTDLL_strrchr(const LPSTR str,
436 size_t i)
437{
438 dprintf2(("CRTDLL: strrchr(%s,%08xh)\n",
439 str,
440 i));
441
442 return (strrchr(str, i));
443}
444
445
446/*********************************************************************
447 * strspn (CRTDLL.473)
448 */
449size_t CDECL CRTDLL_strspn(const LPSTR str1,
450 const LPSTR str2)
451{
452 dprintf2(("CRTDLL: strspn(%s,%s)\n",
453 str1,
454 str2));
455
456 return (strspn(str1, str2));
457}
458
459
460/*********************************************************************
461 * strstr (CRTDLL.474)
462 */
463LPSTR CDECL CRTDLL_strstr(const LPSTR str1,
464 const LPSTR str2)
465{
466 dprintf2(("CRTDLL: strstr(%s,%s)\n",
467 str1,
468 str2));
469
470 return (strstr(str1, str2));
471}
472
473
474/*********************************************************************
475 * strtod (CRTDLL.475)
476 */
477double CDECL CRTDLL_strtod( const char *nptr, char **endptr )
478{
479 dprintf2(("CRTDLL: strtod\n"));
480 return strtod(nptr, endptr);
481}
482
483
484/*********************************************************************
485 * strtok (CRTDLL.476)
486 */
487char * CDECL CRTDLL_strtok( char *s1, const char *s2 )
488{
489 dprintf2(("CRTDLL: strtok\n"));
490 return strtok(s1, s2);
491}
492
493
494/*********************************************************************
495 * strtol (CRTDLL.477)
496 */
497long int CDECL CRTDLL_strtol( const char *nptr, char **endptr, int base )
498{
499 dprintf2(("CRTDLL: strtol\n"));
500 return strtol(nptr, endptr, base);
501}
502
503
504/*********************************************************************
505 * strtoul (CRTDLL.478)
506 */
507unsigned long CDECL CRTDLL_strtoul( const char *nptr, char **endptr, int base )
508{
509 dprintf2(("CRTDLL: strtoul\n"));
510 return strtoul(nptr, endptr, base);
511}
512
513
514/*********************************************************************
515 * strxfrm (CRTDLL.479)
516 */
517size_t CDECL CRTDLL_strxfrm( char *s1, const char *s2, size_t n )
518{
519 dprintf2(("CRTDLL: strxfrm\n"));
520 return strxfrm(s1, s2, n);
521}
Note: See TracBrowser for help on using the repository browser.