diff options
-rw-r--r-- | ChangeLog | 14 | ||||
-rw-r--r-- | resolv/Makefile | 2 | ||||
-rw-r--r-- | resolv/inet_addr.c | 24 | ||||
-rw-r--r-- | resolv/tst-aton.c | 22 | ||||
-rw-r--r-- | sysdeps/sparc/sparc32/dl-machine.h | 4 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/alpha/bits/signum.h | 1 |
6 files changed, 63 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog index 78adbee5bc..437aa4908b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +1998-04-23 07:31 H.J. Lu <hjl@gnu.org> + + * resolv/inet_addr.c (inet_aton): Use __strtoul_internal to + check overflow. + * resolv/Makefile (tests): New, add tst-aton. + * resolv/tst-aton.c: New file. + +1998-04-29 Ulrich Drepper <drepper@cygnus.com> + + * sysdeps/sparc/sparc32/dl-machine.h (WEAKADDR): Add missing + semicolon. + 1998-04-29 12:11 Ulrich Drepper <drepper@cygnus.com> * wcsmbs/mbsnrtowcs.c: Remove variable to pass to conversion function @@ -13,6 +25,8 @@ * wcsmbs/mbsrtowcs.c: Optimize a bit more. * wcsmbs/wcsrtombs.c: Likewise. + * sysdeps/unix/sysv/linux/alpha/bits/signum.h: Add SIGCLD definition. + 1998-04-29 Ulrich Drepper <drepper@cygnus.com> * iconv/skeleton.c: Correct counting of actually converted diff --git a/resolv/Makefile b/resolv/Makefile index 178aae52a1..938cde75dd 100644 --- a/resolv/Makefile +++ b/resolv/Makefile @@ -27,6 +27,8 @@ distribute := ../conf/portability.h mapv4v6addr.h mapv4v6hostent.h \ routines := herror inet_addr inet_ntop inet_pton nsap_addr res_init +tests = tst-aton + include ../Makeconfig extra-libs := libresolv libnss_dns diff --git a/resolv/inet_addr.c b/resolv/inet_addr.c index 7e38af223f..635dd4596d 100644 --- a/resolv/inet_addr.c +++ b/resolv/inet_addr.c @@ -63,6 +63,11 @@ static char rcsid[] = "$Id$"; #include <netinet/in.h> #include <arpa/inet.h> #include <ctype.h> +#ifdef _LIBC +# include <stdlib.h> +# include <limits.h> +# include <errno.h> +#endif #include "../conf/portability.h" /* these are compatibility routines, not needed on recent BSD releases */ @@ -91,7 +96,7 @@ inet_addr(cp) */ int inet_aton(cp, addr) - register const char *cp; + const char *cp; struct in_addr *addr; { register u_int32_t val; /* changed from u_long --david */ @@ -99,7 +104,11 @@ inet_aton(cp, addr) register char c; u_int parts[4]; register u_int *pp = parts; +#ifdef _LIBC + int saved_errno = errno; + __set_errno (0); +#endif c = *cp; for (;;) { /* @@ -109,7 +118,7 @@ inet_aton(cp, addr) */ if (!isdigit(c)) return (0); - val = 0; base = 10; + base = 10; if (c == '0') { c = *++cp; if (c == 'x' || c == 'X') @@ -117,6 +126,16 @@ inet_aton(cp, addr) else base = 8; } +#ifdef _LIBC + val = strtoul (cp, (char **) &cp, base); + if (val == ULONG_MAX && errno == ERANGE) + { + __set_errno (saved_errno); + return 0; + } + c = *cp; +#else + val = 0; for (;;) { if (isascii(c) && isdigit(c)) { val = (val * base) + (c - '0'); @@ -128,6 +147,7 @@ inet_aton(cp, addr) } else break; } +#endif if (c == '.') { /* * Internet format: diff --git a/resolv/tst-aton.c b/resolv/tst-aton.c new file mode 100644 index 0000000000..818f9ed61b --- /dev/null +++ b/resolv/tst-aton.c @@ -0,0 +1,22 @@ +#include <stdio.h> +#include <sys/socket.h> +#include <netinet/in.h> +#include <arpa/inet.h> + +enum { buf_size = 16 }; +static char buf[buf_size] = "323543357756889"; + +int +main (int argc, char *argv[]) +{ + struct in_addr addr; + int result = 0; + + if (inet_aton (buf, &addr) != 0) + { + printf ("%s is seen as a valid IP address\n", buf); + result = 1; + } + + return result; +} diff --git a/sysdeps/sparc/sparc32/dl-machine.h b/sysdeps/sparc/sparc32/dl-machine.h index 1931c0caa7..348e0a4bbe 100644 --- a/sysdeps/sparc/sparc32/dl-machine.h +++ b/sysdeps/sparc/sparc32/dl-machine.h @@ -1,5 +1,5 @@ /* Machine-dependent ELF dynamic relocation inline functions. SPARC version. - Copyright (C) 1996, 1997 Free Software Foundation, Inc. + Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -41,7 +41,7 @@ weak_extern(_dl_hwcap_mask); /* Protect some broken versions of gcc from misinterpreting weak addresses. */ #define WEAKADDR(x) ({ __typeof(x) *_px = &x; \ __asm ("" : "=r" (_px) : "0" (_px)); \ - _px }) + _px; }) /* Use a different preload file when running in 32-bit emulation mode diff --git a/sysdeps/unix/sysv/linux/alpha/bits/signum.h b/sysdeps/unix/sysv/linux/alpha/bits/signum.h index 05ffbae550..44c3374e6c 100644 --- a/sysdeps/unix/sysv/linux/alpha/bits/signum.h +++ b/sysdeps/unix/sysv/linux/alpha/bits/signum.h @@ -52,6 +52,7 @@ #define SIGTSTP 18 #define SIGCONT 19 #define SIGCHLD 20 +#define SIGCLD SIGCHLD #define SIGTTIN 21 #define SIGTTOU 22 #define SIGIO 23 |