aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>1998-04-29 17:14:29 +0000
committerUlrich Drepper <drepper@redhat.com>1998-04-29 17:14:29 +0000
commitb062f051ec5678a1f056656601715c9d047e6fc2 (patch)
tree71c7f38a076d8fe0249b4df681c3dbf493d499e9
parentd079f32126a4d1005a646dd907b4c791df7b0934 (diff)
downloadglibc-b062f051ec5678a1f056656601715c9d047e6fc2.zip
glibc-b062f051ec5678a1f056656601715c9d047e6fc2.tar.gz
glibc-b062f051ec5678a1f056656601715c9d047e6fc2.tar.bz2
Update.
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.
-rw-r--r--ChangeLog14
-rw-r--r--resolv/Makefile2
-rw-r--r--resolv/inet_addr.c24
-rw-r--r--resolv/tst-aton.c22
-rw-r--r--sysdeps/sparc/sparc32/dl-machine.h4
-rw-r--r--sysdeps/unix/sysv/linux/alpha/bits/signum.h1
6 files changed, 63 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index 78adbee..437aa49 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 178aae5..938cde7 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 7e38af2..635dd45 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 0000000..818f9ed
--- /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 1931c0c..348e0a4 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 05ffbae..44c3374 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