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