home *** CD-ROM | disk | FTP | other *** search
/ minnie.tuhs.org / unixen.tar / unixen / PDP-11 / Trees / V7 / usr / src / libc / stdio / getgrent.c < prev    next >
Encoding:
C/C++ Source or Header  |  1979-01-10  |  937 b   |  64 lines

  1. #include <stdio.h>
  2. #include <grp.h>
  3.  
  4. #define    CL    ':'
  5. #define    CM    ','
  6. #define    NL    '\n'
  7. #define    MAXGRP    100
  8.  
  9. static char GROUP[] = "/etc/group";
  10. static FILE *grf = NULL;
  11. static char line[BUFSIZ+1];
  12. static struct group group;
  13. static char *gr_mem[MAXGRP];
  14.  
  15. setgrent()
  16. {
  17.     if( !grf )
  18.         grf = fopen( GROUP, "r" );
  19.     else
  20.         rewind( grf );
  21. }
  22.  
  23. endgrent()
  24. {
  25.     if( grf ){
  26.         fclose( grf );
  27.         grf = NULL;
  28.     }
  29. }
  30.  
  31. static char *
  32. grskip(p,c)
  33. register char *p;
  34. register c;
  35. {
  36.     while( *p && *p != c ) ++p;
  37.     if( *p ) *p++ = 0;
  38.     return( p );
  39. }
  40.  
  41. struct group *
  42. getgrent()
  43. {
  44.     register char *p, **q;
  45.  
  46.     if( !grf && !(grf = fopen( GROUP, "r" )) )
  47.         return(NULL);
  48.     if( !(p = fgets( line, BUFSIZ, grf )) )
  49.         return(NULL);
  50.     group.gr_name = p;
  51.     group.gr_passwd = p = grskip(p,CL);
  52.     group.gr_gid = atoi( p = grskip(p,CL) );
  53.     group.gr_mem = gr_mem;
  54.     p = grskip(p,CL);
  55.     grskip(p,NL);
  56.     q = gr_mem;
  57.     while( *p ){
  58.         *q++ = p;
  59.         p = grskip(p,CM);
  60.     }
  61.     *q = NULL;
  62.     return( &group );
  63. }
  64.