From 4786fd610362501c2f8c70fef1d8fb66efd0996c Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Tue, 5 Jan 2021 14:14:39 -0800 Subject: main.c: construct a combination locale to add UTF-8. We need for newlocale(3) on macOS, despite it being in POSIX 2008's . musl apparently doesn't have , so that's another trick to teach to portability.h... --- main.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'main.c') diff --git a/main.c b/main.c index 93822686..a7a8a694 100644 --- a/main.c +++ b/main.c @@ -99,11 +99,13 @@ void toy_singleinit(struct toy_list *which, char *argv[]) toys.old_umask = umask(0); if (!(which->flags & TOYFLAG_UMASK)) umask(toys.old_umask); - // Try user's locale, falling back to C.UTF-8 for Linux or UTF-8 for Mac. - // (Neither locale name works on both OSes.) + // Try user's locale, but merge in the en_US.UTF-8 locale's character + // type data if the user's locale isn't UTF-8. (We can't merge in C.UTF-8 + // because that locale doesn't exist on macOS.) setlocale(LC_CTYPE, ""); if (strcmp("UTF-8", nl_langinfo(CODESET))) - if (!setlocale(LC_CTYPE, "C.UTF-8")) setlocale(LC_CTYPE, "UTF-8"); + uselocale(newlocale(LC_CTYPE_MASK, "en_US.UTF-8", NULL)); + setvbuf(stdout, 0, (which->flags & TOYFLAG_LINEBUF) ? _IOLBF : _IONBF, 0); } } -- cgit v1.2.3