intl/textdomain.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 /* Implementation of the textdomain(3) function.
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 #if defined STDC_HEADERS || defined _LIBC
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
24 # include <stdlib.h>
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
25 #endif
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
26
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
27 #if defined STDC_HEADERS || defined HAVE_STRING_H || defined _LIBC
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
28 # include <string.h>
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
29 #else
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
30 # include <strings.h>
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
31 # ifndef memcpy
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
32 # define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num)
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
33 # endif
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
34 #endif
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
35
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
36 #ifdef _LIBC
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
37 # include <libintl.h>
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
38 #else
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
39 # include "libgettext.h"
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
40 #endif
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
41
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
42 /* @@ end of prolog @@ */
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
43
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
44 /* Name of the default text domain. */
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
45 extern const char _nl_default_default_domain[];
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
46
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
47 /* Default text domain in which entries for gettext(3) are to be found. */
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
48 extern const char *_nl_current_default_domain;
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
49
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
50
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
51 /* Names for the libintl functions are a problem. They must not clash
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
52 with existing names and they should follow ANSI C. But this source
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
53 code is also used in GNU C Library where the names have a __
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
54 prefix. So we have to make a difference here. */
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
55 #ifdef _LIBC
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
56 # define TEXTDOMAIN __textdomain
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
57 # ifndef strdup
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
58 # define strdup(str) __strdup (str)
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
59 # endif
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 # define TEXTDOMAIN textdomain__
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 /* Set the current default message catalog to DOMAINNAME.
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
65 If DOMAINNAME is null, return the current default.
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
66 If DOMAINNAME is "", reset to the default of "messages". */
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
67 char *
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
68 TEXTDOMAIN (domainname)
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
69 const char *domainname;
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
70 {
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
71 char *old;
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
72
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
73 /* A NULL pointer requests the current setting. */
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
74 if (domainname == NULL)
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
75 return (char *) _nl_current_default_domain;
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
76
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
77 old = (char *) _nl_current_default_domain;
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 /* If domain name is the null string set to default domain "messages". */
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
80 if (domainname[0] == '\0'
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
81 || strcmp (domainname, _nl_default_default_domain) == 0)
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
82 _nl_current_default_domain = _nl_default_default_domain;
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
83 else
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
84 {
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
85 /* If the following malloc fails `_nl_current_default_domain'
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
86 will be NULL. This value will be returned and so signals we
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
87 are out of core. */
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
88 #if defined _LIBC || defined HAVE_STRDUP
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
89 _nl_current_default_domain = strdup (domainname);
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
90 #else
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
91 size_t len = strlen (domainname) + 1;
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
92 char *cp = (char *) malloc (len);
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
93 if (cp != NULL)
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
94 memcpy (cp, domainname, len);
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
95 _nl_current_default_domain = cp;
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
96 #endif
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
97 }
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 if (old != _nl_default_default_domain)
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
100 free (old);
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
101
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
102 return (char *) _nl_current_default_domain;
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
103 }
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
104
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
105 #ifdef _LIBC
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
106 /* Alias for function name in GNU C Library. */
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
107 weak_alias (__textdomain, textdomain);
20fdc56f4da4 [gaim-migrate @ 357]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
108 #endif

mercurial