aboutsummaryrefslogtreecommitdiff
path: root/main.c
diff options
context:
space:
mode:
authorElliott Hughes <enh@google.com>2021-01-05 14:14:39 -0800
committerRob Landley <rob@landley.net>2021-01-06 00:09:44 -0600
commit4786fd610362501c2f8c70fef1d8fb66efd0996c (patch)
tree02b4661e3c749ad59cd4eeec0bbf5dc0fc1d188c /main.c
parent32eed40a14c1f550e366741f0a2e7aa69093dc3d (diff)
downloadtoybox-4786fd610362501c2f8c70fef1d8fb66efd0996c.tar.gz
main.c: construct a combination locale to add UTF-8.
We need <xlocale.h> for newlocale(3) on macOS, despite it being in POSIX 2008's <locale.h>. musl apparently doesn't have <xlocale.h>, so that's another trick to teach to portability.h...
Diffstat (limited to 'main.c')
-rw-r--r--main.c8
1 files changed, 5 insertions, 3 deletions
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);
}
}