1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20: #ifdef HAVE_CONFIG_H
21: # include <config.h>
22: #endif
23:
24: #include <stdlib.h>
25: #include <string.h>
26:
27: #ifdef _LIBC
28: # include <libintl.h>
29: #else
30: # include "libgnuintl.h"
31: #endif
32: #include "gettextP.h"
33:
34: #ifdef _LIBC
35:
36: # include <bits/libc-lock.h>
37: #else
38:
39: # define __libc_rwlock_define(CLASS, NAME)
40: # define __libc_rwlock_wrlock(NAME)
41: # define __libc_rwlock_unlock(NAME)
42: #endif
43:
44:
45:
46:
47: #if !defined _LIBC
48: # define _nl_default_default_domain libintl_nl_default_default_domain
49: # define _nl_current_default_domain libintl_nl_current_default_domain
50: #endif
51:
52:
53:
54:
55: extern const char _nl_default_default_domain[] attribute_hidden;
56:
57:
58: extern const char *_nl_current_default_domain attribute_hidden;
59:
60:
61:
62:
63:
64:
65: #ifdef _LIBC
66: # define TEXTDOMAIN __textdomain
67: # ifndef strdup
68: # define strdup(str) __strdup (str)
69: # endif
70: #else
71: # define TEXTDOMAIN libintl_textdomain
72: #endif
73:
74:
75: __libc_rwlock_define (extern, _nl_state_lock attribute_hidden)
76:
77:
78:
79:
80: char *
81: TEXTDOMAIN (domainname)
82: const char *domainname;
83: {
84: char *new_domain;
85: char *old_domain;
86:
87:
88: if (domainname == NULL)
89: return (char *) _nl_current_default_domain;
90:
91: __libc_rwlock_wrlock (_nl_state_lock);
92:
93: old_domain = (char *) _nl_current_default_domain;
94:
95:
96: if (domainname[0] == '\0'
97: || strcmp (domainname, _nl_default_default_domain) == 0)
98: {
99: _nl_current_default_domain = _nl_default_default_domain;
100: new_domain = (char *) _nl_current_default_domain;
101: }
102: else if (strcmp (domainname, old_domain) == 0)
103:
104:
105: new_domain = old_domain;
106: else
107: {
108:
109:
110:
111: #if defined _LIBC || defined HAVE_STRDUP
112: new_domain = strdup (domainname);
113: #else
114: size_t len = strlen (domainname) + 1;
115: new_domain = (char *) malloc (len);
116: if (new_domain != NULL)
117: memcpy (new_domain, domainname, len);
118: #endif
119:
120: if (new_domain != NULL)
121: _nl_current_default_domain = new_domain;
122: }
123:
124:
125:
126:
127: if (new_domain != NULL)
128: {
129: ++_nl_msg_cat_cntr;
130:
131: if (old_domain != new_domain && old_domain != _nl_default_default_domain)
132: free (old_domain);
133: }
134:
135: __libc_rwlock_unlock (_nl_state_lock);
136:
137: return new_domain;
138: }
139:
140: #ifdef _LIBC
141:
142: weak_alias (__textdomain, textdomain);
143: #endif