1
0
mirror of https://sourceware.org/git/glibc.git synced 2026-01-06 11:51:29 +03:00
1997-07-14 23:37  Ulrich Drepper  <drepper@cygnus.com>

	* inet/getnameinfo.c: Pretty print.
	Correctly enlarge buffers.

	* login/programs/utmpd.c: Use _() instead of gettext().

	* nis/nss_nisplus/nisplus-hosts.c: Optimize some uses of stpcpy away.
	* nis/nss_nisplus/nisplus-network.c: Likewise.
	* nis/nss_nisplus/nisplus-proto.c: Likewise.
	* nis/nss_nisplus/nisplus-rpc.c: Likewise.
	* nis/nss_nisplus/nisplus-service.c: Likewise.

	* sysdeps/alpha/fpu/bits/mathinline.h: Only define functions if
	__OPTIMIZE__.
	* sysdeps/powerpc/bits/mathinline.h: Likewise.
	* sysdeps/i386/fpu/bits/mathinline.h: Define ISO C9x comparison
	function always.
	* sysdeps/m68k/fpu/bits/mathinline.h: Likewise.
	* sysdeps/stub/bits/mathinline.h: Add conditionals to show how
	it should look like in real files.

	* sysdeps/generic/bits/select.h (__FD_ZERO): Don't use memset to
	prevent prototype trouble, use simple loop.
	* sysdeps/i386/bits/select.h [!__GNUC__] (__FD_ZERO): Likewise.

	* sysdeps/mips/mips64/Implies: Imply ieee754.

	* sysdeps/unix/sysv/linux/Makefile: Make sure bits/syscall.h is
	installed.
	* sysdeps/unix/sysv/linux/sys/syscal.h: Pretty print.

1997-07-14 00:25  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/stub/bits/stdio_lim.h: Unify with standalone version.
	* sysdeps/standalone/bits/stdio_lim.h: Removed.
	Patch by Zack Weinberg <zack@rabi.phys.columbia.edu>.

1997-06-22  Paul Eggert  <eggert@twinsun.com>

	* time/strftime.c (strftime): Use tm_zone if available, even if _LIBC.

	* time/tzfile.c (__tzstring): New decl.
	(__tzfile_read, __tzfile_default): Set __tzname to permanent strings.
	(__tzfile_default): First two args are now const char *.

	* time/tzset.c (__tzstring): New function.
	(tz_rule): Name is now const char *.
	(struct tzstring_head): New type.
	(tzstring_list, tzstring_last_buffer_size): New static vars.
	(__tzset_internal): Time zone names are now permanent, not temporary.
This commit is contained in:
Ulrich Drepper
1997-07-14 21:49:20 +00:00
parent f21acc89c0
commit cd6ede759f
26 changed files with 3371 additions and 421 deletions

View File

