From: Stephen Hemminger Date: Thu, 22 May 2008 20:41:40 +0000 (-0700) Subject: Use inet_pton to read ipv4 addresses X-Git-Tag: v2.6.26~15 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=516ffb6b7724e97ca035293dcfd9f94cf6ce3a47;p=thirdparty%2Fiproute2.git Use inet_pton to read ipv4 addresses Use the standard POSIX inet_pton to convert from string to IPV4 address. This avoids problems where ip parses "127.2" wrong. --- diff --git a/lib/utils.c b/lib/utils.c index fa4fe3e6d..a88f82b5d 100644 --- a/lib/utils.c +++ b/lib/utils.c @@ -246,10 +246,6 @@ int get_s8(__s8 *val, const char *arg, int base) int get_addr_1(inet_prefix *addr, const char *name, int family) { - const char *cp; - unsigned char *ap = (unsigned char*)addr->data; - int i; - memset(addr, 0, sizeof(*addr)); if (strcmp(name, "default") == 0 || @@ -288,17 +284,10 @@ int get_addr_1(inet_prefix *addr, const char *name, int family) addr->family = AF_INET; if (family != AF_UNSPEC && family != AF_INET) return -1; + if (inet_pton(AF_INET, name, addr->data) <= 0) + return -1; addr->bytelen = 4; addr->bitlen = -1; - for (cp=name, i=0; *cp; cp++) { - if (*cp <= '9' && *cp >= '0') { - ap[i] = 10*ap[i] + (*cp-'0'); - continue; - } - if (*cp == '.' && ++i <= 3) - continue; - return -1; - } return 0; }