1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-05-01 12:04:52 +03:00

(inet_network): Synch with bind 8.2.2.

This commit is contained in:
Ulrich Drepper 2000-01-31 08:22:01 +00:00
parent 8a94dfe44e
commit 613444ea7c

View File

@ -48,28 +48,35 @@ inet_network(cp)
register u_int32_t val, base, n, i; register u_int32_t val, base, n, i;
register char c; register char c;
u_int32_t parts[4], *pp = parts; u_int32_t parts[4], *pp = parts;
int digit;
again: again:
val = 0; base = 10; val = 0; base = 10; digit = 0;
if (*cp == '0') if (*cp == '0')
base = 8, cp++; digit = 1, base = 8, cp++;
if (*cp == 'x' || *cp == 'X') if (*cp == 'x' || *cp == 'X')
base = 16, cp++; base = 16, cp++;
while ((c = *cp)) { while ((c = *cp) != 0) {
if (isdigit(c)) { if (isdigit(c)) {
if (base == 8 && (c == '8' || c == '9'))
return (INADDR_NONE);
val = (val * base) + (c - '0'); val = (val * base) + (c - '0');
cp++; cp++;
digit = 1;
continue; continue;
} }
if (base == 16 && isxdigit(c)) { if (base == 16 && isxdigit(c)) {
val = (val << 4) + (c + 10 - (islower(c) ? 'a' : 'A')); val = (val << 4) + (c + 10 - (islower(c) ? 'a' : 'A'));
cp++; cp++;
digit = 1;
continue; continue;
} }
break; break;
} }
if (!digit)
return (INADDR_NONE);
if (*cp == '.') { if (*cp == '.') {
if (pp >= parts + 4) if (pp >= parts + 4 || val > 0xff)
return (INADDR_NONE); return (INADDR_NONE);
*pp++ = val, cp++; *pp++ = val, cp++;
goto again; goto again;