Browse Source

sync with glibc versions

Mike Frysinger 20 years ago
parent
commit
b9e9cd3224
3 changed files with 176 additions and 89 deletions
  1. 98 69
      include/string.h
  2. 67 11
      include/sys/cdefs.h
  3. 11 9
      include/sys/sysmacros.h

+ 98 - 69
include/string.h

@@ -1,4 +1,4 @@
-/* Copyright (C) 1991-1993, 1995-2002, 2003 Free Software Foundation, Inc.
+/* Copyright (C) 1991-1993, 1995-2003, 2004 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    This file is part of the GNU C Library.
 
 
    The GNU C Library is free software; you can redistribute it and/or
    The GNU C Library is free software; you can redistribute it and/or
@@ -36,11 +36,12 @@ __BEGIN_DECLS
 __BEGIN_NAMESPACE_STD
 __BEGIN_NAMESPACE_STD
 /* Copy N bytes of SRC to DEST.  */
 /* Copy N bytes of SRC to DEST.  */
 extern void *memcpy (void *__restrict __dest,
 extern void *memcpy (void *__restrict __dest,
-		     __const void *__restrict __src, size_t __n) __THROW;
+		     __const void *__restrict __src, size_t __n)
+     __THROW __nonnull ((1, 2));
 /* Copy N bytes of SRC to DEST, guaranteeing
 /* Copy N bytes of SRC to DEST, guaranteeing
    correct behavior for overlapping strings.  */
    correct behavior for overlapping strings.  */
 extern void *memmove (void *__dest, __const void *__src, size_t __n)
 extern void *memmove (void *__dest, __const void *__src, size_t __n)
-     __THROW;
+     __THROW __nonnull ((1, 2));
 __END_NAMESPACE_STD
 __END_NAMESPACE_STD
 
 
 /* Copy no more than N bytes of SRC to DEST, stopping when C is found.
 /* Copy no more than N bytes of SRC to DEST, stopping when C is found.
@@ -49,62 +50,65 @@ __END_NAMESPACE_STD
 #if defined __USE_SVID || defined __USE_BSD || defined __USE_XOPEN
 #if defined __USE_SVID || defined __USE_BSD || defined __USE_XOPEN
 extern void *memccpy (void *__restrict __dest, __const void *__restrict __src,
 extern void *memccpy (void *__restrict __dest, __const void *__restrict __src,
 		      int __c, size_t __n)
 		      int __c, size_t __n)
-     __THROW;
+     __THROW __nonnull ((1, 2));
 #endif /* SVID.  */
 #endif /* SVID.  */
 
 
 
 
 __BEGIN_NAMESPACE_STD
 __BEGIN_NAMESPACE_STD
 /* Set N bytes of S to C.  */
 /* Set N bytes of S to C.  */
-extern void *memset (void *__s, int __c, size_t __n) __THROW;
+extern void *memset (void *__s, int __c, size_t __n) __THROW __nonnull ((1));
 
 
 /* Compare N bytes of S1 and S2.  */
 /* Compare N bytes of S1 and S2.  */
 extern int memcmp (__const void *__s1, __const void *__s2, size_t __n)
 extern int memcmp (__const void *__s1, __const void *__s2, size_t __n)
-     __THROW __attribute_pure__;
+     __THROW __attribute_pure__ __nonnull ((1, 2));
 
 
 /* Search N bytes of S for C.  */
 /* Search N bytes of S for C.  */
 extern void *memchr (__const void *__s, int __c, size_t __n)
 extern void *memchr (__const void *__s, int __c, size_t __n)
-      __THROW __attribute_pure__;
+      __THROW __attribute_pure__ __nonnull ((1));
 __END_NAMESPACE_STD
 __END_NAMESPACE_STD
 
 
 #ifdef __USE_GNU
 #ifdef __USE_GNU
 /* Search in S for C.  This is similar to `memchr' but there is no
 /* Search in S for C.  This is similar to `memchr' but there is no
    length limit.  */
    length limit.  */
-extern void *rawmemchr (__const void *__s, int __c) __THROW __attribute_pure__;
+extern void *rawmemchr (__const void *__s, int __c)
+     __THROW __attribute_pure__ __nonnull ((1));
 
 
 /* Search N bytes of S for the final occurrence of C.  */
 /* Search N bytes of S for the final occurrence of C.  */
 extern void *memrchr (__const void *__s, int __c, size_t __n)
 extern void *memrchr (__const void *__s, int __c, size_t __n)
-      __THROW __attribute_pure__;
+      __THROW __attribute_pure__ __nonnull ((1));
 #endif
 #endif
 
 
 
 
 __BEGIN_NAMESPACE_STD
 __BEGIN_NAMESPACE_STD
 /* Copy SRC to DEST.  */
 /* Copy SRC to DEST.  */
 extern char *strcpy (char *__restrict __dest, __const char *__restrict __src)
 extern char *strcpy (char *__restrict __dest, __const char *__restrict __src)
