X-Git-Url: https://git.saurik.com/apple/libc.git/blobdiff_plain/3d9156a7a519a5e3aa1b92e9d9d4b991f1aed7ff..HEAD:/locale/FreeBSD/ldpart.c diff --git a/locale/FreeBSD/ldpart.c b/locale/FreeBSD/ldpart.c index 932165f..10172af 100644 --- a/locale/FreeBSD/ldpart.c +++ b/locale/FreeBSD/ldpart.c @@ -27,6 +27,8 @@ #include __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 #include @@ -44,9 +46,9 @@ __FBSDID("$FreeBSD: src/lib/libc/locale/ldpart.c,v 1.15 2004/04/25 19:56:50 ache 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. */ @@ -82,12 +70,10 @@ __part_load_locale(const char *name, /* 'PathLocale' must be already set & checked. */ /* Range checking not needed, 'name' size is limited */ - strcpy(filename, _PathLocale); - strcat(filename, "/"); - strcat(filename, name); + strcpy(filename, name); strcat(filename, "/"); strcat(filename, category_filename); - if ((fd = _open(filename, O_RDONLY)) < 0) + if ((fd = __open_path_locale(filename)) < 0) return (_LDP_ERROR); if (_fstat(fd, &st) != 0) goto bad_locale; @@ -115,9 +101,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 +148,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); +}