aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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 468a2ad..4c4ecd8 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 d8235da..923f21f 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 7879a77..1a24beb 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 b9102c6..d77e556 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 e1c0430..7317f5e 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 e291769..5973ef0 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)