summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog22
-rw-r--r--misc/getttyent.c2
-rw-r--r--misc/getusershell.c4
-rw-r--r--misc/mntent_r.c8
-rw-r--r--nss/nss_files/files-XXX.c2
-rw-r--r--nss/nsswitch.c2
-rw-r--r--resolv/res_init.c2
-rw-r--r--sysdeps/unix/sysv/linux/getsysstats.c4
-rw-r--r--time/getdate.c6
9 files changed, 39 insertions, 13 deletions
diff --git a/ChangeLog b/ChangeLog
index a6f2797687..c19873f62a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,25 @@
+1998-07-05 11:49  Ulrich Drepper  <drepper@cygnus.com>
+
+	* iconv/gconv_conf.c (read_conf_file): Use feof_unlocked on private
+	stream.
+	* inet/ruserpass.c (token): Likewise.
+	* nss/nsswitch.c (nss_parse_file): Likewise.
+	* intl/localealias.c: Likewise.  Also for ferror.
+	* time/getdate.c (__getdate_r): Likewise.
+
+	* libio/Makefile (routines): Add iofgets_u.
+	* libio/iofgets_u.c: New file.
+	* libio/Versions: Add fgets_unlocked.
+	* libio/stdio.h: Add prototype for fgets_unlocked.
+
+	* misc/getttyent.c (getttyent): Use fgets_unlocked instead of fgets.
+	* misc/getusershell.c (initshells): Likewise.
+	* misc/mntent_r.c (__getmntent_r): Explicitly lock stream.  Use
+	fgets_unlocked.
+	* nss/nss_files/files-XXX.c (internal_getent): Likewise.
+	* resolv/res_init.c (res_init): Likewise.
+	* sysdeps/unix/sysv/linux/getsysstats.c: Likewise.
+
 1998-05-23  Philip Blundell  <Philip.Blundell@pobox.com>
 
 	* sysdeps/unix/sysv/linux/arm/syscalls.list: Add `syscall'.
diff --git a/misc/getttyent.c b/misc/getttyent.c
index f474cdcacf..07018f7051 100644
--- a/misc/getttyent.c
+++ b/misc/getttyent.c
@@ -73,7 +73,7 @@ getttyent()
 		return (NULL);
 	flockfile (tf);
 	for (;;) {
-		if (!fgets(p = line, sizeof(line), tf))
+		if (!fgets_unlocked(p = line, sizeof(line), tf))
 			return (NULL);
 		/* skip lines that are too big */
 		if (!index(p, '\n')) {
diff --git a/misc/getusershell.c b/misc/getusershell.c
index 6b210b68ff..d822f554ea 100644
--- a/misc/getusershell.c
+++ b/misc/getusershell.c
@@ -96,6 +96,7 @@ initshells()
 	register char **sp, *cp;
 	register FILE *fp;
 	struct stat statb;
+	int flen;
 
 	if (shells != NULL)
 		free(shells);
@@ -122,7 +123,8 @@ initshells()
 	}
 	sp = shells;
 	cp = strings;
-	while (fgets(cp, statb.st_size - (cp - strings), fp) != NULL) {
+	flen = statb.st_size;
+	while (fgets_unlocked(cp, flen - (cp - strings), fp) != NULL) {
 		while (*cp != '#' && *cp != '/' && *cp != '\0')
 			cp++;
 		if (*cp == '#' || *cp == '\0')
diff --git a/misc/mntent_r.c b/misc/mntent_r.c
index 4dc0358f03..9567a6f077 100644
--- a/misc/mntent_r.c
+++ b/misc/mntent_r.c
@@ -1,5 +1,5 @@
 /* Utilities for reading/writing fstab, mtab, etc.
-   Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
+   Copyright (C) 1995, 1996, 1997, 1998 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
@@ -51,11 +51,12 @@ __getmntent_r (FILE *stream, struct mntent *mp, char *buffer, int bufsiz)
 {
   char *head;
 
+  flockfile (stream);
   do
     {
       char *end_ptr;
 
-      if (fgets (buffer, bufsiz, stream) == NULL)
+      if (fgets_unlocked (buffer, bufsiz, stream) == NULL)
 	return NULL;
 
       end_ptr = strchr (buffer, '\n');
@@ -65,7 +66,7 @@ __getmntent_r (FILE *stream, struct mntent *mp, char *buffer, int bufsiz)
 	{
 	  /* Not the whole line was read.  Do it now but forget it.  */
 	  char tmp[1024];
-	  while (fgets (tmp, sizeof tmp, stream) != NULL)
+	  while (fgets_unlocked (tmp, sizeof tmp, stream) != NULL)
 	    if (strchr (tmp, '\n') != NULL)
 	      break;
 	}
@@ -92,6 +93,7 @@ __getmntent_r (FILE *stream, struct mntent *mp, char *buffer, int bufsiz)
       mp->mnt_passno = 0;
     case 2:
     }
+  funlockfile (stream);
 
   return mp;
 }
diff --git a/nss/nss_files/files-XXX.c b/nss/nss_files/files-XXX.c
index d6a7911b66..9432b14b34 100644
--- a/nss/nss_files/files-XXX.c
+++ b/nss/nss_files/files-XXX.c
@@ -181,7 +181,7 @@ internal_getent (struct STRUCTURE *result,
       /* Terminate the line so that we can test for overflow.  */
       data->linebuffer[linebuflen - 1] = '\xff';
 
-      p = fgets (data->linebuffer, linebuflen, stream);
+      p = fgets_unlocked (data->linebuffer, linebuflen, stream);
       if (p == NULL)
 	{
 	  /* End of file or read error.  */
diff --git a/nss/nsswitch.c b/nss/nsswitch.c
index f010d2755c..644343a030 100644
--- a/nss/nsswitch.c
+++ b/nss/nsswitch.c
@@ -536,7 +536,7 @@ nss_parse_file (const char *fname)
 	  last = this;
 	}
     }
-  while (!feof (fp));
+  while (!feof_unlocked (fp));
 
   /* Free the buffer.  */
   free (line);
diff --git a/resolv/res_init.c b/resolv/res_init.c
index a2de01f1a2..b22611b087 100644
--- a/resolv/res_init.c
+++ b/resolv/res_init.c
@@ -259,7 +259,7 @@ res_init()
 #endif
 	if ((fp = fopen(_PATH_RESCONF, "r")) != NULL) {
 	    /* read the config file */
-	    while (fgets(buf, sizeof(buf), fp) != NULL) {
+	    while (fgets_unlocked(buf, sizeof(buf), fp) != NULL) {
 		/* skip comments */
 		if (*buf == ';' || *buf == '#')
 			continue;
diff --git a/sysdeps/unix/sysv/linux/getsysstats.c b/sysdeps/unix/sysv/linux/getsysstats.c
index 26f8179afe..58f55ac99c 100644
--- a/sysdeps/unix/sysv/linux/getsysstats.c
+++ b/sysdeps/unix/sysv/linux/getsysstats.c
@@ -94,7 +94,7 @@ __get_nprocs ()
 	     string "processor".  We don't have to fear extremely long
 	     lines since the kernel will not generate them.  8192
 	     bytes are really enough.  */
-	  while (fgets (buffer, sizeof buffer, fp) != NULL)
+	  while (fgets_unlocked (buffer, sizeof buffer, fp) != NULL)
 	    if (strncmp (buffer, "processor", 9) == 0)
 	      ++result;
 
@@ -141,7 +141,7 @@ phys_pages_info (const char *format)
 	     string "processor".  We don't have to fear extremely long
 	     lines since the kernel will not generate them.  8192
 	     bytes are really enough.  */
-	  while (fgets (buffer, sizeof buffer, fp) != NULL)
+	  while (fgets_unlocked (buffer, sizeof buffer, fp) != NULL)
 	    if (sscanf (buffer, format, &result) == 1)
 	      {
 		result /= (__getpagesize () / 1024);
diff --git a/time/getdate.c b/time/getdate.c
index 524abde038..eb7b0c7f87 100644
--- a/time/getdate.c
+++ b/time/getdate.c
@@ -1,5 +1,5 @@
 /* Convert a string representation of time to a time value.
-   Copyright (C) 1997 Free Software Foundation, Inc.
+   Copyright (C) 1997, 1998 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Mark Kettenis <kettenis@phys.uva.nl>, 1997.
 
@@ -145,13 +145,13 @@ __getdate_r (const char *string, struct tm *tp)
       if (result && *result == '\0')
 	break;
     }
-  while (!feof (fp));
+  while (!feof_unlocked (fp));
 
   /* Free the buffer.  */
   free (line);
 
   /* Check for errors. */
-  if (ferror (fp))
+  if (ferror_unlocked (fp))
     {
       fclose (fp);
       return 5;