about summary refs log tree commit diff
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>1999-06-30 17:16:08 +0000
committerUlrich Drepper <drepper@redhat.com>1999-06-30 17:16:08 +0000
commit0ea5db4f1f55e55942f6afd0e4e69ceb2163ed25 (patch)
treea3427369d6193a9618eb9a0c7078a0832210c282
parent16848c985d9e4d6f8ca7a9c2c4ac711ef63835ec (diff)
downloadglibc-0ea5db4f1f55e55942f6afd0e4e69ceb2163ed25.tar.gz
glibc-0ea5db4f1f55e55942f6afd0e4e69ceb2163ed25.tar.xz
glibc-0ea5db4f1f55e55942f6afd0e4e69ceb2163ed25.zip
Update.
1999-06-28  Andreas Jaeger  <aj@arthur.rhein-neckar.de>

	* inet/rcmd.c (__icheckhost): Test for gethostbyname_r result
	correctly.

1999-06-25  Andreas Jaeger  <aj@arthur.rhein-neckar.de>

	* manual/arith.texi (System V Number Conversion): Fix the
	description which confused pointer and value to pointer.
	Reported by Andries.Brouwer@cwi.nl.

1999-06-28  Andreas Jaeger  <aj@arthur.rhein-neckar.de>

	* pwd/getpw.c (__getpw): Check for NULL result pointer.

1999-06-29  Andreas Jaeger  <aj@arthur.rhein-neckar.de>

	* manual/users.texi (Lookup User): Document POSIX return
	semantics for getpwuid_r and getgrgid_r.

	* manual/socket.texi (Host Names): Document that the result
	pointer is null in case of error or host not found and fix a
	typo.  Give a small example.
-rw-r--r--ChangeLog24
-rw-r--r--inet/rcmd.c2
-rw-r--r--manual/arith.texi28
-rw-r--r--manual/socket.texi45
-rw-r--r--manual/users.texi28
-rw-r--r--pwd/getpw.c3
6 files changed, 95 insertions, 35 deletions
diff --git a/ChangeLog b/ChangeLog
index 468a2ad81e..4c4ecd8c40 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,27 @@
+1999-06-28  Andreas Jaeger  <aj@arthur.rhein-neckar.de>
+
+	* inet/rcmd.c (__icheckhost): Test for gethostbyname_r result
+	correctly.
+
+1999-06-25  Andreas Jaeger  <aj@arthur.rhein-neckar.de>
+
+	* manual/arith.texi (System V Number Conversion): Fix the
+	description which confused pointer and value to pointer.
+	Reported by Andries.Brouwer@cwi.nl.
+
+1999-06-28  Andreas Jaeger  <aj@arthur.rhein-neckar.de>
+
+	* pwd/getpw.c (__getpw): Check for NULL result pointer.
+
+1999-06-29  Andreas Jaeger  <aj@arthur.rhein-neckar.de>
+
+	* manual/users.texi (Lookup User): Document POSIX return
+	semantics for getpwuid_r and getgrgid_r.
+
+	* manual/socket.texi (Host Names): Document that the result
+	pointer is null in case of error or host not found and fix a
+	typo.  Give a small example.
+
 1999-06-30  Ulrich Drepper  <drepper@cygnus.com>
 
 	* pwd/getpw.c: Add warning since no buffer size is given and
diff --git a/inet/rcmd.c b/inet/rcmd.c
index d8235daf70..923f21fe40 100644
--- a/inet/rcmd.c
+++ b/inet/rcmd.c
@@ -270,7 +270,7 @@ ruserok(rhost, superuser, ruser, luser)
 	buffer = __alloca (buflen);
 
 	while (__gethostbyname_r (rhost, &hostbuf, buffer, buflen, &hp, &herr)
-	       < 0)
+	       != 0)
 	  if (herr != NETDB_INTERNAL || errno != ERANGE)
 	    return -1;
 	  else
diff --git a/manual/arith.texi b/manual/arith.texi
index 7879a77b7c..1a24beb7ca 100644
--- a/manual/arith.texi
+++ b/manual/arith.texi
@@ -2191,13 +2191,13 @@ All these functions are defined in @file{stdlib.h}.
 @comment SVID, Unix98
 @deftypefun {char *} ecvt (double @var{value}, int @var{ndigit}, int *@var{decpt}, int *@var{neg})
 The function @code{ecvt} converts the floating-point number @var{value}
-to a string with at most @var{ndigit} decimal digits.
-The returned string contains no decimal point or sign. The first
-digit of the string is non-zero (unless @var{value} is actually zero)
-and the last digit is rounded to nearest.  @var{decpt} is set to the
+to a string with at most @var{ndigit} decimal digits.  The
+returned string contains no decimal point or sign. The first digit of
+the string is non-zero (unless @var{value} is actually zero) and the
+last digit is rounded to nearest.  @code{*@var{decpt}} is set to the
 index in the string of the first digit after the decimal point.