-     __THROW;
+     __THROW __nonnull ((1, 2));
 /* Copy no more than N characters of SRC to DEST.  */
 /* Copy no more than N characters of SRC to DEST.  */
 extern char *strncpy (char *__restrict __dest,
 extern char *strncpy (char *__restrict __dest,
-		      __const char *__restrict __src, size_t __n) __THROW;
+		      __const char *__restrict __src, size_t __n)
+     __THROW __nonnull ((1, 2));
 
 
 /* Append SRC onto DEST.  */
 /* Append SRC onto DEST.  */
 extern char *strcat (char *__restrict __dest, __const char *__restrict __src)
 extern char *strcat (char *__restrict __dest, __const char *__restrict __src)
-     __THROW;
+     __THROW __nonnull ((1, 2));
 /* Append no more than N characters from SRC onto DEST.  */
 /* Append no more than N characters from SRC onto DEST.  */
 extern char *strncat (char *__restrict __dest, __const char *__restrict __src,
 extern char *strncat (char *__restrict __dest, __const char *__restrict __src,
-		      size_t __n) __THROW;
+		      size_t __n) __THROW __nonnull ((1, 2));
 
 
 /* Compare S1 and S2.  */
 /* Compare S1 and S2.  */
 extern int strcmp (__const char *__s1, __const char *__s2)
 extern int strcmp (__const char *__s1, __const char *__s2)
-     __THROW __attribute_pure__;
+     __THROW __attribute_pure__ __nonnull ((1, 2));
 /* Compare N characters of S1 and S2.  */
 /* Compare N characters of S1 and S2.  */
 extern int strncmp (__const char *__s1, __const char *__s2, size_t __n)
 extern int strncmp (__const char *__s1, __const char *__s2, size_t __n)
-     __THROW __attribute_pure__;
+     __THROW __attribute_pure__ __nonnull ((1, 2));
 
 
 /* Compare the collated forms of S1 and S2.  */
 /* Compare the collated forms of S1 and S2.  */
 extern int strcoll (__const char *__s1, __const char *__s2)
 extern int strcoll (__const char *__s1, __const char *__s2)
-     __THROW __attribute_pure__;
+     __THROW __attribute_pure__ __nonnull ((1, 2));
 /* Put a transformation of SRC into no more than N bytes of DEST.  */
 /* Put a transformation of SRC into no more than N bytes of DEST.  */
 extern size_t strxfrm (char *__restrict __dest,
 extern size_t strxfrm (char *__restrict __dest,
-		       __const char *__restrict __src, size_t __n) __THROW;
+		       __const char *__restrict __src, size_t __n)
+     __THROW __nonnull ((2));
 __END_NAMESPACE_STD
 __END_NAMESPACE_STD
 
 
 #ifdef __UCLIBC_HAS_XLOCALE__
 #ifdef __UCLIBC_HAS_XLOCALE__
@@ -116,22 +120,23 @@ __END_NAMESPACE_STD
 
 
 /* Compare the collated forms of S1 and S2 using rules from L.  */
 /* 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)
 extern int strcoll_l (__const char *__s1, __const char *__s2, __locale_t __l)
-     __THROW __attribute_pure__;
+     __THROW __attribute_pure__ __nonnull ((1, 2, 3));
 extern int __strcoll_l (__const char *__s1, __const char *__s2, __locale_t __l)
 extern int __strcoll_l (__const char *__s1, __const char *__s2, __locale_t __l)
      __THROW __attribute_pure__;
      __THROW __attribute_pure__;
 
 
 /* Put a transformation of SRC into no more than N bytes of DEST.  */
 /* 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,
 extern size_t strxfrm_l (char *__dest, __const char *__src, size_t __n,
-			 __locale_t __l) __THROW;
+			 __locale_t __l) __THROW __nonnull ((2, 4));
 extern size_t __strxfrm_l (char *__dest, __const char *__src, size_t __n,
 extern size_t __strxfrm_l (char *__dest, __const char *__src, size_t __n,
 			 __locale_t __l) __THROW;
 			 __locale_t __l) __THROW;
 
 
 #endif
 #endif
-#endif
+#endif /* __UCLIBC_HAS_XLOCALE__ */
 
 
 #if defined __USE_SVID || defined __USE_BSD || defined __USE_XOPEN_EXTENDED
 #if defined __USE_SVID || defined __USE_BSD || defined __USE_XOPEN_EXTENDED
 /* Duplicate S, returning an identical malloc'd string.  */
 /* Duplicate S, returning an identical malloc'd string.  */
