* nss/nsswitch.c (__nss_lookup_function): En/Decrypt cached
authorUlrich Drepper <drepper@redhat.com>
Sun, 26 Apr 2009 16:45:03 +0000 (16:45 +0000)
committerUlrich Drepper <drepper@redhat.com>
Sun, 26 Apr 2009 16:45:03 +0000 (16:45 +0000)
function pointers.

ChangeLog
nss/nsswitch.c

index d042ed1..22c8a2c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2009-04-26  Ulrich Drepper  <drepper@redhat.com>
+
+       * nss/nsswitch.c (__nss_lookup_function): En/Decrypt cached
+       function pointers.
+
 2009-04-26  Jakub Jelinek  <jakub@redhat.com>
 
        * sysdeps/ieee754/dbl-64/s_tan.c (tan): Fix -Wsequence-point warnings.
index c0b661f..da94ca9 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996-1999, 2001-2006, 2007 Free Software Foundation, Inc.
+/* Copyright (C) 1996-1999, 2001-2007, 2009 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
 
@@ -300,8 +300,11 @@ __nss_lookup_function (service_user *ni, const char *fct_name)
 
   found = __tsearch (&fct_name, &ni->known, &known_compare);
   if (*found != &fct_name)
-    /* The search found an existing structure in the tree.  */
-    result = ((known_function *) *found)->fct_ptr;
+    {
+      /* The search found an existing structure in the tree.  */
+      result = ((known_function *) *found)->fct_ptr;
+      PTR_DEMANGLE (result);
+    }
   else
     {
       /* This name was not known before.  Now we have a node in the tree
@@ -424,6 +427,7 @@ __nss_lookup_function (service_user *ni, const char *fct_name)
          /* Remember function pointer for later calls.  Even if null, we
             record it so a second try needn't search the library again.  */
          known->fct_ptr = result;
+         PTR_MANGLE (known->fct_ptr);
        }
     }