(strerror_r): If __USE_XOPEN2K but not __USE_GNU, redirect strerror_r to
authordrepper <drepper>
Mon, 22 Mar 2004 19:48:38 +0000 (19:48 +0000)
committerdrepper <drepper>
Mon, 22 Mar 2004 19:48:38 +0000 (19:48 +0000)
__xpg_strerror_r.

string/string.h

index 108d54d..19dd9c3 100644 (file)
@@ -243,9 +243,30 @@ __BEGIN_NAMESPACE_STD
 extern char *strerror (int __errnum) __THROW;
 __END_NAMESPACE_STD
 #if defined __USE_XOPEN2K || defined __USE_MISC
-/* Reentrant version of `strerror'.  If a temporary buffer is required, at
-   most BUFLEN bytes of BUF will be used.  */
+/* Reentrant version of `strerror'.
+   There are 2 flavors of `strerror_r', GNU which returns the string
+   and may or may not use the supplied temporary buffer and POSIX one
+   which fills the string into the buffer.
+   To use the POSIX version, -D_XOPEN_SOURCE=600 or -D_POSIX_C_SOURCE=200112L
+   without -D_GNU_SOURCE is needed, otherwise the GNU version is
+   preferred.  */
+# if defined __USE_XOPEN2K && !defined __USE_GNU
+/* Fill BUF with a string describing the meaning of the `errno' code in
+   ERRNUM.  */
+#  ifdef __REDIRECT
+extern int __REDIRECT (strerror_r,
+                      (int __errnum, char *__buf, size_t __buflen),
+                      __xpg_strerror_r) __THROW;
+#  else
+extern int __xpg_strerror_r (int __errnum, char *__buf, size_t __buflen)
+     __THROW;
+#   define strerror_r __xpg_strerror_r
+#  endif
+# else
+/* 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
 #endif
 
 /* We define this function always since `bzero' is sometimes needed when