annotate lib/localcharset.c @ 7292:17785d5bede0

Fix docstrings
author Sergey Poznyakoff <gray@gnu.org.ua>
date Sun, 10 Sep 2006 11:52:44 +0000
parents 1a8d338654d5
children 1c4ed7637c24
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2303
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
1 /* Determine a canonical name for the current locale's character encoding.
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
2
6534
fdcb5e98f8fa Update from GNU gettext.
Bruno Haible <bruno@clisp.org>
parents: 5848
diff changeset
3 Copyright (C) 2000-2006 Free Software Foundation, Inc.
2303
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
4
4440
e58a1c05a6ba Update gettext source files from gettext automatically, using srclist-update.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4337
diff changeset
5 This program is free software; you can redistribute it and/or modify
e58a1c05a6ba Update gettext source files from gettext automatically, using srclist-update.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4337
diff changeset
6 it under the terms of the GNU General Public License as published by
e58a1c05a6ba Update gettext source files from gettext automatically, using srclist-update.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4337
diff changeset
7 the Free Software Foundation; either version 2, or (at your option)
2303
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
8 any later version.
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
9
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
10 This program is distributed in the hope that it will be useful,
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
4440
e58a1c05a6ba Update gettext source files from gettext automatically, using srclist-update.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4337
diff changeset
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
e58a1c05a6ba Update gettext source files from gettext automatically, using srclist-update.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4337
diff changeset
13 GNU General Public License for more details.
2303
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
14
4440
e58a1c05a6ba Update gettext source files from gettext automatically, using srclist-update.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4337
diff changeset
15 You should have received a copy of the GNU General Public License along
e58a1c05a6ba Update gettext source files from gettext automatically, using srclist-update.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4337
diff changeset
16 with this program; if not, write to the Free Software Foundation,
5848
a48fb0e98c8c *** empty log message ***
Paul Eggert <eggert@cs.ucla.edu>
parents: 5658
diff changeset
17 Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
2303
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
18
3963
ed9b8c0441b5 Update config.charset and localcharset.c to current gettext version.
Bruno Haible <bruno@clisp.org>
parents: 3737
diff changeset
19 /* Written by Bruno Haible <bruno@clisp.org>. */
2303
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
20
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
21 #ifdef HAVE_CONFIG_H
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
22 # include <config.h>
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
23 #endif
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
24
4106
aa367eec7a72 New file localcharset.h.
Bruno Haible <bruno@clisp.org>
parents: 3963
diff changeset
25 /* Specification. */
aa367eec7a72 New file localcharset.h.
Bruno Haible <bruno@clisp.org>
parents: 3963
diff changeset
26 #include "localcharset.h"
aa367eec7a72 New file localcharset.h.
Bruno Haible <bruno@clisp.org>
parents: 3963
diff changeset
27
7085
6a24b1c63a3a Assume the standard headers exist.
Bruno Haible <bruno@clisp.org>
parents: 7010
diff changeset
28 #include <stddef.h>
2303
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
29 #include <stdio.h>
7085
6a24b1c63a3a Assume the standard headers exist.
Bruno Haible <bruno@clisp.org>
parents: 7010
diff changeset
30 #include <string.h>
6a24b1c63a3a Assume the standard headers exist.
Bruno Haible <bruno@clisp.org>
parents: 7010
diff changeset
31 #include <stdlib.h>
2303
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
32
3062
e9f1d0258cae (locale_charset): Add support for Win32.
Jim Meyering <jim@meyering.net>
parents: 2487
diff changeset
33 #if defined _WIN32 || defined __WIN32__
7010
2c3480d62b64 Update localcharset module from GNU gettext.
Bruno Haible <bruno@clisp.org>
parents: 6534
diff changeset
34 # define WIN32_NATIVE
3062
e9f1d0258cae (locale_charset): Add support for Win32.
Jim Meyering <jim@meyering.net>
parents: 2487
diff changeset
35 #endif
e9f1d0258cae (locale_charset): Add support for Win32.
Jim Meyering <jim@meyering.net>
parents: 2487
diff changeset
36
3737
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
37 #if defined __EMX__
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
38 /* Assume EMX program runs on OS/2, even if compiled under DOS. */
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
39 # define OS2
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
40 #endif
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
41
7010
2c3480d62b64 Update localcharset module from GNU gettext.
Bruno Haible <bruno@clisp.org>
parents: 6534
diff changeset
42 #if !defined WIN32_NATIVE
3062
e9f1d0258cae (locale_charset): Add support for Win32.
Jim Meyering <jim@meyering.net>
parents: 2487
diff changeset
43 # if HAVE_LANGINFO_CODESET
e9f1d0258cae (locale_charset): Add support for Win32.
Jim Meyering <jim@meyering.net>
parents: 2487
diff changeset
44 # include <langinfo.h>
e9f1d0258cae (locale_charset): Add support for Win32.
Jim Meyering <jim@meyering.net>
parents: 2487
diff changeset
45 # else
e9f1d0258cae (locale_charset): Add support for Win32.
Jim Meyering <jim@meyering.net>
parents: 2487
diff changeset
46 # if HAVE_SETLOCALE
e9f1d0258cae (locale_charset): Add support for Win32.
Jim Meyering <jim@meyering.net>
parents: 2487
diff changeset
47 # include <locale.h>
e9f1d0258cae (locale_charset): Add support for Win32.
Jim Meyering <jim@meyering.net>
parents: 2487
diff changeset
48 # endif
2303
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
49 # endif
7010
2c3480d62b64 Update localcharset module from GNU gettext.
Bruno Haible <bruno@clisp.org>
parents: 6534
diff changeset
50 # ifdef __CYGWIN__
2c3480d62b64 Update localcharset module from GNU gettext.
Bruno Haible <bruno@clisp.org>
parents: 6534
diff changeset
51 # define WIN32_LEAN_AND_MEAN
2c3480d62b64 Update localcharset module from GNU gettext.
Bruno Haible <bruno@clisp.org>
parents: 6534
diff changeset
52 # include <windows.h>
2c3480d62b64 Update localcharset module from GNU gettext.
Bruno Haible <bruno@clisp.org>
parents: 6534
diff changeset
53 # endif
2c3480d62b64 Update localcharset module from GNU gettext.
Bruno Haible <bruno@clisp.org>
parents: 6534
diff changeset
54 #elif defined WIN32_NATIVE
3062
e9f1d0258cae (locale_charset): Add support for Win32.
Jim Meyering <jim@meyering.net>
parents: 2487
diff changeset
55 # define WIN32_LEAN_AND_MEAN
e9f1d0258cae (locale_charset): Add support for Win32.
Jim Meyering <jim@meyering.net>
parents: 2487
diff changeset
56 # include <windows.h>
2303
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
57 #endif
3737
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
58 #if defined OS2
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
59 # define INCL_DOS
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
60 # include <os2.h>
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
61 #endif
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
62
4337
bb36dc0e4dd4 Upgrade to gettext-0.12.1.
Bruno Haible <bruno@clisp.org>
parents: 4106
diff changeset
63 #if ENABLE_RELOCATABLE
bb36dc0e4dd4 Upgrade to gettext-0.12.1.
Bruno Haible <bruno@clisp.org>
parents: 4106
diff changeset
64 # include "relocatable.h"
bb36dc0e4dd4 Upgrade to gettext-0.12.1.
Bruno Haible <bruno@clisp.org>
parents: 4106
diff changeset
65 #else
bb36dc0e4dd4 Upgrade to gettext-0.12.1.
Bruno Haible <bruno@clisp.org>
parents: 4106
diff changeset
66 # define relocate(pathname) (pathname)
bb36dc0e4dd4 Upgrade to gettext-0.12.1.
Bruno Haible <bruno@clisp.org>
parents: 4106
diff changeset
67 #endif
bb36dc0e4dd4 Upgrade to gettext-0.12.1.
Bruno Haible <bruno@clisp.org>
parents: 4106
diff changeset
68
7230
1a8d338654d5 Prefer using configmake.h instead of augmenting DEFS.
Bruno Haible <bruno@clisp.org>
parents: 7085
diff changeset
69 /* Get LIBDIR. */
1a8d338654d5 Prefer using configmake.h instead of augmenting DEFS.
Bruno Haible <bruno@clisp.org>
parents: 7085
diff changeset
70 #ifndef LIBDIR
1a8d338654d5 Prefer using configmake.h instead of augmenting DEFS.
Bruno Haible <bruno@clisp.org>
parents: 7085
diff changeset
71 # include "configmake.h"
1a8d338654d5 Prefer using configmake.h instead of augmenting DEFS.
Bruno Haible <bruno@clisp.org>
parents: 7085
diff changeset
72 #endif
1a8d338654d5 Prefer using configmake.h instead of augmenting DEFS.
Bruno Haible <bruno@clisp.org>
parents: 7085
diff changeset
73
5053
eebff8c51a9b Treat Cygwin like Windows regarding pathname syntax.
Bruno Haible <bruno@clisp.org>
parents: 5044
diff changeset
74 #if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__
eebff8c51a9b Treat Cygwin like Windows regarding pathname syntax.
Bruno Haible <bruno@clisp.org>
parents: 5044
diff changeset
75 /* Win32, Cygwin, OS/2, DOS */
3737
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
76 # define ISSLASH(C) ((C) == '/' || (C) == '\\')
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
77 #endif
2303
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
78
2487
6163322e2d48 (get_charset_aliases): Use malloc, realloc and memcpy
Jim Meyering <jim@meyering.net>
parents: 2340
diff changeset
79 #ifndef DIRECTORY_SEPARATOR
6163322e2d48 (get_charset_aliases): Use malloc, realloc and memcpy
Jim Meyering <jim@meyering.net>
parents: 2340
diff changeset
80 # define DIRECTORY_SEPARATOR '/'
6163322e2d48 (get_charset_aliases): Use malloc, realloc and memcpy
Jim Meyering <jim@meyering.net>
parents: 2340
diff changeset
81 #endif
2338
3dfb80bf846b ("path-concat.h"): Include.
Jim Meyering <jim@meyering.net>
parents: 2324
diff changeset
82
2487
6163322e2d48 (get_charset_aliases): Use malloc, realloc and memcpy
Jim Meyering <jim@meyering.net>
parents: 2340
diff changeset
83 #ifndef ISSLASH
6163322e2d48 (get_charset_aliases): Use malloc, realloc and memcpy
Jim Meyering <jim@meyering.net>
parents: 2340
diff changeset
84 # define ISSLASH(C) ((C) == DIRECTORY_SEPARATOR)
6163322e2d48 (get_charset_aliases): Use malloc, realloc and memcpy
Jim Meyering <jim@meyering.net>
parents: 2340
diff changeset
85 #endif
2303
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
86
4897
c784af02fcd9 updates from savannah outage
uid65818 <uid65818>
parents: 4440
diff changeset
87 #if HAVE_DECL_GETC_UNLOCKED
3737
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
88 # undef getc
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
89 # define getc getc_unlocked
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
90 #endif
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
91
2324
056ab4fe3d27 Add Bruno's comment justifying use of volatile.
Jim Meyering <jim@meyering.net>
parents: 2304
diff changeset
92 /* The following static variable is declared 'volatile' to avoid a
056ab4fe3d27 Add Bruno's comment justifying use of volatile.
Jim Meyering <jim@meyering.net>
parents: 2304
diff changeset
93 possible multithread problem in the function get_charset_aliases. If we
056ab4fe3d27 Add Bruno's comment justifying use of volatile.
Jim Meyering <jim@meyering.net>
parents: 2304
diff changeset
94 are running in a threaded environment, and if two threads initialize
056ab4fe3d27 Add Bruno's comment justifying use of volatile.
Jim Meyering <jim@meyering.net>
parents: 2304
diff changeset
95 'charset_aliases' simultaneously, both will produce the same value,
056ab4fe3d27 Add Bruno's comment justifying use of volatile.
Jim Meyering <jim@meyering.net>
parents: 2304
diff changeset
96 and everything will be ok if the two assignments to 'charset_aliases'
056ab4fe3d27 Add Bruno's comment justifying use of volatile.
Jim Meyering <jim@meyering.net>
parents: 2304
diff changeset
97 are atomic. But I don't know what will happen if the two assignments mix. */
3494
7605d363af46 Update from latest gettext.
Jim Meyering <jim@meyering.net>
parents: 3209
diff changeset
98 #if __STDC__ != 1
7605d363af46 Update from latest gettext.
Jim Meyering <jim@meyering.net>
parents: 3209
diff changeset
99 # define volatile /* empty */
7605d363af46 Update from latest gettext.
Jim Meyering <jim@meyering.net>
parents: 3209
diff changeset
100 #endif
2303
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
101 /* Pointer to the contents of the charset.alias file, if it has already been
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
102 read, else NULL. Its format is:
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
103 ALIAS_1 '\0' CANONICAL_1 '\0' ... ALIAS_n '\0' CANONICAL_n '\0' '\0' */
3494
7605d363af46 Update from latest gettext.
Jim Meyering <jim@meyering.net>
parents: 3209
diff changeset
104 static const char * volatile charset_aliases;
2303
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
105
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
106 /* Return a pointer to the contents of the charset.alias file. */
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
107 static const char *
6534
fdcb5e98f8fa Update from GNU gettext.
Bruno Haible <bruno@clisp.org>
parents: 5848
diff changeset
108 get_charset_aliases (void)
2303
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
109 {
3494
7605d363af46 Update from latest gettext.
Jim Meyering <jim@meyering.net>
parents: 3209
diff changeset
110 const char *cp;
2303
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
111
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
112 cp = charset_aliases;
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
113 if (cp == NULL)
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
114 {
7010
2c3480d62b64 Update localcharset module from GNU gettext.
Bruno Haible <bruno@clisp.org>
parents: 6534
diff changeset
115 #if !(defined VMS || defined WIN32_NATIVE || defined __CYGWIN__)
2303
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
116 FILE *fp;
5658
9d475f8488d9 Update from GNU gettext 0.14.2.
Bruno Haible <bruno@clisp.org>
parents: 5053
diff changeset
117 const char *dir;
2487
6163322e2d48 (get_charset_aliases): Use malloc, realloc and memcpy
Jim Meyering <jim@meyering.net>
parents: 2340
diff changeset
118 const char *base = "charset.alias";
6163322e2d48 (get_charset_aliases): Use malloc, realloc and memcpy
Jim Meyering <jim@meyering.net>
parents: 2340
diff changeset
119 char *file_name;
6163322e2d48 (get_charset_aliases): Use malloc, realloc and memcpy
Jim Meyering <jim@meyering.net>
parents: 2340
diff changeset
120
5658
9d475f8488d9 Update from GNU gettext 0.14.2.
Bruno Haible <bruno@clisp.org>
parents: 5053
diff changeset
121 /* Make it possible to override the charset.alias location. This is
9d475f8488d9 Update from GNU gettext 0.14.2.
Bruno Haible <bruno@clisp.org>
parents: 5053
diff changeset
122 necessary for running the testsuite before "make install". */
9d475f8488d9 Update from GNU gettext 0.14.2.
Bruno Haible <bruno@clisp.org>
parents: 5053
diff changeset
123 dir = getenv ("CHARSETALIASDIR");
9d475f8488d9 Update from GNU gettext 0.14.2.
Bruno Haible <bruno@clisp.org>
parents: 5053
diff changeset
124 if (dir == NULL || dir[0] == '\0')
9d475f8488d9 Update from GNU gettext 0.14.2.
Bruno Haible <bruno@clisp.org>
parents: 5053
diff changeset
125 dir = relocate (LIBDIR);
9d475f8488d9 Update from GNU gettext 0.14.2.
Bruno Haible <bruno@clisp.org>
parents: 5053
diff changeset
126
2487
6163322e2d48 (get_charset_aliases): Use malloc, realloc and memcpy
Jim Meyering <jim@meyering.net>
parents: 2340
diff changeset
127 /* Concatenate dir and base into freshly allocated file_name. */
6163322e2d48 (get_charset_aliases): Use malloc, realloc and memcpy
Jim Meyering <jim@meyering.net>
parents: 2340
diff changeset
128 {
6163322e2d48 (get_charset_aliases): Use malloc, realloc and memcpy
Jim Meyering <jim@meyering.net>
parents: 2340
diff changeset
129 size_t dir_len = strlen (dir);
6163322e2d48 (get_charset_aliases): Use malloc, realloc and memcpy
Jim Meyering <jim@meyering.net>
parents: 2340
diff changeset
130 size_t base_len = strlen (base);
6163322e2d48 (get_charset_aliases): Use malloc, realloc and memcpy
Jim Meyering <jim@meyering.net>
parents: 2340
diff changeset
131 int add_slash = (dir_len > 0 && !ISSLASH (dir[dir_len - 1]));
6163322e2d48 (get_charset_aliases): Use malloc, realloc and memcpy
Jim Meyering <jim@meyering.net>
parents: 2340
diff changeset
132 file_name = (char *) malloc (dir_len + add_slash + base_len + 1);
6163322e2d48 (get_charset_aliases): Use malloc, realloc and memcpy
Jim Meyering <jim@meyering.net>
parents: 2340
diff changeset
133 if (file_name != NULL)
6163322e2d48 (get_charset_aliases): Use malloc, realloc and memcpy
Jim Meyering <jim@meyering.net>
parents: 2340
diff changeset
134 {
6163322e2d48 (get_charset_aliases): Use malloc, realloc and memcpy
Jim Meyering <jim@meyering.net>
parents: 2340
diff changeset
135 memcpy (file_name, dir, dir_len);
6163322e2d48 (get_charset_aliases): Use malloc, realloc and memcpy
Jim Meyering <jim@meyering.net>
parents: 2340
diff changeset
136 if (add_slash)
6163322e2d48 (get_charset_aliases): Use malloc, realloc and memcpy
Jim Meyering <jim@meyering.net>
parents: 2340
diff changeset
137 file_name[dir_len] = DIRECTORY_SEPARATOR;
6163322e2d48 (get_charset_aliases): Use malloc, realloc and memcpy
Jim Meyering <jim@meyering.net>
parents: 2340
diff changeset
138 memcpy (file_name + dir_len + add_slash, base, base_len + 1);
6163322e2d48 (get_charset_aliases): Use malloc, realloc and memcpy
Jim Meyering <jim@meyering.net>
parents: 2340
diff changeset
139 }
6163322e2d48 (get_charset_aliases): Use malloc, realloc and memcpy
Jim Meyering <jim@meyering.net>
parents: 2340
diff changeset
140 }
2303
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
141
2338
3dfb80bf846b ("path-concat.h"): Include.
Jim Meyering <jim@meyering.net>
parents: 2324
diff changeset
142 if (file_name == NULL || (fp = fopen (file_name, "r")) == NULL)
3dfb80bf846b ("path-concat.h"): Include.
Jim Meyering <jim@meyering.net>
parents: 2324
diff changeset
143 /* Out of memory or file not found, treat it as empty. */
2303
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
144 cp = "";
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
145 else
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
146 {
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
147 /* Parse the file's contents. */
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
148 char *res_ptr = NULL;
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
149 size_t res_size = 0;
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
150
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
151 for (;;)
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
152 {
5044
b1006348a448 Avoid memory leak upon realloc failure.
Bruno Haible <bruno@clisp.org>
parents: 4897
diff changeset
153 int c;
b1006348a448 Avoid memory leak upon realloc failure.
Bruno Haible <bruno@clisp.org>
parents: 4897
diff changeset
154 char buf1[50+1];
b1006348a448 Avoid memory leak upon realloc failure.
Bruno Haible <bruno@clisp.org>
parents: 4897
diff changeset
155 char buf2[50+1];
b1006348a448 Avoid memory leak upon realloc failure.
Bruno Haible <bruno@clisp.org>
parents: 4897
diff changeset
156 size_t l1, l2;
b1006348a448 Avoid memory leak upon realloc failure.
Bruno Haible <bruno@clisp.org>
parents: 4897
diff changeset
157 char *old_res_ptr;
b1006348a448 Avoid memory leak upon realloc failure.
Bruno Haible <bruno@clisp.org>
parents: 4897
diff changeset
158
2303
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
159 c = getc (fp);
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
160 if (c == EOF)
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
161 break;
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
162 if (c == '\n' || c == ' ' || c == '\t')
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
163 continue;
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
164 if (c == '#')
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
165 {
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
166 /* Skip comment, to end of line. */
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
167 do
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
168 c = getc (fp);
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
169 while (!(c == EOF || c == '\n'));
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
170 if (c == EOF)
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
171 break;
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
172 continue;
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
173 }
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
174 ungetc (c, fp);
3737
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
175 if (fscanf (fp, "%50s %50s", buf1, buf2) < 2)
2303
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
176 break;
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
177 l1 = strlen (buf1);
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
178 l2 = strlen (buf2);
5044
b1006348a448 Avoid memory leak upon realloc failure.
Bruno Haible <bruno@clisp.org>
parents: 4897
diff changeset
179 old_res_ptr = res_ptr;
2303
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
180 if (res_size == 0)
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
181 {
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
182 res_size = l1 + 1 + l2 + 1;
3737
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
183 res_ptr = (char *) malloc (res_size + 1);
2303
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
184 }
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
185 else
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
186 {
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
187 res_size += l1 + 1 + l2 + 1;
3737
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
188 res_ptr = (char *) realloc (res_ptr, res_size + 1);
2487
6163322e2d48 (get_charset_aliases): Use malloc, realloc and memcpy
Jim Meyering <jim@meyering.net>
parents: 2340
diff changeset
189 }
6163322e2d48 (get_charset_aliases): Use malloc, realloc and memcpy
Jim Meyering <jim@meyering.net>
parents: 2340
diff changeset
190 if (res_ptr == NULL)
6163322e2d48 (get_charset_aliases): Use malloc, realloc and memcpy
Jim Meyering <jim@meyering.net>
parents: 2340
diff changeset
191 {
6163322e2d48 (get_charset_aliases): Use malloc, realloc and memcpy
Jim Meyering <jim@meyering.net>
parents: 2340
diff changeset
192 /* Out of memory. */
6163322e2d48 (get_charset_aliases): Use malloc, realloc and memcpy
Jim Meyering <jim@meyering.net>
parents: 2340
diff changeset
193 res_size = 0;
5044
b1006348a448 Avoid memory leak upon realloc failure.
Bruno Haible <bruno@clisp.org>
parents: 4897
diff changeset
194 if (old_res_ptr != NULL)
b1006348a448 Avoid memory leak upon realloc failure.
Bruno Haible <bruno@clisp.org>
parents: 4897
diff changeset
195 free (old_res_ptr);
2487
6163322e2d48 (get_charset_aliases): Use malloc, realloc and memcpy
Jim Meyering <jim@meyering.net>
parents: 2340
diff changeset
196 break;
2303
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
197 }
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
198 strcpy (res_ptr + res_size - (l2 + 1) - (l1 + 1), buf1);
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
199 strcpy (res_ptr + res_size - (l2 + 1), buf2);
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
200 }
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
201 fclose (fp);
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
202 if (res_size == 0)
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
203 cp = "";
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
204 else
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
205 {
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
206 *(res_ptr + res_size) = '\0';
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
207 cp = res_ptr;
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
208 }
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
209 }
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
210
2340
744cd17f399a (get_charset_aliases): Don't try to free file_name
Jim Meyering <jim@meyering.net>
parents: 2338
diff changeset
211 if (file_name != NULL)
744cd17f399a (get_charset_aliases): Don't try to free file_name
Jim Meyering <jim@meyering.net>
parents: 2338
diff changeset
212 free (file_name);
3062
e9f1d0258cae (locale_charset): Add support for Win32.
Jim Meyering <jim@meyering.net>
parents: 2487
diff changeset
213
3737
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
214 #else
3062
e9f1d0258cae (locale_charset): Add support for Win32.
Jim Meyering <jim@meyering.net>
parents: 2487
diff changeset
215
4337
bb36dc0e4dd4 Upgrade to gettext-0.12.1.
Bruno Haible <bruno@clisp.org>
parents: 4106
diff changeset
216 # if defined VMS
bb36dc0e4dd4 Upgrade to gettext-0.12.1.
Bruno Haible <bruno@clisp.org>
parents: 4106
diff changeset
217 /* To avoid the troubles of an extra file charset.alias_vms in the
bb36dc0e4dd4 Upgrade to gettext-0.12.1.
Bruno Haible <bruno@clisp.org>
parents: 4106
diff changeset
218 sources of many GNU packages, simply inline the aliases here. */
bb36dc0e4dd4 Upgrade to gettext-0.12.1.
Bruno Haible <bruno@clisp.org>
parents: 4106
diff changeset
219 /* The list of encodings is taken from the OpenVMS 7.3-1 documentation
bb36dc0e4dd4 Upgrade to gettext-0.12.1.
Bruno Haible <bruno@clisp.org>
parents: 4106
diff changeset
220 "Compaq C Run-Time Library Reference Manual for OpenVMS systems"
bb36dc0e4dd4 Upgrade to gettext-0.12.1.
Bruno Haible <bruno@clisp.org>
parents: 4106
diff changeset
221 section 10.7 "Handling Different Character Sets". */
bb36dc0e4dd4 Upgrade to gettext-0.12.1.
Bruno Haible <bruno@clisp.org>
parents: 4106
diff changeset
222 cp = "ISO8859-1" "\0" "ISO-8859-1" "\0"
bb36dc0e4dd4 Upgrade to gettext-0.12.1.
Bruno Haible <bruno@clisp.org>
parents: 4106
diff changeset
223 "ISO8859-2" "\0" "ISO-8859-2" "\0"
bb36dc0e4dd4 Upgrade to gettext-0.12.1.
Bruno Haible <bruno@clisp.org>
parents: 4106
diff changeset
224 "ISO8859-5" "\0" "ISO-8859-5" "\0"
bb36dc0e4dd4 Upgrade to gettext-0.12.1.
Bruno Haible <bruno@clisp.org>
parents: 4106
diff changeset
225 "ISO8859-7" "\0" "ISO-8859-7" "\0"
bb36dc0e4dd4 Upgrade to gettext-0.12.1.
Bruno Haible <bruno@clisp.org>
parents: 4106
diff changeset
226 "ISO8859-8" "\0" "ISO-8859-8" "\0"
bb36dc0e4dd4 Upgrade to gettext-0.12.1.
Bruno Haible <bruno@clisp.org>
parents: 4106
diff changeset
227 "ISO8859-9" "\0" "ISO-8859-9" "\0"
bb36dc0e4dd4 Upgrade to gettext-0.12.1.
Bruno Haible <bruno@clisp.org>
parents: 4106
diff changeset
228 /* Japanese */
bb36dc0e4dd4 Upgrade to gettext-0.12.1.
Bruno Haible <bruno@clisp.org>
parents: 4106
diff changeset
229 "eucJP" "\0" "EUC-JP" "\0"
bb36dc0e4dd4 Upgrade to gettext-0.12.1.
Bruno Haible <bruno@clisp.org>
parents: 4106
diff changeset
230 "SJIS" "\0" "SHIFT_JIS" "\0"
bb36dc0e4dd4 Upgrade to gettext-0.12.1.
Bruno Haible <bruno@clisp.org>
parents: 4106
diff changeset
231 "DECKANJI" "\0" "DEC-KANJI" "\0"
bb36dc0e4dd4 Upgrade to gettext-0.12.1.
Bruno Haible <bruno@clisp.org>
parents: 4106
diff changeset
232 "SDECKANJI" "\0" "EUC-JP" "\0"
bb36dc0e4dd4 Upgrade to gettext-0.12.1.
Bruno Haible <bruno@clisp.org>
parents: 4106
diff changeset
233 /* Chinese */
bb36dc0e4dd4 Upgrade to gettext-0.12.1.
Bruno Haible <bruno@clisp.org>
parents: 4106
diff changeset
234 "eucTW" "\0" "EUC-TW" "\0"
bb36dc0e4dd4 Upgrade to gettext-0.12.1.
Bruno Haible <bruno@clisp.org>
parents: 4106
diff changeset
235 "DECHANYU" "\0" "DEC-HANYU" "\0"
bb36dc0e4dd4 Upgrade to gettext-0.12.1.
Bruno Haible <bruno@clisp.org>
parents: 4106
diff changeset
236 "DECHANZI" "\0" "GB2312" "\0"
bb36dc0e4dd4 Upgrade to gettext-0.12.1.
Bruno Haible <bruno@clisp.org>
parents: 4106
diff changeset
237 /* Korean */
bb36dc0e4dd4 Upgrade to gettext-0.12.1.
Bruno Haible <bruno@clisp.org>
parents: 4106
diff changeset
238 "DECKOREAN" "\0" "EUC-KR" "\0";
bb36dc0e4dd4 Upgrade to gettext-0.12.1.
Bruno Haible <bruno@clisp.org>
parents: 4106
diff changeset
239 # endif
bb36dc0e4dd4 Upgrade to gettext-0.12.1.
Bruno Haible <bruno@clisp.org>
parents: 4106
diff changeset
240
7010
2c3480d62b64 Update localcharset module from GNU gettext.
Bruno Haible <bruno@clisp.org>
parents: 6534
diff changeset
241 # if defined WIN32_NATIVE || defined __CYGWIN__
3062
e9f1d0258cae (locale_charset): Add support for Win32.
Jim Meyering <jim@meyering.net>
parents: 2487
diff changeset
242 /* To avoid the troubles of installing a separate file in the same
e9f1d0258cae (locale_charset): Add support for Win32.
Jim Meyering <jim@meyering.net>
parents: 2487
diff changeset
243 directory as the DLL and of retrieving the DLL's directory at
e9f1d0258cae (locale_charset): Add support for Win32.
Jim Meyering <jim@meyering.net>
parents: 2487
diff changeset
244 runtime, simply inline the aliases here. */
e9f1d0258cae (locale_charset): Add support for Win32.
Jim Meyering <jim@meyering.net>
parents: 2487
diff changeset
245
e9f1d0258cae (locale_charset): Add support for Win32.
Jim Meyering <jim@meyering.net>
parents: 2487
diff changeset
246 cp = "CP936" "\0" "GBK" "\0"
3963
ed9b8c0441b5 Update config.charset and localcharset.c to current gettext version.
Bruno Haible <bruno@clisp.org>
parents: 3737
diff changeset
247 "CP1361" "\0" "JOHAB" "\0"
ed9b8c0441b5 Update config.charset and localcharset.c to current gettext version.
Bruno Haible <bruno@clisp.org>
parents: 3737
diff changeset
248 "CP20127" "\0" "ASCII" "\0"
ed9b8c0441b5 Update config.charset and localcharset.c to current gettext version.
Bruno Haible <bruno@clisp.org>
parents: 3737
diff changeset
249 "CP20866" "\0" "KOI8-R" "\0"
6534
fdcb5e98f8fa Update from GNU gettext.
Bruno Haible <bruno@clisp.org>
parents: 5848
diff changeset
250 "CP20936" "\0" "GB2312" "\0"
3963
ed9b8c0441b5 Update config.charset and localcharset.c to current gettext version.
Bruno Haible <bruno@clisp.org>
parents: 3737
diff changeset
251 "CP21866" "\0" "KOI8-RU" "\0"
ed9b8c0441b5 Update config.charset and localcharset.c to current gettext version.
Bruno Haible <bruno@clisp.org>
parents: 3737
diff changeset
252 "CP28591" "\0" "ISO-8859-1" "\0"
ed9b8c0441b5 Update config.charset and localcharset.c to current gettext version.
Bruno Haible <bruno@clisp.org>
parents: 3737
diff changeset
253 "CP28592" "\0" "ISO-8859-2" "\0"
ed9b8c0441b5 Update config.charset and localcharset.c to current gettext version.
Bruno Haible <bruno@clisp.org>
parents: 3737
diff changeset
254 "CP28593" "\0" "ISO-8859-3" "\0"
ed9b8c0441b5 Update config.charset and localcharset.c to current gettext version.
Bruno Haible <bruno@clisp.org>
parents: 3737
diff changeset
255 "CP28594" "\0" "ISO-8859-4" "\0"
ed9b8c0441b5 Update config.charset and localcharset.c to current gettext version.
Bruno Haible <bruno@clisp.org>
parents: 3737
diff changeset
256 "CP28595" "\0" "ISO-8859-5" "\0"
ed9b8c0441b5 Update config.charset and localcharset.c to current gettext version.
Bruno Haible <bruno@clisp.org>
parents: 3737
diff changeset
257 "CP28596" "\0" "ISO-8859-6" "\0"
ed9b8c0441b5 Update config.charset and localcharset.c to current gettext version.
Bruno Haible <bruno@clisp.org>
parents: 3737
diff changeset
258 "CP28597" "\0" "ISO-8859-7" "\0"
ed9b8c0441b5 Update config.charset and localcharset.c to current gettext version.
Bruno Haible <bruno@clisp.org>
parents: 3737
diff changeset
259 "CP28598" "\0" "ISO-8859-8" "\0"
ed9b8c0441b5 Update config.charset and localcharset.c to current gettext version.
Bruno Haible <bruno@clisp.org>
parents: 3737
diff changeset
260 "CP28599" "\0" "ISO-8859-9" "\0"
6534
fdcb5e98f8fa Update from GNU gettext.
Bruno Haible <bruno@clisp.org>
parents: 5848
diff changeset
261 "CP28605" "\0" "ISO-8859-15" "\0"
fdcb5e98f8fa Update from GNU gettext.
Bruno Haible <bruno@clisp.org>
parents: 5848
diff changeset
262 "CP38598" "\0" "ISO-8859-8" "\0"
fdcb5e98f8fa Update from GNU gettext.
Bruno Haible <bruno@clisp.org>
parents: 5848
diff changeset
263 "CP51932" "\0" "EUC-JP" "\0"
fdcb5e98f8fa Update from GNU gettext.
Bruno Haible <bruno@clisp.org>
parents: 5848
diff changeset
264 "CP51936" "\0" "GB2312" "\0"
fdcb5e98f8fa Update from GNU gettext.
Bruno Haible <bruno@clisp.org>
parents: 5848
diff changeset
265 "CP51949" "\0" "EUC-KR" "\0"
fdcb5e98f8fa Update from GNU gettext.
Bruno Haible <bruno@clisp.org>
parents: 5848
diff changeset
266 "CP51950" "\0" "EUC-TW" "\0"
fdcb5e98f8fa Update from GNU gettext.
Bruno Haible <bruno@clisp.org>
parents: 5848
diff changeset
267 "CP54936" "\0" "GB18030" "\0"
fdcb5e98f8fa Update from GNU gettext.
Bruno Haible <bruno@clisp.org>
parents: 5848
diff changeset
268 "CP65001" "\0" "UTF-8" "\0";
3737
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
269 # endif
3062
e9f1d0258cae (locale_charset): Add support for Win32.
Jim Meyering <jim@meyering.net>
parents: 2487
diff changeset
270 #endif
e9f1d0258cae (locale_charset): Add support for Win32.
Jim Meyering <jim@meyering.net>
parents: 2487
diff changeset
271
e9f1d0258cae (locale_charset): Add support for Win32.
Jim Meyering <jim@meyering.net>
parents: 2487
diff changeset
272 charset_aliases = cp;
2303
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
273 }
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
274
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
275 return cp;
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
276 }
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
277
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
278 /* Determine the current locale's character encoding, and canonicalize it
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
279 into one of the canonical names listed in config.charset.
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
280 The result must not be freed; it is statically allocated.
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
281 If the canonical name cannot be determined, the result is a non-canonical
3203
3b920adfcea5 (locale_charset): Don't use setlocale(LC_CTYPE,NULL).
Jim Meyering <jim@meyering.net>
parents: 3062
diff changeset
282 name. */
2303
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
283
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
284 #ifdef STATIC
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
285 STATIC
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
286 #endif
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
287 const char *
6534
fdcb5e98f8fa Update from GNU gettext.
Bruno Haible <bruno@clisp.org>
parents: 5848
diff changeset
288 locale_charset (void)
2303
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
289 {
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
290 const char *codeset;
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
291 const char *aliases;
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
292
7010
2c3480d62b64 Update localcharset module from GNU gettext.
Bruno Haible <bruno@clisp.org>
parents: 6534
diff changeset
293 #if !(defined WIN32_NATIVE || defined OS2)
3062
e9f1d0258cae (locale_charset): Add support for Win32.
Jim Meyering <jim@meyering.net>
parents: 2487
diff changeset
294
e9f1d0258cae (locale_charset): Add support for Win32.
Jim Meyering <jim@meyering.net>
parents: 2487
diff changeset
295 # if HAVE_LANGINFO_CODESET
2303
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
296
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
297 /* Most systems support nl_langinfo (CODESET) nowadays. */
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
298 codeset = nl_langinfo (CODESET);
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
299
7010
2c3480d62b64 Update localcharset module from GNU gettext.
Bruno Haible <bruno@clisp.org>
parents: 6534
diff changeset
300 # ifdef __CYGWIN__
2c3480d62b64 Update localcharset module from GNU gettext.
Bruno Haible <bruno@clisp.org>
parents: 6534
diff changeset
301 /* Cygwin 2006 does not have locales. nl_langinfo (CODESET) always
2c3480d62b64 Update localcharset module from GNU gettext.
Bruno Haible <bruno@clisp.org>
parents: 6534
diff changeset
302 returns "US-ASCII". As long as this is not fixed, return the suffix
2c3480d62b64 Update localcharset module from GNU gettext.
Bruno Haible <bruno@clisp.org>
parents: 6534
diff changeset
303 of the locale name from the environment variables (if present) or
2c3480d62b64 Update localcharset module from GNU gettext.
Bruno Haible <bruno@clisp.org>
parents: 6534
diff changeset
304 the codepage as a number. */
2c3480d62b64 Update localcharset module from GNU gettext.
Bruno Haible <bruno@clisp.org>
parents: 6534
diff changeset
305 if (codeset != NULL && strcmp (codeset, "US-ASCII") == 0)
2c3480d62b64 Update localcharset module from GNU gettext.
Bruno Haible <bruno@clisp.org>
parents: 6534
diff changeset
306 {
2c3480d62b64 Update localcharset module from GNU gettext.
Bruno Haible <bruno@clisp.org>
parents: 6534
diff changeset
307 const char *locale;
2c3480d62b64 Update localcharset module from GNU gettext.
Bruno Haible <bruno@clisp.org>
parents: 6534
diff changeset
308 static char buf[2 + 10 + 1];
2c3480d62b64 Update localcharset module from GNU gettext.
Bruno Haible <bruno@clisp.org>
parents: 6534
diff changeset
309
2c3480d62b64 Update localcharset module from GNU gettext.
Bruno Haible <bruno@clisp.org>
parents: 6534
diff changeset
310 locale = getenv ("LC_ALL");
2c3480d62b64 Update localcharset module from GNU gettext.
Bruno Haible <bruno@clisp.org>
parents: 6534
diff changeset
311 if (locale == NULL || locale[0] == '\0')
2c3480d62b64 Update localcharset module from GNU gettext.
Bruno Haible <bruno@clisp.org>
parents: 6534
diff changeset
312 {
2c3480d62b64 Update localcharset module from GNU gettext.
Bruno Haible <bruno@clisp.org>
parents: 6534
diff changeset
313 locale = getenv ("LC_CTYPE");
2c3480d62b64 Update localcharset module from GNU gettext.
Bruno Haible <bruno@clisp.org>
parents: 6534
diff changeset
314 if (locale == NULL || locale[0] == '\0')
2c3480d62b64 Update localcharset module from GNU gettext.
Bruno Haible <bruno@clisp.org>
parents: 6534
diff changeset
315 locale = getenv ("LANG");
2c3480d62b64 Update localcharset module from GNU gettext.
Bruno Haible <bruno@clisp.org>
parents: 6534
diff changeset
316 }
2c3480d62b64 Update localcharset module from GNU gettext.
Bruno Haible <bruno@clisp.org>
parents: 6534
diff changeset
317 if (locale != NULL && locale[0] != '\0')
2c3480d62b64 Update localcharset module from GNU gettext.
Bruno Haible <bruno@clisp.org>
parents: 6534
diff changeset
318 {
2c3480d62b64 Update localcharset module from GNU gettext.
Bruno Haible <bruno@clisp.org>
parents: 6534
diff changeset
319 /* If the locale name contains an encoding after the dot, return
2c3480d62b64 Update localcharset module from GNU gettext.
Bruno Haible <bruno@clisp.org>
parents: 6534
diff changeset
320 it. */
2c3480d62b64 Update localcharset module from GNU gettext.
Bruno Haible <bruno@clisp.org>
parents: 6534
diff changeset
321 const char *dot = strchr (locale, '.');
2c3480d62b64 Update localcharset module from GNU gettext.
Bruno Haible <bruno@clisp.org>
parents: 6534
diff changeset
322
2c3480d62b64 Update localcharset module from GNU gettext.
Bruno Haible <bruno@clisp.org>
parents: 6534
diff changeset
323 if (dot != NULL)
2c3480d62b64 Update localcharset module from GNU gettext.
Bruno Haible <bruno@clisp.org>
parents: 6534
diff changeset
324 {
2c3480d62b64 Update localcharset module from GNU gettext.
Bruno Haible <bruno@clisp.org>
parents: 6534
diff changeset
325 const char *modifier;
2c3480d62b64 Update localcharset module from GNU gettext.
Bruno Haible <bruno@clisp.org>
parents: 6534
diff changeset
326
2c3480d62b64 Update localcharset module from GNU gettext.
Bruno Haible <bruno@clisp.org>
parents: 6534
diff changeset
327 dot++;
2c3480d62b64 Update localcharset module from GNU gettext.
Bruno Haible <bruno@clisp.org>
parents: 6534
diff changeset
328 /* Look for the possible @... trailer and remove it, if any. */
2c3480d62b64 Update localcharset module from GNU gettext.
Bruno Haible <bruno@clisp.org>
parents: 6534
diff changeset
329 modifier = strchr (dot, '@');
2c3480d62b64 Update localcharset module from GNU gettext.
Bruno Haible <bruno@clisp.org>
parents: 6534
diff changeset
330 if (modifier == NULL)
2c3480d62b64 Update localcharset module from GNU gettext.
Bruno Haible <bruno@clisp.org>
parents: 6534
diff changeset
331 return dot;
2c3480d62b64 Update localcharset module from GNU gettext.
Bruno Haible <bruno@clisp.org>
parents: 6534
diff changeset
332 if (modifier - dot < sizeof (buf))
2c3480d62b64 Update localcharset module from GNU gettext.
Bruno Haible <bruno@clisp.org>
parents: 6534
diff changeset
333 {
2c3480d62b64 Update localcharset module from GNU gettext.
Bruno Haible <bruno@clisp.org>
parents: 6534
diff changeset
334 memcpy (buf, dot, modifier - dot);
2c3480d62b64 Update localcharset module from GNU gettext.
Bruno Haible <bruno@clisp.org>
parents: 6534
diff changeset
335 buf [modifier - dot] = '\0';
2c3480d62b64 Update localcharset module from GNU gettext.
Bruno Haible <bruno@clisp.org>
parents: 6534
diff changeset
336 return buf;
2c3480d62b64 Update localcharset module from GNU gettext.
Bruno Haible <bruno@clisp.org>
parents: 6534
diff changeset
337 }
2c3480d62b64 Update localcharset module from GNU gettext.
Bruno Haible <bruno@clisp.org>
parents: 6534
diff changeset
338 }
2c3480d62b64 Update localcharset module from GNU gettext.
Bruno Haible <bruno@clisp.org>
parents: 6534
diff changeset
339 }
2c3480d62b64 Update localcharset module from GNU gettext.
Bruno Haible <bruno@clisp.org>
parents: 6534
diff changeset
340
2c3480d62b64 Update localcharset module from GNU gettext.
Bruno Haible <bruno@clisp.org>
parents: 6534
diff changeset
341 /* Woe32 has a function returning the locale's codepage as a number. */
2c3480d62b64 Update localcharset module from GNU gettext.
Bruno Haible <bruno@clisp.org>
parents: 6534
diff changeset
342 sprintf (buf, "CP%u", GetACP ());
2c3480d62b64 Update localcharset module from GNU gettext.
Bruno Haible <bruno@clisp.org>
parents: 6534
diff changeset
343 codeset = buf;
2c3480d62b64 Update localcharset module from GNU gettext.
Bruno Haible <bruno@clisp.org>
parents: 6534
diff changeset
344 }
2c3480d62b64 Update localcharset module from GNU gettext.
Bruno Haible <bruno@clisp.org>
parents: 6534
diff changeset
345 # endif
2c3480d62b64 Update localcharset module from GNU gettext.
Bruno Haible <bruno@clisp.org>
parents: 6534
diff changeset
346
3062
e9f1d0258cae (locale_charset): Add support for Win32.
Jim Meyering <jim@meyering.net>
parents: 2487
diff changeset
347 # else
2303
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
348
3203
3b920adfcea5 (locale_charset): Don't use setlocale(LC_CTYPE,NULL).
Jim Meyering <jim@meyering.net>
parents: 3062
diff changeset
349 /* On old systems which lack it, use setlocale or getenv. */
2303
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
350 const char *locale = NULL;
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
351
3203
3b920adfcea5 (locale_charset): Don't use setlocale(LC_CTYPE,NULL).
Jim Meyering <jim@meyering.net>
parents: 3062
diff changeset
352 /* But most old systems don't have a complete set of locales. Some
3b920adfcea5 (locale_charset): Don't use setlocale(LC_CTYPE,NULL).
Jim Meyering <jim@meyering.net>
parents: 3062
diff changeset
353 (like SunOS 4 or DJGPP) have only the C locale. Therefore we don't
3b920adfcea5 (locale_charset): Don't use setlocale(LC_CTYPE,NULL).
Jim Meyering <jim@meyering.net>
parents: 3062
diff changeset
354 use setlocale here; it would return "C" when it doesn't support the
3b920adfcea5 (locale_charset): Don't use setlocale(LC_CTYPE,NULL).
Jim Meyering <jim@meyering.net>
parents: 3062
diff changeset
355 locale name the user has set. */
3b920adfcea5 (locale_charset): Don't use setlocale(LC_CTYPE,NULL).
Jim Meyering <jim@meyering.net>
parents: 3062
diff changeset
356 # if HAVE_SETLOCALE && 0
2303
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
357 locale = setlocale (LC_CTYPE, NULL);
3062
e9f1d0258cae (locale_charset): Add support for Win32.
Jim Meyering <jim@meyering.net>
parents: 2487
diff changeset
358 # endif
2487
6163322e2d48 (get_charset_aliases): Use malloc, realloc and memcpy
Jim Meyering <jim@meyering.net>
parents: 2340
diff changeset
359 if (locale == NULL || locale[0] == '\0')
2303
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
360 {
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
361 locale = getenv ("LC_ALL");
2487
6163322e2d48 (get_charset_aliases): Use malloc, realloc and memcpy
Jim Meyering <jim@meyering.net>
parents: 2340
diff changeset
362 if (locale == NULL || locale[0] == '\0')
2303
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
363 {
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
364 locale = getenv ("LC_CTYPE");
2487
6163322e2d48 (get_charset_aliases): Use malloc, realloc and memcpy
Jim Meyering <jim@meyering.net>
parents: 2340
diff changeset
365 if (locale == NULL || locale[0] == '\0')
2303
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
366 locale = getenv ("LANG");
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
367 }
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
368 }
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
369
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
370 /* On some old systems, one used to set locale = "iso8859_1". On others,
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
371 you set it to "language_COUNTRY.charset". In any case, we resolve it
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
372 through the charset.alias file. */
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
373 codeset = locale;
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
374
3062
e9f1d0258cae (locale_charset): Add support for Win32.
Jim Meyering <jim@meyering.net>
parents: 2487
diff changeset
375 # endif
e9f1d0258cae (locale_charset): Add support for Win32.
Jim Meyering <jim@meyering.net>
parents: 2487
diff changeset
376
7010
2c3480d62b64 Update localcharset module from GNU gettext.
Bruno Haible <bruno@clisp.org>
parents: 6534
diff changeset
377 #elif defined WIN32_NATIVE
3062
e9f1d0258cae (locale_charset): Add support for Win32.
Jim Meyering <jim@meyering.net>
parents: 2487
diff changeset
378
e9f1d0258cae (locale_charset): Add support for Win32.
Jim Meyering <jim@meyering.net>
parents: 2487
diff changeset
379 static char buf[2 + 10 + 1];
e9f1d0258cae (locale_charset): Add support for Win32.
Jim Meyering <jim@meyering.net>
parents: 2487
diff changeset
380
3963
ed9b8c0441b5 Update config.charset and localcharset.c to current gettext version.
Bruno Haible <bruno@clisp.org>
parents: 3737
diff changeset
381 /* Woe32 has a function returning the locale's codepage as a number. */
3062
e9f1d0258cae (locale_charset): Add support for Win32.
Jim Meyering <jim@meyering.net>
parents: 2487
diff changeset
382 sprintf (buf, "CP%u", GetACP ());
e9f1d0258cae (locale_charset): Add support for Win32.
Jim Meyering <jim@meyering.net>
parents: 2487
diff changeset
383 codeset = buf;
e9f1d0258cae (locale_charset): Add support for Win32.
Jim Meyering <jim@meyering.net>
parents: 2487
diff changeset
384
3737
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
385 #elif defined OS2
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
386
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
387 const char *locale;
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
388 static char buf[2 + 10 + 1];
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
389 ULONG cp[3];
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
390 ULONG cplen;
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
391
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
392 /* Allow user to override the codeset, as set in the operating system,
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
393 with standard language environment variables. */
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
394 locale = getenv ("LC_ALL");
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
395 if (locale == NULL || locale[0] == '\0')
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
396 {
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
397 locale = getenv ("LC_CTYPE");
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
398 if (locale == NULL || locale[0] == '\0')
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
399 locale = getenv ("LANG");
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
400 }
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
401 if (locale != NULL && locale[0] != '\0')
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
402 {
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
403 /* If the locale name contains an encoding after the dot, return it. */
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
404 const char *dot = strchr (locale, '.');
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
405
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
406 if (dot != NULL)
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
407 {
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
408 const char *modifier;
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
409
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
410 dot++;
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
411 /* Look for the possible @... trailer and remove it, if any. */
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
412 modifier = strchr (dot, '@');
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
413 if (modifier == NULL)
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
414 return dot;
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
415 if (modifier - dot < sizeof (buf))
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
416 {
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
417 memcpy (buf, dot, modifier - dot);
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
418 buf [modifier - dot] = '\0';
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
419 return buf;
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
420 }
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
421 }
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
422
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
423 /* Resolve through the charset.alias file. */
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
424 codeset = locale;
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
425 }
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
426 else
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
427 {
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
428 /* OS/2 has a function returning the locale's codepage as a number. */
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
429 if (DosQueryCp (sizeof (cp), cp, &cplen))
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
430 codeset = "";
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
431 else
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
432 {
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
433 sprintf (buf, "CP%u", cp[0]);
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
434 codeset = buf;
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
435 }
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
436 }
0600eb591972 Update to Gettext 0.11.
Jim Meyering <jim@meyering.net>
parents: 3494
diff changeset
437
2303
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
438 #endif
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
439
3203
3b920adfcea5 (locale_charset): Don't use setlocale(LC_CTYPE,NULL).
Jim Meyering <jim@meyering.net>
parents: 3062
diff changeset
440 if (codeset == NULL)
3b920adfcea5 (locale_charset): Don't use setlocale(LC_CTYPE,NULL).
Jim Meyering <jim@meyering.net>
parents: 3062
diff changeset
441 /* The canonical name cannot be determined. */
3b920adfcea5 (locale_charset): Don't use setlocale(LC_CTYPE,NULL).
Jim Meyering <jim@meyering.net>
parents: 3062
diff changeset
442 codeset = "";
3209
5416525015e5 (locale_charset): Allow wildcard syntax. Also resolve
Jim Meyering <jim@meyering.net>
parents: 3203
diff changeset
443
5416525015e5 (locale_charset): Allow wildcard syntax. Also resolve
Jim Meyering <jim@meyering.net>
parents: 3203
diff changeset
444 /* Resolve alias. */
5416525015e5 (locale_charset): Allow wildcard syntax. Also resolve
Jim Meyering <jim@meyering.net>
parents: 3203
diff changeset
445 for (aliases = get_charset_aliases ();
5416525015e5 (locale_charset): Allow wildcard syntax. Also resolve
Jim Meyering <jim@meyering.net>
parents: 3203
diff changeset
446 *aliases != '\0';
5416525015e5 (locale_charset): Allow wildcard syntax. Also resolve
Jim Meyering <jim@meyering.net>
parents: 3203
diff changeset
447 aliases += strlen (aliases) + 1, aliases += strlen (aliases) + 1)
5416525015e5 (locale_charset): Allow wildcard syntax. Also resolve
Jim Meyering <jim@meyering.net>
parents: 3203
diff changeset
448 if (strcmp (codeset, aliases) == 0
5416525015e5 (locale_charset): Allow wildcard syntax. Also resolve
Jim Meyering <jim@meyering.net>
parents: 3203
diff changeset
449 || (aliases[0] == '*' && aliases[1] == '\0'))
5416525015e5 (locale_charset): Allow wildcard syntax. Also resolve
Jim Meyering <jim@meyering.net>
parents: 3203
diff changeset
450 {
5416525015e5 (locale_charset): Allow wildcard syntax. Also resolve
Jim Meyering <jim@meyering.net>
parents: 3203
diff changeset
451 codeset = aliases + strlen (aliases) + 1;
5416525015e5 (locale_charset): Allow wildcard syntax. Also resolve
Jim Meyering <jim@meyering.net>
parents: 3203
diff changeset
452 break;
5416525015e5 (locale_charset): Allow wildcard syntax. Also resolve
Jim Meyering <jim@meyering.net>
parents: 3203
diff changeset
453 }
2303
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
454
3963
ed9b8c0441b5 Update config.charset and localcharset.c to current gettext version.
Bruno Haible <bruno@clisp.org>
parents: 3737
diff changeset
455 /* Don't return an empty string. GNU libc and GNU libiconv interpret
ed9b8c0441b5 Update config.charset and localcharset.c to current gettext version.
Bruno Haible <bruno@clisp.org>
parents: 3737
diff changeset
456 the empty string as denoting "the locale's character encoding",
ed9b8c0441b5 Update config.charset and localcharset.c to current gettext version.
Bruno Haible <bruno@clisp.org>
parents: 3737
diff changeset
457 thus GNU libiconv would call this function a second time. */
ed9b8c0441b5 Update config.charset and localcharset.c to current gettext version.
Bruno Haible <bruno@clisp.org>
parents: 3737
diff changeset
458 if (codeset[0] == '\0')
ed9b8c0441b5 Update config.charset and localcharset.c to current gettext version.
Bruno Haible <bruno@clisp.org>
parents: 3737
diff changeset
459 codeset = "ASCII";
ed9b8c0441b5 Update config.charset and localcharset.c to current gettext version.
Bruno Haible <bruno@clisp.org>
parents: 3737
diff changeset
460
2303
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
461 return codeset;
295e005b5209 new file, from Bruno
Jim Meyering <jim@meyering.net>
parents:
diff changeset
462 }