-extern char *strdup (__const char *__s) __THROW __attribute_malloc__;
+extern char *strdup (__const char *__s)
+     __THROW __attribute_malloc__ __nonnull ((1));
 #endif
 #endif
 
 
 /* Return a malloc'd copy of at most N bytes of STRING.  The
 /* Return a malloc'd copy of at most N bytes of STRING.  The
@@ -139,7 +144,7 @@ extern char *strdup (__const char *__s) __THROW __attribute_malloc__;
    appears before STRING[N].  */
    appears before STRING[N].  */
 #if defined __USE_GNU
 #if defined __USE_GNU
 extern char *strndup (__const char *__string, size_t __n)
 extern char *strndup (__const char *__string, size_t __n)
-     __THROW __attribute_malloc__;
+     __THROW __attribute_malloc__ __nonnull ((1));
 #endif
 #endif
 
 
 #if defined __USE_GNU && defined __GNUC__
 #if defined __USE_GNU && defined __GNUC__
@@ -167,53 +172,58 @@ extern char *strndup (__const char *__string, size_t __n)
 
 
 __BEGIN_NAMESPACE_STD
 __BEGIN_NAMESPACE_STD
 /* Find the first occurrence of C in S.  */
 /* Find the first occurrence of C in S.  */
-extern char *strchr (__const char *__s, int __c) __THROW __attribute_pure__;
+extern char *strchr (__const char *__s, int __c)
+     __THROW __attribute_pure__ __nonnull ((1));
 /* Find the last occurrence of C in S.  */
 /* Find the last occurrence of C in S.  */
-extern char *strrchr (__const char *__s, int __c) __THROW __attribute_pure__;
+extern char *strrchr (__const char *__s, int __c)
+     __THROW __attribute_pure__ __nonnull ((1));
 __END_NAMESPACE_STD
 __END_NAMESPACE_STD
 
 
 #ifdef __USE_GNU
 #ifdef __USE_GNU
 /* This function is similar to `strchr'.  But it returns a pointer to
 /* This function is similar to `strchr'.  But it returns a pointer to
    the closing NUL byte in case C is not found in S.  */
    the closing NUL byte in case C is not found in S.  */
-extern char *strchrnul (__const char *__s, int __c) __THROW __attribute_pure__;
+extern char *strchrnul (__const char *__s, int __c)
+     __THROW __attribute_pure__ __nonnull ((1));
 #endif
 #endif
 
 
 __BEGIN_NAMESPACE_STD
 __BEGIN_NAMESPACE_STD
 /* Return the length of the initial segment of S which
 /* Return the length of the initial segment of S which
    consists entirely of characters not in REJECT.  */
    consists entirely of characters not in REJECT.  */
 extern size_t strcspn (__const char *__s, __const char *__reject)
 extern size_t strcspn (__const char *__s, __const char *__reject)
-     __THROW __attribute_pure__;
+     __THROW __attribute_pure__ __nonnull ((1, 2));
 /* Return the length of the initial segment of S which
 /* Return the length of the initial segment of S which
    consists entirely of characters in ACCEPT.  */
    consists entirely of characters in ACCEPT.  */
 extern size_t strspn (__const char *__s, __const char *__accept)
 extern size_t strspn (__const char *__s, __const char *__accept)
-     __THROW __attribute_pure__;
+     __THROW __attribute_pure__ __nonnull ((1, 2));
 /* Find the first occurrence in S of any character in ACCEPT.  */
 /* Find the first occurrence in S of any character in ACCEPT.  */
 extern char *strpbrk (__const char *__s, __const char *__accept)
 extern char *strpbrk (__const char *__s, __const char *__accept)
-     __THROW __attribute_pure__;
+     __THROW __attribute_pure__ __nonnull ((1, 2));
 /* Find the first occurrence of NEEDLE in HAYSTACK.  */
 /* Find the first occurrence of NEEDLE in HAYSTACK.  */
 extern char *strstr (__const char *__haystack, __const char *__needle)
 extern char *strstr (__const char *__haystack, __const char *__needle)
-     __THROW __attribute_pure__;
+     __THROW __attribute_pure__ __nonnull ((1, 2));
 
 
 
 
 /* Divide S into tokens separated by characters in DELIM.  */
 /* Divide S into tokens separated by characters in DELIM.  */
 extern char *strtok (char *__restrict __s, __const char *__restrict __delim)
 extern char *strtok (char *__restrict __s, __const char *__restrict __delim)
