Update.
authorUlrich Drepper <drepper@redhat.com>
Wed, 29 Apr 1998 17:14:29 +0000 (17:14 +0000)
committerUlrich Drepper <drepper@redhat.com>
Wed, 29 Apr 1998 17:14:29 +0000 (17:14 +0000)
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.

* sysdeps/unix/sysv/linux/alpha/bits/signum.h: Add SIGCLD definition.

ChangeLog
resolv/Makefile
resolv/inet_addr.c
resolv/tst-aton.c [new file with mode: 0644]
sysdeps/sparc/sparc32/dl-machine.h
sysdeps/unix/sysv/linux/alpha/bits/signum.h

index 78adbee..437aa49 100644 (file)
--- 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
index 178aae5..938cde7 100644 (file)
@@ -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
index 7e38af2..635dd45 100644 (file)
@@ -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 (file)
index 0000000..818f9ed
--- /dev/null
@@ -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;
+}
index 1931c0c..348e0a4 100644 (file)
@@ -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
index 05ffbae..44c3374 100644 (file)
@@ -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