From 50660812be5588036a14fc85af16bccef68fac02 Mon Sep 17 00:00:00 2001 From: Manuel Novoa III Date: Sun, 24 Aug 2003 03:49:13 +0000 Subject: Fix a few bugs in the new extended locale functions. Move stub gettext functions to a stub libintl to make switching in gnu gettext easier. Also add a few gnu-isms. Change to using hidden names with global weak aliases for the extended locale functions, as expected by libstd++. Slightly rework the locale data generation stuff to allow pregenerated locale data to be used with buildroot. --- libintl/.cvsignore | 1 + libintl/Makefile | 66 +++++++++++++++++++++ libintl/intl.c | 166 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 233 insertions(+) create mode 100644 libintl/.cvsignore create mode 100644 libintl/Makefile create mode 100644 libintl/intl.c (limited to 'libintl') diff --git a/libintl/.cvsignore b/libintl/.cvsignore new file mode 100644 index 000000000..949cdf58d --- /dev/null +++ b/libintl/.cvsignore @@ -0,0 +1 @@ +libintl.so* diff --git a/libintl/Makefile b/libintl/Makefile new file mode 100644 index 000000000..ccc8098f3 --- /dev/null +++ b/libintl/Makefile @@ -0,0 +1,66 @@ +# Makefile for uClibc +# +# Copyright (C) 2000 by Lineo, inc. +# Copyright (C) 2000-2002 Erik Andersen +# +# This program is free software; you can redistribute it and/or modify it under +# the terms of the GNU Library General Public License as published by the Free +# Software Foundation; either version 2 of the License, or (at your option) any +# later version. +# +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +# FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more +# details. +# +# You should have received a copy of the GNU Library General Public License +# along with this program; if not, write to the Free Software Foundation, Inc., +# 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# Derived in part from the Linux-8086 C library, the GNU C Library, and several +# other sundry sources. Files within this library are copyright by their +# respective copyright holders. + +TOPDIR=../ +include $(TOPDIR)Rules.mak +LIBC=$(TOPDIR)libc.a + +LIBINTL=libintl.a +LIBINTL_SHARED=libintl.so +LIBINTL_SHARED_FULLNAME=libintl-$(MAJOR_VERSION).$(MINOR_VERSION).$(SUBLEVEL).so + +MSRC= intl.c +MOBJ= gettext.o ngettext.o dgettext.o dcgettext.o dngettext.o dcngettext.o \ + textdomain.o bindtextdomain.o bind_textdomain_codeset.o \ + _nl_expand_alias.o _nl_msg_cat_cntr.o # glibc-isms + +OBJS=$(MOBJ) + +all: $(OBJS) $(LIBC) + +$(LIBC): ar-target + +ar-target: $(OBJS) + $(AR) $(ARFLAGS) $(LIBINTL) $(OBJS) + install -d $(TOPDIR)lib + rm -f $(TOPDIR)lib/$(LIBINTL) + install -m 644 $(LIBINTL) $(TOPDIR)lib/ + +$(MOBJ): $(MSRC) + $(CC) $(CFLAGS) -DL_$* $< -c -o $*.o + $(STRIPTOOL) -x -R .note -R .comment $*.o + +shared: all + $(LD) $(LDFLAGS) -soname=$(LIBINTL_SHARED).$(MAJOR_VERSION) \ + -o $(LIBINTL_SHARED_FULLNAME) --whole-archive $(LIBINTL) \ + --no-whole-archive $(TOPDIR)/libc/misc/internals/interp.o \ + -L$(TOPDIR)/lib -lc; + install -d $(TOPDIR)lib + rm -f $(TOPDIR)lib/$(LIBINTL_SHARED_FULLNAME) $(TOPDIR)lib/$(LIBINTL_SHARED).$(MAJOR_VERSION) + install -m 644 $(LIBINTL_SHARED_FULLNAME) $(TOPDIR)lib/; + (cd $(TOPDIR)lib && ln -sf $(LIBINTL_SHARED_FULLNAME) $(LIBINTL_SHARED)); + (cd $(TOPDIR)lib && ln -sf $(LIBINTL_SHARED_FULLNAME) $(LIBINTL_SHARED).$(MAJOR_VERSION)); + +clean: + rm -f *.[oa] *~ core $(LIBINTL_SHARED)* $(LIBINTL_SHARED_FULLNAME)* + diff --git a/libintl/intl.c b/libintl/intl.c new file mode 100644 index 000000000..4c79aaa5f --- /dev/null +++ b/libintl/intl.c @@ -0,0 +1,166 @@ +/* Copyright (C) 2003 Manuel Novoa III + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the Free + * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +/* + * Stub version of libintl. + */ + +#include +#include +#include + +#undef __OPTIMIZE__ +#include + +/**********************************************************************/ +#ifdef L_gettext + +char *gettext(const char *msgid) +{ + return (char *) msgid; +} + +#endif +/**********************************************************************/ +#ifdef L_dgettext + +char *__dgettext(const char *domainname, + const char *msgid) +{ + return (char *) msgid; +} + +weak_alias (__dgettext, dgettext) + +#endif +/**********************************************************************/ +#ifdef L_dcgettext + +char * __dcgettext(const char *domainname, + const char *msgid, int category) +{ + return (char *) msgid; +} + +weak_alias (__dcgettext, dcgettext) + +#endif +/**********************************************************************/ +#ifdef L_ngettext + +char *ngettext(const char *msgid1, const char *msgid2, + unsigned long int n) +{ + return (char *) ((n == 1) ? msgid1 : msgid2); +} + +#endif +/**********************************************************************/ +#ifdef L_dngettext + +char *dngettext(const char *domainname, const char *msgid1, + const char *msgid2, unsigned long int n) +{ + return (char *) ((n == 1) ? msgid1 : msgid2); +} + +#endif +/**********************************************************************/ +#ifdef L_dcngettext + +char *dcngettext(const char *domainname, const char *msgid1, + const char *msgid2, unsigned long int n, + int category) +{ + return (char *) ((n == 1) ? msgid1 : msgid2); +} + +#endif +/**********************************************************************/ +#ifdef L_textdomain + +char *textdomain(const char *domainname) +{ + static const char default_str[] = "messages"; + + if (domainname && *domainname && strcmp(domainname, default_str)) { + __set_errno(EINVAL); + return NULL; + } + return (char *) default_str; +} + +#endif +/**********************************************************************/ +#ifdef L_bindtextdomain + +char *bindtextdomain(const char *domainname, const char *dirname) +{ + static const char dir[] = "/"; + + if (!domainname || !*domainname + || (dirname +#if 1 + && ((dirname[0] != '/') || dirname[1]) +#else + && strcmp(dirname, dir) +#endif + ) + ) { + __set_errno(EINVAL); + return NULL; + } + + return (char *) dir; +} + +#endif +/**********************************************************************/ +#ifdef L_bind_textdomain_codeset + +/* Specify the character encoding in which the messages from the + DOMAINNAME message catalog will be returned. */ +char *bind_textdomain_codeset(const char *domainname, + const char *codeset) +{ + if (!domainname || !*domainname || codeset) { + __set_errno(EINVAL); + } + return NULL; +} + +#endif +/**********************************************************************/ +#ifdef L__nl_expand_alias + +/* glibc-ism */ + +const char *_nl_expand_alias(const char * name) +{ + return NULL; /* uClibc does not support locale aliases. */ +} + +#endif +/**********************************************************************/ +#ifdef L__nl_msg_cat_cntr + +/* glibc-ism */ + +int _nl_msg_cat_cntr = 0; + +#endif +/**********************************************************************/ -- cgit v1.2.3