Changeset c3d20eb in rtems


Ignore:
Timestamp:
Jul 2, 1999, 6:03:43 PM (21 years ago)
Author:
Joel Sherrill <joel.sherrill@…>
Branches:
4.10, 4.11, 4.8, 4.9, master
Children:
c51917f
Parents:
258fd79
Message:

Reentrant versions added by Joel. Signficant formatting cleanup.

Files:
7 edited

Legend:

Unmodified
Added
Removed
  • c/src/exec/libcsupport/src/getgrent.c

    r258fd79 rc3d20eb  
    1212#include <limits.h>
    1313
    14 static struct group gr_group;   /* password structure */
     14static struct group gr_group;    /* password structure */
    1515static FILE *group_fp;
    1616
     
    2020static char *gr_mem[16] = { } ;
    2121
    22 struct group *
    23 getgrnam (name)
    24      const char *name;
     22int getgrnam_r(
     23  const char     *name,
     24  struct group   *grp,
     25  char           *buffer,
     26  size_t          bufsize,
     27  struct group  **result
     28)
    2529{
    2630  FILE *fp;
    27   char buf[1024];
    2831
    29   if ((fp = fopen ("/etc/group", "r")) == NULL)
    30     {
    31       return NULL;
     32  if ((fp = fopen ("/etc/group", "r")) == NULL) {
     33    errno = EINVAL;
     34    return -1;
     35  }
     36
     37  while (fgets (buffer, bufsize, fp)) {
     38    sscanf (buffer, "%[^:]:%[^:]:%d:%s\n",
     39      groupname, password, &grp->gr_gid,
     40      groups);
     41    grp->gr_name = groupname;
     42    grp->gr_passwd = password;
     43    grp->gr_mem = gr_mem ;
     44   
     45    if (!strcmp (groupname, name)) {
     46      fclose (fp);
     47      *result = grp;
     48      return 0;
    3249    }
    33 
    34   while (fgets (buf, sizeof (buf), fp))
    35     {
    36       sscanf (buf, "%[^:]:%[^:]:%d:%s\n",
    37               groupname, password, &gr_group.gr_gid,
    38               groups);
    39       gr_group.gr_name = groupname;
    40       gr_group.gr_passwd = password;
    41       gr_group.gr_mem = gr_mem ;
    42      
    43       if (!strcmp (groupname, name))
    44         {
    45           fclose (fp);
    46           return &gr_group;
    47         }
    48     }
     50  }
    4951  fclose (fp);
    50   return NULL;
     52  errno = EINVAL;
     53  return -1;
    5154}
    5255
    53 struct group *
    54 getgrgid (gid_t gid)
     56struct group *getgrnam(
     57  const char *name
     58)
     59{
     60  char   buf[1024];
     61  struct group *g;
     62
     63  if ( getgrnam_r( name, &gr_group, buf, 1024, &g ) )
     64    return NULL;
     65
     66  return g;
     67}
     68
     69int getgrgid_r(
     70  gid_t           gid,
     71  struct group   *grp,
     72  char           *buffer,
     73  size_t          bufsize,
     74  struct group  **result
     75)
    5576{
    5677  FILE *fp;
    57   char buf[1024];
    5878
    59   if ((fp = fopen ("/etc/group", "r")) == NULL)
    60     {
    61       return NULL;
    62     }
     79  if ((fp = fopen ("/etc/group", "r")) == NULL) {
     80    errno = EINVAL;
     81    return -1;
     82  }
    6383
    64   while (fgets (buf, sizeof (buf), fp))
    65     {
    66       sscanf (buf, "%[^:]:%[^:]:%d:%s\n",
    67               groupname, password, &gr_group.gr_gid,
    68               groups);
    69       gr_group.gr_name = groupname;
    70       gr_group.gr_passwd = password;
    71       gr_group.gr_mem = gr_mem ;
     84  while (fgets (buffer, bufsize, fp)) {
     85    sscanf (buffer, "%[^:]:%[^:]:%d:%s\n",
     86      groupname, password, &gr_group.gr_gid,
     87      groups);
     88    gr_group.gr_name = groupname;
     89    gr_group.gr_passwd = password;
     90    gr_group.gr_mem = gr_mem ;
    7291
    7392
    74       if (gid == gr_group.gr_gid)
    75         {
    76           fclose (fp);
    77           return &gr_group;
    78         }
     93    if (gid == gr_group.gr_gid) {
     94      fclose (fp);
     95      *result = grp;
     96      return 0;
    7997    }
     98  }
    8099  fclose (fp);
    81   return NULL;
     100  errno = EINVAL;
     101  return -1;
    82102}
    83103
    84 struct group *
    85 getgrent ()
     104struct group *getgrgid (
     105  gid_t gid
     106)
     107{
     108  char   buf[1024];
     109  struct group *g;
     110
     111  if ( getgrgid_r( gid, &gr_group, buf, 1024, &g ) )
     112    return NULL;
     113
     114  return g;
     115}
     116
     117struct group *getgrent( void )
    86118{
    87119  char buf[1024];
     
    94126
    95127  sscanf (buf, "%[^:]:%[^:]:%d:%s\n",
    96           groupname, password, &gr_group.gr_gid,
    97           groups);
     128    groupname, password, &gr_group.gr_gid,
     129    groups);
    98130  gr_group.gr_name = groupname;
    99131  gr_group.gr_passwd = password;
  • c/src/exec/libcsupport/src/getpwent.c

    r258fd79 rc3d20eb  
    88#include <limits.h>
    99
    10 static struct passwd pw_passwd; /* password structure */
     10static struct passwd pw_passwd;  /* password structure */
    1111static FILE *passwd_fp;
    1212
     
    1818static char shell[1024];
    1919
    20 struct passwd *
    21 getpwnam (name)
    22      const char *name;
     20int getpwnam_r(
     21  const char     *name,
     22  struct passwd  *pwd,
     23  char           *buffer,
     24  size_t          bufsize,
     25  struct passwd **result
     26)
    2327{
    2428  FILE *fp;
    25   int uid, gid;
    26   char buf[1024];
    2729
    28   if ((fp = fopen ("/etc/passwd", "r")) == NULL)
    29     {
    30       return NULL;
     30  if ((fp = fopen ("/etc/passwd", "r")) == NULL) {
     31    errno = EINVAL;
     32    return -1;
     33  }
     34
     35  while (fgets (buffer, bufsize, fp)) {
     36    sscanf (buffer, "%[^:]:%[^:]:%d:%d:%[^:]:%[^:]:%s\n",
     37        logname, password, &pwd->pw_uid,
     38        &pwd->pw_gid, comment, gecos,
     39        dir, shell);
     40    pwd->pw_name = logname;
     41    pwd->pw_passwd = password;
     42    pwd->pw_comment = comment;
     43    pwd->pw_gecos = gecos;
     44    pwd->pw_dir = dir;
     45    pwd->pw_shell = shell;
     46
     47    if (!strcmp (logname, name)) {
     48      fclose (fp);
     49      *result = pwd;
     50      return 0;
    3151    }
    32 
    33   while (fgets (buf, sizeof (buf), fp))
    34     {
    35       sscanf (buf, "%[^:]:%[^:]:%d:%d:%[^:]:%[^:]:%s\n",
    36               logname, password, &pw_passwd.pw_uid,
    37               &pw_passwd.pw_gid, comment, gecos,
    38               dir, shell);
    39       pw_passwd.pw_name = logname;
    40       pw_passwd.pw_passwd = password;
    41       pw_passwd.pw_comment = comment;
    42       pw_passwd.pw_gecos = gecos;
    43       pw_passwd.pw_dir = dir;
    44       pw_passwd.pw_shell = shell;
    45 
    46       if (!strcmp (logname, name))
    47         {
    48           fclose (fp);
    49           return &pw_passwd;
    50         }
    51     }
     52  }
    5253  fclose (fp);
    53   return NULL;
     54  errno = EINVAL;
     55  return -1;
    5456}
    5557
    56 struct passwd *
    57 getpwuid (uid_t uid)
     58struct passwd *getpwnam(
     59  const char *name
     60)
     61{
     62  char   buf[1024];
     63  struct passwd *p;
     64
     65  if ( getpwnam_r( name, &pw_passwd, buf, 1024, &p ) )
     66    return NULL;
     67
     68  return p;
     69}
     70
     71int getpwuid_r(
     72  uid_t           uid,
     73  struct passwd  *pwd,
     74  char           *buffer,
     75  size_t          bufsize,
     76  struct passwd **result
     77)
    5878{
    5979  FILE *fp;
    60   char buf[1024];
    6180
    62   if ((fp = fopen ("/etc/passwd", "r")) == NULL)
    63     {
    64       return NULL;
     81  if ((fp = fopen ("/etc/passwd", "r")) == NULL) {
     82    errno = EINVAL;
     83    return -1;
     84  }
     85
     86  while (fgets (buffer, bufsize, fp)) {
     87    sscanf (buffer, "%[^:]:%[^:]:%d:%d:%[^:]:%[^:]:%s\n",
     88     logname, password, &pw_passwd.pw_uid,
     89     &pw_passwd.pw_gid, comment, gecos,
     90     dir, shell);
     91    pwd->pw_name = logname;
     92    pwd->pw_passwd = password;
     93    pwd->pw_comment = comment;
     94    pwd->pw_gecos = gecos;
     95    pwd->pw_dir = dir;
     96    pwd->pw_shell = shell;
     97
     98    if (uid == pwd->pw_uid) {
     99      fclose (fp);
     100      *result = pwd;
     101      return 0;
    65102    }
    66 
    67   while (fgets (buf, sizeof (buf), fp))
    68     {
    69       sscanf (buf, "%[^:]:%[^:]:%d:%d:%[^:]:%[^:]:%s\n",
    70               logname, password, &pw_passwd.pw_uid,
    71               &pw_passwd.pw_gid, comment, gecos,
    72               dir, shell);
    73       pw_passwd.pw_name = logname;
    74       pw_passwd.pw_passwd = password;
    75       pw_passwd.pw_comment = comment;
    76       pw_passwd.pw_gecos = gecos;
    77       pw_passwd.pw_dir = dir;
    78       pw_passwd.pw_shell = shell;
    79 
    80       if (uid == pw_passwd.pw_uid)
    81         {
    82           fclose (fp);
    83           return &pw_passwd;
    84         }
    85     }
     103  }
    86104  fclose (fp);
    87   return NULL;
     105  errno = EINVAL;
     106  return -1;
    88107}
    89108
    90 struct passwd *
    91 getpwent ()
     109struct passwd *getpwuid(
     110  uid_t uid
     111)
     112{
     113  char   buf[1024];
     114  struct passwd *p;
     115
     116  if ( getpwuid_r( uid, &pw_passwd, buf, 1024, &p ) )
     117    return NULL;
     118
     119  return p;
     120}
     121
     122struct passwd *getpwent()
    92123{
    93124  char buf[1024];
     
    113144}
    114145
    115 void
    116 setpwent ()
     146void setpwent( void )
    117147{
    118148  if (passwd_fp != NULL)
     
    122152}
    123153
    124 void
    125 endpwent ()
     154void endpwent( void )
    126155{
    127156  if (passwd_fp != NULL)
  • c/src/lib/libc/Makefile.in

    r258fd79 rc3d20eb  
    4848
    4949PASSWORD_GROUP_PIECES=\
    50   getpwent getgwent
     50  getpwent getgrent
    5151
    5252LIBC_GLUE_PIECES=\
  • c/src/lib/libc/getgrent.c

    r258fd79 rc3d20eb  
    1212#include <limits.h>
    1313
    14 static struct group gr_group;   /* password structure */
     14static struct group gr_group;    /* password structure */
    1515static FILE *group_fp;
    1616
     
    2020static char *gr_mem[16] = { } ;
    2121
    22 struct group *
    23 getgrnam (name)
    24      const char *name;
     22int getgrnam_r(
     23  const char     *name,
     24  struct group   *grp,
     25  char           *buffer,
     26  size_t          bufsize,
     27  struct group  **result
     28)
    2529{
    2630  FILE *fp;
    27   char buf[1024];
    2831
    29   if ((fp = fopen ("/etc/group", "r")) == NULL)
    30     {
    31       return NULL;
     32  if ((fp = fopen ("/etc/group", "r")) == NULL) {
     33    errno = EINVAL;
     34    return -1;
     35  }
     36
     37  while (fgets (buffer, bufsize, fp)) {
     38    sscanf (buffer, "%[^:]:%[^:]:%d:%s\n",
     39      groupname, password, &grp->gr_gid,
     40      groups);
     41    grp->gr_name = groupname;
     42    grp->gr_passwd = password;
     43    grp->gr_mem = gr_mem ;
     44   
     45    if (!strcmp (groupname, name)) {
     46      fclose (fp);
     47      *result = grp;
     48      return 0;
    3249    }
    33 
    34   while (fgets (buf, sizeof (buf), fp))
    35     {
    36       sscanf (buf, "%[^:]:%[^:]:%d:%s\n",
    37               groupname, password, &gr_group.gr_gid,
    38               groups);
    39       gr_group.gr_name = groupname;
    40       gr_group.gr_passwd = password;
    41       gr_group.gr_mem = gr_mem ;
    42      
    43       if (!strcmp (groupname, name))
    44         {
    45           fclose (fp);
    46           return &gr_group;
    47         }
    48     }
     50  }
    4951  fclose (fp);
    50   return NULL;
     52  errno = EINVAL;
     53  return -1;
    5154}
    5255
    53 struct group *
    54 getgrgid (gid_t gid)
     56struct group *getgrnam(
     57  const char *name
     58)
     59{
     60  char   buf[1024];
     61  struct group *g;
     62
     63  if ( getgrnam_r( name, &gr_group, buf, 1024, &g ) )
     64    return NULL;
     65
     66  return g;
     67}
     68
     69int getgrgid_r(
     70  gid_t           gid,
     71  struct group   *grp,
     72  char           *buffer,
     73  size_t          bufsize,
     74  struct group  **result
     75)
    5576{
    5677  FILE *fp;
    57   char buf[1024];
    5878
    59   if ((fp = fopen ("/etc/group", "r")) == NULL)
    60     {
    61       return NULL;
    62     }
     79  if ((fp = fopen ("/etc/group", "r")) == NULL) {
     80    errno = EINVAL;
     81    return -1;
     82  }
    6383
    64   while (fgets (buf, sizeof (buf), fp))
    65     {
    66       sscanf (buf, "%[^:]:%[^:]:%d:%s\n",
    67               groupname, password, &gr_group.gr_gid,
    68               groups);
    69       gr_group.gr_name = groupname;
    70       gr_group.gr_passwd = password;
    71       gr_group.gr_mem = gr_mem ;
     84  while (fgets (buffer, bufsize, fp)) {
     85    sscanf (buffer, "%[^:]:%[^:]:%d:%s\n",
     86      groupname, password, &gr_group.gr_gid,
     87      groups);
     88    gr_group.gr_name = groupname;
     89    gr_group.gr_passwd = password;
     90    gr_group.gr_mem = gr_mem ;
    7291
    7392
    74       if (gid == gr_group.gr_gid)
    75         {
    76           fclose (fp);
    77           return &gr_group;
    78         }
     93    if (gid == gr_group.gr_gid) {
     94      fclose (fp);
     95      *result = grp;
     96      return 0;
    7997    }
     98  }
    8099  fclose (fp);
    81   return NULL;
     100  errno = EINVAL;
     101  return -1;
    82102}
    83103
    84 struct group *
    85 getgrent ()
     104struct group *getgrgid (
     105  gid_t gid
     106)
     107{
     108  char   buf[1024];
     109  struct group *g;
     110
     111  if ( getgrgid_r( gid, &gr_group, buf, 1024, &g ) )
     112    return NULL;
     113
     114  return g;
     115}
     116
     117struct group *getgrent( void )
    86118{
    87119  char buf[1024];
     
    94126
    95127  sscanf (buf, "%[^:]:%[^:]:%d:%s\n",
    96           groupname, password, &gr_group.gr_gid,
    97           groups);
     128    groupname, password, &gr_group.gr_gid,
     129    groups);
    98130  gr_group.gr_name = groupname;
    99131  gr_group.gr_passwd = password;
  • c/src/lib/libc/getpwent.c

    r258fd79 rc3d20eb  
    88#include <limits.h>
    99
    10 static struct passwd pw_passwd; /* password structure */
     10static struct passwd pw_passwd;  /* password structure */
    1111static FILE *passwd_fp;
    1212
     
    1818static char shell[1024];
    1919
    20 struct passwd *
    21 getpwnam (name)
    22      const char *name;
     20int getpwnam_r(
     21  const char     *name,
     22  struct passwd  *pwd,
     23  char           *buffer,
     24  size_t          bufsize,
     25  struct passwd **result
     26)
    2327{
    2428  FILE *fp;
    25   int uid, gid;
    26   char buf[1024];
    2729
    28   if ((fp = fopen ("/etc/passwd", "r")) == NULL)
    29     {
    30       return NULL;
     30  if ((fp = fopen ("/etc/passwd", "r")) == NULL) {
     31    errno = EINVAL;
     32    return -1;
     33  }
     34
     35  while (fgets (buffer, bufsize, fp)) {
     36    sscanf (buffer, "%[^:]:%[^:]:%d:%d:%[^:]:%[^:]:%s\n",
     37        logname, password, &pwd->pw_uid,
     38        &pwd->pw_gid, comment, gecos,
     39        dir, shell);
     40    pwd->pw_name = logname;
     41    pwd->pw_passwd = password;
     42    pwd->pw_comment = comment;
     43    pwd->pw_gecos = gecos;
     44    pwd->pw_dir = dir;
     45    pwd->pw_shell = shell;
     46
     47    if (!strcmp (logname, name)) {
     48      fclose (fp);
     49      *result = pwd;
     50      return 0;
    3151    }
    32 
    33   while (fgets (buf, sizeof (buf), fp))
    34     {
    35       sscanf (buf, "%[^:]:%[^:]:%d:%d:%[^:]:%[^:]:%s\n",
    36               logname, password, &pw_passwd.pw_uid,
    37               &pw_passwd.pw_gid, comment, gecos,
    38               dir, shell);
    39       pw_passwd.pw_name = logname;
    40       pw_passwd.pw_passwd = password;
    41       pw_passwd.pw_comment = comment;
    42       pw_passwd.pw_gecos = gecos;
    43       pw_passwd.pw_dir = dir;
    44       pw_passwd.pw_shell = shell;
    45 
    46       if (!strcmp (logname, name))
    47         {
    48           fclose (fp);
    49           return &pw_passwd;
    50         }
    51     }
     52  }
    5253  fclose (fp);
    53   return NULL;
     54  errno = EINVAL;
     55  return -1;
    5456}
    5557
    56 struct passwd *
    57 getpwuid (uid_t uid)
     58struct passwd *getpwnam(
     59  const char *name
     60)
     61{
     62  char   buf[1024];
     63  struct passwd *p;
     64
     65  if ( getpwnam_r( name, &pw_passwd, buf, 1024, &p ) )
     66    return NULL;
     67
     68  return p;
     69}
     70
     71int getpwuid_r(
     72  uid_t           uid,
     73  struct passwd  *pwd,
     74  char           *buffer,
     75  size_t          bufsize,
     76  struct passwd **result
     77)
    5878{
    5979  FILE *fp;
    60   char buf[1024];
    6180
    62   if ((fp = fopen ("/etc/passwd", "r")) == NULL)
    63     {
    64       return NULL;
     81  if ((fp = fopen ("/etc/passwd", "r")) == NULL) {
     82    errno = EINVAL;
     83    return -1;
     84  }
     85
     86  while (fgets (buffer, bufsize, fp)) {
     87    sscanf (buffer, "%[^:]:%[^:]:%d:%d:%[^:]:%[^:]:%s\n",
     88     logname, password, &pw_passwd.pw_uid,
     89     &pw_passwd.pw_gid, comment, gecos,
     90     dir, shell);
     91    pwd->pw_name = logname;
     92    pwd->pw_passwd = password;
     93    pwd->pw_comment = comment;
     94    pwd->pw_gecos = gecos;
     95    pwd->pw_dir = dir;
     96    pwd->pw_shell = shell;
     97
     98    if (uid == pwd->pw_uid) {
     99      fclose (fp);
     100      *result = pwd;
     101      return 0;
    65102    }
    66 
    67   while (fgets (buf, sizeof (buf), fp))
    68     {
    69       sscanf (buf, "%[^:]:%[^:]:%d:%d:%[^:]:%[^:]:%s\n",
    70               logname, password, &pw_passwd.pw_uid,
    71               &pw_passwd.pw_gid, comment, gecos,
    72               dir, shell);
    73       pw_passwd.pw_name = logname;
    74       pw_passwd.pw_passwd = password;
    75       pw_passwd.pw_comment = comment;
    76       pw_passwd.pw_gecos = gecos;
    77       pw_passwd.pw_dir = dir;
    78       pw_passwd.pw_shell = shell;
    79 
    80       if (uid == pw_passwd.pw_uid)
    81         {
    82           fclose (fp);
    83           return &pw_passwd;
    84         }
    85     }
     103  }
    86104  fclose (fp);
    87   return NULL;
     105  errno = EINVAL;
     106  return -1;
    88107}
    89108
    90 struct passwd *
    91 getpwent ()
     109struct passwd *getpwuid(
     110  uid_t uid
     111)
     112{
     113  char   buf[1024];
     114  struct passwd *p;
     115
     116  if ( getpwuid_r( uid, &pw_passwd, buf, 1024, &p ) )
     117    return NULL;
     118
     119  return p;
     120}
     121
     122struct passwd *getpwent()
    92123{
    93124  char buf[1024];
     
    113144}
    114145
    115 void
    116 setpwent ()
     146void setpwent( void )
    117147{
    118148  if (passwd_fp != NULL)
     
    122152}
    123153
    124 void
    125 endpwent ()
     154void endpwent( void )
    126155{
    127156  if (passwd_fp != NULL)
  • cpukit/libcsupport/src/getgrent.c

    r258fd79 rc3d20eb  
    1212#include <limits.h>
    1313
    14 static struct group gr_group;   /* password structure */
     14static struct group gr_group;    /* password structure */
    1515static FILE *group_fp;
    1616
     
    2020static char *gr_mem[16] = { } ;
    2121
    22 struct group *
    23 getgrnam (name)
    24      const char *name;
     22int getgrnam_r(
     23  const char     *name,
     24  struct group   *grp,
     25  char           *buffer,
     26  size_t          bufsize,
     27  struct group  **result
     28)
    2529{
    2630  FILE *fp;
    27   char buf[1024];
    2831
    29   if ((fp = fopen ("/etc/group", "r")) == NULL)
    30     {
    31       return NULL;
     32  if ((fp = fopen ("/etc/group", "r")) == NULL) {
     33    errno = EINVAL;
     34    return -1;
     35  }
     36
     37  while (fgets (buffer, bufsize, fp)) {
     38    sscanf (buffer, "%[^:]:%[^:]:%d:%s\n",
     39      groupname, password, &grp->gr_gid,
     40      groups);
     41    grp->gr_name = groupname;
     42    grp->gr_passwd = password;
     43    grp->gr_mem = gr_mem ;
     44   
     45    if (!strcmp (groupname, name)) {
     46      fclose (fp);
     47      *result = grp;
     48      return 0;
    3249    }
    33 
    34   while (fgets (buf, sizeof (buf), fp))
    35     {
    36       sscanf (buf, "%[^:]:%[^:]:%d:%s\n",
    37               groupname, password, &gr_group.gr_gid,
    38               groups);
    39       gr_group.gr_name = groupname;
    40       gr_group.gr_passwd = password;
    41       gr_group.gr_mem = gr_mem ;
    42      
    43       if (!strcmp (groupname, name))
    44         {
    45           fclose (fp);
    46           return &gr_group;
    47         }
    48     }
     50  }
    4951  fclose (fp);
    50   return NULL;
     52  errno = EINVAL;
     53  return -1;
    5154}
    5255
    53 struct group *
    54 getgrgid (gid_t gid)
     56struct group *getgrnam(
     57  const char *name
     58)
     59{
     60  char   buf[1024];
     61  struct group *g;
     62
     63  if ( getgrnam_r( name, &gr_group, buf, 1024, &g ) )
     64    return NULL;
     65
     66  return g;
     67}
     68
     69int getgrgid_r(
     70  gid_t           gid,
     71  struct group   *grp,
     72  char           *buffer,
     73  size_t          bufsize,
     74  struct group  **result
     75)
    5576{
    5677  FILE *fp;
    57   char buf[1024];
    5878
    59   if ((fp = fopen ("/etc/group", "r")) == NULL)
    60     {
    61       return NULL;
    62     }
     79  if ((fp = fopen ("/etc/group", "r")) == NULL) {
     80    errno = EINVAL;
     81    return -1;
     82  }
    6383
    64   while (fgets (buf, sizeof (buf), fp))
    65     {
    66       sscanf (buf, "%[^:]:%[^:]:%d:%s\n",
    67               groupname, password, &gr_group.gr_gid,
    68               groups);
    69       gr_group.gr_name = groupname;
    70       gr_group.gr_passwd = password;
    71       gr_group.gr_mem = gr_mem ;
     84  while (fgets (buffer, bufsize, fp)) {
     85    sscanf (buffer, "%[^:]:%[^:]:%d:%s\n",
     86      groupname, password, &gr_group.gr_gid,
     87      groups);
     88    gr_group.gr_name = groupname;
     89    gr_group.gr_passwd = password;
     90    gr_group.gr_mem = gr_mem ;
    7291
    7392
    74       if (gid == gr_group.gr_gid)
    75         {
    76           fclose (fp);
    77           return &gr_group;
    78         }
     93    if (gid == gr_group.gr_gid) {
     94      fclose (fp);
     95      *result = grp;
     96      return 0;
    7997    }
     98  }
    8099  fclose (fp);
    81   return NULL;
     100  errno = EINVAL;
     101  return -1;
    82102}
    83103
    84 struct group *
    85 getgrent ()
     104struct group *getgrgid (
     105  gid_t gid
     106)
     107{
     108  char   buf[1024];
     109  struct group *g;
     110
     111  if ( getgrgid_r( gid, &gr_group, buf, 1024, &g ) )
     112    return NULL;
     113
     114  return g;
     115}
     116
     117struct group *getgrent( void )
    86118{
    87119  char buf[1024];
     
    94126
    95127  sscanf (buf, "%[^:]:%[^:]:%d:%s\n",
    96           groupname, password, &gr_group.gr_gid,
    97           groups);
     128    groupname, password, &gr_group.gr_gid,
     129    groups);
    98130  gr_group.gr_name = groupname;
    99131  gr_group.gr_passwd = password;
  • cpukit/libcsupport/src/getpwent.c

    r258fd79 rc3d20eb  
    88#include <limits.h>
    99
    10 static struct passwd pw_passwd; /* password structure */
     10static struct passwd pw_passwd;  /* password structure */
    1111static FILE *passwd_fp;
    1212
     
    1818static char shell[1024];
    1919
    20 struct passwd *
    21 getpwnam (name)
    22      const char *name;
     20int getpwnam_r(
     21  const char     *name,
     22  struct passwd  *pwd,
     23  char           *buffer,
     24  size_t          bufsize,
     25  struct passwd **result
     26)
    2327{
    2428  FILE *fp;
    25   int uid, gid;
    26   char buf[1024];
    2729
    28   if ((fp = fopen ("/etc/passwd", "r")) == NULL)
    29     {
    30       return NULL;
     30  if ((fp = fopen ("/etc/passwd", "r")) == NULL) {
     31    errno = EINVAL;
     32    return -1;
     33  }
     34
     35  while (fgets (buffer, bufsize, fp)) {
     36    sscanf (buffer, "%[^:]:%[^:]:%d:%d:%[^:]:%[^:]:%s\n",
     37        logname, password, &pwd->pw_uid,
     38        &pwd->pw_gid, comment, gecos,
     39        dir, shell);
     40    pwd->pw_name = logname;
     41    pwd->pw_passwd = password;
     42    pwd->pw_comment = comment;
     43    pwd->pw_gecos = gecos;
     44    pwd->pw_dir = dir;
     45    pwd->pw_shell = shell;
     46
     47    if (!strcmp (logname, name)) {
     48      fclose (fp);
     49      *result = pwd;
     50      return 0;
    3151    }
    32 
    33   while (fgets (buf, sizeof (buf), fp))
    34     {
    35       sscanf (buf, "%[^:]:%[^:]:%d:%d:%[^:]:%[^:]:%s\n",
    36               logname, password, &pw_passwd.pw_uid,
    37               &pw_passwd.pw_gid, comment, gecos,
    38               dir, shell);
    39       pw_passwd.pw_name = logname;
    40       pw_passwd.pw_passwd = password;
    41       pw_passwd.pw_comment = comment;
    42       pw_passwd.pw_gecos = gecos;
    43       pw_passwd.pw_dir = dir;
    44       pw_passwd.pw_shell = shell;
    45 
    46       if (!strcmp (logname, name))
    47         {
    48           fclose (fp);
    49           return &pw_passwd;
    50         }
    51     }
     52  }
    5253  fclose (fp);
    53   return NULL;
     54  errno = EINVAL;
     55  return -1;
    5456}
    5557
    56 struct passwd *
    57 getpwuid (uid_t uid)
     58struct passwd *getpwnam(
     59  const char *name
     60)
     61{
     62  char   buf[1024];
     63  struct passwd *p;
     64
     65  if ( getpwnam_r( name, &pw_passwd, buf, 1024, &p ) )
     66    return NULL;
     67
     68  return p;
     69}
     70
     71int getpwuid_r(
     72  uid_t           uid,
     73  struct passwd  *pwd,
     74  char           *buffer,
     75  size_t          bufsize,
     76  struct passwd **result
     77)
    5878{
    5979  FILE *fp;
    60   char buf[1024];
    6180
    62   if ((fp = fopen ("/etc/passwd", "r")) == NULL)
    63     {
    64       return NULL;
     81  if ((fp = fopen ("/etc/passwd", "r")) == NULL) {
     82    errno = EINVAL;
     83    return -1;
     84  }
     85
     86  while (fgets (buffer, bufsize, fp)) {
     87    sscanf (buffer, "%[^:]:%[^:]:%d:%d:%[^:]:%[^:]:%s\n",
     88     logname, password, &pw_passwd.pw_uid,
     89     &pw_passwd.pw_gid, comment, gecos,
     90     dir, shell);
     91    pwd->pw_name = logname;
     92    pwd->pw_passwd = password;
     93    pwd->pw_comment = comment;
     94    pwd->pw_gecos = gecos;
     95    pwd->pw_dir = dir;
     96    pwd->pw_shell = shell;
     97
     98    if (uid == pwd->pw_uid) {
     99      fclose (fp);
     100      *result = pwd;
     101      return 0;
    65102    }
    66 
    67   while (fgets (buf, sizeof (buf), fp))
    68     {
    69       sscanf (buf, "%[^:]:%[^:]:%d:%d:%[^:]:%[^:]:%s\n",
    70               logname, password, &pw_passwd.pw_uid,
    71               &pw_passwd.pw_gid, comment, gecos,
    72               dir, shell);
    73       pw_passwd.pw_name = logname;
    74       pw_passwd.pw_passwd = password;
    75       pw_passwd.pw_comment = comment;
    76       pw_passwd.pw_gecos = gecos;
    77       pw_passwd.pw_dir = dir;
    78       pw_passwd.pw_shell = shell;
    79 
    80       if (uid == pw_passwd.pw_uid)
    81         {
    82           fclose (fp);
    83           return &pw_passwd;
    84         }
    85     }
     103  }
    86104  fclose (fp);
    87   return NULL;
     105  errno = EINVAL;
     106  return -1;
    88107}
    89108
    90 struct passwd *
    91 getpwent ()
     109struct passwd *getpwuid(
     110  uid_t uid
     111)
     112{
     113  char   buf[1024];
     114  struct passwd *p;
     115
     116  if ( getpwuid_r( uid, &pw_passwd, buf, 1024, &p ) )
     117    return NULL;
     118
     119  return p;
     120}
     121
     122struct passwd *getpwent()
    92123{
    93124  char buf[1024];
     
    113144}
    114145
    115 void
    116 setpwent ()
     146void setpwent( void )
    117147{
    118148  if (passwd_fp != NULL)
     
    122152}
    123153
    124 void
    125 endpwent ()
     154void endpwent( void )
    126155{
    127156  if (passwd_fp != NULL)
Note: See TracChangeset for help on using the changeset viewer.