Update.
authorUlrich Drepper <drepper@redhat.com>
Fri, 27 Feb 2004 00:55:39 +0000 (00:55 +0000)
committerUlrich Drepper <drepper@redhat.com>
Fri, 27 Feb 2004 00:55:39 +0000 (00:55 +0000)
2004-02-26  Ulrich Drepper  <drepper@redhat.com>

* nss/getXXbyYY_r.c: Pass result also to the nscd_* function.  Don't
set *result here.
* nscd/nscd_proto.h: Add new argument for pointer to result pointer
to all nscd_* functions.
* nscd/nscd_getgr_r.c (nscd_getgr_r): Add new parameter.  Store result
pointer in the address provided by the new parameter if successful.
Otherwise store NULL.  Return zero if no entry found.
(__nscd_getgrnam_r, __nscd_getgrgid_r): Add new parameter and pass
it on.
* nscd/nscd_gethst_r.c (nscd_gethst_r): Add new parameter.  Store
result pointer in the address provided by the new parameter if
successful. Otherwise store NULL.  Return zero if no entry found.
(__nscd_gethostbyname_r, __nscd_gethostbyname2_r,
__nscd_gethostbyaddr_r): Add new parameter and pass it on.
* nscd/nscd_getpw_r.c (nscd_getpw_r): Add new parameter.  Store result
pointer in the address provided by the new parameter if successful.
Otherwise store NULL.  Return zero if no entry found.
(__nscd_getpwnam_r, __nscd_getpwuid_r): Add new parameter and pass
it on.

ChangeLog
nptl/ChangeLog
nptl/pthread_attr_getstackaddr.c
nscd/nscd_getgr_r.c
nscd/nscd_gethst_r.c
nscd/nscd_getpw_r.c
nscd/nscd_proto.h
nss/getXXbyYY_r.c

index 4aafcd3..4b5e2dd 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,25 @@
+2004-02-26  Ulrich Drepper  <drepper@redhat.com>
+
+       * nss/getXXbyYY_r.c: Pass result also to the nscd_* function.  Don't
+       set *result here.
+       * nscd/nscd_proto.h: Add new argument for pointer to result pointer
+       to all nscd_* functions.
+       * nscd/nscd_getgr_r.c (nscd_getgr_r): Add new parameter.  Store result
+       pointer in the address provided by the new parameter if successful.
+       Otherwise store NULL.  Return zero if no entry found.
+       (__nscd_getgrnam_r, __nscd_getgrgid_r): Add new parameter and pass
+       it on.
+       * nscd/nscd_gethst_r.c (nscd_gethst_r): Add new parameter.  Store
+       result pointer in the address provided by the new parameter if
+       successful. Otherwise store NULL.  Return zero if no entry found.
+       (__nscd_gethostbyname_r, __nscd_gethostbyname2_r,
+       __nscd_gethostbyaddr_r): Add new parameter and pass it on.
+       * nscd/nscd_getpw_r.c (nscd_getpw_r): Add new parameter.  Store result
+       pointer in the address provided by the new parameter if successful.
+       Otherwise store NULL.  Return zero if no entry found.
+       (__nscd_getpwnam_r, __nscd_getpwuid_r): Add new parameter and pass
+       it on.
+
 2004-02-26  Jakub Jelinek  <jakub@redhat.com>
 
        * sysdeps/unix/sysv/linux/clock_settime.c (SYSDEP_SETTIME): Set
index a9dc41a..8fb8dd4 100644 (file)
@@ -1,3 +1,8 @@
+2004-02-26  Ulrich Drepper  <drepper@redhat.com>
+
+       * pthread_attr_getstackaddr.c (__pthread_attr_getstackaddr): Don't
+       fail if stack address hasn't been set.  Just return 0.
+
 2004-02-25  Ulrich Drepper  <drepper@redhat.com>
 
        * Makefile (tests-nolibpthread): Add tst-unload.  Don't link with
index f483dc8..e6e2588 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2004 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
 
@@ -32,13 +32,9 @@ __pthread_attr_getstackaddr (attr, stackaddr)
   assert (sizeof (*attr) >= sizeof (struct pthread_attr));
   iattr = (struct pthread_attr *) attr;
 
-  /* XXX This function has a stupid definition.  The standard
-     specifies no error value but what is if no stack address was set?
-     We return an error anyway.  */
-  if ((iattr->flags & ATTR_FLAG_STACKADDR) == 0)
-    return EINVAL;
-
-  /* Store the result.  */
+  /* Some code assumes this function to work even if no stack address
+     has been set.  Let them figure it our for themselves what the
+     value means.  Simply store the result.  */
   *stackaddr = iattr->stackaddr;
 
   return 0;
