From 62470f605ed931f88fb1993f4440d5bb02afa2b1 Mon Sep 17 00:00:00 2001 From: Paul Pluzhnikov Date: Fri, 6 Apr 2012 13:49:35 -0700 Subject: [PATCH] 2012-04-06 Paul Pluzhnikov [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 | 8 ++++++++ nss/Makefile | 2 ++ nss/nsswitch.c | 18 +++++++++--------- nss/tst-nss-static.c | 15 +++++++++++++++ 4 files changed, 34 insertions(+), 9 deletions(-) create mode 100644 nss/tst-nss-static.c diff --git a/ChangeLog b/ChangeLog index 6a800cb..27980f5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2012-04-06 Paul Pluzhnikov + + [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 [BZ #6486] diff --git a/nss/Makefile b/nss/Makefile index 54d50d0..a272ebe 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 7acb140..53ff5f8 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 , 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 0000000..98cf073 --- /dev/null +++ b/nss/tst-nss-static.c @@ -0,0 +1,15 @@ +/* glibc test for static NSS. */ +#include + +#define TEST_FUNCTION do_test () +static int +do_test (void) +{ + struct passwd *pw; + + pw = getpwuid(0); + return pw == NULL; +} + + +#include "../test-skeleton.c" -- 2.7.4