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 + + * 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 * 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 , 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;