-     __THROW;
+     __THROW __nonnull ((2));
 __END_NAMESPACE_STD
 __END_NAMESPACE_STD
 
 
 /* Divide S into tokens separated by characters in DELIM.  Information
 /* Divide S into tokens separated by characters in DELIM.  Information
    passed between calls are stored in SAVE_PTR.  */
    passed between calls are stored in SAVE_PTR.  */
 extern char *__strtok_r (char *__restrict __s,
 extern char *__strtok_r (char *__restrict __s,
 			 __const char *__restrict __delim,
 			 __const char *__restrict __delim,
-			 char **__restrict __save_ptr) __THROW;
+			 char **__restrict __save_ptr)
+     __THROW __nonnull ((2, 3));
 #if defined __USE_POSIX || defined __USE_MISC
 #if defined __USE_POSIX || defined __USE_MISC
 extern char *strtok_r (char *__restrict __s, __const char *__restrict __delim,
 extern char *strtok_r (char *__restrict __s, __const char *__restrict __delim,
-		       char **__restrict __save_ptr) __THROW;
+		       char **__restrict __save_ptr)
+     __THROW __nonnull ((2, 3));
 #endif
 #endif
 
 
 #ifdef __USE_GNU
 #ifdef __USE_GNU
 /* Similar to `strstr' but this function ignores the case of both strings.  */
 /* Similar to `strstr' but this function ignores the case of both strings.  */
 extern char *strcasestr (__const char *__haystack, __const char *__needle)
 extern char *strcasestr (__const char *__haystack, __const char *__needle)
-     __THROW __attribute_pure__;
+     __THROW __attribute_pure__ __nonnull ((1, 2));
 #endif
 #endif
 
 
 #ifdef __USE_GNU
 #ifdef __USE_GNU
@@ -222,27 +232,30 @@ extern char *strcasestr (__const char *__haystack, __const char *__needle)
    HAYSTACK is HAYSTACKLEN bytes long.  */
    HAYSTACK is HAYSTACKLEN bytes long.  */
 extern void *memmem (__const void *__haystack, size_t __haystacklen,
 extern void *memmem (__const void *__haystack, size_t __haystacklen,
 		     __const void *__needle, size_t __needlelen)
 		     __const void *__needle, size_t __needlelen)
-     __THROW __attribute_pure__;
+     __THROW __attribute_pure__ __nonnull ((1, 3));
 
 
 /* Copy N bytes of SRC to DEST, return pointer to bytes after the
 /* Copy N bytes of SRC to DEST, return pointer to bytes after the
    last written byte.  */
    last written byte.  */
 extern void *__mempcpy (void *__restrict __dest,
 extern void *__mempcpy (void *__restrict __dest,
-			__const void *__restrict __src, size_t __n) __THROW;
+			__const void *__restrict __src, size_t __n)
+     __THROW __nonnull ((1, 2));
 extern void *mempcpy (void *__restrict __dest,
 extern void *mempcpy (void *__restrict __dest,
-		      __const void *__restrict __src, size_t __n) __THROW;
+		      __const void *__restrict __src, size_t __n)
+     __THROW __nonnull ((1, 2));
 #endif
 #endif
 
 
 
 
 __BEGIN_NAMESPACE_STD
 __BEGIN_NAMESPACE_STD
 /* Return the length of S.  */
 /* Return the length of S.  */
-extern size_t strlen (__const char *__s) __THROW __attribute_pure__;
+extern size_t strlen (__const char *__s)
+     __THROW __attribute_pure__ __nonnull ((1));
 __END_NAMESPACE_STD
 __END_NAMESPACE_STD
 
 
 #ifdef	__USE_GNU
 #ifdef	__USE_GNU
 /* Find the length of STRING, but scan at most MAXLEN characters.
 /* Find the length of STRING, but scan at most MAXLEN characters.
    If no '\0' terminator is found in that many characters, return MAXLEN.  */
    If no '\0' terminator is found in that many characters, return MAXLEN.  */
 extern size_t strnlen (__const char *__string, size_t __maxlen)
 extern size_t strnlen (__const char *__string, size_t __maxlen)
-     __THROW __attribute_pure__;
+     __THROW __attribute_pure__ __nonnull ((1));
 #endif
 #endif
 
 
 
 
@@ -260,45 +273,48 @@ __END_NAMESPACE_STD
 extern char *_glibc_strerror_r (int __errnum, char *__buf, size_t __buflen) __THROW;
 extern char *_glibc_strerror_r (int __errnum, char *__buf, size_t __buflen) __THROW;
 extern int _susv3_strerror_r (int __errnum, char *__buf, size_t buflen) __THROW;
 extern int _susv3_strerror_r (int __errnum, char *__buf, size_t buflen) __THROW;
 
 
-#if defined(__USE_XOPEN2K) && !defined(__USE_GNU)
+# if defined(__USE_XOPEN2K) && !defined(__USE_GNU)
-# ifdef __REDIRECT
+#  ifdef __REDIRECT
 extern int __REDIRECT (strerror_r,
 extern int __REDIRECT (strerror_r,
-                       (int __errnum, char *__buf, size_t buflen) __THROW,
+			   (int __errnum, char *__buf, size_t buflen) __THROW,
-                       _susv3_strerror_r);
+			   _susv3_strerror_r);
+#  else
+#   define strerror_r __xpg_strerror_r
+#  endif
 # else
 # else
