diff options
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | nss/Makefile | 2 | ||||
-rw-r--r-- | nss/nsswitch.c | 18 | ||||
-rw-r--r-- | nss/tst-nss-static.c | 15 |
4 files changed, 34 insertions, 9 deletions
@@ -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] diff --git a/nss/Makefile b/nss/Makefile index 54d50d051c..a272ebe13d 100644 --- a/nss/Makefile +++ b/nss/Makefile @@ -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 diff --git a/nss/nsswitch.c b/nss/nsswitch.c index 7acb1403fd..53ff5f8f71 100644 --- a/nss/nsswitch.c +++ b/nss/nsswitch.c @@ -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 index 0000000000..98cf073deb --- /dev/null +++ b/nss/tst-nss-static.c @@ -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" |