remove cruft from old resolver and numeric ip parsing
authorRich Felker <dalias@aerifal.cx>
Mon, 2 Jun 2014 09:00:48 +0000 (05:00 -0400)
committerRich Felker <dalias@aerifal.cx>
Mon, 2 Jun 2014 09:00:48 +0000 (05:00 -0400)
the old resolver code used a function __ipparse which contained the
logic for inet_addr and inet_aton, which is needed in getaddrinfo.
this was phased out in the resolver overhaul in favor of directly
using inet_aton and inet_pton as appropriate.

this commit cleans up some stuff that was left behind.

src/network/__dns.h [deleted file]
src/network/__ipparse.c [deleted file]
src/network/inet_addr.c
src/network/inet_aton.c [new file with mode: 0644]
src/network/inet_legacy.c
src/network/lookup_name.c

diff --git a/src/network/__dns.h b/src/network/__dns.h
deleted file mode 100644 (file)
index 9a3f740..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <stddef.h>
-
-#define RR_A 1
-#define RR_CNAME 5
-#define RR_PTR 12
-#define RR_AAAA 28
-
-int __dns_count_addrs(const unsigned char *, int);
-int __dns_get_rr(void *, size_t, size_t, size_t, const unsigned char *, int, int);
-
-int __dns_query(unsigned char *, const void *, int, int);
-int __ipparse(void *, int, const char *);
-
-int __dns_doqueries(unsigned char *, const char *, int *, int);
diff --git a/src/network/__ipparse.c b/src/network/__ipparse.c
deleted file mode 100644 (file)
index 79f3b8c..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-#include <stdlib.h>
-#include <ctype.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include "__dns.h"
-
-int __ipparse(void *dest, int family, const char *s0)
-{
-       const char *s = s0;
-       unsigned char *d = dest;
-       unsigned long a[16] = { 0 };
-       char *z;
-       int i;
-
-       if (family == AF_INET6) goto not_v4;
-
-       for (i=0; i<4; i++) {
-               a[i] = strtoul(s, &z, 0);
-               if (z==s || (*z && *z != '.') || !isdigit(*s)) {
-                       if (family == AF_INET) return -1;
-                       goto not_v4;
-               }
-               if (!*z) break;
-               s=z+1;
-       }
-       if (i==4) return -1;
-       switch (i) {
-       case 0:
-               a[1] = a[0] & 0xffffff;
-               a[0] >>= 24;
-       case 1:
-               a[2] = a[1] & 0xffff;
-               a[1] >>= 16;
-       case 2:
-               a[3] = a[2] & 0xff;
-               a[2] >>= 8;
-       }
-       ((struct sockaddr_in *)d)->sin_family = AF_INET;
-       d = (void *)&((struct sockaddr_in *)d)->sin_addr;
-       for (i=0; i<4; i++) {
-               if (a[i] > 255) return -1;
-               d[i] = a[i];
-       }
-       return 0;
-
-not_v4:
-       s = s0;
-       ((struct sockaddr_in6 *)d)->sin6_family = AF_INET6;
-       return inet_pton(AF_INET6, s, (void *)&((struct sockaddr_in6 *)d)->sin6_addr) <= 0 ? -1 : 0;
-}
index ea0a8f7..10b21f2 100644 (file)
@@ -1,11 +1,12 @@
 #include <sys/socket.h>
 #include <netinet/in.h>
 #include <arpa/inet.h>
-#include "__dns.h"
+
+int __inet_aton(const char *, struct in_addr *);
 
 in_addr_t inet_addr(const char *p)
 {
-       struct sockaddr_in sin;
-       if (__ipparse(&sin, AF_INET, p) < 0) return -1;
-       return sin.sin_addr.s_addr;
+       struct in_addr a;
+       if (!__inet_aton(p, &a)) return -1;
+       return a.s_addr;
 }
diff --git a/src/network/inet_aton.c b/src/network/inet_aton.c
new file mode 100644 (file)
index 0000000..0f9a45f
--- /dev/null
@@ -0,0 +1,41 @@
+#include <ctype.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include "libc.h"
+
+int __inet_aton(const char *s0, struct in_addr *dest)
+{
+       const char *s = s0;
+       unsigned char *d = (void *)dest;
+       unsigned long a[4] = { 0 };
+       char *z;
+       int i;
+
+       for (i=0; i<4; i++) {
+               a[i] = strtoul(s, &z, 0);
+               if (z==s || (*z && *z != '.') || !isdigit(*s))
+                       return 0;
+               if (!*z) break;
+               s=z+1;
+       }
+       if (i==4) return 0;
+       switch (i) {
+       case 0:
+               a[1] = a[0] & 0xffffff;
+               a[0] >>= 24;
+       case 1:
+               a[2] = a[1] & 0xffff;
+               a[1] >>= 16;
+       case 2:
+               a[3] = a[2] & 0xff;
+               a[2] >>= 8;
+       }
+       for (i=0; i<4; i++) {
+               if (a[i] > 255) return 0;
+               d[i] = a[i];
+       }
+       return 1;
+}
+
+weak_alias(__inet_aton, inet_aton);
index de5b75c..621b47b 100644 (file)
@@ -1,21 +1,12 @@
 #include <sys/socket.h>
 #include <netinet/in.h>
 #include <arpa/inet.h>
-#include "__dns.h"
 
 in_addr_t inet_network(const char *p)
 {
        return ntohl(inet_addr(p));
 }
 
-int inet_aton(const char *cp, struct in_addr *inp)
-{
-       struct sockaddr_in sin;
-       if (__ipparse(&sin, AF_INET, cp) < 0) return 0;
-       *inp = sin.sin_addr;
-       return 1;
-}
-
 struct in_addr inet_makeaddr(in_addr_t n, in_addr_t h)
 {
        if (n < 256) h |= n<<24;
index 83c0fc2..8d41627 100644 (file)
@@ -36,11 +36,13 @@ static int name_from_null(struct address buf[static 2], const char *name, int fa
        return cnt;
 }
 
+int __inet_aton(const char *, struct in_addr *);
+
 static int name_from_numeric(struct address buf[static 1], const char *name, int family)
 {
        struct in_addr a4;
        struct in6_addr a6;
-       if (family != AF_INET6 && inet_aton(name, &a4)>0) {
+       if (family != AF_INET6 && __inet_aton(name, &a4)>0) {
                memcpy(&buf[0].addr, &a4, sizeof a4);
                buf[0].family = AF_INET;
                return 1;