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

glibc/2.7/grp/putgrent.c

    1: /* Copyright (C) 1991,92,96,98,99,2000,2005 Free Software Foundation, Inc.
    2:    This file is part of the GNU C Library.
    3: 
    4:    The GNU C Library is free software; you can redistribute it and/or
    5:    modify it under the terms of the GNU Lesser General Public
    6:    License as published by the Free Software Foundation; either
    7:    version 2.1 of the License, or (at your option) any later version.
    8: 
    9:    The GNU C Library is distributed in the hope that it will be useful,
   10:    but WITHOUT ANY WARRANTY; without even the implied warranty of
   11:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   12:    Lesser General Public License for more details.
   13: 
   14:    You should have received a copy of the GNU Lesser General Public
   15:    License along with the GNU C Library; if not, write to the Free
   16:    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
   17:    02111-1307 USA.  */
   18: 
   19: #include <errno.h>
   20: #include <stdio.h>
   21: #include <grp.h>
   22: 
   23: #ifdef USE_IN_LIBIO
   24: # define flockfile(s) _IO_flockfile (s)
   25: # define funlockfile(s) _IO_funlockfile (s)
   26: #endif
   27: 
   28: #define _S(x)   x ? x : ""
   29: 
   30: /* Write an entry to the given stream.
   31:    This must know the format of the group file.  */
   32: int
   33: putgrent (gr, stream)
   34:      const struct group *gr;
   35:      FILE *stream;
   36: {
   37:   int retval;
   38: 
   39:   if (__builtin_expect (gr == NULL, 0) || __builtin_expect (stream == NULL, 0))
   40:     {
   41:       __set_errno (EINVAL);
   42:       return -1;
   43:     }
   44: 
   45:   flockfile (stream);
   46: 
   47:   if (gr->gr_name[0] == '+' || gr->gr_name[0] == '-')
   48:     retval = fprintf (stream, "%s:%s::",
   49:                       gr->gr_name, _S (gr->gr_passwd));
   50:   else
   51:     retval = fprintf (stream, "%s:%s:%lu:",
   52:                       gr->gr_name, _S (gr->gr_passwd),
   53:                       (unsigned long int) gr->gr_gid);
   54:   if (__builtin_expect (retval, 0) < 0)
   55:     {
   56:       funlockfile (stream);
   57:       return -1;
   58:     }
   59: 
   60:   if (gr->gr_mem != NULL)
   61:     {
   62:       int i;
   63: 
   64:       for (i = 0 ; gr->gr_mem[i] != NULL; i++)
   65:         if (fprintf (stream, i == 0 ? "%s" : ",%s", gr->gr_mem[i]) < 0)
   66:           {
   67:             /* What else can we do?  */
   68:             funlockfile (stream);
   69:             return -1;
   70:           }
   71:     }
   72: 
   73:   retval = fputc_unlocked ('\n', stream);
   74: 
   75:   funlockfile (stream);
   76: 
   77:   return retval < 0 ? -1 : 0;
   78: }
Syntax (Markdown)