diff options
Diffstat (limited to 'include/string.h')
| -rw-r--r-- | include/string.h | 443 | 
1 files changed, 334 insertions, 109 deletions
diff --git a/include/string.h b/include/string.h index 4191f7ba1..3c03c7cee 100644 --- a/include/string.h +++ b/include/string.h @@ -1,141 +1,144 @@ +/* Copyright (C) 1991,92,93,95,96,97,98,99,2000,2001 Free Software Foundation, Inc. +   This file is part of the GNU C Library. -#ifndef __STRING_H -#define __STRING_H -#include <features.h> -#include <sys/types.h> -#include <stddef.h> +   The GNU C Library is free software; you can redistribute it and/or +   modify it under the terms of the GNU Lesser General Public +   License as published by the Free Software Foundation; either +   version 2.1 of the License, or (at your option) any later version. -__BEGIN_DECLS -/* Basic string functions */ +   The GNU C Library 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 +   Lesser General Public License for more details. -/* Return the length of S.  */ -extern size_t strlen __P ((__const char *__s)); -/* Append SRC onto DEST.  */ -extern char *strcat __P ((char *__restrict __dest, -			  __const char *__restrict __src)); -/* Append no more than N characters from SRC onto DEST.  */ -extern char *strncat __P ((char *__restrict __dest, -			   __const char *__restrict __src, size_t __n)); +   You should have received a copy of the GNU Lesser General Public +   License along with the GNU C Library; if not, write to the Free +   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +   02111-1307 USA.  */ -/* Copy SRC to DEST.  */ -extern char *strcpy __P ((char *__restrict __dest, -			  __const char *__restrict __src)); -extern char *stpcpy __P ((char *__restrict __dest, -			  __const char *__restrict __src)); -extern char *stpncpy __P ((char *__restrict __dest, -			   __const char *__restrict __src, size_t __n)); -/* Copy no more than N characters of SRC to DEST.  */ -extern char *strncpy __P ((char *__restrict __dest, -			   __const char *__restrict __src, size_t __n)); +/* + *	ISO C99 Standard: 7.21 String handling	<string.h> + */ -/* Compare S1 and S2.  */ -extern int strcmp __P ((__const char *__s1, __const char *__s2)); -/* Compare N characters of S1 and S2.  */ -extern int strncmp __P ((__const char *__s1, __const char *__s2, size_t __n)); +#ifndef	_STRING_H +#define	_STRING_H	1 -/* Find the first occurrence of C in S.  */ -extern char *strchr __P ((__const char *__s, int __c)); -/* Find the last occurrence of C in S.  */ -extern char *strrchr __P ((__const char *__s, int __c)); -/* Duplicate S, returning an identical malloc'd string.  */ -extern char *strdup __P ((__const char *__s)); +#include <features.h> + +__BEGIN_DECLS + +/* Get size_t and NULL from <stddef.h>.  */ +#define	__need_size_t +#define	__need_NULL +#include <stddef.h> -/* Basic mem functions */  /* Copy N bytes of SRC to DEST.  */ -extern __ptr_t memcpy __P ((__ptr_t __restrict __dest, -			    __const __ptr_t __restrict __src, size_t __n)); +extern void *memcpy (void *__restrict __dest, +		     __const void *__restrict __src, size_t __n) __THROW; +/* Copy N bytes of SRC to DEST, guaranteeing +   correct behavior for overlapping strings.  */ +extern void *memmove (void *__dest, __const void *__src, size_t __n) +     __THROW; +  /* Copy no more than N bytes of SRC to DEST, stopping when C is found.     Return the position in DEST one byte past where C was copied,     or NULL if C was not found in the first N bytes of SRC.  */ -extern __ptr_t memccpy __P ((__ptr_t __dest, __const __ptr_t __src, -			     int __c, size_t __n)); -/* Search N bytes of S for C.  */ -extern __ptr_t memchr __P ((__const __ptr_t __s, int __c, size_t __n)); +#if defined __USE_SVID || defined __USE_BSD || defined __USE_XOPEN +extern void *memccpy (void *__restrict __dest, __const void *__restrict __src, +		      int __c, size_t __n) +     __THROW; +#endif /* SVID.  */ + +  /* Set N bytes of S to C.  */ -extern __ptr_t memset __P ((__ptr_t __s, int __c, size_t __n)); +extern void *memset (void *__s, int __c, size_t __n) __THROW; +  /* Compare N bytes of S1 and S2.  */ -extern int memcmp __P ((__const __ptr_t __s1, __const __ptr_t __s2, -			size_t __n)); -/* Copy N bytes of SRC to DEST, guaranteeing -   correct behavior for overlapping strings.  */ -extern __ptr_t memmove __P ((__ptr_t __dest, __const __ptr_t __src, -			     size_t __n)); +extern int memcmp (__const void *__s1, __const void *__s2, size_t __n) +     __THROW __attribute_pure__; +/* Search N bytes of S for C.  */ +extern void *memchr (__const void *__s, int __c, size_t __n) +      __THROW __attribute_pure__; -/* Minimal (very!) locale support */ -extern int strcoll __P ((__const char *__s1, __const char *__s2)); -extern size_t strxfrm __P ((char *__restrict __dest, -			    __const char *__restrict __src, size_t __n)); +#if 0 +//#ifdef __USE_GNU +/* Search in S for C.  This is similar to `memchr' but there is no +   length limit.  */ +extern void *rawmemchr (__const void *__s, int __c) __THROW __attribute_pure__; -/* BSDisms */ -extern char *index __P ((__const char *__s, int __c)); -extern char *rindex __P ((__const char *__s, int __c)); +/* Search N bytes of S for the final occurrence of C.  */ +extern void *memrchr (__const void *__s, int __c, size_t __n) +      __THROW __attribute_pure__; +#endif -/* Return the position of the first bit set in I, or 0 if none are set. -   The least-significant bit is position 1, the most-significant 32.  */ -extern int ffs __P ((int __i)) __attribute__ ((const)); -/* Other common BSD functions */ -/* Set N bytes of S to 0.  */ -extern void bzero __P ((__ptr_t __s, size_t __n)); -/* Copy N bytes of SRC to DEST (like memmove, but args reversed).  */ -extern void bcopy __P ((__const __ptr_t __src, __ptr_t __dest, size_t __n)); +/* Copy SRC to DEST.  */ +extern char *strcpy (char *__restrict __dest, __const char *__restrict __src) +     __THROW; +/* Copy no more than N characters of SRC to DEST.  */ +extern char *strncpy (char *__restrict __dest, +		      __const char *__restrict __src, size_t __n) __THROW; -/* Compare S1 and S2, ignoring case.  */ -extern int strcasecmp __P ((__const char *__s1, __const char *__s2)); -/* Compare no more than N chars of S1 and S2, ignoring case.  */ -extern int strncasecmp __P ((__const char *__s1, __const char *__s2, -			     size_t __n)); -/* Find the first occurrence in S of any character in ACCEPT.  */ -extern char *strpbrk __P ((__const char *__s, __const char *__accept)); -/* Return the next DELIM-delimited token from *STRINGP, -   terminating it with a '\0', and update *STRINGP to point past it.  */ -extern char *strsep __P ((char **__restrict __stringp, -			  __const char *__restrict __delim)); -/* Find the first occurrence of NEEDLE in HAYSTACK.  */ -extern char *strstr __P ((__const char *__haystack, __const char *__needle)); -extern char *strcasestr __P((__const char *__haystack, __const char *__needle)); -/* Divide S into tokens separated by characters in DELIM.  */ -extern char *strtok __P ((char *__restrict __s, -			  __const char *__restrict __delim)); -/* Divide S into tokens separated by characters in DELIM.  Information -   passed between calls are stored in SAVE_PTR.  */ -extern char *__strtok_r __P ((char *__restrict __s, -                              __const char *__restrict __delim, -                              char **__restrict __save_ptr)); -#if defined __USE_POSIX || defined __USE_MISC -extern char *strtok_r __P ((char *__restrict __s, -                            __const char *__restrict __delim, -                            char **__restrict __save_ptr)); -#endif -/* Return the length of the initial segment of S which -   consists entirely of characters not in REJECT.  */ -extern size_t strcspn __P ((__const char *__s, __const char *__reject)); -/* Return the length of the initial segment of S which -   consists entirely of characters in ACCEPT.  */ -extern size_t strspn __P ((__const char *__s, __const char *__accept)); +/* Append SRC onto DEST.  */ +extern char *strcat (char *__restrict __dest, __const char *__restrict __src) +     __THROW; +/* Append no more than N characters from SRC onto DEST.  */ +extern char *strncat (char *__restrict __dest, __const char *__restrict __src, +		      size_t __n) __THROW; -/* Return a string describing the meaning of the signal number in SIG.  */ -extern char *strsignal __P ((int __sig)); +/* Compare S1 and S2.  */ +extern int strcmp (__const char *__s1, __const char *__s2) +     __THROW __attribute_pure__; +/* Compare N characters of S1 and S2.  */ +extern int strncmp (__const char *__s1, __const char *__s2, size_t __n) +     __THROW __attribute_pure__; -/* More BSD compatabilty */ -extern int bcmp(const void *s1, const void *s2, size_t n); +/* Compare the collated forms of S1 and S2.  */ +extern int strcoll (__const char *__s1, __const char *__s2) +     __THROW __attribute_pure__; +/* Put a transformation of SRC into no more than N bytes of DEST.  */ +extern size_t strxfrm (char *__restrict __dest, +		       __const char *__restrict __src, size_t __n) __THROW; -/* Linux silly hour */ -char *strfry __P ((char *)); +#if 0 +//#ifdef __USE_GNU +/* The following functions are equivalent to the both above but they +   take the locale they use for the collation as an extra argument. +   This is not standardsized but something like will come.  */ +# include <xlocale.h> -/* Find the length of STRING, but scan at most MAXLEN characters. -   If no '\0' terminator is found in that many characters, return MAXLEN.  */ -extern size_t strnlen __P ((__const char *__string, size_t __maxlen)); +/* Compare the collated forms of S1 and S2 using rules from L.  */ +extern int __strcoll_l (__const char *__s1, __const char *__s2, __locale_t __l) +     __THROW __attribute_pure__; +/* Put a transformation of SRC into no more than N bytes of DEST.  */ +extern size_t __strxfrm_l (char *__dest, __const char *__src, size_t __n, +			   __locale_t __l) __THROW; +#endif + +#if defined __USE_SVID || defined __USE_BSD || defined __USE_XOPEN_EXTENDED +/* Duplicate S, returning an identical malloc'd string.  */ +extern char *strdup (__const char *__s) __THROW __attribute_malloc__; +#endif + +/* Return a malloc'd copy of at most N bytes of STRING.  The +   resultant string is terminated even if no null terminator +   appears before STRING[N].  */ +#if 0 +//#if defined __USE_GNU +extern char *strndup (__const char *__string, size_t __n) +     __THROW __attribute_malloc__; +#endif +#if defined __USE_GNU && defined __GNUC__  /* Duplicate S, returning an identical alloca'd string.  */  # define strdupa(s)							      \    (__extension__							      \      ({									      \        __const char *__old = (s);					      \        size_t __len = strlen (__old) + 1;				      \ -      char *__new = __builtin_alloca (__len);				      \ +      char *__new = (char *) __builtin_alloca (__len);			      \        (char *) memcpy (__new, __old, __len);				      \      })) @@ -145,11 +148,233 @@ extern size_t strnlen __P ((__const char *__string, size_t __maxlen));      ({									      \        __const char *__old = (s);					      \        size_t __len = strnlen (__old, (n));				      \ -      char *__new = __builtin_alloca (__len + 1);			      \ +      char *__new = (char *) __builtin_alloca (__len + 1);		      \        __new[__len] = '\0';						      \        (char *) memcpy (__new, __old, __len);				      \      })) +#endif + +/* Find the first occurrence of C in S.  */ +extern char *strchr (__const char *__s, int __c) __THROW __attribute_pure__; +/* Find the last occurrence of C in S.  */ +extern char *strrchr (__const char *__s, int __c) __THROW __attribute_pure__; + +#if 0 +//#ifdef __USE_GNU +/* This funciton is similar to `strchr'.  But it returns a pointer to +   the closing NUL byte in case C is not found in S.  */ +extern char *strchrnul (__const char *__s, int __c) __THROW __attribute_pure__; +#endif + +/* Return the length of the initial segment of S which +   consists entirely of characters not in REJECT.  */ +extern size_t strcspn (__const char *__s, __const char *__reject) +     __THROW __attribute_pure__; +/* Return the length of the initial segment of S which +   consists entirely of characters in ACCEPT.  */ +extern size_t strspn (__const char *__s, __const char *__accept) +     __THROW __attribute_pure__; +/* Find the first occurrence in S of any character in ACCEPT.  */ +extern char *strpbrk (__const char *__s, __const char *__accept) +     __THROW __attribute_pure__; +/* Find the first occurrence of NEEDLE in HAYSTACK.  */ +extern char *strstr (__const char *__haystack, __const char *__needle) +     __THROW __attribute_pure__; + +#ifdef __USE_GNU +/* Similar to `strstr' but this function ignores the case of both strings.  */ +extern char *strcasestr (__const char *__haystack, __const char *__needle) +     __THROW __attribute_pure__; +#endif + +/* Divide S into tokens separated by characters in DELIM.  */ +extern char *strtok (char *__restrict __s, __const char *__restrict __delim) +     __THROW; + +/* Divide S into tokens separated by characters in DELIM.  Information +   passed between calls are stored in SAVE_PTR.  */ +extern char *__strtok_r (char *__restrict __s, +			 __const char *__restrict __delim, +			 char **__restrict __save_ptr) __THROW; +#if defined __USE_POSIX || defined __USE_MISC +extern char *strtok_r (char *__restrict __s, __const char *__restrict __delim, +		       char **__restrict __save_ptr) __THROW; +#endif + +#if 0 +//#ifdef __USE_GNU +/* Find the first occurrence of NEEDLE in HAYSTACK. +   NEEDLE is NEEDLELEN bytes long; +   HAYSTACK is HAYSTACKLEN bytes long.  */ +extern void *memmem (__const void *__haystack, size_t __haystacklen, +		     __const void *__needle, size_t __needlelen) +     __THROW __attribute_pure__; + +/* Copy N bytes of SRC to DEST, return pointer to bytes after the +   last written byte.  */ +extern void *__mempcpy (void *__restrict __dest, +			__const void *__restrict __src, size_t __n) __THROW; +extern void *mempcpy (void *__restrict __dest, +		      __const void *__restrict __src, size_t __n) __THROW; +#endif -__END_DECLS +/* Return the length of S.  */ +extern size_t strlen (__const char *__s) __THROW __attribute_pure__; + +#ifdef	__USE_GNU +/* Find the length of STRING, but scan at most MAXLEN characters. +   If no '\0' terminator is found in that many characters, return MAXLEN.  */ +extern size_t strnlen (__const char *__string, size_t __maxlen) +     __THROW __attribute_pure__;  #endif + + +/* Return a string describing the meaning of the `errno' code in ERRNUM.  */ +extern char *strerror (int __errnum) __THROW; +#ifdef	__USE_MISC +/* Reentrant version of `strerror'.  If a temporary buffer is required, at +   most BUFLEN bytes of BUF will be used.  */ +extern char *strerror_r (int __errnum, char *__buf, size_t __buflen) __THROW; +#endif + +/* We define this function always since `bzero' is sometimes needed when +   the namespace rules does not allow this.  */ +extern void __bzero (void *__s, size_t __n) __THROW; + +#if defined __USE_BSD +/* Copy N bytes of SRC to DEST (like memmove, but args reversed).  */ +extern void bcopy (__const void *__src, void *__dest, size_t __n) __THROW; + +/* Set N bytes of S to 0.  */ +extern void bzero (void *__s, size_t __n) __THROW; + +/* Compare N bytes of S1 and S2 (same as memcmp).  */ +extern int bcmp (__const void *__s1, __const void *__s2, size_t __n) +     __THROW __attribute_pure__; + +/* Find the first occurrence of C in S (same as strchr).  */ +extern char *index (__const char *__s, int __c) __THROW __attribute_pure__; + +/* Find the last occurrence of C in S (same as strrchr).  */ +extern char *rindex (__const char *__s, int __c) __THROW __attribute_pure__; + +/* Return the position of the first bit set in I, or 0 if none are set. +   The least-significant bit is position 1, the most-significant 32.  */ +extern int ffs (int __i) __THROW __attribute__ ((__const__)); + +/* The following two functions are non-standard but necessary for non-32 bit +   platforms.  */ +# if 0 +//# ifdef	__USE_GNU +extern int ffsl (long int __l) __THROW __attribute__ ((__const__)); +#  ifdef __GNUC__ +__extension__ extern int ffsll (long long int __ll) +     __THROW __attribute__ ((__const__)); +#  endif +# endif + +/* Compare S1 and S2, ignoring case.  */ +extern int strcasecmp (__const char *__s1, __const char *__s2) +     __THROW __attribute_pure__; + +/* Compare no more than N chars of S1 and S2, ignoring case.  */ +extern int strncasecmp (__const char *__s1, __const char *__s2, size_t __n) +     __THROW __attribute_pure__; +#endif /* Use BSD.  */ + +#if 0 +//#ifdef	__USE_GNU +/* Again versions of a few functions which use the given locale instead +   of the global one.  */ +extern int __strcasecmp_l (__const char *__s1, __const char *__s2, +			   __locale_t __loc) __THROW __attribute_pure__; + +extern int __strncasecmp_l (__const char *__s1, __const char *__s2, +			    size_t __n, __locale_t __loc) +     __THROW __attribute_pure__; +#endif + +#ifdef	__USE_BSD +/* Return the next DELIM-delimited token from *STRINGP, +   terminating it with a '\0', and update *STRINGP to point past it.  */ +extern char *strsep (char **__restrict __stringp, +		     __const char *__restrict __delim) __THROW; +#endif + +#ifdef	__USE_GNU +#if 0 +/* Compare S1 and S2 as strings holding name & indices/version numbers.  */ +extern int strverscmp (__const char *__s1, __const char *__s2) +     __THROW __attribute_pure__; +#endif + +/* Return a string describing the meaning of the signal number in SIG.  */ +extern char *strsignal (int __sig) __THROW; + +#if 0 +/* Copy SRC to DEST, returning the address of the terminating '\0' in DEST.  */ +extern char *__stpcpy (char *__restrict __dest, __const char *__restrict __src) +     __THROW; +extern char *stpcpy (char *__restrict __dest, __const char *__restrict __src) +     __THROW; +#endif + +/* Copy no more than N characters of SRC to DEST, returning the address of +   the last character written into DEST.  */ +extern char *__stpncpy (char *__restrict __dest, +			__const char *__restrict __src, size_t __n) __THROW; +extern char *stpncpy (char *__restrict __dest, +		      __const char *__restrict __src, size_t __n) __THROW; + +#if 0 +/* Sautee STRING briskly.  */ +extern char *strfry (char *__string) __THROW; + +/* Frobnicate N bytes of S.  */ +extern void *memfrob (void *__s, size_t __n) __THROW; +#endif + +# ifndef basename +/* Return the file name within directory of FILENAME.  We don't +   declare the function if the `basename' macro is available (defined +   in <libgen.h>) which makes the XPG version of this function +   available.  */ +extern char *basename (__const char *__filename) __THROW; +# endif +#endif + +#if 0 +#if defined __GNUC__ && __GNUC__ >= 2 +# if defined __OPTIMIZE__ && !defined __OPTIMIZE_SIZE__ \ +     && !defined __NO_INLINE__ && !defined __cplusplus +/* When using GNU CC we provide some optimized versions of selected +   functions from this header.  There are two kinds of optimizations: + +   - machine-dependent optimizations, most probably using inline +     assembler code; these might be quite expensive since the code +     size can increase significantly. +     These optimizations are not used unless the symbol +	__USE_STRING_INLINES +     is defined before including this header. + +   - machine-independent optimizations which do not increase the +     code size significantly and which optimize mainly situations +     where one or more arguments are compile-time constants. +     These optimizations are used always when the compiler is +     taught to optimize. + +   One can inhibit all optimizations by defining __NO_STRING_INLINES.  */ + +/* Get the machine-dependent optimizations (if any).  */ +#  include <bits/string.h> + +/* These are generic optimizations which do not add too much inline code.  */ +#  include <bits/string2.h> +# endif +#endif +#endif + +__END_DECLS + +#endif /* string.h  */  | 