index 9d9d7d5..5093266 100644 (file)
@@ -1,4 +1,5 @@
-/* Copyright (C) 1998, 1999, 2000, 2002, 2003 Free Software Foundation, Inc.
+/* Copyright (C) 1998, 1999, 2000, 2002, 2003, 2004
+   Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Thorsten Kukuk <kukuk@uni-paderborn.de>, 1998.
 
@@ -35,42 +36,44 @@ int __nss_not_use_nscd_group;
 
 static int nscd_getgr_r (const char *key, size_t keylen, request_type type,
                         struct group *resultbuf, char *buffer,
-                        size_t buflen) internal_function;
+                        size_t buflen, struct group **result)
+     internal_function;
 
 
 int
 __nscd_getgrnam_r (const char *name, struct group *resultbuf, char *buffer,
-                  size_t buflen)
+                  size_t buflen, struct group **result)
 {
   return nscd_getgr_r (name, strlen (name) + 1, GETGRBYNAME, resultbuf,
-                      buffer, buflen);
+                      buffer, buflen, result);
 }
 
 
 int
 __nscd_getgrgid_r (gid_t gid, struct group *resultbuf, char *buffer,
-                  size_t buflen)
+                  size_t buflen, struct group **result)
 {
   char buf[12];
   size_t n;
 
   n = __snprintf (buf, sizeof (buf), "%d", gid) + 1;
 
-  return nscd_getgr_r (buf, n, GETGRBYGID, resultbuf, buffer, buflen);
+  return nscd_getgr_r (buf, n, GETGRBYGID, resultbuf, buffer, buflen, result);
 }
 
 
 static int
 internal_function
 nscd_getgr_r (const char *key, size_t keylen, request_type type,
-             struct group *resultbuf, char *buffer, size_t buflen)
+             struct group *resultbuf, char *buffer, size_t buflen,
+             struct group **result)
 {
   int sock = __nscd_open_socket ();
   request_header req;
   gr_response_header gr_resp;
   ssize_t nbytes;
   struct iovec vec[2];
-  int result = -1;
+  int retval = -1;
 
   if (sock == -1)
     {
@@ -121,7 +124,7 @@ nscd_getgr_r (const char *key, size_t keylen, request_type type,
        {
        no_room:
          __set_errno (ERANGE);
-         result = ERANGE;
+         retval = ERANGE;
          goto out;
        }
       buflen -= total_len;
@@ -169,25 +172,28 @@ nscd_getgr_r (const char *key, size_t keylen, request_type type,
       if (__builtin_expect (total_len > buflen, 0))
        goto no_room;
 
-      result = 0;
+      retval = 0;
       n = TEMP_FAILURE_RETRY (__read (sock, resultbuf->gr_mem[0],
                                             total_len));
       if (__builtin_expect (n != total_len, 0))
        {
          /* The `errno' to some value != ERANGE.  */
          __set_errno (ENOENT);
-         result = ENOENT;
+         retval = ENOENT;
        }
+      else
+       *result = resultbuf;
     }
   else
     {
       /* The `errno' to some value != ERANGE.  */
       __set_errno (ENOENT);
-      result = ENOENT;
+      /* Even though we have not found anything, the result is zero.  */
+      retval = 0;
     }
 
  out:
   __close (sock);
 
-  return result;
+  return retval;
 }