@@ -65,255 +65,313 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <arpa/inet.h>
#ifndef AF_LOCAL
#define AF_LOCAL AF_UNIX
# define AF_LOCAL AF_UNIX
#endif /* AF_LOCAL */
#if HOSTTABLE
struct hostent *_addr2hostname_hosts(const char *, int, int);
struct hostent *_addr2hostname_hosts (const char *, int, int);
#endif /* HOSTTABLE */
#ifndef min
#define min(x,y) (((x) > (y)) ? (y) : (x))
# define min(x,y) (((x) > (y)) ? (y) : (x))
#endif /* min */
static const char *domain;
static char *nrl_domainname(void)
static char *
nrl_domainname (void)
{
static const char *domain = NULL;
static int first = 1;
if (first) {
if (first)
{
__libc_lock_define_initialized (static, lock);
__libc_lock_lock (lock);
__libc_lock_define_initialized (static, lock);
__libc_lock_lock (lock);
if (first)
{
char *c;
struct hostent *h, th;
int tmpbuflen = 1024;
char *tmpbuf = alloca (tmpbuflen);
int herror;
if (first) {
char *c;
struct hostent *h, th;
int tmpbuflen = 1024;
char *tmpbuf = __alloca(tmpbuflen);
int herror;
first = 0;
first = 0;
while (__gethostbyname_r("localhost", &th, tmpbuf, tmpbuflen, &h,
&herror)) {
if (herror == NETDB_INTERNAL) {
if (errno == ERANGE) {
tmpbuflen *= 2;
tmpbuf = __alloca(tmpbuflen);
}
} else {
break;
}
}
if (h && (c = strchr(h->h_name, '.'))) {
domain = __strdup (++c);
goto ret;
}
while (gethostname (tmpbuf, tmpbuflen)) {
tmpbuflen *= 2;
tmpbuf = __alloca (tmpbuflen);
}
if (c = strchr(tmpbuf, '.')) {
domain = __strdup(++c);
goto ret;
}
while (__gethostbyname_r(tmpbuf, &th, tmpbuf, tmpbuflen, &h,
&herror)) {
if (herror == NETDB_INTERNAL) {
if (errno == ERANGE) {
tmpbuflen *= 2;
tmpbuf = __alloca(tmpbuflen);
}
} else {
break;
}
}
if (h && (c = strchr(h->h_name, '.'))) {
domain = __strdup(++c);
goto ret;
}
{
struct in_addr in_addr;
in_addr.s_addr = htonl(0x7f000001);
while (__gethostbyaddr_r((const char *)&in_addr,
sizeof(struct in_addr), AF_INET, &th, tmpbuf,
tmpbuflen, &h, &herror)) {
if (herror == NETDB_INTERNAL) {
if (errno == ERANGE) {
tmpbuflen *= 2;
tmpbuf = __alloca(tmpbuflen);
while (__gethostbyname_r ("localhost", &th, tmpbuf, tmpbuflen, &h,
&herror))
{
if (herror == NETDB_INTERNAL && errno == ERANGE)
{
tmpbuflen *= 2;
tmpbuf = alloca (tmpbuflen);
}
else
break;
}
if (h && (c = strchr (h->h_name, '.')))
domain = __strdup (++c);
else
{
/* The name contains no domain information. Use the name
now to get more information. */
while (gethostname (tmpbuf, tmpbuflen))
{
tmpbuflen *= 2;
tmpbuf = alloca (tmpbuflen);
}
if ((c = strchr (tmpbuf, '.')))
domain = __strdup (++c);
else
{
/* We need to preserve the hostname. */
const char *hstname = strdupa (tmpbuf);
while (__gethostbyname_r (hstname, &th, tmpbuf, tmpbuflen,
&h, &herror))
{
if (herror == NETDB_INTERNAL && errno == ERANGE)
{
tmpbuflen *= 2;
tmpbuf = alloca (tmpbuflen);
}
else
break;
}
if (h && (c = strchr(h->h_name, '.')))
domain = __strdup (++c);
else
{
struct in_addr in_addr;
in_addr.s_addr = htonl (0x7f000001);
while (__gethostbyaddr_r ((const char *) &in_addr,
sizeof (struct in_addr),
AF_INET, &th, tmpbuf,
tmpbuflen, &h, &herror))
{
if (herror == NETDB_INTERNAL && errno == ERANGE)
{
tmpbuflen *= 2;
tmpbuf = alloca (tmpbuflen);
}
else
break;
}
if (h && (c = strchr (h->h_name, '.')))
domain = __strdup (++c);
}
}
}
} else {
break;
}
}
if (h && (c = strchr(h->h_name, '.'))) {
domain = __strdup(++c);
goto ret;
}
}
__libc_lock_unlock (lock);
}
ret:
__libc_lock_unlock (lock);
}
return domain;
};
int getnameinfo(const struct sockaddr *sa, size_t addrlen, char *host, size_t hostlen, char *serv, size_t servlen, int flags)
int
getnameinfo (const struct sockaddr *sa, size_t addrlen, char *host,
size_t hostlen, char *serv, size_t servlen, int flags)
{
int serrno = errno;
int tmpbuflen = 1024;
int herrno;
char *tmpbuf = __alloca(tmpbuflen);
char *tmpbuf = alloca (tmpbuflen);
struct hostent th;
if (!sa)
if (sa == NULL)
return -1;
if (host && (hostlen > 0))
switch(sa->sa_family) {
if (host != NULL && hostlen > 0)
switch(sa->sa_family)
{
case AF_INET:
#if INET6
case AF_INET6:
#endif /* INET6 */
if (!(flags & NI_NUMERICHOST)) {
struct hostent *h = NULL;
if (!(flags & NI_NUMERICHOST))
{
struct hostent *h = NULL;
#if HOSTTABLE
#if INET6
if (sa->sa_family == AF_INET6)
h = _addr2hostname_hosts((void *)&(((struct sockaddr_in6 *)sa)->sin6_addr), sizeof(struct in6_addr), AF_INET6);
else
#endif /* INET6 */
h = _addr2hostname_hosts((void *)&(((struct sockaddr_in *)sa)->sin_addr), sizeof(struct in_addr), AF_INET);
# if INET6
if (sa->sa_family == AF_INET6)
h = _addr2hostname_hosts ((void *) &(((struct sockaddr_in6 *) sa)->sin6_addr),
sizeof(struct in6_addr), AF_INET6);
else
# endif /* INET6 */
h = _addr2hostname_hosts ((void *)& (((struct sockaddr_in *) sa)->sin_addr),
sizeof(struct in_addr), AF_INET);
#endif /* HOSTTABLE */
#if RESOLVER
if (!h) {
if (h == NULL)
{
#if INET6
if (sa->sa_family == AF_INET6) {
while (__gethostbyaddr_r((void *)&(((struct sockaddr_in6 *)sa)->sin6_addr), sizeof(struct in6_addr), AF_INET6, &th, tmpbuf, tmpbuflen, &h, &herrno)) {
if (herrno == NETDB_INTERNAL) {
if (errno == ERANGE) {
tmpbuflen *= 2;
tmpbuf = __alloca(tmpbuflen);
} else {
__set_h_errno(herrno);
goto fail;
if (sa->sa_family == AF_INET6)
{
while (__gethostbyaddr_r ((void *) &(((struct sockaddr_in6 *) sa)->sin6_addr),
sizeof(struct in6_addr),
AF_INET6, &th, tmpbuf, tmpbuflen,
&h, &herrno))
{
if (herrno == NETDB_INTERNAL)
{
if (errno == ERANGE)
{
tmpbuflen *= 2;
tmpbuf = alloca (tmpbuflen);
}
else
{
__set_h_errno (herrno);
goto fail;
}
}
else
{
break;
}
}
}
} else {
break;
}
}
} else {
else
{
#endif /* INET6 */
while (__gethostbyaddr_r((void *)&(((struct sockaddr_in *)sa)->sin_addr), sizeof(struct in_addr), AF_INET, &th, tmpbuf, tmpbuflen, &h, &herrno)) {
if (errno == ERANGE) {
tmpbuflen *= 2;
tmpbuf = __alloca(tmpbuflen);
} else {
break;
}
while (__gethostbyaddr_r ((void *) &(((struct sockaddr_in *)sa)->sin_addr),
sizeof(struct in_addr), AF_INET,
&th, tmpbuf, tmpbuflen,
&h, &herrno))
{
if (errno == ERANGE)
{
tmpbuflen *= 2;
tmpbuf = alloca (tmpbuflen);
}
else
{
break;
}
}
}
}
}
}
#endif /* RESOLVER */
if (h) {
if (flags & NI_NOFQDN) {
char *c;
if ((c = nrl_domainname()) && (c = strstr(h->h_name, c)) && (c != h->h_name) && (*(--c) == '.')) {
strncpy(host, h->h_name, min(hostlen, (size_t) (c - h->h_name)));
if (h)
{
if (flags & NI_NOFQDN)
{
char *c;
if ((c = nrl_domainname ()) && (c = strstr(h->h_name, c))
&& (c != h->h_name) && (*(--c) == '.'))
{
strncpy (host, h->h_name,
min(hostlen, (size_t) (c - h->h_name)));
break;
}
}
strncpy (host, h->h_name, hostlen);
break;
};
};
strncpy(host, h->h_name, hostlen);
break;
};
};
}
}
if (flags & NI_NAMEREQD)
goto fail;
{
const char *c;
else
{
const char *c;
#if INET6
if (sa->sa_family == AF_INET6)
c = inet_ntop(AF_INET6, (void *)&(((struct sockaddr_in6 *)sa)->sin6_addr), host, hostlen);
else
if (sa->sa_family == AF_INET6)
c = inet_ntop (AF_INET6,
(void *) &(((struct sockaddr_in6 *) sa)->sin6_addr),
host, hostlen);
else
#endif /* INET6 */
c = inet_ntop(AF_INET, (void *)&(((struct sockaddr_in *)sa)->sin_addr), host, hostlen);
c = inet_ntop (AF_INET,
(void *) &(((struct sockaddr_in *) sa)->sin_addr),
host, hostlen);
if (!c)
goto fail;
};
if (!c)
goto fail;
}
break;
#if LOCAL
case AF_LOCAL:
if (!(flags & NI_NUMERICHOST)) {
struct utsname utsname;
if (!(flags & NI_NUMERICHOST))
{
struct utsname utsname;
if (!uname(&utsname)) {
strncpy(host, utsname.nodename, hostlen);
break;
if (!uname (&utsname))
{
strncpy (host, utsname.nodename, hostlen);
break;
};
};
};
if (flags & NI_NAMEREQD)
goto fail;
strncpy(host, "localhost", hostlen);
strncpy (host, "localhost", hostlen);
break;
#endif /* LOCAL */
default:
return -1;
};
}
if (serv && (servlen > 0))
switch(sa->sa_family) {
switch(sa->sa_family)
{
case AF_INET:
#if INET6
case AF_INET6:
#endif /* INET6 */
if (!(flags & NI_NUMERICSERV)) {
struct servent *s, ts;
while (__getservbyport_r(((struct sockaddr_in *)sa)->sin_port, ((flags & NI_DGRAM) ? "udp" : "tcp"), &ts, tmpbuf, tmpbuflen, &s)) {
if (herrno == NETDB_INTERNAL) {
if (errno == ERANGE) {
tmpbuflen *= 2;
tmpbuf = __alloca(tmpbuflen);
} else {
goto fail;
if (!(flags & NI_NUMERICSERV))
{
struct servent *s, ts;
while (__getservbyport_r (((struct sockaddr_in *) sa)->sin_port,
((flags & NI_DGRAM) ? "udp" : "tcp"),
&ts, tmpbuf, tmpbuflen, &s))
{
if (herrno == NETDB_INTERNAL)
{
if (errno == ERANGE)
{
tmpbuflen *= 2;
tmpbuf = __alloca(tmpbuflen);
}
else
goto fail;
}
else
{
break;
}
}
if (s)
{
strncpy(serv, s->s_name, servlen);
break;
}
} else {
break;
}
}
if (s) {
strncpy(serv, s->s_name, servlen);
break;
};
};
snprintf(serv, servlen, "%d", ntohs(((struct sockaddr_in *)sa)->sin_port));
snprintf (serv, servlen, "%d",
ntohs (((struct sockaddr_in *) sa)->sin_port));
break;
#if LOCAL
case AF_LOCAL:
strncpy(serv, ((struct sockaddr_un *)sa)->sun_path, servlen);
strncpy (serv, ((struct sockaddr_un *) sa)->sun_path, servlen);
break;
#endif /* LOCAL */
};
}
if (host && (hostlen > 0))
host[hostlen-1] = 0;
if (serv && (servlen > 0))