string.h
001: 
002: 
003: 
004: 
005: 
006: 
007: 
008: 
009: 
010: 
011: 
012: 
013: 
014: 
015: 
016: 
017: 
018: 
019: 
020: 
021: 
022: 
023: 
024: #ifndef _STRING_H
025: #define _STRING_H       1
026: 
027: #include <features.h>
028: 
029: __BEGIN_DECLS
030: 
031: 
032: #define __need_size_t
033: #define __need_NULL
034: #include <stddef.h>
035: 
036: 
037: #if defined __cplusplus && __GNUC_PREREQ (4, 4)
038: # define __CORRECT_ISO_CPP_STRING_H_PROTO
039: #endif
040: 
041: 
042: __BEGIN_NAMESPACE_STD
043: 
044: extern void *memcpy (void *__restrict __dest,
045:                      __const void *__restrict __src, size_t __n)
046:      __THROW __nonnull ((1, 2));
047: 
048: 
049: extern void *memmove (void *__dest, __const void *__src, size_t __n)
050:      __THROW __nonnull ((1, 2));
051: __END_NAMESPACE_STD
052: 
053: 
054: 
055: 
056: #if defined __USE_SVID || defined __USE_BSD || defined __USE_XOPEN
057: extern void *memccpy (void *__restrict __dest, __const void *__restrict __src,
058:                       int __c, size_t __n)
059:      __THROW __nonnull ((1, 2));
060: #endif 
061: 
062: 
063: __BEGIN_NAMESPACE_STD
064: 
065: extern void *memset (void *__s, int __c, size_t __n) __THROW __nonnull ((1));
066: 
067: 
068: extern int memcmp (__const void *__s1, __const void *__s2, size_t __n)
069:      __THROW __attribute_pure__ __nonnull ((1, 2));
070: 
071: 
072: #ifdef __CORRECT_ISO_CPP_STRING_H_PROTO
073: extern "C++"
074: {
075: extern void *memchr (void *__s, int __c, size_t __n)
076:       __THROW __asm ("memchr") __attribute_pure__ __nonnull ((1));
077: extern __const void *memchr (__const void *__s, int __c, size_t __n)
078:       __THROW __asm ("memchr") __attribute_pure__ __nonnull ((1));
079: 
080: # ifdef __OPTIMIZE__
081: __extern_always_inline void *
082: memchr (void *__s, int __c, size_t __n) __THROW
083: {
084:   return __builtin_memchr (__s, __c, __n);
085: }
086: 
087: __extern_always_inline __const void *
088: memchr (__const void *__s, int __c, size_t __n) __THROW
089: {
090:   return __builtin_memchr (__s, __c, __n);
091: }
092: # endif
093: }
094: #else
095: extern void *memchr (__const void *__s, int __c, size_t __n)
096:       __THROW __attribute_pure__ __nonnull ((1));
097: #endif
098: __END_NAMESPACE_STD
099: 
100: #ifdef __USE_GNU
101: 
102: 
103: # ifdef __CORRECT_ISO_CPP_STRING_H_PROTO
104: extern "C++" void *rawmemchr (void *__s, int __c)
105:      __THROW __asm ("rawmemchr") __attribute_pure__ __nonnull ((1));
106: extern "C++" __const void *rawmemchr (__const void *__s, int __c)
107:      __THROW __asm ("rawmemchr") __attribute_pure__ __nonnull ((1));
108: # else
109: extern void *rawmemchr (__const void *__s, int __c)
110:      __THROW __attribute_pure__ __nonnull ((1));
111: # endif
112: 
113: 
114: # ifdef __CORRECT_ISO_CPP_STRING_H_PROTO
115: extern "C++" void *memrchr (void *__s, int __c, size_t __n)
116:       __THROW __asm ("memrchr") __attribute_pure__ __nonnull ((1));
117: extern "C++" __const void *memrchr (__const void *__s, int __c, size_t __n)
118:       __THROW __asm ("memrchr") __attribute_pure__ __nonnull ((1));
119: # else
120: extern void *memrchr (__const void *__s, int __c, size_t __n)
121:       __THROW __attribute_pure__ __nonnull ((1));
122: # endif
123: #endif
124: 
125: 
126: __BEGIN_NAMESPACE_STD
127: 
128: extern char *strcpy (char *__restrict __dest, __const char *__restrict __src)
129:      __THROW __nonnull ((1, 2));
130: 
131: extern char *strncpy (char *__restrict __dest,
132:                       __const char *__restrict __src, size_t __n)
133:      __THROW __nonnull ((1, 2));
134: 
135: 
136: extern char *strcat (char *__restrict __dest, __const char *__restrict __src)
137:      __THROW __nonnull ((1, 2));
138: 
139: extern char *strncat (char *__restrict __dest, __const char *__restrict __src,
140:                       size_t __n) __THROW __nonnull ((1, 2));
141: 
142: 
143: extern int strcmp (__const char *__s1, __const char *__s2)
144:      __THROW __attribute_pure__ __nonnull ((1, 2));
145: 
146: extern int strncmp (__const char *__s1, __const char *__s2, size_t __n)
147:      __THROW __attribute_pure__ __nonnull ((1, 2));
148: 
149: 
150: extern int strcoll (__const char *__s1, __const char *__s2)
151:      __THROW __attribute_pure__ __nonnull ((1, 2));
152: 
153: extern size_t strxfrm (char *__restrict __dest,
154:                        __const char *__restrict __src, size_t __n)
155:      __THROW __nonnull ((2));
156: __END_NAMESPACE_STD
157: 
158: #ifdef __USE_XOPEN2K8
159: 
160: 
161: 
162: # include <xlocale.h>
163: 
164: 
165: extern int strcoll_l (__const char *__s1, __const char *__s2, __locale_t __l)
166:      __THROW __attribute_pure__ __nonnull ((1, 2, 3));
167: 
168: extern size_t strxfrm_l (char *__dest, __const char *__src, size_t __n,
169:                          __locale_t __l) __THROW __nonnull ((2, 4));
170: #endif
171: 
172: #if defined __USE_SVID || defined __USE_BSD || defined __USE_XOPEN_EXTENDED \
173:     || defined __USE_XOPEN2K8
174: 
175: extern char *strdup (__const char *__s)
176:      __THROW __attribute_malloc__ __nonnull ((1));
177: #endif
178: 
179: 
180: 
181: 
182: #if defined __USE_XOPEN2K8
183: extern char *strndup (__const char *__string, size_t __n)
184:      __THROW __attribute_malloc__ __nonnull ((1));
185: #endif
186: 
187: #if defined __USE_GNU && defined __GNUC__
188: 
189: # define strdupa(s)                                                           \
190:   (__extension__                                                              \
191:     ({                                                                        \
192:       __const char *__old = (s);                                              \
193:       size_t __len = strlen (__old) + 1;                                      \
194:       char *__new = (char *) __builtin_alloca (__len);                        \
195:       (char *) memcpy (__new, __old, __len);                                  \
196:     }))
197: 
198: 
199: # define strndupa(s, n)                                                       \
200:   (__extension__                                                              \
201:     ({                                                                        \
202:       __const char *__old = (s);                                              \
203:       size_t __len = strnlen (__old, (n));                                    \
204:       char *__new = (char *) __builtin_alloca (__len + 1);                    \
205:       __new[__len] = '\0';                                                    \
206:       (char *) memcpy (__new, __old, __len);                                  \
207:     }))
208: #endif
209: 
210: __BEGIN_NAMESPACE_STD
211: 
212: #ifdef __CORRECT_ISO_CPP_STRING_H_PROTO
213: extern "C++"
214: {
215: extern char *strchr (char *__s, int __c)
216:      __THROW __asm ("strchr") __attribute_pure__ __nonnull ((1));
217: extern __const char *strchr (__const char *__s, int __c)
218:      __THROW __asm ("strchr") __attribute_pure__ __nonnull ((1));
219: 
220: # ifdef __OPTIMIZE__
221: __extern_always_inline char *
222: strchr (char *__s, int __c) __THROW
223: {
224:   return __builtin_strchr (__s, __c);
225: }
226: 
227: __extern_always_inline __const char *
228: strchr (__const char *__s, int __c) __THROW
229: {
230:   return __builtin_strchr (__s, __c);
231: }
232: # endif
233: }
234: #else
235: extern char *strchr (__const char *__s, int __c)
236:      __THROW __attribute_pure__ __nonnull ((1));
237: #endif
238: 
239: #ifdef __CORRECT_ISO_CPP_STRING_H_PROTO
240: extern "C++"
241: {
242: extern char *strrchr (char *__s, int __c)
243:      __THROW __asm ("strrchr") __attribute_pure__ __nonnull ((1));
244: extern __const char *strrchr (__const char *__s, int __c)
245:      __THROW __asm ("strrchr") __attribute_pure__ __nonnull ((1));
246: 
247: # ifdef __OPTIMIZE__
248: __extern_always_inline char *
249: strrchr (char *__s, int __c) __THROW
250: {
251:   return __builtin_strrchr (__s, __c);
252: }
253: 
254: __extern_always_inline __const char *
255: strrchr (__const char *__s, int __c) __THROW
256: {
257:   return __builtin_strrchr (__s, __c);
258: }
259: # endif
260: }
261: #else
262: extern char *strrchr (__const char *__s, int __c)
263:      __THROW __attribute_pure__ __nonnull ((1));
264: #endif
265: __END_NAMESPACE_STD
266: 
267: #ifdef __USE_GNU
268: 
269: 
270: # ifdef __CORRECT_ISO_CPP_STRING_H_PROTO
271: extern "C++" char *strchrnul (char *__s, int __c)
272:      __THROW __asm ("strchrnul") __attribute_pure__ __nonnull ((1));
273: extern "C++" __const char *strchrnul (__const char *__s, int __c)
274:      __THROW __asm ("strchrnul") __attribute_pure__ __nonnull ((1));
275: # else
276: extern char *strchrnul (__const char *__s, int __c)
277:      __THROW __attribute_pure__ __nonnull ((1));
278: # endif
279: #endif
280: 
281: __BEGIN_NAMESPACE_STD
282: 
283: 
284: extern size_t strcspn (__const char *__s, __const char *__reject)
285:      __THROW __attribute_pure__ __nonnull ((1, 2));
286: 
287: 
288: extern size_t strspn (__const char *__s, __const char *__accept)
289:      __THROW __attribute_pure__ __nonnull ((1, 2));
290: 
291: #ifdef __CORRECT_ISO_CPP_STRING_H_PROTO
292: extern "C++"
293: {
294: extern char *strpbrk (char *__s, __const char *__accept)
295:      __THROW __asm ("strpbrk") __attribute_pure__ __nonnull ((1, 2));
296: extern __const char *strpbrk (__const char *__s, __const char *__accept)
297:      __THROW __asm ("strpbrk") __attribute_pure__ __nonnull ((1, 2));
298: 
299: # ifdef __OPTIMIZE__
300: __extern_always_inline char *
301: strpbrk (char *__s, __const char *__accept) __THROW
302: {
303:   return __builtin_strpbrk (__s, __accept);
304: }
305: 
306: __extern_always_inline __const char *
307: strpbrk (__const char *__s, __const char *__accept) __THROW
308: {
309:   return __builtin_strpbrk (__s, __accept);
310: }
311: # endif
312: }
313: #else
314: extern char *strpbrk (__const char *__s, __const char *__accept)
315:      __THROW __attribute_pure__ __nonnull ((1, 2));
316: #endif
317: 
318: #ifdef __CORRECT_ISO_CPP_STRING_H_PROTO
319: extern "C++"
320: {
321: extern char *strstr (char *__haystack, __const char *__needle)
322:      __THROW __asm ("strstr") __attribute_pure__ __nonnull ((1, 2));
323: extern __const char *strstr (__const char *__haystack,
324:                              __const char *__needle)
325:      __THROW __asm ("strstr") __attribute_pure__ __nonnull ((1, 2));
326: 
327: # ifdef __OPTIMIZE__
328: __extern_always_inline char *
329: strstr (char *__haystack, __const char *__needle) __THROW
330: {
331:   return __builtin_strstr (__haystack, __needle);
332: }
333: 
334: __extern_always_inline __const char *
335: strstr (__const char *__haystack, __const char *__needle) __THROW
336: {
337:   return __builtin_strstr (__haystack, __needle);
338: }
339: # endif
340: }
341: #else
342: extern char *strstr (__const char *__haystack, __const char *__needle)
343:      __THROW __attribute_pure__ __nonnull ((1, 2));
344: #endif
345: 
346: 
347: 
348: extern char *strtok (char *__restrict __s, __const char *__restrict __delim)
349:      __THROW __nonnull ((2));
350: __END_NAMESPACE_STD
351: 
352: 
353: 
354: extern char *__strtok_r (char *__restrict __s,
355:                          __const char *__restrict __delim,
356:                          char **__restrict __save_ptr)
357:      __THROW __nonnull ((2, 3));
358: #if defined __USE_POSIX || defined __USE_MISC
359: extern char *strtok_r (char *__restrict __s, __const char *__restrict __delim,
360:                        char **__restrict __save_ptr)
361:      __THROW __nonnull ((2, 3));
362: #endif
363: 
364: #ifdef __USE_GNU
365: 
366: # ifdef __CORRECT_ISO_CPP_STRING_H_PROTO
367: extern "C++" char *strcasestr (char *__haystack, __const char *__needle)
368:      __THROW __asm ("strcasestr") __attribute_pure__ __nonnull ((1, 2));
369: extern "C++" __const char *strcasestr (__const char *__haystack,
370:                                        __const char *__needle)
371:      __THROW __asm ("strcasestr") __attribute_pure__ __nonnull ((1, 2));
372: # else
373: extern char *strcasestr (__const char *__haystack, __const char *__needle)
374:      __THROW __attribute_pure__ __nonnull ((1, 2));
375: # endif
376: #endif
377: 
378: #ifdef __USE_GNU
379: 
380: 
381: 
382: extern void *memmem (__const void *__haystack, size_t __haystacklen,
383:                      __const void *__needle, size_t __needlelen)
384:      __THROW __attribute_pure__ __nonnull ((1, 3));
385: 
386: 
387: 
388: extern void *__mempcpy (void *__restrict __dest,
389:                         __const void *__restrict __src, size_t __n)
390:      __THROW __nonnull ((1, 2));
391: extern void *mempcpy (void *__restrict __dest,
392:                       __const void *__restrict __src, size_t __n)
393:      __THROW __nonnull ((1, 2));
394: #endif
395: 
396: 
397: __BEGIN_NAMESPACE_STD
398: 
399: extern size_t strlen (__const char *__s)
400:      __THROW __attribute_pure__ __nonnull ((1));
401: __END_NAMESPACE_STD
402: 
403: #ifdef  __USE_XOPEN2K8
404: 
405: 
406: extern size_t strnlen (__const char *__string, size_t __maxlen)
407:      __THROW __attribute_pure__ __nonnull ((1));
408: #endif
409: 
410: 
411: __BEGIN_NAMESPACE_STD
412: 
413: extern char *strerror (int __errnum) __THROW;
414: __END_NAMESPACE_STD
415: #if defined __USE_XOPEN2K || defined __USE_MISC
416: 
417: 
418: 
419: 
420: 
421: 
422: 
423: # if defined __USE_XOPEN2K && !defined __USE_GNU
424: 
425: 
426: #  ifdef __REDIRECT_NTH
427: extern int __REDIRECT_NTH (strerror_r,
428:                            (int __errnum, char *__buf, size_t __buflen),
429:                            __xpg_strerror_r) __nonnull ((2));
430: #  else
431: extern int __xpg_strerror_r (int __errnum, char *__buf, size_t __buflen)
432:      __THROW __nonnull ((2));
433: #   define strerror_r __xpg_strerror_r
434: #  endif
435: # else
436: 
437: 
438: extern char *strerror_r (int __errnum, char *__buf, size_t __buflen)
439:      __THROW __nonnull ((2));
440: # endif
441: #endif
442: 
443: #ifdef __USE_XOPEN2K8
444: 
445: extern char *strerror_l (int __errnum, __locale_t __l) __THROW;
446: #endif
447: 
448: 
449: 
450: 
451: extern void __bzero (void *__s, size_t __n) __THROW __nonnull ((1));
452: 
453: #ifdef __USE_BSD
454: 
455: extern void bcopy (__const void *__src, void *__dest, size_t __n)
456:      __THROW __nonnull ((1, 2));
457: 
458: 
459: extern void bzero (void *__s, size_t __n) __THROW __nonnull ((1));
460: 
461: 
462: extern int bcmp (__const void *__s1, __const void *__s2, size_t __n)
463:      __THROW __attribute_pure__ __nonnull ((1, 2));
464: 
465: 
466: # ifdef __CORRECT_ISO_CPP_STRING_H_PROTO
467: extern "C++"
468: {
469: extern char *index (char *__s, int __c)
470:      __THROW __asm ("index") __attribute_pure__ __nonnull ((1));
471: extern __const char *index (__const char *__s, int __c)
472:      __THROW __asm ("index") __attribute_pure__ __nonnull ((1));
473: 
474: #  if defined __OPTIMIZE__ && !defined __CORRECT_ISO_CPP_STRINGS_H_PROTO
475: __extern_always_inline char *
476: index (char *__s, int __c) __THROW
477: {
478:   return __builtin_index (__s, __c);
479: }
480: 
481: __extern_always_inline __const char *
482: index (__const char *__s, int __c) __THROW
483: {
484:   return __builtin_index (__s, __c);
485: }
486: #  endif
487: }
488: # else
489: extern char *index (__const char *__s, int __c)
490:      __THROW __attribute_pure__ __nonnull ((1));
491: # endif
492: 
493: 
494: # ifdef __CORRECT_ISO_CPP_STRING_H_PROTO
495: extern "C++"
496: {
497: extern char *rindex (char *__s, int __c)
498:      __THROW __asm ("rindex") __attribute_pure__ __nonnull ((1));
499: extern __const char *rindex (__const char *__s, int __c)
500:      __THROW __asm ("rindex") __attribute_pure__ __nonnull ((1));
501: 
502: #  if defined __OPTIMIZE__ && !defined __CORRECT_ISO_CPP_STRINGS_H_PROTO
503: __extern_always_inline char *
504: rindex (char *__s, int __c) __THROW
505: {
506:   return __builtin_rindex (__s, __c);
507: }
508: 
509: __extern_always_inline __const char *
510: rindex (__const char *__s, int __c) __THROW
511: {
512:   return __builtin_rindex (__s, __c);
513: }
514: #endif
515: }
516: # else
517: extern char *rindex (__const char *__s, int __c)
518:      __THROW __attribute_pure__ __nonnull ((1));
519: # endif
520: 
521: 
522: 
523: extern int ffs (int __i) __THROW __attribute__ ((__const__));
524: 
525: 
526: 
527: # ifdef __USE_GNU
528: extern int ffsl (long int __l) __THROW __attribute__ ((__const__));
529: #  ifdef __GNUC__
530: __extension__ extern int ffsll (long long int __ll)
531:      __THROW __attribute__ ((__const__));
532: #  endif
533: # endif
534: 
535: 
536: extern int strcasecmp (__const char *__s1, __const char *__s2)
537:      __THROW __attribute_pure__ __nonnull ((1, 2));
538: 
539: 
540: extern int strncasecmp (__const char *__s1, __const char *__s2, size_t __n)
541:      __THROW __attribute_pure__ __nonnull ((1, 2));
542: #endif 
543: 
544: #ifdef  __USE_GNU
545: 
546: 
547: extern int strcasecmp_l (__const char *__s1, __const char *__s2,
548:                          __locale_t __loc)
549:      __THROW __attribute_pure__ __nonnull ((1, 2, 3));
550: 
551: extern int strncasecmp_l (__const char *__s1, __const char *__s2,
552:                           size_t __n, __locale_t __loc)
553:      __THROW __attribute_pure__ __nonnull ((1, 2, 4));
554: #endif
555: 
556: #ifdef  __USE_BSD
557: 
558: 
559: extern char *strsep (char **__restrict __stringp,
560:                      __const char *__restrict __delim)
561:      __THROW __nonnull ((1, 2));
562: #endif
563: 
564: #ifdef  __USE_XOPEN2K8
565: 
566: extern char *strsignal (int __sig) __THROW;
567: 
568: 
569: extern char *__stpcpy (char *__restrict __dest, __const char *__restrict __src)
570:      __THROW __nonnull ((1, 2));
571: extern char *stpcpy (char *__restrict __dest, __const char *__restrict __src)
572:      __THROW __nonnull ((1, 2));
573: 
574: 
575: 
576: extern char *__stpncpy (char *__restrict __dest,
577:                         __const char *__restrict __src, size_t __n)
578:      __THROW __nonnull ((1, 2));
579: extern char *stpncpy (char *__restrict __dest,
580:                       __const char *__restrict __src, size_t __n)
581:      __THROW __nonnull ((1, 2));
582: #endif
583: 
584: #ifdef  __USE_GNU
585: 
586: extern int strverscmp (__const char *__s1, __const char *__s2)
587:      __THROW __attribute_pure__ __nonnull ((1, 2));
588: 
589: 
590: extern char *strfry (char *__string) __THROW __nonnull ((1));
591: 
592: 
593: extern void *memfrob (void *__s, size_t __n) __THROW __nonnull ((1));
594: 
595: # ifndef basename
596: 
597: 
598: 
599: 
600: #  ifdef __CORRECT_ISO_CPP_STRING_H_PROTO
601: extern "C++" char *basename (char *__filename)
602:      __THROW __asm ("basename") __nonnull ((1));
603: extern "C++" __const char *basename (__const char *__filename)
604:      __THROW __asm ("basename") __nonnull ((1));
605: #  else
606: extern char *basename (__const char *__filename) __THROW __nonnull ((1));
607: #  endif
608: # endif
609: #endif
610: 
611: 
612: #if defined __GNUC__ && __GNUC__ >= 2
613: # if defined __OPTIMIZE__ && !defined __OPTIMIZE_SIZE__ \
614:      && !defined __NO_INLINE__ && !defined __cplusplus
615: 
616: 
617: 
618: 
619: 
620: 
621: 
622: 
623: 
624: 
625: 
626: 
627: 
628: 
629: 
630: 
631: 
632: 
633: 
634: #  include <bits/string.h>
635: 
636: 
637: #  include <bits/string2.h>
638: # endif
639: 
640: # if __USE_FORTIFY_LEVEL > 0 && defined __extern_always_inline
641: 
642: #  include <bits/string3.h>
643: # endif
644: #endif
645: 
646: __END_DECLS
647: 
648: #endif 
649: 
      
      
      
      
   
      
      
         
            
            © Andrew Scott 2006 -
            2025, 
            All Rights Reserved