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.
This commit is contained in:
Ulrich Drepper 1999-06-30 17:16:08 +00:00
parent 16848c985d
commit 0ea5db4f1f
6 changed files with 95 additions and 35 deletions

View file

@ -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

View file

@ -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

View file

@ -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}.

View file

@ -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

View file

@ -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

View file

@ -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)