update from main archive 961030
authordrepper <drepper>
Thu, 31 Oct 1996 02:53:17 +0000 (02:53 +0000)
committerdrepper <drepper>
Thu, 31 Oct 1996 02:53:17 +0000 (02:53 +0000)
pwd/fgetpwent.c
pwd/fgetpwent_r.c
pwd/pwd.h

index 215d6e0..0bcc25c 100644 (file)
@@ -25,7 +25,11 @@ struct passwd *
 fgetpwent (FILE *stream)
 {
   static char buffer[BUFSIZ];
-  static struct passwd result;
+  static struct passwd resbuf;
+  struct passwd *result;
 
-  return __fgetpwent_r (stream, &result, buffer, sizeof buffer);
+  if (__fgetpwent_r (stream, &resbuf, buffer, sizeof buffer, &result) != 0)
+    return NULL;
+
+  return result;
 }
index bd380bd..4e5fe99 100644 (file)
@@ -49,8 +49,9 @@ LINE_PARSER
 
 
 /* Read one entry from the given stream.  */
-struct passwd *
-__fgetpwent_r (FILE *stream, struct passwd *result, char *buffer, int buflen)
+int
+__fgetpwent_r (FILE *stream, struct passwd *resbuf, char *buffer,
+              size_t buflen, struct passwd **result)
 {
   char *p;
 
@@ -58,7 +59,10 @@ __fgetpwent_r (FILE *stream, struct passwd *result, char *buffer, int buflen)
     {
       p = fgets (buffer, buflen, stream);
       if (p == NULL)
-       return NULL;
+       {
+         *result = NULL;
+         return errno;
+       }
 
       /* Skip leading blanks.  */
       while (isspace (*p))
@@ -66,8 +70,9 @@ __fgetpwent_r (FILE *stream, struct passwd *result, char *buffer, int buflen)
     } while (*p == '\0' || *p == '#' ||        /* Ignore empty and comment lines.  */
             /* Parse the line.  If it is invalid, loop to
                get the next line of the file to parse.  */
-            ! parse_line (p, result, (void *) buffer, buflen));
+            ! parse_line (p, resbuf, (void *) buffer, buflen));
 
-  return result;
+  *result = resbuf;
+  return 0;
 }
 weak_alias (__fgetpwent_r, fgetpwent_r)
index 9bd380a..14d0a9e 100644 (file)
--- a/pwd/pwd.h
+++ b/pwd/pwd.h
@@ -54,7 +54,7 @@ extern FILE *__pwdopen __P ((void));
 
 /* Read a password entry from STREAM, filling in P.
    Return the `struct passwd' of P if successful, NULL on failure.  */
-extern struct passwd *__pwdread __P ((FILE * __stream, __ptr_t __p));
+extern struct passwd *__pwdread __P ((FILE *__stream, __ptr_t __p));
 
 /* Return a chunk of memory containing pre-initialized data for __pwdread.  */
 extern __ptr_t __pwdalloc __P ((void));
@@ -80,10 +80,10 @@ extern struct passwd *getpwent __P ((void));
 
 #ifdef __USE_SVID
 /* Read an entry from STREAM.  */
-extern struct passwd *fgetpwent __P ((FILE * __stream));
+extern struct passwd *fgetpwent __P ((FILE *__stream));
 
 /* Write the given entry onto the given stream.  */
-extern int putpwent __P ((__const struct passwd * __p, FILE * __f));
+extern int putpwent __P ((__const struct passwd *__p, FILE *__f));
 #endif
 
 /* Search for an entry with a matching user ID.  */
@@ -103,35 +103,35 @@ extern struct passwd *getpwnam __P ((__const char *__name));
    may change in later versions of this library.  */
 
 #if defined(__USE_SVID) || defined(__USE_MISC)
-extern struct passwd *__getpwent_r __P ((struct passwd *__resultbuf,
-                                        char *__buffer, int __buflen));
-extern struct passwd *getpwent_r __P ((struct passwd *__resultbuf,
-                                      char *__buffer, int __buflen));
+extern int __getpwent_r __P ((struct passwd *__resultbuf, char *__buffer,
+                             size_t __buflen, struct passwd **__result));
+extern int getpwent_r __P ((struct passwd *__resultbuf, char *__buffer,
+                           size_t __buflen, struct passwd **__result));
 #endif
 
-extern struct passwd *__getpwuid_r __P ((__uid_t __uid,
-                                        struct passwd *__resultbuf,
-                                        char *__buffer, int __buflen));
-extern struct passwd *getpwuid_r __P ((__uid_t __uid,
-                                      struct passwd *__resultbuf,
-                                      char *__buffer, int __buflen));
+extern int __getpwuid_r __P ((__uid_t __uid, struct passwd *__resultbuf,
+                             char *__buffer, size_t __buflen,
+                             struct passwd **__result));
+extern int getpwuid_r __P ((__uid_t __uid, struct passwd *__resultbuf,
+                           char *__buffer, size_t __buflen,
+                           struct passwd **__result));
 
-extern struct passwd *__getpwnam_r __P ((__const char *__name,
-                                        struct passwd *__resultbuf,
-                                        char *__buffer, int __buflen));
-extern struct passwd *getpwnam_r __P ((__const char *__name,
-                                      struct passwd *__resultbuf,
-                                      char *__buffer, int __buflen));
+extern int __getpwnam_r __P ((__const char *__name, struct passwd *__resultbuf,
+                             char *__buffer, size_t __buflen,
+                             struct passwd **__result));
+extern int getpwnam_r __P ((__const char *__name, struct passwd *__resultbuf,
+                           char *__buffer, size_t __buflen,
+                           struct passwd **__result));
 
 
 #ifdef __USE_SVID
 /* Read an entry from STREAM.  */
-extern struct passwd *__fgetpwent_r __P ((FILE * __stream,
-                                         struct passwd *__resultbuf,
-                                         char *__buffer, int __buflen));
-extern struct passwd *fgetpwent_r __P ((FILE * __stream,
-                                       struct passwd *__resultbuf,
-                                       char *__buffer, int __buflen));
+extern int __fgetpwent_r __P ((FILE * __stream, struct passwd *__resultbuf,
+                              char *__buffer, size_t __buflen,
+                              struct passwd **__result));
+extern int fgetpwent_r __P ((FILE * __stream, struct passwd *__resultbuf,
+                            char *__buffer, size_t __buflen,
+                            struct passwd **__result));
 #endif
 
 #endif /* reentrant */