(parse_list): Always inline.
[kopensolaris-gnu/glibc.git] / nss / getXXent_r.c
index 9df443e..5a1e3e9 100644 (file)
@@ -53,6 +53,8 @@
 #define INTERNAL(Name) CONCAT2_2 (__, Name)
 #define CONCAT2_1(Pre, Post) CONCAT2_2 (Pre, Post)
 #define CONCAT2_2(Pre, Post) Pre##Post
+#define NEW(name) NEW1 (name)
+#define NEW1(name) __new_##name
 
 #define SETFUNC_NAME_STRING STRINGIZE (SETFUNC_NAME)
 #define GETFUNC_NAME_STRING STRINGIZE (REENTRANT_GETNAME)
@@ -111,7 +113,9 @@ static STAYOPEN_TMP;
 __libc_lock_define_initialized (static, lock)
 
 /* The lookup function for the first entry of this service.  */
-extern int DB_LOOKUP_FCT (service_user **nip, const char *name, void **fctp);
+extern int DB_LOOKUP_FCT (service_user **nip, const char *name, void **fctp)
+     internal_function;
+libc_hidden_proto (DB_LOOKUP_FCT)
 \f
 void
 SETFUNC_NAME (STAYOPEN)
@@ -133,12 +137,16 @@ ENDFUNC_NAME (void)
 {
   int save;
 
-  __libc_lock_lock (lock);
-  __nss_endent (ENDFUNC_NAME_STRING, DB_LOOKUP_FCT, &nip, &startp,
-               &last_nip, NEED__RES);
-  save = errno;
-  __libc_lock_unlock (lock);
-  __set_errno (save);
+  /* If the service has not been used before do not do anything.  */
+  if (startp != NULL)
+    {
+      __libc_lock_lock (lock);
+      __nss_endent (ENDFUNC_NAME_STRING, DB_LOOKUP_FCT, &nip, &startp,
+                   &last_nip, NEED__RES);
+      save = errno;
+      __libc_lock_unlock (lock);
+      __set_errno (save);
+    }
 }
 
 
@@ -184,7 +192,12 @@ OLD (REENTRANT_GETNAME) (LOOKUP_TYPE *resbuf, char *buffer, size_t buflen,
 do_symbol_version (OLD (REENTRANT_GETNAME), REENTRANT_GETNAME, GLIBC_2_0);
 #endif
 
+/* As INTERNAL (REENTRANT_GETNAME) may be hidden, we need an alias
+   in between so that the REENTRANT_GETNAME@@GLIBC_2.1.2 is not
+   hidden too.  */
+strong_alias (INTERNAL (REENTRANT_GETNAME), NEW (REENTRANT_GETNAME));
+
 #define do_default_symbol_version(real, name, version) \
   versioned_symbol (libc, real, name, version)
-do_default_symbol_version (INTERNAL (REENTRANT_GETNAME),
+do_default_symbol_version (NEW (REENTRANT_GETNAME),
                           REENTRANT_GETNAME, GLIBC_2_1_2);