intl/finddomain.c

Thu, 02 Nov 2000 22:29:51 +0000

author
Eric Warmenhoven <warmenhoven@yahoo.com>
date
Thu, 02 Nov 2000 22:29:51 +0000
changeset 1051
d65ac9e2224f
parent 347
20fdc56f4da4
permissions
-rw-r--r--

[gaim-migrate @ 1061]
user_info only in aim_user (saves 2k per connection); mem leak fixes in dialogs.c and multi.c; and proto_opt in aim_user (so prpls can have their own saved information per user). no way to draw protocol option selection window thingy yet, so prpls will either have to do that on their own or something. i don't know. we'll figure it out.

347
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1 /* Handle list of needed message catalogs
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2 Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3 Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
4
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
5 This program is free software; you can redistribute it and/or modify
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
6 it under the terms of the GNU General Public License as published by
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
7 the Free Software Foundation; either version 2, or (at your option)
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
8 any later version.
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
9
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
10 This program is distributed in the hope that it will be useful,
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
13 GNU General Public License for more details.
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
14
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
15 You should have received a copy of the GNU General Public License
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
16 along with this program; if not, write to the Free Software Foundation,
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
17 Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
18
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
19 #ifdef HAVE_CONFIG_H
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
20 # include <config.h>
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
21 #endif
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
22
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
23 #include <ctype.h>
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
24 #include <errno.h>
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
25 #include <stdio.h>
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
26 #include <sys/types.h>
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
27
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
28 #if defined STDC_HEADERS || defined _LIBC
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
29 # include <stdlib.h>
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
30 #else
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
31 # ifdef HAVE_MALLOC_H
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
32 # include <malloc.h>
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
33 # else
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
34 void free ();
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
35 # endif
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
36 #endif
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
37
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
38 #if defined HAVE_STRING_H || defined _LIBC
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
39 # include <string.h>
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
40 #else
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
41 # include <strings.h>
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
42 # ifndef memcpy
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
43 # define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num)
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
44 # endif
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
45 #endif
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
46 #if !HAVE_STRCHR && !defined _LIBC
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
47 # ifndef strchr
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
48 # define strchr index
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
49 # endif
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
50 #endif
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
51
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
52 #if defined HAVE_UNISTD_H || defined _LIBC
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
53 # include <unistd.h>
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
54 #endif
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
55
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
56 #include "gettext.h"
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
57 #include "gettextP.h"
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
58 #ifdef _LIBC
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
59 # include <libintl.h>
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
60 #else
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
61 # include "libgettext.h"
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
62 #endif
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
63
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
64 /* @@ end of prolog @@ */
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
65 /* List of already loaded domains. */
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
66 static struct loaded_l10nfile *_nl_loaded_domains;
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
67
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
68
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
69 /* Return a data structure describing the message catalog described by
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
70 the DOMAINNAME and CATEGORY parameters with respect to the currently
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
71 established bindings. */
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
72 struct loaded_l10nfile *
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
73 internal_function
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
74 _nl_find_domain (dirname, locale, domainname)
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
75 const char *dirname;
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
76 char *locale;
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
77 const char *domainname;
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
78 {
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
79 struct loaded_l10nfile *retval;
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
80 const char *language;
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
81 const char *modifier;
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
82 const char *territory;
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
83 const char *codeset;
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
84 const char *normalized_codeset;
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
85 const char *special;
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
86 const char *sponsor;
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
87 const char *revision;
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
88 const char *alias_value;
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
89 int mask;
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
90
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
91 /* LOCALE can consist of up to four recognized parts for the XPG syntax:
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
92
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
93 language[_territory[.codeset]][@modifier]
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
94
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
95 and six parts for the CEN syntax:
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
96
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
97 language[_territory][+audience][+special][,[sponsor][_revision]]
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
98
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
99 Beside the first part all of them are allowed to be missing. If
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
100 the full specified locale is not found, the less specific one are
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
101 looked for. The various parts will be stripped off according to
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
102 the following order:
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
103 (1) revision
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
104 (2) sponsor
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
105 (3) special
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
106 (4) codeset
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
107 (5) normalized codeset
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
108 (6) territory
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
109 (7) audience/modifier
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
110 */
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
111
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
112 /* If we have already tested for this locale entry there has to
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
113 be one data set in the list of loaded domains. */
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
114 retval = _nl_make_l10nflist (&_nl_loaded_domains, dirname,
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
115 strlen (dirname) + 1, 0, locale, NULL, NULL,
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
116 NULL, NULL, NULL, NULL, NULL, domainname, 0);
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
117 if (retval != NULL)
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
118 {
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
119 /* We know something about this locale. */
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
120 int cnt;
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
121
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
122 if (retval->decided == 0)
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
123 _nl_load_domain (retval);
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
124
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
125 if (retval->data != NULL)
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
126 return retval;
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
127
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
128 for (cnt = 0; retval->successor[cnt] != NULL; ++cnt)
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
129 {
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
130 if (retval->successor[cnt]->decided == 0)
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
131 _nl_load_domain (retval->successor[cnt]);
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
132
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
133 if (retval->successor[cnt]->data != NULL)
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
134 break;
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
135 }
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
136 return cnt >= 0 ? retval : NULL;
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
137 /* NOTREACHED */
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
138 }
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
139
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
140 /* See whether the locale value is an alias. If yes its value
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
141 *overwrites* the alias name. No test for the original value is
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
142 done. */
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
143 alias_value = _nl_expand_alias (locale);
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
144 if (alias_value != NULL)
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
145 {
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
146 #if defined _LIBC || defined HAVE_STRDUP
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
147 locale = strdup (alias_value);
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
148 if (locale == NULL)
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
149 return NULL;
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
150 #else
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
151 size_t len = strlen (alias_value) + 1;
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
152 locale = (char *) malloc (len);
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
153 if (locale == NULL)
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
154 return NULL;
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
155
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
156 memcpy (locale, alias_value, len);
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
157 #endif
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
158 }
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
159
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
160 /* Now we determine the single parts of the locale name. First
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
161 look for the language. Termination symbols are `_' and `@' if
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
162 we use XPG4 style, and `_', `+', and `,' if we use CEN syntax. */
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
163 mask = _nl_explode_name (locale, &language, &modifier, &territory,
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
164 &codeset, &normalized_codeset, &special,
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
165 &sponsor, &revision);
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
166
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
167 /* Create all possible locale entries which might be interested in
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
168 generalization. */
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
169 retval = _nl_make_l10nflist (&_nl_loaded_domains, dirname,
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
170 strlen (dirname) + 1, mask, language, territory,
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
171 codeset, normalized_codeset, modifier, special,
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
172 sponsor, revision, domainname, 1);
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
173 if (retval == NULL)
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
174 /* This means we are out of core. */
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
175 return NULL;
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
176
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
177 if (retval->decided == 0)
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
178 _nl_load_domain (retval);
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
179 if (retval->data == NULL)
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
180 {
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
181 int cnt;
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
182 for (cnt = 0; retval->successor[cnt] != NULL; ++cnt)
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
183 {
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
184 if (retval->successor[cnt]->decided == 0)
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
185 _nl_load_domain (retval->successor[cnt]);
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
186 if (retval->successor[cnt]->data != NULL)
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
187 break;
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
188 }
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
189 }
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
190
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
191 /* The room for an alias was dynamically allocated. Free it now. */
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
192 if (alias_value != NULL)
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
193 free (locale);
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
194
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
195 return retval;
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
196 }
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
197
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
198
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
199 #ifdef _LIBC
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
200 static void __attribute__ ((unused))
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
201 free_mem (void)
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
202 {
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
203 struct loaded_l10nfile *runp = _nl_loaded_domains;
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
204
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
205 while (runp != NULL)
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
206 {
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
207 struct loaded_l10nfile *here = runp;
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
208 if (runp->data != NULL)
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
209 _nl_unload_domain ((struct loaded_domain *) runp->data);
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
210 runp = runp->next;
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
211 free (here);
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
212 }
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
213 }
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
214
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
215 text_set_element (__libc_subfreeres, free_mem);
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
216 #endif

mercurial