source: trunk/third/librep/intl/textdomain.c @ 15283

Revision 15283, 3.2 KB checked in by ghudson, 24 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r15282, which included commits to RCS files with non-trunk default branches.
Line 
1/* Implementation of the textdomain(3) function.
2   Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
3   Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
4
5   This program is free software; you can redistribute it and/or modify
6   it under the terms of the GNU General Public License as published by
7   the Free Software Foundation; either version 2, or (at your option)
8   any later version.
9
10   This program is distributed in the hope that it will be useful,
11   but WITHOUT ANY WARRANTY; without even the implied warranty of
12   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13   GNU General Public License for more details.
14
15   You should have received a copy of the GNU General Public License
16   along with this program; if not, write to the Free Software Foundation,
17   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
18
19#ifdef HAVE_CONFIG_H
20# include <config.h>
21#endif
22
23#if defined STDC_HEADERS || defined _LIBC
24# include <stdlib.h>
25#endif
26
27#if defined STDC_HEADERS || defined HAVE_STRING_H || defined _LIBC
28# include <string.h>
29#else
30# include <strings.h>
31# ifndef memcpy
32#  define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num)
33# endif
34#endif
35
36#ifdef _LIBC
37# include <libintl.h>
38#else
39# include "libgettext.h"
40#endif
41
42/* @@ end of prolog @@ */
43
44/* Name of the default text domain.  */
45extern const char _nl_default_default_domain[];
46
47/* Default text domain in which entries for gettext(3) are to be found.  */
48extern const char *_nl_current_default_domain;
49
50
51/* Names for the libintl functions are a problem.  They must not clash
52   with existing names and they should follow ANSI C.  But this source
53   code is also used in GNU C Library where the names have a __
54   prefix.  So we have to make a difference here.  */
55#ifdef _LIBC
56# define TEXTDOMAIN __textdomain
57# ifndef strdup
58#  define strdup(str) __strdup (str)
59# endif
60#else
61# define TEXTDOMAIN textdomain__
62#endif
63
64/* Set the current default message catalog to DOMAINNAME.
65   If DOMAINNAME is null, return the current default.
66   If DOMAINNAME is "", reset to the default of "messages".  */
67char *
68TEXTDOMAIN (domainname)
69     const char *domainname;
70{
71  char *old;
72
73  /* A NULL pointer requests the current setting.  */
74  if (domainname == NULL)
75    return (char *) _nl_current_default_domain;
76
77  old = (char *) _nl_current_default_domain;
78
79  /* If domain name is the null string set to default domain "messages".  */
80  if (domainname[0] == '\0'
81      || strcmp (domainname, _nl_default_default_domain) == 0)
82    _nl_current_default_domain = _nl_default_default_domain;
83  else
84    {
85      /* If the following malloc fails `_nl_current_default_domain'
86         will be NULL.  This value will be returned and so signals we
87         are out of core.  */
88#if defined _LIBC || defined HAVE_STRDUP
89      _nl_current_default_domain = strdup (domainname);
90#else
91      size_t len = strlen (domainname) + 1;
92      char *cp = (char *) malloc (len);
93      if (cp != NULL)
94        memcpy (cp, domainname, len);
95      _nl_current_default_domain = cp;
96#endif
97    }
98
99  if (old != _nl_default_default_domain)
100    free (old);
101
102  return (char *) _nl_current_default_domain;
103}
104
105#ifdef _LIBC
106/* Alias for function name in GNU C Library.  */
107weak_alias (__textdomain, textdomain);
108#endif
Note: See TracBrowser for help on using the repository browser.