about summary refs log tree commit diff
path: root/intl
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2001-07-17 08:32:35 +0000
committerUlrich Drepper <drepper@redhat.com>2001-07-17 08:32:35 +0000
commit2706ee382341eb1c2e5f96c7d90f346696dbd0d8 (patch)
treec29690519bcb43604d9e0affa936aa7a2798660a /intl
parent23700036397721389b90ac41571d68df2f26ad67 (diff)
downloadglibc-2706ee382341eb1c2e5f96c7d90f346696dbd0d8.tar.gz
glibc-2706ee382341eb1c2e5f96c7d90f346696dbd0d8.tar.xz
glibc-2706ee382341eb1c2e5f96c7d90f346696dbd0d8.zip
Update.
2001-07-17  Ulrich Drepper  <drepper@redhat.com>

	* inet/rcmd.c (iruserfopen): Disable implicit locking for the stream.
	* inet/ruserpass.c (ruserpass): Likewise.
	* nss/nsswitch.c (nss_parse_file): Likewise.
	* resolv/res_hconf.c (_res_hconf_init): Likewise.
	* resolv/res_init.c (__res_vinit): Likewise.
	* gmon/bb_exit_func.c (__bb_exit_func): Likewise.
	* misc/getpass.c (getpass): Likewise.
	* misc/getusershell.c (initshells): Likewise.
	* misc/getttyent.c (setttyent): Likewise.
	* misc/mntent_r.c (__setmntent): Likewise.
	* time/getdate.c (__getdate_r): Likewise.
	* time/tzfile.c (__tzfile_read): Likewise.
	* iconv/gconv_conf.c (read_conf_file): Likewise.
	* intl/localealias.c (read_alias_file): Disable implicit locking
	for the stream.  Use _unlocked functions for glibc.
	* sysdeps/unix/sysv/linux/getsysstats.c (__get_nprocs): Disable
	implicit locking for the stream.
	(__get_nprocs_conf): Likewise.
	(phys_pages_info): Likewise.
Diffstat (limited to 'intl')
-rw-r--r--intl/localealias.c24
1 files changed, 21 insertions, 3 deletions
diff --git a/intl/localealias.c b/intl/localealias.c
index 381264ba03..122b5807f9 100644
--- a/intl/localealias.c
+++ b/intl/localealias.c
@@ -30,6 +30,9 @@
 
 #include <ctype.h>
 #include <stdio.h>
+#if defined _LIBC || defined HAVE___FSETLOCKING
+# include <stdio_ext.h>
+#endif
 #include <sys/types.h>
 
 #ifdef __GNUC__
@@ -88,6 +91,7 @@ void free ();
 #  define mempcpy __mempcpy
 # endif
 # define HAVE_MEMPCPY	1
+# define HAVE___FSETLOCKING	1
 
 /* We need locking here since we can be called from different places.  */
 # include <bits/libc-lock.h>
@@ -99,6 +103,15 @@ __libc_lock_define_initialized (static, lock);
 # define internal_function
 #endif
 
+/* Some optimizations for glibc.  */
+#ifdef _LIBC
+# define FEOF(fp)		feof_unlocked (fp)
+# define FGETS(buf, n, fp)	fgets_unlocked (buf, n, fp)
+#else
+# define FEOF(fp)		feof (fp)
+# define FGETS(buf, n, fp)	fgets (buf, n, fp)
+#endif
+
 /* For those losing systems which don't have `alloca' we have to add
    some additional code emulating it.  */
 #ifdef HAVE_ALLOCA
@@ -228,8 +241,13 @@ read_alias_file (fname, fname_len)
   if (fp == NULL)
     return 0;
 
+#ifdef HAVE___FSETLOCKING
+  /* No threads present.  */
+  __fsetlocking (fp, FSETLOCKING_BYCALLER);
+#endif
+
   added = 0;
-  while (!feof (fp))
+  while (!FEOF (fp))
     {
       /* It is a reasonable approach to use a fix buffer here because
 	 a) we are only interested in the first two fields
@@ -241,7 +259,7 @@ read_alias_file (fname, fname_len)
       char *value;
       char *cp;
 
-      if (fgets (buf, sizeof buf, fp) == NULL)
+      if (FGETS (buf, sizeof buf, fp) == NULL)
 	/* EOF reached.  */
 	break;
 
@@ -251,7 +269,7 @@ read_alias_file (fname, fname_len)
 	{
 	  char altbuf[BUFSIZ];
 	  do
-	    if (fgets (altbuf, sizeof altbuf, fp) == NULL)
+	    if (FGETS (altbuf, sizeof altbuf, fp) == NULL)
 	      /* Make sure the inner loop will be left.  The outer loop
 		 will exit at the `feof' test.  */
 	      break;