2012-04-06 Paul Pluzhnikov <ppluzhnikov@google.com>
authorPaul Pluzhnikov <ppluzhnikov@google.com>
Fri, 6 Apr 2012 20:49:35 +0000 (13:49 -0700)
committerPaul Pluzhnikov <ppluzhnikov@google.com>
Fri, 6 Apr 2012 20:49:35 +0000 (13:49 -0700)
[BZ #13895]
* nss/nsswitch.c (nss_load_library, __nss_lookup_function): Avoid
extra indirection.
* nss/Makefile (tests-static, tests): Add tst-nss-static.
* nss/tst-nss-static.c: New.

ChangeLog
nss/Makefile
nss/nsswitch.c
nss/tst-nss-static.c [new file with mode: 0644]

index 6a800cb3daf31f344aa4b4f14e3163bf2d2c5bee..27980f569110a6b97c2855795677be13f83bbd89 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2012-04-06  Paul Pluzhnikov  <ppluzhnikov@google.com>
+
+       [BZ #13895]
+       * nss/nsswitch.c (nss_load_library, __nss_lookup_function): Avoid
+       extra indirection.
+       * nss/Makefile (tests-static, tests): Add tst-nss-static.
+       * nss/tst-nss-static.c: New.
+
 2012-04-06  Robert Millan  <rmh@gnu.org>
 
        [BZ #6486]
index 54d50d051c71ddc800fe6219bfba49ad4e76810d..a272ebe13d434dd5f029fe41451eeae9a6cdb079 100644 (file)
@@ -75,6 +75,8 @@ libnss_db-inhibit-o   = $(filter-out .os,$(object-suffixes))
 ifeq ($(build-static-nss),yes)
 routines                += $(libnss_files-routines)
 static-only-routines    += $(libnss_files-routines)
+tests-static           = tst-nss-static
+tests                  += $(tests-static)
 endif
 
 include ../Rules
index 7acb1403fd1f3877f4b618ab2df088ba029a8028..53ff5f8f714d72c267847ede662b99aa6507034d 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996-1999,2001-2007,2009,2010,2011
+/* Copyright (C) 1996-2012
    Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
@@ -315,7 +315,7 @@ nss_load_library (service_user *ni)
   if (ni->library->lib_handle == NULL)
     {
       /* Load the shared library.  */
-      size_t shlen = (7 + strlen (ni->library->name) + 3
+      size_t shlen = (7 + strlen (ni->name) + 3
                      + strlen (__nss_shlib_revision) + 1);
       int saved_errno = errno;
       char shlib_name[shlen];
@@ -323,7 +323,7 @@ nss_load_library (service_user *ni)
       /* Construct shared object name.  */
       __stpcpy (__stpcpy (__stpcpy (__stpcpy (shlib_name,
                                              "libnss_"),
-                                   ni->library->name),
+                                   ni->name),
                          ".so"),
                __nss_shlib_revision);
 
@@ -337,14 +337,14 @@ nss_load_library (service_user *ni)
       else if (is_nscd)
        {
          /* Call the init function when nscd is used.  */
-         size_t initlen = (5 + strlen (ni->library->name)
+         size_t initlen = (5 + strlen (ni->name)
                            + strlen ("_init") + 1);
          char init_name[initlen];
 
          /* Construct the init function name.  */
          __stpcpy (__stpcpy (__stpcpy (init_name,
                                        "_nss_"),
-                             ni->library->name),
+                             ni->name),
                    "_init");
 
          /* Find the optional init function.  */
@@ -428,13 +428,13 @@ __nss_lookup_function (service_user *ni, const char *fct_name)
          else
            {
              /* Get the desired function.  */
-             size_t namlen = (5 + strlen (ni->library->name) + 1
+             size_t namlen = (5 + strlen (ni->name) + 1
                               + strlen (fct_name) + 1);
              char name[namlen];
 
              /* Construct the function name.  */
              __stpcpy (__stpcpy (__stpcpy (__stpcpy (name, "_nss_"),
-                                           ni->library->name),
+                                           ni->name),
                                  "_"),
                        fct_name);
 
@@ -457,12 +457,12 @@ __nss_lookup_function (service_user *ni, const char *fct_name)
 # include "function.def"
                { NULL, NULL }
              };
-           size_t namlen = (5 + strlen (ni->library->name) + 1
+           size_t namlen = (5 + strlen (ni->name) + 1
                             + strlen (fct_name) + 1);
            char name[namlen];
 
            /* Construct the function name.  */
-           __stpcpy (__stpcpy (__stpcpy (name, ni->library->name),
+           __stpcpy (__stpcpy (__stpcpy (name, ni->name),
                                "_"),
                      fct_name);
 
diff --git a/nss/tst-nss-static.c b/nss/tst-nss-static.c
new file mode 100644 (file)
index 0000000..98cf073
--- /dev/null
@@ -0,0 +1,15 @@
+/* glibc test for static NSS.  */
+#include <stdio.h>
+
+#define TEST_FUNCTION do_test ()
+static int
+do_test (void)
+{
+  struct passwd *pw;
+
+  pw = getpwuid(0);
+  return pw == NULL;
+}
+
+
+#include "../test-skeleton.c"