-#  define strerror_r _susv3_strerror_r
+#  ifdef __REDIRECT
-# endif
-#else  /* defined(__USE_XOPEN2K) && !defined(__USE_GNU) */
-# ifdef __REDIRECT
 extern char *__REDIRECT (strerror_r,
 extern char *__REDIRECT (strerror_r,
-                         (int __errnum, char *__buf, size_t buflen) __THROW,
+			   (int __errnum, char *__buf, size_t buflen) __THROW,
-                         _glibc_strerror_r);
+			   _glibc_strerror_r);
-# else
+#  else
-#  define strerror_r _glibc_strerror_r
+#   define strerror_r _glibc_strerror_r
-# endif
+#  endif
-#endif /* defined(__USE_XOPEN2K) && !defined(__USE_GNU) */
+# endif /* defined(__USE_XOPEN2K) && !defined(__USE_GNU) */
 #endif
 #endif
 
 
 /* We define this function always since `bzero' is sometimes needed when
 /* We define this function always since `bzero' is sometimes needed when
    the namespace rules does not allow this.  */
    the namespace rules does not allow this.  */
-extern void __bzero (void *__s, size_t __n) __THROW;
+extern void __bzero (void *__s, size_t __n) __THROW __nonnull ((1));
 
 
 #ifdef __USE_BSD
 #ifdef __USE_BSD
 /* Copy N bytes of SRC to DEST (like memmove, but args reversed).  */
 /* Copy N bytes of SRC to DEST (like memmove, but args reversed).  */
-extern void bcopy (__const void *__src, void *__dest, size_t __n) __THROW;
+extern void bcopy (__const void *__src, void *__dest, size_t __n)
+     __THROW __nonnull ((1, 2));
 
 
 /* Set N bytes of S to 0.  */
 /* Set N bytes of S to 0.  */
-extern void bzero (void *__s, size_t __n) __THROW;
+extern void bzero (void *__s, size_t __n) __THROW __nonnull ((1));
 
 
 /* Compare N bytes of S1 and S2 (same as memcmp).  */
 /* Compare N bytes of S1 and S2 (same as memcmp).  */
 extern int bcmp (__const void *__s1, __const void *__s2, size_t __n)
 extern int bcmp (__const void *__s1, __const void *__s2, size_t __n)
-     __THROW __attribute_pure__;
+     __THROW __attribute_pure__ __nonnull ((1, 2));
 
 
 /* Find the first occurrence of C in S (same as strchr).  */
 /* Find the first occurrence of C in S (same as strchr).  */
-extern char *index (__const char *__s, int __c) __THROW __attribute_pure__;
+extern char *index (__const char *__s, int __c)
+     __THROW __attribute_pure__ __nonnull ((1));
 
 
 /* Find the last occurrence of C in S (same as strrchr).  */
 /* Find the last occurrence of C in S (same as strrchr).  */
-extern char *rindex (__const char *__s, int __c) __THROW __attribute_pure__;
+extern char *rindex (__const char *__s, int __c)
+     __THROW __attribute_pure__ __nonnull ((1));
 
 
 /* Return the position of the first bit set in I, or 0 if none are set.
 /* 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.  */
    The least-significant bit is position 1, the most-significant 32.  */
@@ -316,11 +332,11 @@ __extension__ extern int ffsll (long long int __ll)
 
 
 /* Compare S1 and S2, ignoring case.  */
 /* Compare S1 and S2, ignoring case.  */
 extern int strcasecmp (__const char *__s1, __const char *__s2)
 extern int strcasecmp (__const char *__s1, __const char *__s2)
-     __THROW __attribute_pure__;
+     __THROW __attribute_pure__ __nonnull ((1, 2));
 
 
 /* Compare no more than N chars of S1 and S2, ignoring case.  */
 /* Compare no more than N chars of S1 and S2, ignoring case.  */
 extern int strncasecmp (__const char *__s1, __const char *__s2, size_t __n)
 extern int strncasecmp (__const char *__s1, __const char *__s2, size_t __n)
-     __THROW __attribute_pure__;
+     __THROW __attribute_pure__ __nonnull ((1, 2));
 #endif /* Use BSD.  */
 #endif /* Use BSD.  */
 
 
 #ifdef __UCLIBC_HAS_XLOCALE__
 #ifdef __UCLIBC_HAS_XLOCALE__
