1 /*
2 * This file and its contents are supplied under the terms of the
3 * Common Development and Distribution License ("CDDL"), version 1.0.
4 * You may only use this file in accordance with the terms of version
5 * 1.0 of the CDDL.
6 *
7 * A full copy of the text of the CDDL should have accompanied this
8 * source. A copy of the CDDL is also available via the Internet at
9 * http://www.illumos.org/license/CDDL.
10 */
11
12 /*
13 * Copyright 2015 Joyent, Inc.
14 */
15
16 #include <string.h>
17 #include <locale.h>
18 #include <assert.h>
19 #include <errno.h>
20 #include <stdio.h>
21 #include <nl_types.h>
22 #include <sys/types.h>
23
24 /*
25 * This is designed to check that we properly are honoring the global and
26 * per-thread locale when opening up a message catalog. To do this, we use the
27 * "TEST" message catalog which only exists in the system in the C/POSIX
28 * locales and thus alternate with our test locale zz_AA.UTF-8 which should not
29 * have it.
30 */
31
32 #define INVALID_CAT ((nl_catd)-1)
33
34 static void
catopen_verify(boolean_t find)35 catopen_verify(boolean_t find)
36 {
37 nl_catd cat;
38
39 cat = catopen("TEST", NL_CAT_LOCALE);
40 if (find == B_TRUE) {
41 assert(cat != INVALID_CAT);
42 (void) catclose(cat);
43 } else {
44 assert(cat == INVALID_CAT);
45 }
46 }
47
48 int
main(void)49 main(void)
50 {
51 locale_t loc;
52
53 (void) setlocale(LC_ALL, "C");
54 catopen_verify(B_TRUE);
55
56 (void) setlocale(LC_ALL, "zz_AA.UTF-8");
57 catopen_verify(B_FALSE);
58
59 (void) setlocale(LC_MESSAGES, "C");
60 catopen_verify(B_TRUE);
61
62 (void) setlocale(LC_ALL, "C");
63 loc = newlocale(LC_MESSAGES_MASK, "zz_AA.UTF-8", NULL);
64 assert(loc != NULL);
65
66 catopen_verify(B_TRUE);
67 (void) uselocale(loc);
68 catopen_verify(B_FALSE);
69
70 (void) uselocale(LC_GLOBAL_LOCALE);
71 catopen_verify(B_TRUE);
72 freelocale(loc);
73
74 (void) setlocale(LC_ALL, "zz_AA.UTF-8");
75 catopen_verify(B_FALSE);
76
77 loc = newlocale(LC_MESSAGES_MASK, "C", NULL);
78 assert(loc != NULL);
79
80 catopen_verify(B_FALSE);
81 (void) uselocale(loc);
82 catopen_verify(B_TRUE);
83
84 return (0);
85 }
86