1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23: #ifndef _GNU_SOURCE
24: # define _GNU_SOURCE 1
25: #endif
26:
27: #ifdef HAVE_CONFIG_H
28: # include <config.h>
29: #endif
30:
31: #include <ctype.h>
32: #include <errno.h>
33: #include <fcntl.h>
34: #include <sys/types.h>
35: #include <sys/stat.h>
36:
37: #ifdef __GNUC__
38: # undef alloca
39: # define alloca __builtin_alloca
40: # define HAVE_ALLOCA 1
41: #else
42: # if defined HAVE_ALLOCA_H || defined _LIBC
43: # include <alloca.h>
44: # else
45: # ifdef _AIX
46: #pragma alloca
47: # else
48: # ifndef alloca
49: char *alloca ();
50: # endif
51: # endif
52: # endif
53: #endif
54:
55: #include <stdlib.h>
56: #include <string.h>
57:
58: #if defined HAVE_UNISTD_H || defined _LIBC
59: # include <unistd.h>
60: #endif
61:
62: #ifdef _LIBC
63: # include <langinfo.h>
64: # include <locale.h>
65: #endif
66:
67: #if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \
68: || (defined _LIBC && defined _POSIX_MAPPED_FILES)
69: # include <sys/mman.h>
70: # undef HAVE_MMAP
71: # define HAVE_MMAP 1
72: #else
73: # undef HAVE_MMAP
74: #endif
75:
76: #if defined HAVE_STDINT_H_WITH_UINTMAX || defined _LIBC
77: # include <stdint.h>
78: #endif
79: #if defined HAVE_INTTYPES_H || defined _LIBC
80: # include <inttypes.h>
81: #endif
82:
83: #include "gmo.h"
84: #include "gettextP.h"
85: #include "hash-string.h"
86: #include "plural-exp.h"
87:
88: #ifdef _LIBC
89: # include "../locale/localeinfo.h"
90: # include <not-cancel.h>
91: # include <bits/libc-lock.h>
92: #endif
93:
94:
95:
96:
97: #if !defined PRId8 || PRI_MACROS_BROKEN
98: # undef PRId8
99: # define PRId8 "d"
100: #endif
101: #if !defined PRIi8 || PRI_MACROS_BROKEN
102: # undef PRIi8
103: # define PRIi8 "i"
104: #endif
105: #if !defined PRIo8 || PRI_MACROS_BROKEN
106: # undef PRIo8
107: # define PRIo8 "o"
108: #endif
109: #if !defined PRIu8 || PRI_MACROS_BROKEN
110: # undef PRIu8
111: # define PRIu8 "u"
112: #endif
113: #if !defined PRIx8 || PRI_MACROS_BROKEN
114: # undef PRIx8
115: # define PRIx8 "x"
116: #endif
117: #if !defined PRIX8 || PRI_MACROS_BROKEN
118: # undef PRIX8
119: # define PRIX8 "X"
120: #endif
121: #if !defined PRId16 || PRI_MACROS_BROKEN
122: # undef PRId16
123: # define PRId16 "d"
124: #endif
125: #if !defined PRIi16 || PRI_MACROS_BROKEN
126: # undef PRIi16
127: # define PRIi16 "i"
128: #endif
129: #if !defined PRIo16 || PRI_MACROS_BROKEN
130: # undef PRIo16
131: # define PRIo16 "o"
132: #endif
133: #if !defined PRIu16 || PRI_MACROS_BROKEN
134: # undef PRIu16
135: # define PRIu16 "u"
136: #endif
137: #if !defined PRIx16 || PRI_MACROS_BROKEN
138: # undef PRIx16
139: # define PRIx16 "x"
140: #endif
141: #if !defined PRIX16 || PRI_MACROS_BROKEN
142: # undef PRIX16
143: # define PRIX16 "X"
144: #endif
145: #if !defined PRId32 || PRI_MACROS_BROKEN
146: # undef PRId32
147: # define PRId32 "d"
148: #endif
149: #if !defined PRIi32 || PRI_MACROS_BROKEN
150: # undef PRIi32
151: # define PRIi32 "i"
152: #endif
153: #if !defined PRIo32 || PRI_MACROS_BROKEN
154: # undef PRIo32
155: # define PRIo32 "o"
156: #endif
157: #if !defined PRIu32 || PRI_MACROS_BROKEN
158: # undef PRIu32
159: # define PRIu32 "u"
160: #endif
161: #if !defined PRIx32 || PRI_MACROS_BROKEN
162: # undef PRIx32
163: # define PRIx32 "x"
164: #endif
165: #if !defined PRIX32 || PRI_MACROS_BROKEN
166: # undef PRIX32
167: # define PRIX32 "X"
168: #endif
169: #if !defined PRId64 || PRI_MACROS_BROKEN
170: # undef PRId64
171: # define PRId64 (sizeof (long) == 8 ? "ld" : "lld")
172: #endif
173: #if !defined PRIi64 || PRI_MACROS_BROKEN
174: # undef PRIi64
175: # define PRIi64 (sizeof (long) == 8 ? "li" : "lli")
176: #endif
177: #if !defined PRIo64 || PRI_MACROS_BROKEN
178: # undef PRIo64
179: # define PRIo64 (sizeof (long) == 8 ? "lo" : "llo")
180: #endif
181: #if !defined PRIu64 || PRI_MACROS_BROKEN
182: # undef PRIu64
183: # define PRIu64 (sizeof (long) == 8 ? "lu" : "llu")
184: #endif
185: #if !defined PRIx64 || PRI_MACROS_BROKEN
186: # undef PRIx64
187: # define PRIx64 (sizeof (long) == 8 ? "lx" : "llx")
188: #endif
189: #if !defined PRIX64 || PRI_MACROS_BROKEN
190: # undef PRIX64
191: # define PRIX64 (sizeof (long) == 8 ? "lX" : "llX")
192: #endif
193: #if !defined PRIdLEAST8 || PRI_MACROS_BROKEN
194: # undef PRIdLEAST8
195: # define PRIdLEAST8 "d"
196: #endif
197: #if !defined PRIiLEAST8 || PRI_MACROS_BROKEN
198: # undef PRIiLEAST8
199: # define PRIiLEAST8 "i"
200: #endif
201: #if !defined PRIoLEAST8 || PRI_MACROS_BROKEN
202: # undef PRIoLEAST8
203: # define PRIoLEAST8 "o"
204: #endif
205: #if !defined PRIuLEAST8 || PRI_MACROS_BROKEN
206: # undef PRIuLEAST8
207: # define PRIuLEAST8 "u"
208: #endif
209: #if !defined PRIxLEAST8 || PRI_MACROS_BROKEN
210: # undef PRIxLEAST8
211: # define PRIxLEAST8 "x"
212: #endif
213: #if !defined PRIXLEAST8 || PRI_MACROS_BROKEN
214: # undef PRIXLEAST8
215: # define PRIXLEAST8 "X"
216: #endif
217: #if !defined PRIdLEAST16 || PRI_MACROS_BROKEN
218: # undef PRIdLEAST16
219: # define PRIdLEAST16 "d"
220: #endif
221: #if !defined PRIiLEAST16 || PRI_MACROS_BROKEN
222: # undef PRIiLEAST16
223: # define PRIiLEAST16 "i"
224: #endif
225: #if !defined PRIoLEAST16 || PRI_MACROS_BROKEN
226: # undef PRIoLEAST16
227: # define PRIoLEAST16 "o"
228: #endif
229: #if !defined PRIuLEAST16 || PRI_MACROS_BROKEN
230: # undef PRIuLEAST16
231: # define PRIuLEAST16 "u"
232: #endif
233: #if !defined PRIxLEAST16 || PRI_MACROS_BROKEN
234: # undef PRIxLEAST16
235: # define PRIxLEAST16 "x"
236: #endif
237: #if !defined PRIXLEAST16 || PRI_MACROS_BROKEN
238: # undef PRIXLEAST16
239: # define PRIXLEAST16 "X"
240: #endif
241: #if !defined PRIdLEAST32 || PRI_MACROS_BROKEN
242: # undef PRIdLEAST32
243: # define PRIdLEAST32 "d"
244: #endif
245: #if !defined PRIiLEAST32 || PRI_MACROS_BROKEN
246: # undef PRIiLEAST32
247: # define PRIiLEAST32 "i"
248: #endif
249: #if !defined PRIoLEAST32 || PRI_MACROS_BROKEN
250: # undef PRIoLEAST32
251: # define PRIoLEAST32 "o"
252: #endif
253: #if !defined PRIuLEAST32 || PRI_MACROS_BROKEN
254: # undef PRIuLEAST32
255: # define PRIuLEAST32 "u"
256: #endif
257: #if !defined PRIxLEAST32 || PRI_MACROS_BROKEN
258: # undef PRIxLEAST32
259: # define PRIxLEAST32 "x"
260: #endif
261: #if !defined PRIXLEAST32 || PRI_MACROS_BROKEN
262: # undef PRIXLEAST32
263: # define PRIXLEAST32 "X"
264: #endif
265: #if !defined PRIdLEAST64 || PRI_MACROS_BROKEN
266: # undef PRIdLEAST64
267: # define PRIdLEAST64 PRId64
268: #endif
269: #if !defined PRIiLEAST64 || PRI_MACROS_BROKEN
270: # undef PRIiLEAST64
271: # define PRIiLEAST64 PRIi64
272: #endif
273: #if !defined PRIoLEAST64 || PRI_MACROS_BROKEN
274: # undef PRIoLEAST64
275: # define PRIoLEAST64 PRIo64
276: #endif
277: #if !defined PRIuLEAST64 || PRI_MACROS_BROKEN
278: # undef PRIuLEAST64
279: # define PRIuLEAST64 PRIu64
280: #endif
281: #if !defined PRIxLEAST64 || PRI_MACROS_BROKEN
282: # undef PRIxLEAST64
283: # define PRIxLEAST64 PRIx64
284: #endif
285: #if !defined PRIXLEAST64 || PRI_MACROS_BROKEN
286: # undef PRIXLEAST64
287: # define PRIXLEAST64 PRIX64
288: #endif
289: #if !defined PRIdFAST8 || PRI_MACROS_BROKEN
290: # undef PRIdFAST8
291: # define PRIdFAST8 "d"
292: #endif
293: #if !defined PRIiFAST8 || PRI_MACROS_BROKEN
294: # undef PRIiFAST8
295: # define PRIiFAST8 "i"
296: #endif
297: #if !defined PRIoFAST8 || PRI_MACROS_BROKEN
298: # undef PRIoFAST8
299: # define PRIoFAST8 "o"
300: #endif
301: #if !defined PRIuFAST8 || PRI_MACROS_BROKEN
302: # undef PRIuFAST8
303: # define PRIuFAST8 "u"
304: #endif
305: #if !defined PRIxFAST8 || PRI_MACROS_BROKEN
306: # undef PRIxFAST8
307: # define PRIxFAST8 "x"
308: #endif
309: #if !defined PRIXFAST8 || PRI_MACROS_BROKEN
310: # undef PRIXFAST8
311: # define PRIXFAST8 "X"
312: #endif
313: #if !defined PRIdFAST16 || PRI_MACROS_BROKEN
314: # undef PRIdFAST16
315: # define PRIdFAST16 "d"
316: #endif
317: #if !defined PRIiFAST16 || PRI_MACROS_BROKEN
318: # undef PRIiFAST16
319: # define PRIiFAST16 "i"
320: #endif
321: #if !defined PRIoFAST16 || PRI_MACROS_BROKEN
322: # undef PRIoFAST16
323: # define PRIoFAST16 "o"
324: #endif
325: #if !defined PRIuFAST16 || PRI_MACROS_BROKEN
326: # undef PRIuFAST16
327: # define PRIuFAST16 "u"
328: #endif
329: #if !defined PRIxFAST16 || PRI_MACROS_BROKEN
330: # undef PRIxFAST16
331: # define PRIxFAST16 "x"
332: #endif
333: #if !defined PRIXFAST16 || PRI_MACROS_BROKEN
334: # undef PRIXFAST16
335: # define PRIXFAST16 "X"
336: #endif
337: #if !defined PRIdFAST32 || PRI_MACROS_BROKEN
338: # undef PRIdFAST32
339: # define PRIdFAST32 "d"
340: #endif
341: #if !defined PRIiFAST32 || PRI_MACROS_BROKEN
342: # undef PRIiFAST32
343: # define PRIiFAST32 "i"
344: #endif
345: #if !defined PRIoFAST32 || PRI_MACROS_BROKEN
346: # undef PRIoFAST32
347: # define PRIoFAST32 "o"
348: #endif
349: #if !defined PRIuFAST32 || PRI_MACROS_BROKEN
350: # undef PRIuFAST32
351: # define PRIuFAST32 "u"
352: #endif
353: #if !defined PRIxFAST32 || PRI_MACROS_BROKEN
354: # undef PRIxFAST32
355: # define PRIxFAST32 "x"
356: #endif
357: #if !defined PRIXFAST32 || PRI_MACROS_BROKEN
358: # undef PRIXFAST32
359: # define PRIXFAST32 "X"
360: #endif
361: #if !defined PRIdFAST64 || PRI_MACROS_BROKEN
362: # undef PRIdFAST64
363: # define PRIdFAST64 PRId64
364: #endif
365: #if !defined PRIiFAST64 || PRI_MACROS_BROKEN
366: # undef PRIiFAST64
367: # define PRIiFAST64 PRIi64
368: #endif
369: #if !defined PRIoFAST64 || PRI_MACROS_BROKEN
370: # undef PRIoFAST64
371: # define PRIoFAST64 PRIo64
372: #endif
373: #if !defined PRIuFAST64 || PRI_MACROS_BROKEN
374: # undef PRIuFAST64
375: # define PRIuFAST64 PRIu64
376: #endif
377: #if !defined PRIxFAST64 || PRI_MACROS_BROKEN
378: # undef PRIxFAST64
379: # define PRIxFAST64 PRIx64
380: #endif
381: #if !defined PRIXFAST64 || PRI_MACROS_BROKEN
382: # undef PRIXFAST64
383: # define PRIXFAST64 PRIX64
384: #endif
385: #if !defined PRIdMAX || PRI_MACROS_BROKEN
386: # undef PRIdMAX
387: # define PRIdMAX (sizeof (uintmax_t) == sizeof (long) ? "ld" : "lld")
388: #endif
389: #if !defined PRIiMAX || PRI_MACROS_BROKEN
390: # undef PRIiMAX
391: # define PRIiMAX (sizeof (uintmax_t) == sizeof (long) ? "li" : "lli")
392: #endif
393: #if !defined PRIoMAX || PRI_MACROS_BROKEN
394: # undef PRIoMAX
395: # define PRIoMAX (sizeof (uintmax_t) == sizeof (long) ? "lo" : "llo")
396: #endif
397: #if !defined PRIuMAX || PRI_MACROS_BROKEN
398: # undef PRIuMAX
399: # define PRIuMAX (sizeof (uintmax_t) == sizeof (long) ? "lu" : "llu")
400: #endif
401: #if !defined PRIxMAX || PRI_MACROS_BROKEN
402: # undef PRIxMAX
403: # define PRIxMAX (sizeof (uintmax_t) == sizeof (long) ? "lx" : "llx")
404: #endif
405: #if !defined PRIXMAX || PRI_MACROS_BROKEN
406: # undef PRIXMAX
407: # define PRIXMAX (sizeof (uintmax_t) == sizeof (long) ? "lX" : "llX")
408: #endif
409: #if !defined PRIdPTR || PRI_MACROS_BROKEN
410: # undef PRIdPTR
411: # define PRIdPTR \
412: (sizeof (void *) == sizeof (long) ? "ld" : \
413: sizeof (void *) == sizeof (int) ? "d" : \
414: "lld")
415: #endif
416: #if !defined PRIiPTR || PRI_MACROS_BROKEN
417: # undef PRIiPTR
418: # define PRIiPTR \
419: (sizeof (void *) == sizeof (long) ? "li" : \
420: sizeof (void *) == sizeof (int) ? "i" : \
421: "lli")
422: #endif
423: #if !defined PRIoPTR || PRI_MACROS_BROKEN
424: # undef PRIoPTR
425: # define PRIoPTR \
426: (sizeof (void *) == sizeof (long) ? "lo" : \
427: sizeof (void *) == sizeof (int) ? "o" : \
428: "llo")
429: #endif
430: #if !defined PRIuPTR || PRI_MACROS_BROKEN
431: # undef PRIuPTR
432: # define PRIuPTR \
433: (sizeof (void *) == sizeof (long) ? "lu" : \
434: sizeof (void *) == sizeof (int) ? "u" : \
435: "llu")
436: #endif
437: #if !defined PRIxPTR || PRI_MACROS_BROKEN
438: # undef PRIxPTR
439: # define PRIxPTR \
440: (sizeof (void *) == sizeof (long) ? "lx" : \
441: sizeof (void *) == sizeof (int) ? "x" : \
442: "llx")
443: #endif
444: #if !defined PRIXPTR || PRI_MACROS_BROKEN
445: # undef PRIXPTR
446: # define PRIXPTR \
447: (sizeof (void *) == sizeof (long) ? "lX" : \
448: sizeof (void *) == sizeof (int) ? "X" : \
449: "llX")
450: #endif
451:
452:
453:
454: #ifdef _LIBC
455:
456:
457: