This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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
#if condition was reverted in August 2000 following a discussion on
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).

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.

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.  */

-- 
Joseph S. Myers
joseph@codesourcery.com


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]