about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/locale/__setlocalecat.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/src/locale/__setlocalecat.c b/src/locale/__setlocalecat.c
index 44385e02..1c894d9c 100644
--- a/src/locale/__setlocalecat.c
+++ b/src/locale/__setlocalecat.c
@@ -28,8 +28,6 @@ static struct __locale_map *findlocale(const char *name, size_t n)
 	for (p=loc_head; p; p=p->next)
 		if (!strcmp(name, p->name)) return p;
 
-	if (strchr(name, '/')) return 0;
-
 	if (!libc.secure) path = getenv("MUSL_LOCPATH");
 	/* FIXME: add a default path? */
 	if (!path) return 0;
@@ -81,7 +79,9 @@ int __setlocalecat(locale_t loc, int cat, const char *val)
 		(val = "C.UTF-8");
 	}
 
-	size_t n = strnlen(val, LOCALE_NAME_MAX);
+	size_t n;
+	for (n=0; n<LOCALE_NAME_MAX && val[n] && val[n]!='/'; n++);
+	if (val[0]=='.' || val[n]) val = "C.UTF-8";
 	int builtin = (val[0]=='C' && !val[1])
 		|| !strcmp(val, "C.UTF-8")
 		|| !strcmp(val, "POSIX");