@@ -328,50 +344,63 @@ extern int strncasecmp (__const char *__s1, __const char *__s2, size_t __n)
 /* Again versions of a few functions which use the given locale instead
 /* Again versions of a few functions which use the given locale instead
    of the global one.  */
    of the global one.  */
 extern int strcasecmp_l (__const char *__s1, __const char *__s2,
 extern int strcasecmp_l (__const char *__s1, __const char *__s2,
-			 __locale_t __loc) __THROW __attribute_pure__;
+			 __locale_t __loc)
+     __THROW __attribute_pure__ __nonnull ((1, 2, 3));
 extern int __strcasecmp_l (__const char *__s1, __const char *__s2,
 extern int __strcasecmp_l (__const char *__s1, __const char *__s2,
 			 __locale_t __loc) __THROW __attribute_pure__;
 			 __locale_t __loc) __THROW __attribute_pure__;
 
 
 extern int strncasecmp_l (__const char *__s1, __const char *__s2,
 extern int strncasecmp_l (__const char *__s1, __const char *__s2,
 			  size_t __n, __locale_t __loc)
 			  size_t __n, __locale_t __loc)
-     __THROW __attribute_pure__;
+     __THROW __attribute_pure__ __nonnull ((1, 2, 4));
 extern int __strncasecmp_l (__const char *__s1, __const char *__s2,
 extern int __strncasecmp_l (__const char *__s1, __const char *__s2,
 			  size_t __n, __locale_t __loc)
 			  size_t __n, __locale_t __loc)
      __THROW __attribute_pure__;
      __THROW __attribute_pure__;
 #endif
 #endif
-#endif
+#endif /* __UCLIBC_HAS_XLOCALE__ */
 
 
 #ifdef	__USE_BSD
 #ifdef	__USE_BSD
 /* Return the next DELIM-delimited token from *STRINGP,
 /* Return the next DELIM-delimited token from *STRINGP,
    terminating it with a '\0', and update *STRINGP to point past it.  */
    terminating it with a '\0', and update *STRINGP to point past it.  */
 extern char *strsep (char **__restrict __stringp,
 extern char *strsep (char **__restrict __stringp,
-		     __const char *__restrict __delim) __THROW;
+		     __const char *__restrict __delim)
+     __THROW __nonnull ((1, 2));
 #endif
 #endif
 
 
 #ifdef	__USE_GNU
 #ifdef	__USE_GNU
+/* Compare S1 and S2 as strings holding name & indices/version numbers.  */
+extern int strverscmp (__const char *__s1, __const char *__s2)
+     __THROW __attribute_pure__ __nonnull ((1, 2));
 
 
 /* Return a string describing the meaning of the signal number in SIG.  */
 /* Return a string describing the meaning of the signal number in SIG.  */
 extern char *strsignal (int __sig) __THROW;
 extern char *strsignal (int __sig) __THROW;
 
 
 /* Copy SRC to DEST, returning the address of the terminating '\0' in DEST.  */
 /* Copy SRC to DEST, returning the address of the terminating '\0' in DEST.  */
 extern char *__stpcpy (char *__restrict __dest, __const char *__restrict __src)
 extern char *__stpcpy (char *__restrict __dest, __const char *__restrict __src)
-     __THROW;
+     __THROW __nonnull ((1, 2));
 extern char *stpcpy (char *__restrict __dest, __const char *__restrict __src)
 extern char *stpcpy (char *__restrict __dest, __const char *__restrict __src)
-     __THROW;
+     __THROW __nonnull ((1, 2));
 
 
 /* Copy no more than N characters of SRC to DEST, returning the address of
 /* Copy no more than N characters of SRC to DEST, returning the address of
    the last character written into DEST.  */
    the last character written into DEST.  */
 extern char *__stpncpy (char *__restrict __dest,
 extern char *__stpncpy (char *__restrict __dest,
-			__const char *__restrict __src, size_t __n) __THROW;
+			__const char *__restrict __src, size_t __n)
+     __THROW __nonnull ((1, 2));
 extern char *stpncpy (char *__restrict __dest,
 extern char *stpncpy (char *__restrict __dest,
-		      __const char *__restrict __src, size_t __n) __THROW;
+		      __const char *__restrict __src, size_t __n)
+     __THROW __nonnull ((1, 2));
+
+/* Sautee STRING briskly.  */
+extern char *strfry (char *__string) __THROW __nonnull ((1));
+
+/* Frobnicate N bytes of S.  */
+extern void *memfrob (void *__s, size_t __n) __THROW __nonnull ((1));
 
 
 # ifndef basename
 # ifndef basename
 /* Return the file name within directory of FILENAME.  We don't
 /* Return the file name within directory of FILENAME.  We don't
    declare the function if the `basename' macro is available (defined
    declare the function if the `basename' macro is available (defined
    in <libgen.h>) which makes the XPG version of this function
    in <libgen.h>) which makes the XPG version of this function
    available.  */
    available.  */
-extern char *basename (__const char *__filename) __THROW;
+extern char *basename (__const char *__filename) __THROW __nonnull ((1));
 # endif
 # endif
 #endif
 #endif
 
 

+ 67 - 11
include/sys/cdefs.h

