More optimizations of nss_files
authorUlrich Drepper <drepper@gmail.com>
Sat, 20 Aug 2011 19:55:44 +0000 (15:55 -0400)
committerUlrich Drepper <drepper@gmail.com>
Sat, 20 Aug 2011 19:55:44 +0000 (15:55 -0400)
ChangeLog
nss/nss_files/files-alias.c
nss/nss_files/files-key.c

index 5af9c0b..fadf296 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,9 @@
 2011-08-20  Ulrich Drepper  <drepper@gmail.com>
 
-       * nss/nss_files/files-alias.c (get_next_alias): Use feof_unlocked.
+       * nss/nss_files/files-alias.c (get_next_alias): Use feof_unlocked
+       and fgetc_unlocked.
+       * nss/nss_files/files-key.c (search): Use fgets_unlocked and
+       getc_unlocked.
 
        * elf/dl-open.c (add_to_global): Report additions to the global scope
        for LD_DEBUG=scopes.
index 0a722b9..714299a 100644 (file)
@@ -335,7 +335,7 @@ get_next_alias (const char *match, struct aliasent *result,
                     just read character.  */
                  int ch;
 
-                 ch = fgetc (stream);
+                 ch = fgetc_unlocked (stream);
                  if (ch == EOF || ch == '\n' || !isspace (ch))
                    {
                      size_t cnt;
index 5c7ad09..fb108c8 100644 (file)
@@ -1,5 +1,5 @@
 /* Public key file parser in nss_files module.
-   Copyright (C) 1996, 1997, 1998, 2006 Free Software Foundation, Inc.
+   Copyright (C) 1996, 1997, 1998, 2006, 2011 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
@@ -33,9 +33,7 @@ extern int xdecrypt (char *, char *);
 static enum nss_status
 search (const char *netname, char *result, int *errnop, int secret)
 {
-  FILE *stream;
-
-  stream = fopen (DATAFILE, "r");
+  FILE *stream = fopen (DATAFILE, "re");
   if (stream == NULL)
     return errno == EAGAIN ? NSS_STATUS_TRYAGAIN : NSS_STATUS_UNAVAIL;
 
@@ -46,7 +44,7 @@ search (const char *netname, char *result, int *errnop, int secret)
       char *save_ptr;
 
       buffer[sizeof (buffer) - 1] = '\xff';
-      p = fgets (buffer, sizeof (buffer), stream);
+      p = fgets_unlocked (buffer, sizeof (buffer), stream);
       if (p == NULL)
        {
          /* End of file or read error.  */
@@ -58,7 +56,7 @@ search (const char *netname, char *result, int *errnop, int secret)
        {
          /* Invalid line in file?  Skip remainder of line.  */
          if (buffer[sizeof (buffer) - 2] != '\0')
-           while (getc (stream) != '\n')
+           while (getc_unlocked (stream) != '\n')
              continue;
          continue;
        }