index 69e7990..1089b96 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998-2002, 2003 Free Software Foundation, Inc.
+/* Copyright (C) 1998-2002, 2003, 2004 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
 
@@ -37,39 +37,42 @@ int __nss_not_use_nscd_hosts;
 
 static int nscd_gethst_r (const char *key, size_t keylen, request_type type,
                          struct hostent *resultbuf, char *buffer,
-                         size_t buflen, int *h_errnop) internal_function;
+                         size_t buflen, struct hostent **result,
+                         int *h_errnop) internal_function;
 
 
 int
 __nscd_gethostbyname_r (const char *name, struct hostent *resultbuf,
-                       char *buffer, size_t buflen, int *h_errnop)
+                       char *buffer, size_t buflen, struct hostent **result,
+                       int *h_errnop)
 {
   request_type reqtype;
 
   reqtype = (_res.options & RES_USE_INET6) ? GETHOSTBYNAMEv6 : GETHOSTBYNAME;
 
   return nscd_gethst_r (name, strlen (name) + 1, reqtype, resultbuf,
-                       buffer, buflen, h_errnop);
+                       buffer, buflen, result, h_errnop);
 }
 
 
 int
 __nscd_gethostbyname2_r (const char *name, int af, struct hostent *resultbuf,
-                        char *buffer, size_t buflen, int *h_errnop)
+                        char *buffer, size_t buflen, struct hostent **result,
+                        int *h_errnop)
 {
   request_type reqtype;
 
   reqtype = af == AF_INET6 ? GETHOSTBYNAMEv6 : GETHOSTBYNAME;
 
   return nscd_gethst_r (name, strlen (name) + 1, reqtype, resultbuf,
-                       buffer, buflen, h_errnop);
+                       buffer, buflen, result, h_errnop);
 }
 
 
 int
 __nscd_gethostbyaddr_r (const void *addr, socklen_t len, int type,
                        struct hostent *resultbuf, char *buffer, size_t buflen,
-                       int *h_errnop)
+                       struct hostent **result, int *h_errnop)
 {
   request_type reqtype;
 
@@ -80,7 +83,7 @@ __nscd_gethostbyaddr_r (const void *addr, socklen_t len, int type,
 
   reqtype = type == AF_INET6 ? GETHOSTBYADDRv6 : GETHOSTBYADDR;
 
-  return nscd_gethst_r (addr, len, reqtype, resultbuf, buffer, buflen,
+  return nscd_gethst_r (addr, len, reqtype, resultbuf, buffer, buflen, result,
                        h_errnop);
 }
 
@@ -117,14 +120,14 @@ static int
 internal_function
 nscd_gethst_r (const char *key, size_t keylen, request_type type,
               struct hostent *resultbuf, char *buffer, size_t buflen,
-              int *h_errnop)
+              struct hostent **result, int *h_errnop)
 {
   int sock = __nscd_open_socket ();
   hst_response_header hst_resp;
   request_header req;
   ssize_t nbytes;
   struct iovec vec[4];
-  int result = -1;
+  int retval = -1;
 
   if (sock == -1)
     {
@@ -184,7 +187,7 @@ nscd_gethst_r (const char *key, size_t keylen, request_type type,
        {
        no_room:
          __set_errno (ERANGE);
-         result = ERANGE;
+         retval = ERANGE;
          goto out;
        }
       cp += align1;
@@ -277,7 +280,10 @@ nscd_gethst_r (const char *key, size_t keylen, request_type type,
       /* And finally read the aliases.  */
       if ((size_t) TEMP_FAILURE_RETRY (__read (sock, resultbuf->h_aliases[0],
                                               total_len)) == total_len)
-       result = 0;
+       {
+         retval = 0;
+         *result = resultbuf;
+       }
     }
   else
     {
@@ -286,11 +292,12 @@ nscd_gethst_r (const char *key, size_t keylen, request_type type,
 
       /* The `errno' to some value != ERANGE.  */
       __set_errno (ENOENT);
-      result = ENOENT;
+      /* Even though we have not found anything, the result is zero.  */
+      retval = 0;
     }
 
  out:
   __close (sock);
 
-  return result;
+  return retval;
 }
index b0135d4..747c39b 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998, 1999, 2003 Free Software Foundation, Inc.
+/* Copyright (C) 1998, 1999, 2003, 2004 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Thorsten Kukuk <kukuk@uni-paderborn.de>, 1998.
 
@@ -35,43 +35,45 @@ int __nss_not_use_nscd_passwd;
 
 static int nscd_getpw_r (const char *key, size_t keylen, request_type type,
                         struct passwd *resultbuf, char *buffer,
-                        size_t buflen) internal_function;
+                        size_t buflen, struct passwd **result)
+     internal_function;
 
 int
 __nscd_getpwnam_r (const char *name, struct passwd *resultbuf, char *buffer,
-                  size_t buflen)
+                  size_t buflen, struct passwd **result)
 {
   if (name == NULL)
     return -1;
 
   return nscd_getpw_r (name, strlen (name) + 1, GETPWBYNAME, resultbuf,
-                      buffer, buflen);
+                      buffer, buflen, result);
 }
 
 int
 __nscd_getpwuid_r (uid_t uid, struct passwd *resultbuf, char *buffer,
-                  size_t buflen)
+                  size_t buflen, struct passwd **result)
 {
   char buf[12];
   size_t n;
 
   n = __snprintf (buf, sizeof (buf), "%d", uid) + 1;
 
-  return nscd_getpw_r (buf, n, GETPWBYUID, resultbuf, buffer, buflen);
+  return nscd_getpw_r (buf, n, GETPWBYUID, resultbuf, buffer, buflen, result);
 }
 
 
 static int
 internal_function
 nscd_getpw_r (const char *key, size_t keylen, request_type type,
-             struct passwd *resultbuf, char *buffer, size_t buflen)
+             struct passwd *resultbuf, char *buffer, size_t buflen,
+             struct passwd **result)
 {
   int sock = __nscd_open_socket ();
   request_header req;
   pw_response_header pw_resp;
   ssize_t nbytes;
   struct iovec vec[2];
-  int result = -1;
+  int retval = -1;
 
   if (sock == -1)
     {
@@ -79,6 +81,9 @@ nscd_getpw_r (const char *key, size_t keylen, request_type type,
       return -1;
     }
 
+  /* No value found so far.  */
+  *result = NULL;
+
   req.version = NSCD_VERSION;
   req.type = type;
   req.key_len = keylen;