@@ -1,4 +1,4 @@
-/* Copyright (C) 1992-2001, 2002 Free Software Foundation, Inc.
+/* Copyright (C) 1992-2001, 2002, 2004, 2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    This file is part of the GNU C Library.
 
 
    The GNU C Library is free software; you can redistribute it and/or
    The GNU C Library is free software; you can redistribute it and/or
@@ -39,24 +39,28 @@
 
 
 /* GCC can always grok prototypes.  For C++ programs we add throw()
 /* GCC can always grok prototypes.  For C++ programs we add throw()
    to help it optimize the function calls.  But this works only with
    to help it optimize the function calls.  But this works only with
-   gcc 2.8.x and egcs.  */
+   gcc 2.8.x and egcs.  For gcc 3.2 and up we even mark C functions
-# if defined __cplusplus && __GNUC_PREREQ (2,8)
+   as non-throwing using a function attribute since programs can use
-#  define __THROW	throw ()
+   the -fexceptions options for C code as well.  */
+# if 0 //!defined __cplusplus && __GNUC_PREREQ (3, 3)
+#  define __THROW	__attribute__ ((__nothrow__))
+#  define __NTH(fct)	__attribute__ ((__nothrow__)) fct
 # else
 # else
-#  define __THROW
+#  if defined __cplusplus && __GNUC_PREREQ (2,8)
+#   define __THROW	throw ()
+#   define __NTH(fct)	fct throw ()
+#  else
+#   define __THROW
+#   define __NTH(fct)	fct
+#  endif
 # endif
 # endif
-# define __P(args)	args __THROW
-/* This macro will be used for functions which might take C++ callback
-   functions.  */
-# define __PMT(args)	args
 
 
 #else	/* Not GCC.  */
 #else	/* Not GCC.  */
 
 
 # define __inline		/* No inline functions.  */
 # define __inline		/* No inline functions.  */
 
 
 # define __THROW
 # define __THROW
-# define __P(args)	args
+# define __NTH(fct)	fct
-# define __PMT(args)	args
 
 
 # define __const	const
 # define __const	const
 # define __signed	signed
 # define __signed	signed
@@ -64,6 +68,11 @@
 
 
 #endif	/* GCC.  */
 #endif	/* GCC.  */
 
 
+/* These two macros are not used in glibc anymore.  They are kept here
+   only because some other projects expect the macros to be defined.  */
+#define __P(args)	args
+#define __PMT(args)	args
+
 /* For these things, GCC behaves the ANSI way normally,
 /* For these things, GCC behaves the ANSI way normally,
    and the non-ANSI way under -traditional.  */
    and the non-ANSI way under -traditional.  */
 
 
@@ -118,6 +127,12 @@
 #endif
 #endif
 
 
 
 
+/* Fortify support.  */
+#define __bos(ptr) __builtin_object_size (ptr, __USE_FORTIFY_LEVEL > 1)
+#define __bos0(ptr) __builtin_object_size (ptr, 0)
+#define __warndecl(name, msg) extern void name (void)
+
+
 /* Support for flexible arrays.  */
 /* Support for flexible arrays.  */
 #if __GNUC_PREREQ (2,97)
 #if __GNUC_PREREQ (2,97)
 /* GCC 2.97 supports C99 flexible array members.  */
 /* GCC 2.97 supports C99 flexible array members.  */
@@ -150,6 +165,17 @@
 
 
 # define __REDIRECT(name, proto, alias) name proto __asm__ (__ASMNAME (#alias))
 # define __REDIRECT(name, proto, alias) name proto __asm__ (__ASMNAME (#alias))
 # define __ASMNAME(cname) __C_SYMBOL_PREFIX__ cname
 # define __ASMNAME(cname) __C_SYMBOL_PREFIX__ cname
+/*
+# ifdef __cplusplus
+#  define __REDIRECT_NTH(name, proto, alias) \
+     name proto __THROW __asm__ (__ASMNAME (#alias))
+# else
+#  define __REDIRECT_NTH(name, proto, alias) \
+     name proto __asm__ (__ASMNAME (#alias)) __THROW
+# endif
+# define __ASMNAME(cname)  __ASMNAME2 (__USER_LABEL_PREFIX__, cname)
+# define __ASMNAME2(prefix, cname) __STRING (prefix) cname
+*/
 
 
 /*
 /*
 #elif __SOME_OTHER_COMPILER__
 #elif __SOME_OTHER_COMPILER__
@@ -225,6 +251,36 @@
 # define __attribute_format_strfmon__(a,b) /* Ignore */
 # define __attribute_format_strfmon__(a,b) /* Ignore */
 #endif
 #endif
 
 
