]> git.ipfire.org Git - thirdparty/coreutils.git/commitdiff
Remove no-longer-used NGROUPS_MAX cpp macros.
authorJim Meyering <jim@meyering.net>
Sat, 6 Jan 1996 06:04:09 +0000 (06:04 +0000)
committerJim Meyering <jim@meyering.net>
Sat, 6 Jan 1996 06:04:09 +0000 (06:04 +0000)
(print_group_list) [HAVE_GETGROUPS]: Reorganize to use getgroups (0, NULL)
to compute number of groups at run time rather than relying on NGROUPS_MAX
at compile time.
(print_full_info) [HAVE_GETGROUPS]: Likewise.
Suggestion from Roland McGrath.

src/id.c

index d161ac3ff5fa996163c01c2af41e8a91fb7e9913..38a37f0083c1526de860851287343e63f69c3fcb 100644 (file)
--- a/src/id.c
+++ b/src/id.c
 
 #ifdef _POSIX_VERSION
 #include <limits.h>
-#if !defined(NGROUPS_MAX) || NGROUPS_MAX < 1
-#undef NGROUPS_MAX
-#define NGROUPS_MAX sysconf (_SC_NGROUPS_MAX)
-#endif /* !NGROUPS_MAX */
 
 #else /* not _POSIX_VERSION */
 struct passwd *getpwuid ();
@@ -45,9 +41,6 @@ gid_t getgid ();
 uid_t geteuid ();
 gid_t getegid ();
 #include <sys/param.h>
-#if !defined(NGROUPS_MAX) && defined(NGROUPS)
-#define NGROUPS_MAX NGROUPS
-#endif /* not NGROUPS_MAX and NGROUPS */
 #endif /* not _POSIX_VERSION */
 
 char *xmalloc ();
@@ -240,26 +233,29 @@ print_group_list (username)
       print_group (egid);
     }
 
-#if defined(NGROUPS_MAX) && defined(HAVE_GETGROUPS)
+#if HAVE_GETGROUPS
   {
-    int ngroups;
+    int ng, n_groups;
     GETGROUPS_T *groups;
     register int i;
 
-    groups = (GETGROUPS_T *) xmalloc (NGROUPS_MAX * sizeof (GETGROUPS_T));
+    n_groups = getgroups (0, NULL);
+    /* Add 1 just in case n_groups is zero.  */
+    groups = (GETGROUPS_T *) xmalloc (n_groups * sizeof (GETGROUPS_T) + 1);
     if (username == 0)
-      ngroups = getgroups (NGROUPS_MAX, groups);
+      ng = getgroups (n_groups, groups);
     else
-      ngroups = getugroups (NGROUPS_MAX, groups, username);
-    if (ngroups < 0)
+      ng = getugroups (n_groups, groups, username);
+
+    if (ng < 0)
       {
        error (0, errno, _("cannot get supplemental group list"));
-       problems++;
+       ++problems;
        free (groups);
        return;
       }
 
-    for (i = 0; i < ngroups; i++)
+    for (i = 0; i < n_groups; i++)
       if (groups[i] != rgid && groups[i] != egid)
        {
          putchar (' ');
@@ -313,18 +309,20 @@ print_full_info (username)
        printf ("(%s)", grp->gr_name);
     }
 
-#if defined(NGROUPS_MAX) && defined(HAVE_GETGROUPS)
+#if HAVE_GETGROUPS
   {
-    int ngroups;
+    int ng, n_groups;
     GETGROUPS_T *groups;
     register int i;
 
-    groups = (GETGROUPS_T *) xmalloc (NGROUPS_MAX * sizeof (GETGROUPS_T));
+    n_groups = getgroups (0, NULL);
+    /* Add 1 just in case n_groups is zero.  */
+    groups = (GETGROUPS_T *) xmalloc (n_groups * sizeof (GETGROUPS_T) + 1);
     if (username == 0)
-      ngroups = getgroups (NGROUPS_MAX, groups);
+      ng = getgroups (n_groups, groups);
     else
-      ngroups = getugroups (NGROUPS_MAX, groups, username);
-    if (ngroups < 0)
+      ng = getugroups (n_groups, groups, username);
+    if (ng < 0)
       {
        error (0, errno, _("cannot get supplemental group list"));
        problems++;
@@ -332,9 +330,9 @@ print_full_info (username)
        return;
       }
 
-    if (ngroups > 0)
+    if (n_groups > 0)
       fputs (_(" groups="), stdout);
-    for (i = 0; i < ngroups; i++)
+    for (i = 0; i < n_groups; i++)
       {
        if (i > 0)
          putchar (',');