--- inet_net_pton.c.orig 2004-11-25 11:38:29.000000000 -0800 +++ inet_net_pton.c 2005-02-24 16:53:40.000000000 -0800 @@ -21,6 +21,8 @@ #include __FBSDID("$FreeBSD: src/lib/libc/net/inet_net_pton.c,v 1.9 2003/09/15 23:38:06 fenner Exp $"); +#include "xlocale_private.h" + #include #include #include @@ -97,19 +99,20 @@ digits[] = "0123456789"; int n, ch, tmp, dirty, bits; const u_char *odst = dst; + locale_t loc = __current_locale(); ch = *src++; if (ch == '0' && (src[0] == 'x' || src[0] == 'X') - && isascii(src[1]) && isxdigit(src[1])) { + && isascii(src[1]) && isxdigit_l(src[1], loc)) { /* Hexadecimal: Eat nybble string. */ if (size <= 0) goto emsgsize; *dst = 0, dirty = 0; src++; /* skip x or X. */ while ((ch = *src++) != '\0' && - isascii(ch) && isxdigit(ch)) { - if (isupper(ch)) - ch = tolower(ch); + isascii(ch) && isxdigit_l(ch, loc)) { + if (isupper_l(ch, loc)) + ch = tolower_l(ch, loc); n = strchr(xdigits, ch) - xdigits; assert(n >= 0 && n <= 15); *dst |= n; @@ -122,7 +125,7 @@ } if (dirty) size--; - } else if (isascii(ch) && isdigit(ch)) { + } else if (isascii(ch) && isdigit_l(ch, loc)) { /* Decimal: eat dotted digit string. */ for (;;) { tmp = 0; @@ -134,7 +137,7 @@ if (tmp > 255) goto enoent; } while ((ch = *src++) != '\0' && - isascii(ch) && isdigit(ch)); + isascii(ch) && isdigit_l(ch, loc)); if (size-- <= 0) goto emsgsize; *dst++ = (u_char) tmp; @@ -143,14 +146,14 @@ if (ch != '.') goto enoent; ch = *src++; - if (!isascii(ch) || !isdigit(ch)) + if (!isascii(ch) || !isdigit_l(ch, loc)) goto enoent; } } else goto enoent; bits = -1; - if (ch == '/' && isascii(src[0]) && isdigit(src[0]) && dst > odst) { + if (ch == '/' && isascii(src[0]) && isdigit_l(src[0], loc) && dst > odst) { /* CIDR width specifier. Nothing can follow it. */ ch = *src++; /* Skip over the /. */ bits = 0; @@ -159,7 +162,7 @@ assert(n >= 0 && n <= 9); bits *= 10; bits += n; - } while ((ch = *src++) != '\0' && isascii(ch) && isdigit(ch)); + } while ((ch = *src++) != '\0' && isascii(ch) && isdigit_l(ch, loc)); if (ch != '\0') goto enoent; if (bits > 32)