Ticket #18980: foo.c

File foo.c, 4.9 KB (added by bhaible, 6 weeks ago)

test case foo.c

Line 
1/* Program that shows how a "mixed" locale is represented in the setlocale()
2 result string. */
3
4#include <locale.h>
5#include <stdio.h>
6#include <string.h>
7
8#ifndef LC_MESSAGES
9# define LC_MESSAGES 1729
10#endif
11
12int
13main (int argc, char *argv[])
14{
15 if (argc == 1)
16 {
17 fprintf (stderr, "too few arguments\n");
18 return 1;
19 }
20
21 if (argc >= 2)
22 if (setlocale (LC_ALL, argv[1]) == NULL)
23 {
24 fprintf (stderr, "locale name %s not recognized\n", argv[1]);
25 return 1;
26 }
27
28 if (argc >= 3)
29 if (setlocale (LC_NUMERIC, argv[2]) == NULL)
30 {
31 fprintf (stderr, "locale name %s not recognized\n", argv[2]);
32 return 1;
33 }
34
35 if (argc >= 4)
36 if (setlocale (LC_COLLATE, argv[3]) == NULL)
37 {
38 fprintf (stderr, "locale name %s not recognized\n", argv[3]);
39 return 1;
40 }
41
42 if (argc >= 5)
43 if (setlocale (LC_TIME, argv[4]) == NULL)
44 {
45 fprintf (stderr, "locale name %s not recognized\n", argv[4]);
46 return 1;
47 }
48
49 if (argc >= 6)
50 if (setlocale (LC_MONETARY, argv[5]) == NULL)
51 {
52 fprintf (stderr, "locale name %s not recognized\n", argv[5]);
53 return 1;
54 }
55
56 if (argc >= 7)
57 if (setlocale (LC_MESSAGES, argv[6]) == NULL)
58 {
59 fprintf (stderr, "locale name %s not recognized\n", argv[6]);
60 return 1;
61 }
62
63 /* Show the individual categories. */
64 if (argc >= 2)
65 printf ("LC_CTYPE -> %s\n", setlocale (LC_CTYPE, NULL));
66 if (argc >= 3)
67 printf ("LC_NUMERIC -> %s\n", setlocale (LC_NUMERIC, NULL));
68 if (argc >= 4)
69 printf ("LC_COLLATE -> %s\n", setlocale (LC_COLLATE, NULL));
70 if (argc >= 5)
71 printf ("LC_TIME -> %s\n", setlocale (LC_TIME, NULL));
72 if (argc >= 6)
73 printf ("LC_MONETARY -> %s\n", setlocale (LC_MONETARY, NULL));
74 if (argc >= 7)
75 printf ("LC_MESSAGES -> %s\n", setlocale (LC_MESSAGES, NULL));
76
77 char *mixed = setlocale (LC_ALL, NULL);
78 printf ("LC_ALL -> %s\n", mixed);
79 mixed = strdup (mixed);
80
81 /* Switch to the "C" locale. */
82 if (setlocale (LC_ALL, "C") == NULL)
83 {
84 fprintf (stderr, "Switching to the C locale failed!\n");
85 return 1;
86 }
87
88 /* Switch to the mixed locale. */
89 if (setlocale (LC_ALL, mixed) == NULL)
90 {
91 fprintf (stderr, "Switching to the mixed locale failed!\n");
92 return 1;
93 }
94
95 printf ("After calling setlocale with this value:\n");
96 /* Show the individual categories. */
97 if (argc >= 2)
98 printf ("LC_CTYPE -> %s\n", setlocale (LC_CTYPE, NULL));
99 if (argc >= 3)
100 printf ("LC_NUMERIC -> %s\n", setlocale (LC_NUMERIC, NULL));
101 if (argc >= 4)
102 printf ("LC_COLLATE -> %s\n", setlocale (LC_COLLATE, NULL));
103 if (argc >= 5)
104 printf ("LC_TIME -> %s\n", setlocale (LC_TIME, NULL));
105 if (argc >= 6)
106 printf ("LC_MONETARY -> %s\n", setlocale (LC_MONETARY, NULL));
107 if (argc >= 7)
108 printf ("LC_MESSAGES -> %s\n", setlocale (LC_MESSAGES, NULL));
109
110 if (argc >= 2)
111 if (strcmp (setlocale (LC_CTYPE, NULL), argv[1]) != 0)
112 {
113 fprintf (stderr, "category LC_CTYPE was not restored!\n");
114 return 1;
115 }
116 if (argc >= 3)
117 if (strcmp (setlocale (LC_NUMERIC, NULL), argv[2]) != 0)
118 {
119 fprintf (stderr, "category LC_NUMERIC was not restored!\n");
120 return 1;
121 }
122 if (argc >= 4)
123 if (strcmp (setlocale (LC_COLLATE, NULL), argv[3]) != 0)
124 {
125 fprintf (stderr, "category LC_COLLATE was not restored!\n");
126 return 1;
127 }
128 if (argc >= 5)
129 if (strcmp (setlocale (LC_TIME, NULL), argv[4]) != 0)
130 {
131 fprintf (stderr, "category LC_TIME was not restored!\n");
132 return 1;
133 }
134 if (argc >= 6)
135 if (strcmp (setlocale (LC_MONETARY, NULL), argv[5]) != 0)
136 {
137 fprintf (stderr, "category LC_MONETARY was not restored!\n");
138 return 1;
139 }
140 if (argc >= 7)
141 if (strcmp (setlocale (LC_MESSAGES, NULL), argv[6]) != 0)
142 {
143 fprintf (stderr, "category LC_MESSAGES was not restored!\n");
144 return 1;
145 }
146
147 printf ("Successful.\n");
148
149 return 0;
150}
151/*
152glibc
153$ ./a.out en_US.UTF-8 de_DE.UTF-8 es_ES.UTF-8
154LC_CTYPE -> en_US.UTF-8
155LC_NUMERIC -> de_DE.UTF-8
156LC_COLLATE -> es_ES.UTF-8
157LC_ALL -> LC_CTYPE=en_US.UTF-8;LC_NUMERIC=de_DE.UTF-8;LC_TIME=en_US.UTF-8;LC_COLLATE=es_ES.UTF-8;LC_MONETARY=en_US.UTF-8;LC_MESSAGES=en_US.UTF-8;LC_PAPER=en_US.UTF-8;LC_NAME=en_US.UTF-8;LC_ADDRESS=en_US.UTF-8;LC_TELEPHONE=en_US.UTF-8;LC_MEASUREMENT=en_US.UTF-8;LC_IDENTIFICATION=en_US.UTF-8
158After calling setlocale with this value:
159LC_CTYPE -> en_US.UTF-8
160LC_NUMERIC -> de_DE.UTF-8
161LC_COLLATE -> es_ES.UTF-8
162Successful.
163
164Haiku
165$ ./a.out en_US.UTF-8 de_DE.UTF-8 es_ES.UTF-8
166LC_CTYPE -> en_US.UTF-8
167LC_NUMERIC -> de_DE.UTF-8
168LC_COLLATE -> es_ES.UTF-8
169LC_ALL -> LC_COLLATE=es_ES.UTF-8;LC_CTYPE=en_US.UTF-8;LC_MESSAGES=en_US.UTF-8;LC_MONETARY=en_US.UTF-8;LC_NUMERIC=de_DE.UTF-8;LC_TIME=en_US.UTF-8
170Switching to the mixed locale failed!
171
172*/