@@ -114,7 +119,7 @@ nscd_getpw_r (const char *key, size_t keylen, request_type type,
       if (__builtin_expect (buflen < total, 0))
        {
          __set_errno (ERANGE);
-         result = ERANGE;
+         retval = ERANGE;
          goto out;
        }
 
@@ -140,17 +145,21 @@ nscd_getpw_r (const char *key, size_t keylen, request_type type,
       nbytes = TEMP_FAILURE_RETRY (__read (sock, buffer, total));
 
       if (nbytes == (ssize_t) total)
-       result = 0;
+       {
+         retval = 0;
+         *result = resultbuf;
+       }
     }
   else
     {
       /* The `errno' to some value != ERANGE.  */
       __set_errno (ENOENT);
-      result = ENOENT;
+      /* Even though we have not found anything, the result is zero.  */
+      retval = 0;
     }
 
  out:
   __close (sock);
 
-  return result;
+  return retval;
 }
index 0a02938..0c3cc73 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998, 1999, 2000, 2002 Free Software Foundation, Inc.
+/* Copyright (C) 1998, 1999, 2000, 2002, 2004 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Thorsten Kukuk <kukuk@suse.de>, 1998.
 
@@ -30,24 +30,28 @@ extern int __nss_not_use_nscd_group attribute_hidden;
 extern int __nss_not_use_nscd_hosts attribute_hidden;
 
 extern int __nscd_getpwnam_r (const char *name, struct passwd *resultbuf,
-                             char *buffer, size_t buflen);
+                             char *buffer, size_t buflen,
+                             struct passwd **result);
 extern int __nscd_getpwuid_r (uid_t uid, struct passwd *resultbuf,
-                             char *buffer,  size_t buflen);
+                             char *buffer,  size_t buflen,
+                             struct passwd **result);
 extern int __nscd_getgrnam_r (const char *name, struct group *resultbuf,
-                             char *buffer, size_t buflen);
+                             char *buffer, size_t buflen,
+                             struct group **result);
 extern int __nscd_getgrgid_r (uid_t uid, struct group *resultbuf,
-                             char *buffer,  size_t buflen);
+                             char *buffer,  size_t buflen,
+                             struct group **result);
 extern int __nscd_gethostbyname_r (const char *name,
                                   struct hostent *resultbuf,
                                   char *buffer, size_t buflen,
-                                  int *h_errnop);
+                                  struct hostent **result, int *h_errnop);
 extern int __nscd_gethostbyname2_r (const char *name, int af,
                                    struct hostent *resultbuf,
                                    char *buffer, size_t buflen,
-                                   int *h_errnop);
+                                   struct hostent **result, int *h_errnop);
 extern int __nscd_gethostbyaddr_r (const void *addr, socklen_t len, int type,
                                   struct hostent *resultbuf,
                                   char *buffer, size_t buflen,
-                                  int *h_errnop);
+                                  struct hostent **result, int *h_errnop);
 
 #endif /* _NSCD_PROTO_H */
index 9963959..65bc8e9 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996-2002, 2003 Free Software Foundation, Inc.
+/* Copyright (C) 1996-2002, 2003, 2004 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
 
@@ -168,13 +168,10 @@ INTERNAL (REENTRANT_NAME) (ADD_PARAMS, LOOKUP_TYPE *resbuf, char *buffer,
 
   if (!NOT_USENSCD_NAME)
     {
-      nscd_status = NSCD_NAME (ADD_VARIABLES, resbuf, buffer, buflen
+      nscd_status = NSCD_NAME (ADD_VARIABLES, resbuf, buffer, buflen, result
                               H_ERRNO_VAR);
       if (nscd_status >= 0)
-       {
-         *result = nscd_status == 0 ? resbuf : NULL;
-         return nscd_status;
-       }
+       return nscd_status;
     }
 #endif