diff mbox

Fix grp.h endgrent, getgrent namespace (bug 18528)

Message ID alpine.DEB.2.10.1506122056240.17561@digraph.polyomino.org.uk
State New
Headers show

Commit Message

Joseph Myers June 12, 2015, 8:57 p.m. UTC
grp.h declares endgrent and getgrent if __USE_XOPEN2K8 (i.e. 2008
edition of POSIX, non-XSI).  However, the 2013 Technical Corrigendum
corrected the grp.h specification to XSI-shade these functions as in
previous editions (see <http://austingroupbugs.net/view.php?id=24>),
so they should not be declared for non-XSI POSIX.  This patch corrects
the conditions - using __USE_MISC || __USE_XOPEN_EXTENDED to match
setgrent - and the conform/ test expectations for this header, thereby
fixing the conform tests for this header for XPG3 (where the
expectations were wrong) and the linknamespace tests for it for
POSIX2008 (where the header bug meant it was wrongly considered a
problem for endgrent to bring in a reference to setgrent).

Tested for x86_64 and x86 (testsuite, and that installed stripped
shared libraries are unchanged by the patch).

2015-06-12  Joseph Myers  <joseph@codesourcery.com>

	[BZ #18528]
	* grp/grp.h (endgrent): Condition on [__USE_MISC ||
	__USE_XOPEN_EXTENDED], not [__USE_XOPEN_EXTENDED ||
	__USE_XOPEN2K8].
	(getgrent): Likewise.
	* conform/data/grp.h-data [XPG3 || POSIX2008] (getgrent): Do not
	expect.
	[XPG3 || POSIX2008] (endgrent): Likewise.
	[XPG3] (setgrent): Likewise.
	* conform/Makefile (test-xfail-XPG3/grp.h/conform): Remove
	variable.
	(test-xfail-POSIX2008/grp.h/linknamespace): Likewise.

Comments

Roland McGrath June 12, 2015, 10:20 p.m. UTC | #1
That looks fine, but I think it would be nice if grp.h got a comment
explaining how the visibility of these declarations has changed in the
standards and in glibc.
Joseph Myers June 12, 2015, 10:48 p.m. UTC | #2
On Fri, 12 Jun 2015, Roland McGrath wrote:

> That looks fine, but I think it would be nice if grp.h got a comment
> explaining how the visibility of these declarations has changed in the
> standards and in glibc.

Apart from a limited period where there was a bug in POSIX and that bug 
was reflected in glibc, the visibility *hasn't* changed; the group of 
three declarations was always meant to go together under the same 
conditions.  The details of past bugs seem like a distraction for normal 
readers of the header.
Roland McGrath June 12, 2015, 10:59 p.m. UTC | #3
> Apart from a limited period where there was a bug in POSIX and that bug 
> was reflected in glibc, the visibility *hasn't* changed; the group of 
> three declarations was always meant to go together under the same 
> conditions.  The details of past bugs seem like a distraction for normal 
> readers of the header.

The name space controls altogether are a distraction for readers of the
header who are just going to use _GNU_SOURCE.  It's not "details of past
bugs".  It's details of past API versions that people may have written to.
diff mbox

Patch

diff --git a/conform/Makefile b/conform/Makefile
index 57dbc92..ea7a6b4 100644
--- a/conform/Makefile
+++ b/conform/Makefile
@@ -170,7 +170,6 @@  test-xfail-XOPEN2K8/ndbm.h/conform = yes
 # Unsorted expected failures.
 test-xfail-XPG3/fcntl.h/conform = yes
 test-xfail-XPG3/ftw.h/conform = yes
-test-xfail-XPG3/grp.h/conform = yes
 test-xfail-XPG3/langinfo.h/conform = yes
 test-xfail-XPG3/limits.h/conform = yes
 test-xfail-XPG3/pwd.h/conform = yes
@@ -361,7 +360,6 @@  test-xfail-UNIX98/wchar.h/linknamespace = yes
 test-xfail-XOPEN2K/fmtmsg.h/linknamespace = yes
 test-xfail-XOPEN2K/netdb.h/linknamespace = yes
 test-xfail-XOPEN2K/syslog.h/linknamespace = yes
-test-xfail-POSIX2008/grp.h/linknamespace = yes
 test-xfail-POSIX2008/netdb.h/linknamespace = yes
 test-xfail-POSIX2008/semaphore.h/linknamespace = yes
 test-xfail-XOPEN2K8/fmtmsg.h/linknamespace = yes
diff --git a/conform/data/grp.h-data b/conform/data/grp.h-data
index 1edba73..53e880d 100644
--- a/conform/data/grp.h-data
+++ b/conform/data/grp.h-data
@@ -19,12 +19,10 @@  function {struct group*} getgrgid (gid_t)
 function {struct group*} getgrnam (const char*)
 function int getgrgid_r (gid_t, struct group*, char *, size_t, struct group**)
 function int getgrnam_r (const char *, struct group *, char *, size_t, struct group**)
-# ifndef POSIX
+# if !defined XPG3 && !defined POSIX && !defined POSIX2008
 function {struct group*} getgrent (void)
 function void endgrent (void)
-#  ifndef POSIX2008
 function void setgrent (void)
-#  endif
 # endif
 
 allow gr_*
diff --git a/grp/grp.h b/grp/grp.h
index c593eb5..ff0ad02 100644
--- a/grp/grp.h
+++ b/grp/grp.h
@@ -60,9 +60,7 @@  struct group
    This function is a possible cancellation point and therefore not
    marked with __THROW.  */
 extern void setgrent (void);
-#endif
 
-#if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8
 /* Close the group-file stream.
 
    This function is a possible cancellation point and therefore not