--- ldpart.c.orig 2008-06-03 18:15:42.000000000 -0700 +++ ldpart.c 2008-06-18 13:23:20.000000000 -0700 @@ -27,6 +27,8 @@ #include <sys/cdefs.h> __FBSDID("$FreeBSD: src/lib/libc/locale/ldpart.c,v 1.15 2004/04/25 19:56:50 ache Exp $"); +#include "xlocale_private.h" + #include "namespace.h" #include <sys/types.h> #include <sys/stat.h> @@ -44,9 +46,9 @@ __FBSDID("$FreeBSD: src/lib/libc/locale/ static int split_lines(char *, const char *); -int +__private_extern__ int __part_load_locale(const char *name, - int *using_locale, + unsigned char *using_locale, char **locale_buf, const char *category_filename, int locale_buf_size_max, @@ -60,20 +62,6 @@ __part_load_locale(const char *name, struct stat st; size_t namesize, bufsize; - /* 'name' must be already checked. */ - if (strcmp(name, "C") == 0 || strcmp(name, "POSIX") == 0) { - *using_locale = 0; - return (_LDP_CACHE); - } - - /* - * If the locale name is the same as our cache, use the cache. - */ - if (*locale_buf != NULL && strcmp(name, *locale_buf) == 0) { - *using_locale = 1; - return (_LDP_CACHE); - } - /* * Slurp the locale file into the cache. */ @@ -115,9 +103,7 @@ __part_load_locale(const char *name, num_lines = split_lines(p, plim); if (num_lines >= locale_buf_size_max) num_lines = locale_buf_size_max; - else if (num_lines >= locale_buf_size_min) - num_lines = locale_buf_size_min; - else { + else if (num_lines < locale_buf_size_min) { errno = EFTYPE; goto bad_lbuf; } @@ -164,3 +150,9 @@ split_lines(char *p, const char *plim) return (i); } +__private_extern__ void +__ldpart_free_extra(struct __xlocale_st_ldpart *lp) +{ + if (lp) + free(lp->_locale_buf); +}