-@var{neg} is set to a nonzero value if @var{value} is negative, zero
-otherwise.
+@code{*@var{neg}} is set to a nonzero value if @var{value} is negative,
+zero otherwise.
 
 If @var{ndigit} decimal digits would exceed the precision of a
 @code{double} it is reduced to a system-specific value.
@@ -2205,16 +2205,16 @@ If @var{ndigit} decimal digits would exceed the precision of a
 The returned string is statically allocated and overwritten by each call
 to @code{ecvt}.
 
-If @var{value} is zero, it's implementation defined whether @var{decpt} is
-@code{0} or @code{1}.
+If @var{value} is zero, it is implementation defined whether
+@code{*@var{decpt}} is @code{0} or @code{1}.
 
-For example: @code{ecvt (12.3, 5, &decpt, &neg)} returns @code{"12300"}
-and sets @var{decpt} to @code{2} and @var{neg} to @code{0}.
+For example: @code{ecvt (12.3, 5, &d, &n)} returns @code{"12300"}
+and sets @var{d} to @code{2} and @var{n} to @code{0}.
 @end deftypefun
 
 @comment stdlib.h
 @comment SVID, Unix98
-@deftypefun {char *} fcvt (double @var{value}, int @var{ndigit}, int @var{decpt}, int *@var{neg})
+@deftypefun {char *} fcvt (double @var{value}, int @var{ndigit}, int *@var{decpt}, int *@var{neg})
 The function @code{fcvt} is like @code{ecvt}, but @var{ndigit} specifies
 the number of digits after the decimal point.  If @var{ndigit} is less
 than zero, @var{value} is rounded to the @math{@var{ndigit}+1}'th place to the
@@ -2254,7 +2254,7 @@ restricted by the precision of a @code{long double}.
 
 @comment stdlib.h
 @comment GNU
-@deftypefun {char *} qfcvt (long double @var{value}, int @var{ndigit}, int @var{decpt}, int *@var{neg})
+@deftypefun {char *} qfcvt (long double @var{value}, int @var{ndigit}, int *@var{decpt}, int *@var{neg})
 This function is equivalent to @code{fcvt} except that it
 takes a @code{long double} for the first parameter and that @var{ndigit} is
 restricted by the precision of a @code{long double}.
@@ -2292,7 +2292,7 @@ This function is a GNU extension.
 
 @comment stdlib.h
 @comment SVID, Unix98
-@deftypefun {char *} fcvt_r (double @var{value}, int @var{ndigit}, int @var{decpt}, int *@var{neg}, char *@var{buf}, size_t @var{len})
+@deftypefun {char *} fcvt_r (double @var{value}, int @var{ndigit}, int *@var{decpt}, int *@var{neg}, char *@var{buf}, size_t @var{len})
 The @code{fcvt_r} function is the same as @code{fcvt}, except
 that it places its result into the user-specified buffer pointed to by
 @var{buf}, with length @var{len}.
@@ -2312,7 +2312,7 @@ This function is a GNU extension.
 
 @comment stdlib.h
 @comment GNU
-@deftypefun {char *} qfcvt_r (long double @var{value}, int @var{ndigit}, int @var{decpt}, int *@var{neg}, char *@var{buf}, size_t @var{len})
+@deftypefun {char *} qfcvt_r (long double @var{value}, int @var{ndigit}, int *@var{decpt}, int *@var{neg}, char *@var{buf}, size_t @var{len})
 The @code{qfcvt_r} function is the same as @code{qfcvt}, except
 that it places its result into the user-specified buffer pointed to by
 @var{buf}, with length @var{len}.
diff --git a/manual/socket.texi b/manual/socket.texi
index b9102c62e1..d77e556214 100644
--- a/manual/socket.texi
+++ b/manual/socket.texi
@@ -1284,13 +1284,42 @@ pointer and the size of the buffer in the @var{buf} and @var{buflen}
 parameters.
 
 A pointer to the buffer, in which the result is stored, is available in
