--- nsap_addr.c.orig 2003-05-20 15:22:14.000000000 -0700 +++ nsap_addr.c 2005-02-24 16:48:08.000000000 -0800 @@ -18,6 +18,8 @@ #include <sys/cdefs.h> __FBSDID("$FreeBSD: src/lib/libc/net/nsap_addr.c,v 1.9 2002/03/22 21:52:29 obrien Exp $"); +#include "xlocale_private.h" + #include <sys/types.h> #include <sys/param.h> #include <sys/socket.h> @@ -26,6 +28,7 @@ #include <arpa/nameser.h> #include <ctype.h> #include <resolv.h> +#include <stdlib.h> static char xtob(c) @@ -42,20 +45,21 @@ { u_char c, nib; u_int len = 0; + locale_t loc = __current_locale(); while ((c = *ascii++) != '\0' && len < (u_int)maxlen) { if (c == '.' || c == '+' || c == '/') continue; if (!isascii(c)) return (0); - if (islower(c)) - c = toupper(c); - if (isxdigit(c)) { + if (islower_l(c, loc)) + c = toupper_l(c, loc); + if (isxdigit_l(c, loc)) { nib = xtob(c); c = *ascii++; if (c != '\0') { - c = toupper(c); - if (isxdigit(c)) { + c = toupper_l(c, loc); + if (isxdigit_l(c, loc)) { *binary++ = (nib << 4) | xtob(c); len++; } else @@ -78,9 +82,14 @@ { int nib; int i; - static char tmpbuf[255*3]; + static char *tmpbuf = NULL; char *start; + if (tmpbuf == NULL) { + tmpbuf = malloc(255*3); + if (tmpbuf == NULL) + return NULL; + } if (ascii) start = ascii; else {