ldpart.c.patch   [plain text]


--- ldpart.c.orig	2009-11-09 15:05:25.000000000 -0800
+++ ldpart.c	2009-11-09 15:05:25.000000000 -0800
@@ -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);
+}