+/* The nonull function attribute allows to mark pointer parameters which
+   must not be NULL.  */
+#if __GNUC_PREREQ (3,3)
+# define __nonnull(params) __attribute__ ((__nonnull__ params))
+#else
+# define __nonnull(params)
+#endif
+
+/* If fortification mode, we warn about unused results of certain
+   function calls which can lead to problems.  */
+#if __GNUC_PREREQ (3,4)
+# define __attribute_warn_unused_result__ \
+   __attribute__ ((__warn_unused_result__))
+# if __USE_FORTIFY_LEVEL > 0
+#  define __wur __attribute_warn_unused_result__
+# endif
+#else
+# define __attribute_warn_unused_result__ /* empty */
+#endif
+#ifndef __wur
+# define __wur /* Ignore */
+#endif
+
+/* Forces a function to be always inlined.  */
+#if __GNUC_PREREQ (3,2)
+# define __always_inline __inline __attribute__ ((__always_inline__))
+#else
+# define __always_inline __inline
+#endif
+
 /* It is possible to compile containing GCC extensions even if GCC is
 /* It is possible to compile containing GCC extensions even if GCC is
    run in pedantic mode if the uses are carefully marked using the
    run in pedantic mode if the uses are carefully marked using the
    `__extension__' keyword.  But this is not generally available before
    `__extension__' keyword.  But this is not generally available before

+ 11 - 9
include/sys/sysmacros.h

@@ -1,5 +1,5 @@
 /* Definitions of macros to access `dev_t' values.
 /* Definitions of macros to access `dev_t' values.
-   Copyright (C) 1996, 1997, 1999, 2003 Free Software Foundation, Inc.
+   Copyright (C) 1996, 1997, 1999, 2003, 2004 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    This file is part of the GNU C Library.
 
 
    The GNU C Library is free software; you can redistribute it and/or
    The GNU C Library is free software; you can redistribute it and/or
@@ -25,6 +25,7 @@
 /* If the compiler does not know long long it is out of luck.  We are
 /* If the compiler does not know long long it is out of luck.  We are
    not going to hack weird hacks to support the dev_t representation
    not going to hack weird hacks to support the dev_t representation
    they need.  */
    they need.  */
+#if 1 /*def __GLIBC_HAVE_LONG_LONG    uClibc note: always enable */
 __extension__
 __extension__
 static __inline unsigned int gnu_dev_major (unsigned long long int __dev)
 static __inline unsigned int gnu_dev_major (unsigned long long int __dev)
      __THROW;
      __THROW;
@@ -36,32 +37,33 @@ static __inline unsigned long long int gnu_dev_makedev (unsigned int __major,
 							unsigned int __minor)
 							unsigned int __minor)
      __THROW;
      __THROW;
 
 
-#if defined __GNUC__ && __GNUC__ >= 2
+# if defined __GNUC__ && __GNUC__ >= 2
 __extension__ static __inline unsigned int
 __extension__ static __inline unsigned int
-gnu_dev_major (unsigned long long int __dev) __THROW
+__NTH (gnu_dev_major (unsigned long long int __dev))
 {
 {
   return ((__dev >> 8) & 0xfff) | ((unsigned int) (__dev >> 32) & ~0xfff);
   return ((__dev >> 8) & 0xfff) | ((unsigned int) (__dev >> 32) & ~0xfff);
 }
 }
 
 
 __extension__ static __inline unsigned int
 __extension__ static __inline unsigned int
-gnu_dev_minor (unsigned long long int __dev) __THROW
+__NTH (gnu_dev_minor (unsigned long long int __dev))
 {
 {
   return (__dev & 0xff) | ((unsigned int) (__dev >> 12) & ~0xff);
   return (__dev & 0xff) | ((unsigned int) (__dev >> 12) & ~0xff);
 }
 }
 
 
 __extension__ static __inline unsigned long long int
 __extension__ static __inline unsigned long long int
-gnu_dev_makedev (unsigned int __major, unsigned int __minor) __THROW
+__NTH (gnu_dev_makedev (unsigned int __major, unsigned int __minor))
 {
 {
   return ((__minor & 0xff) | ((__major & 0xfff) << 8)
   return ((__minor & 0xff) | ((__major & 0xfff) << 8)
 	  | (((unsigned long long int) (__minor & ~0xff)) << 12)
 	  | (((unsigned long long int) (__minor & ~0xff)) << 12)
 	  | (((unsigned long long int) (__major & ~0xfff)) << 32));
 	  | (((unsigned long long int) (__major & ~0xfff)) << 32));
 }
 }
-#endif
+# endif
 
 
 
 
 /* Access the functions with their traditional names.  */
 /* Access the functions with their traditional names.  */
-#define major(dev) gnu_dev_major (dev)
+# define major(dev) gnu_dev_major (dev)
-#define minor(dev) gnu_dev_minor (dev)
+# define minor(dev) gnu_dev_minor (dev)
-#define makedev(maj, min) gnu_dev_makedev (maj, min)
+# define makedev(maj, min) gnu_dev_makedev (maj, min)
+#endif
 
 
 #endif /* sys/sysmacros.h */
 #endif /* sys/sysmacros.h */