mirror of
git://sourceware.org/git/glibc.git
synced 2024-11-27 03:41:23 +08:00
* inet/getnameinfo.c (getnameinfo): For AF_INET, check errno
only if herrno is NETDB_INTERNAL. Handle errors other than ERANGE outside of the loops, handle TRY_AGAIN. * locale/programs/ld-ctype.c (translit_flatten): Issue error if other's ctype category was missing. * locale/programs/ld-collate.c (collate_read): Return if copy_locale's collate category is missing.
This commit is contained in:
parent
07014fcacd
commit
6e31011191
11
ChangeLog
11
ChangeLog
@ -1,3 +1,14 @@
|
||||
2006-08-28 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* inet/getnameinfo.c (getnameinfo): For AF_INET, check errno
|
||||
only if herrno is NETDB_INTERNAL. Handle errors other than
|
||||
ERANGE outside of the loops, handle TRY_AGAIN.
|
||||
|
||||
* locale/programs/ld-ctype.c (translit_flatten): Issue error
|
||||
if other's ctype category was missing.
|
||||
* locale/programs/ld-collate.c (collate_read): Return if
|
||||
copy_locale's collate category is missing.
|
||||
|
||||
2006-08-27 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
[BZ #2684]
|
||||
|
@ -203,48 +203,40 @@ getnameinfo (const struct sockaddr *sa, socklen_t addrlen, char *host,
|
||||
if (!(flags & NI_NUMERICHOST))
|
||||
{
|
||||
struct hostent *h = NULL;
|
||||
if (sa->sa_family == AF_INET6)
|
||||
{
|
||||
while (__gethostbyaddr_r ((const void *) &(((const struct sockaddr_in6 *) sa)->sin6_addr),
|
||||
sizeof(struct in6_addr),
|
||||
AF_INET6, &th, tmpbuf, tmpbuflen,
|
||||
&h, &herrno))
|
||||
if (herrno == NETDB_INTERNAL && errno == ERANGE)
|
||||
tmpbuf = extend_alloca (tmpbuf, tmpbuflen, 2 * tmpbuflen);
|
||||
else
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
while (__gethostbyaddr_r ((const void *) &(((const struct sockaddr_in *)sa)->sin_addr),
|
||||
sizeof(struct in_addr), AF_INET,
|
||||
&th, tmpbuf, tmpbuflen,
|
||||
&h, &herrno))
|
||||
if (herrno == NETDB_INTERNAL && errno == ERANGE)
|
||||
tmpbuf = extend_alloca (tmpbuf, tmpbuflen, 2 * tmpbuflen);
|
||||
else
|
||||
break;
|
||||
}
|
||||
|
||||
if (h == NULL)
|
||||
{
|
||||
if (sa->sa_family == AF_INET6)
|
||||
if (herrno == NETDB_INTERNAL)
|
||||
{
|
||||
while (__gethostbyaddr_r ((const void *) &(((const struct sockaddr_in6 *) sa)->sin6_addr),
|
||||
sizeof(struct in6_addr),
|
||||
AF_INET6, &th, tmpbuf, tmpbuflen,
|
||||
&h, &herrno))
|
||||
{
|
||||
if (herrno == NETDB_INTERNAL)
|
||||
{
|
||||
if (errno == ERANGE)
|
||||
tmpbuf = extend_alloca (tmpbuf, tmpbuflen,
|
||||
2 * tmpbuflen);
|
||||
else
|
||||
{
|
||||
__set_h_errno (herrno);
|
||||
__set_errno (serrno);
|
||||
return EAI_SYSTEM;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
__set_h_errno (herrno);
|
||||
return EAI_SYSTEM;
|
||||
}
|
||||
else
|
||||
if (herrno == TRY_AGAIN)
|
||||
{
|
||||
while (__gethostbyaddr_r ((const void *) &(((const struct sockaddr_in *)sa)->sin_addr),
|
||||
sizeof(struct in_addr), AF_INET,
|
||||
&th, tmpbuf, tmpbuflen,
|
||||
&h, &herrno))
|
||||
{
|
||||
if (errno == ERANGE)
|
||||
tmpbuf = extend_alloca (tmpbuf, tmpbuflen,
|
||||
2 * tmpbuflen);
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
__set_h_errno (herrno);
|
||||
return EAI_AGAIN;
|
||||
}
|
||||
}
|
||||
|
||||
@ -361,10 +353,7 @@ getnameinfo (const struct sockaddr *sa, socklen_t addrlen, char *host,
|
||||
(const void *) &(((const struct sockaddr_in *) sa)->sin_addr),
|
||||
host, hostlen);
|
||||
if (c == NULL)
|
||||
{
|
||||
__set_errno (serrno);
|
||||
return EAI_SYSTEM;
|
||||
}
|
||||
return EAI_SYSTEM;
|
||||
}
|
||||
ok = 1;
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1995-2002, 2003, 2005 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1995-2002, 2003, 2005, 2006 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@gnu.org>, 1995.
|
||||
|
||||
@ -2671,6 +2671,9 @@ collate_read (struct linereader *ldfile, struct localedef_t *result,
|
||||
if (locfile_read (copy_locale, charmap) != 0)
|
||||
goto skip_category;
|
||||
}
|
||||
|
||||
if (copy_locale->categories[LC_COLLATE].collate == NULL)
|
||||
return;
|
||||
}
|
||||
|
||||
lr_ignore_rest (ldfile, 1);
|
||||
|
@ -3769,7 +3769,7 @@ translit_flatten (struct locale_ctype_t *ctype,
|
||||
|
||||
other = find_locale (LC_CTYPE, copy_locale, copy_repertoire, charmap);
|
||||
|
||||
if (other == NULL)
|
||||
if (other == NULL || other->categories[LC_CTYPE].ctype == NULL)
|
||||
{
|
||||
WITH_CUR_LOCALE (error (0, 0, _("\
|
||||
%s: transliteration data from locale `%s' not available"),
|
||||
|
Loading…
Reference in New Issue
Block a user