aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2016-04-25 19:29:44 +0000
committerJoseph Myers <joseph@codesourcery.com>2016-04-25 19:29:44 +0000
commit12404bb04e1e86052fb22005e6c05ab3d1ced46e (patch)
tree50c7ca7b3c0afa96ac7ad8075ab59566cd2196bc
parent8f1b841e452dbb083112fd036033b7f4af506ba0 (diff)
downloadglibc-12404bb04e1e86052fb22005e6c05ab3d1ced46e.zip
glibc-12404bb04e1e86052fb22005e6c05ab3d1ced46e.tar.gz
glibc-12404bb04e1e86052fb22005e6c05ab3d1ced46e.tar.bz2
Fix stdio.h cuserid namespace (bug 19989).
stdio.h declares cuserid if __USE_XOPEN. But this was removed in the 2001 edition of POSIX. The #endif comment "Use X/Open, but not issue 6." reflects the correct logic, but does not correspond to the #ifdef. The use of a correct libc-hacker. The online archives for libc-hacker in August 2000 are broken, but the messages can be found in the qmail archives in /sourceware1/qmail/lists-sourceware/libc-hacker/archive/26 if you have shell access to sourceware. The issue showed up in August 2000 because of a warning about a non-prototype definition in sysdeps/posix/cuserid.c when there was no previous prototype declaration. Since we've now eliminated non-prototype function definitions, that issue does not apply. The other points from that discussion were about whether it should be included in _GNU_SOURCE; whether _GNU_SOURCE should include "everything"; whether deprecated interfaces such as this should be excluded from it; and whether, even given exclusion of deprecated interfaces, it should apply for deprecations in a version of POSIX that at that time had not been released. This patch follows the more conservative approach to a fix of keeping the interface in _GNU_SOURCE. That matches how L_cuserid is handled. I think there is a strong case for eliminating this interface from _GNU_SOURCE (but this may not automatically be the case for every interface removed in newer POSIX versions), but then L_cuserid should also be removed from _GNU_SOURCE (in stdio-common/stdio_lim.h.in) at the same time. Tested for x86_64 and x86 (testsuite, and that installed shared libraries are unchanged by the patch). [BZ #19989] * libio/stdio.h (cuserid): Do not declare if [__USE_XOPEN2K && !__USE_GNU]. * conform/Makefile (test-xfail-XOPEN2K8/stdio.h/conform): Remove variable.
-rw-r--r--ChangeLog8
-rw-r--r--conform/Makefile1
-rw-r--r--libio/stdio.h2
3 files changed, 9 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index dd35b6c..5c40ad8 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2016-04-25 Joseph Myers <joseph@codesourcery.com>
+
+ [BZ #19989]
+ * libio/stdio.h (cuserid): Do not declare if
+ [__USE_XOPEN2K && !__USE_GNU].
+ * conform/Makefile (test-xfail-XOPEN2K8/stdio.h/conform): Remove
+ variable.
+
2016-04-25 Paul E. Murphy <murphyp@linux.vnet.ibm.com>
* sysdeps/powerpc/powerpc64/multiarch/Makefile:
diff --git a/conform/Makefile b/conform/Makefile
index 0b5514c..e3baec7 100644
--- a/conform/Makefile
+++ b/conform/Makefile
@@ -226,7 +226,6 @@ test-xfail-POSIX2008/signal.h/conform = yes
test-xfail-POSIX2008/sys/socket.h/conform = yes
test-xfail-POSIX2008/sys/wait.h/conform = yes
test-xfail-XOPEN2K8/signal.h/conform = yes
-test-xfail-XOPEN2K8/stdio.h/conform = yes
test-xfail-XOPEN2K8/sys/wait.h/conform = yes
conformtest-cc-flags = -I../include $(+sysdep-includes) $(sysincludes) -I..
diff --git a/libio/stdio.h b/libio/stdio.h
index d8d7fa0..4b66530 100644
--- a/libio/stdio.h
+++ b/libio/stdio.h
@@ -885,7 +885,7 @@ extern char *ctermid (char *__s) __THROW;
#endif /* Use POSIX. */
-#ifdef __USE_XOPEN
+#if (defined __USE_XOPEN && !defined __USE_XOPEN2K) || defined __USE_GNU
/* Return the name of the current user. */
extern char *cuserid (char *__s);
#endif /* Use X/Open, but not issue 6. */