-@code{*@var{result}} after the function call successfully returned.
-Success is signalled by a zero return value.  If the function failed the
-return value is an error number.  In addition to the errors defined for
-@code{gethostbyname} it can also be @code{ERANGE}.  In this case the
-call should be repeated with a larger buffer.  Additional error
-information is not stored in the global variable @code{h_errno} but
-instead in the object pointed to by @var{h_errnop}.
+@code{*@var{result}} after the function call successfully returned.  If
+an error occurs or if no entry is found, the pointer @code{*var{result}
+is a null pointer.  Success is signalled by a zero return value.  If the
+function failed the return value is an error number.  In addition to the
+errors defined for @code{gethostbyname} it can also be @code{ERANGE}.
+In this case the call should be repeated with a larger buffer.
+Additional error information is not stored in the global variable
+@code{h_errno} but instead in the object pointed to by @var{h_errnop}.
+
+Here's a small example:
+@smallexample
+struct hostent *
+gethostname (char *host)
+@{
+  struct hostent hostbuf, *hp;
+  size_t hstbuflen;
+  char *tmphstbuf;
+  int res;
+  int herr;
+
+  hstbuflen = 1024;
+  tmphstbuf = malloc (hstbuflen);
+
+  while ((res = gethostbyname_r (host, &hostbuf, tmphstbuf, hstbuflen,
+                                 &hp, &herr)) == ERANGE)
+    @{
+      /* Enlarge the buffer.  */
+      hstbuflen *= 2;
+      tmphstbuf = realloc (tmphstbuf, hstbuflen);
+    @}
+  /*  Check for errors.  */
+  if (res || hp == NULL)
+    return NULL;
+  return hp->h_name;
+@}
+@end smallexample
 @end deftypefun
 
 @comment netdb.h
@@ -1314,7 +1343,7 @@ Internet address, use @code{AF_INET6}.
 
 Similar to the @code{gethostbyname_r} function, the caller must provide
 buffers for the result and memory used internally.  In case of success
-the funciton returns zero.  Otherwise the value is an error number where
+the function returns zero.  Otherwise the value is an error number where
 @code{ERANGE} has the special meaning that the caller-provided buffer is
 too small.
 @end deftypefun
diff --git a/manual/users.texi b/manual/users.texi
index e1c0430279..7317f5efa2 100644
--- a/manual/users.texi
+++ b/manual/users.texi
@@ -1479,12 +1479,14 @@ the information instead of using a static buffer.  The first
 are used to contain additional information, normally strings which are
 pointed to by the elements of the result structure.
 
-If the return value is @code{0} the pointer returned in @var{result}
-points to the record which contains the wanted data (i.e., @var{result}
-contains the value @var{result_buf}).  If it is nonzero, there is no
-user in the data base with user ID @var{uid}, or the buffer @var{buffer}
-is too small to contain all the needed information.  In the latter case,
-@var{errno} is set to @code{ERANGE}.
+If a user with ID @var{uid} is found, the pointer returned in
+@var{result} points to the record which contains the wanted data (i.e.,
+@var{result} contains the value @var{result_buf}).  If no user is found
+or if an error occured, the pointer returned in @var{result} is a null
+pointer.  The function returns zero or an error code.  If the buffer
+@var{buffer} is too small to contain all the needed information, the
+error code @code{ERANGE} is returned and @var{errno} is set to
+@code{ERANGE}.
 @end deftypefun
 
 
@@ -1690,12 +1692,14 @@ the information instead of using a static buffer.  The first
 are used to contain additional information, normally strings which are
 pointed to by the elements of the result structure.
 
-If the return value is @code{0} the pointer returned in @var{result}
-points to the requested data (i.e., @var{result} contains the value
-@var{result_buf}).  If it is nonzero, there is no group in the data base
-with group ID @var{gid}, or the buffer @var{buffer} is too small to
-contain all the needed information.  In the latter case, @var{errno} is
-set to @code{ERANGE}.
+If a group with ID @var{gid} is found, the pointer returned in
+@var{result} points to the record which contains the wanted data (i.e.,
+@var{result} contains the value @var{result_buf}).  If no group is found
+or if an error occured, the pointer returned in @var{result} is a null
+pointer.  The function returns zero or an error code.  If the buffer
+@var{buffer} is too small to contain all the needed information, the
+error code @code{ERANGE} is returned and @var{errno} is set to
+@code{ERANGE}.
 @end deftypefun
 
 @comment grp.h
diff --git a/pwd/getpw.c b/pwd/getpw.c
index e291769237..5973ef0eea 100644
--- a/pwd/getpw.c
+++ b/pwd/getpw.c
@@ -50,6 +50,9 @@ __getpw (uid, buf)
   if (__getpwuid_r (uid, &resbuf, tmpbuf, buflen, &p) != 0)
     return -1;
 
+  if (p == NULL)
+    return -1;
+
   if (sprintf (buf, "%s:%s:%lu:%lu:%s:%s:%s", p->pw_name, p->pw_passwd,
 	       (unsigned long int) p->pw_uid, (unsigned long int) p->pw_gid,
 	       p->pw_gecos, p->pw_dir, p->pw_shell) < 0)