Update.
authorUlrich Drepper <drepper@redhat.com>
Mon, 7 Jun 1999 20:17:36 +0000 (20:17 +0000)
committerUlrich Drepper <drepper@redhat.com>
Mon, 7 Jun 1999 20:17:36 +0000 (20:17 +0000)
1999-06-07  Ulrich Drepper  <drepper@cygnus.com>

* grp/fgetgrent.c (fgetgrent): Remember position of stream before
reading and reset in case the buffer was too small.

* grp/fgetgrent_r.c (__fgetgrent_r): Set errno to ENOENT in case
of EOF.

ChangeLog
grp/fgetgrent.c
grp/fgetgrent_r.c

index 47d51f77b83bb2595f6485c6346215e28eee5c52..b373d153c16bea2abcaf6d650811a0bbc05a003f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+1999-06-07  Ulrich Drepper  <drepper@cygnus.com>
+
+       * grp/fgetgrent.c (fgetgrent): Remember position of stream before
+       reading and reset in case the buffer was too small.
+
+       * grp/fgetgrent_r.c (__fgetgrent_r): Set errno to ENOENT in case
+       of EOF.
+
 1999-06-07  Andreas Jaeger  <aj@arthur.rhein-neckar.de>
 
        * sysdeps/unix/sysv/linux/if_index.c: Use SIGIOCGIFINDEX and fix
index 24fdcd86d9150574f4d11155ccc5adddf2244084..ac8d093f05afa727ad590dd6e147f7ddabeb7cae 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 1996, 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 1996, 1997, 1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -19,6 +19,7 @@
 #include <errno.h>
 #include <grp.h>
 #include <bits/libc-lock.h>
+#include <stdio.h>
 #include <stdlib.h>
 
 
@@ -32,9 +33,13 @@ fgetgrent (FILE *stream)
   static char *buffer;
   static size_t buffer_size;
   static struct group resbuf;
+  fpos_t pos;
   struct group *result;
   int save;
 
+  if (fgetpos (stream, &pos) != 0)
+    return NULL;
+
   /* Get lock.  */
   __libc_lock_lock (lock);
 
@@ -61,6 +66,13 @@ fgetgrent (FILE *stream)
          __set_errno (save);
        }
       buffer = new_buf;
+
+      /* Reset the stream.  */
+      if (fsetpos (stream, &pos) != 0)
+       {
+         buffer = NULL;
+         break;
+       }
     }
 
   if (buffer == NULL)
index 4abadfd569f78a752bdd7d2f6dd10071269f9a32..0b1d782586b6c4bd25d8de5ea9220ef2321d6e8f 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 1996, 1997, 1998 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -74,13 +74,15 @@ __fgetgrent_r (FILE *stream, struct group *resbuf, char *buffer, size_t buflen,
        {
          funlockfile (stream);
          *result = NULL;
+         __set_errno (ENOENT);
          return errno;
        }
       if (p == NULL || buffer[buflen - 1] != '\xff')
        {
          funlockfile (stream);
          *result = NULL;
-         return errno = ERANGE;
+         __set_errno (ERANGE);
+         return errno;
        }
 
       /* Skip leading blanks.  */