(linenum→info "unix/slp.c:2238")

glibc/2.7/grp/tst_fgetgrent.c

    1: /* Copyright (C) 1999 Free Software Foundation, Inc.
    2:    This file is part of the GNU C Library.
    3:    Contributed by Andreas Jaeger <aj@arthur.rhein-neckar.de>, 1999.
    4: 
    5:    The GNU C Library is free software; you can redistribute it and/or
    6:    modify it under the terms of the GNU Lesser General Public
    7:    License as published by the Free Software Foundation; either
    8:    version 2.1 of the License, or (at your option) any later version.
    9: 
   10:    The GNU C Library is distributed in the hope that it will be useful,
   11:    but WITHOUT ANY WARRANTY; without even the implied warranty of
   12:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   13:    Lesser General Public License for more details.
   14: 
   15:    You should have received a copy of the GNU Lesser General Public
   16:    License along with the GNU C Library; if not, write to the Free
   17:    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
   18:    02111-1307 USA.  */
   19: 
   20: #include <grp.h>
   21: #include <stdio.h>
   22: #include <stdlib.h>
   23: #include <string.h>
   24: #include <sys/types.h>
   25: 
   26: static int errors;
   27: 
   28: static void
   29: write_users (FILE *f, int large_pos, int pos)
   30: {
   31:   int i;
   32: 
   33:   if (pos == large_pos)
   34:     {
   35:       if (large_pos == 3)
   36:         fprintf (f, ":three");
   37: 
   38:       /* we need more than 2048 bytes for proper testing.  */
   39:       for (i = 0; i < 500; i++)
   40:         fprintf (f, ",user%03d", i);
   41:     }
   42:   fprintf (f, "\n");
   43: 
   44: }
   45: 
   46: static void
   47: write_group (const char *filename, int pos)
   48: {
   49:   FILE *f;
   50: 
   51:   f = fopen (filename, "w");
   52:   fprintf (f, "one:x:1:one");
   53:   write_users (f, pos, 1);
   54:   fprintf (f, "two:x:2:two");
   55:   write_users (f, pos, 2);
   56:   fprintf (f, "three:x:3");
   57:   write_users (f, pos, 3);
   58:   fclose (f);
   59: }
   60: 
   61: static void
   62: test_entry (const char *name, gid_t gid, struct group *g)
   63: {
   64:   if (!g)
   65:     {
   66:       printf ("Error: Entry is empty\n");
   67:       errors++;
   68:       return;
   69:     }
   70: 
   71:   if ((g->gr_gid == gid) && (strcmp (g->gr_name, name) == 0))
   72:     printf ("Ok: %s: %d\n", g->gr_name, g->gr_gid);
   73:   else
   74:     {
   75:       printf ("Error: %s: %d should be: %s: %d\n", g->gr_name, g->gr_gid,
   76:               name, gid);
   77:       errors++;
   78:     }
   79: }
   80: 
   81: 
   82: static void
   83: test_fgetgrent (const char *filename)
   84: {
   85:   struct group *g;
   86:   FILE *f;
   87: 
   88:   f = fopen (filename,"r");
   89: 
   90:   g = fgetgrent (f);
   91:   test_entry ("one", 1, g);
   92:   g = fgetgrent (f);
   93:   test_entry ("two", 2, g);
   94:   g = fgetgrent (f);
   95:   test_entry ("three", 3, g);
   96:   fclose (f);
   97: }
   98: 
   99: 
  100: int
  101: main (int argc, char *argv[])
  102: {
  103:   char *file = tmpnam (NULL);
  104:   int i = 0;
  105: 
  106:   if (argc > 1)
  107:     i = atoi (argv[1]);
  108:   if (i > 3)
  109:     i = 3;
  110:   if (i)
  111:     printf ("Large group is group: %d\n", i);
  112:   else
  113:     printf ("Not using a large group\n");
  114:   write_group (file, i);
  115:   test_fgetgrent (file);
  116: 
  117:   remove (file);
  118: 
  119:   return (errors != 0);
  120: }
Syntax (Markdown)