mirror of
git://git.gnupg.org/gnupg.git
synced 2025-02-07 17:33:02 +01:00
Updated to 0.12.1
This commit is contained in:
parent
8ed48ad2f8
commit
d30da9ebdc
@ -1,13 +1,4 @@
|
|||||||
2003-04-29 David Shaw <dshaw@jabberwocky.com>
|
2003-05-22 GNU <bug-gnu-gettext@gnu.org>
|
||||||
|
|
||||||
* gettextP.h: Add comment for HP/UX users. Local fix for GnuPG.
|
* Version 0.12.1 released.
|
||||||
|
|
||||||
2003-04-07 David Shaw <dshaw@jabberwocky.com>
|
|
||||||
|
|
||||||
* dcigettext.c (plural_lookup): Name conflict on some platforms
|
|
||||||
with "index". Local fix for GnuPG.
|
|
||||||
|
|
||||||
2001-09-13 GNU <bug-gnu-utils@gnu.org>
|
|
||||||
|
|
||||||
* Version 0.10.40 released.
|
|
||||||
|
|
||||||
|
326
intl/Makefile.in
326
intl/Makefile.in
@ -1,5 +1,5 @@
|
|||||||
# Makefile for directory with message catalog handling in GNU NLS Utilities.
|
# Makefile for directory with message catalog handling library of GNU gettext
|
||||||
# Copyright (C) 1995-1998, 2000, 2001 Free Software Foundation, Inc.
|
# Copyright (C) 1995-1998, 2000-2003 Free Software Foundation, Inc.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify it
|
# 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
|
# under the terms of the GNU Library General Public License as published
|
||||||
@ -24,7 +24,7 @@ SHELL = /bin/sh
|
|||||||
srcdir = @srcdir@
|
srcdir = @srcdir@
|
||||||
top_srcdir = @top_srcdir@
|
top_srcdir = @top_srcdir@
|
||||||
top_builddir = ..
|
top_builddir = ..
|
||||||
VPATH = @srcdir@
|
VPATH = $(srcdir)
|
||||||
|
|
||||||
prefix = @prefix@
|
prefix = @prefix@
|
||||||
exec_prefix = @exec_prefix@
|
exec_prefix = @exec_prefix@
|
||||||
@ -40,7 +40,7 @@ subdir = intl
|
|||||||
INSTALL = @INSTALL@
|
INSTALL = @INSTALL@
|
||||||
INSTALL_DATA = @INSTALL_DATA@
|
INSTALL_DATA = @INSTALL_DATA@
|
||||||
MKINSTALLDIRS = @MKINSTALLDIRS@
|
MKINSTALLDIRS = @MKINSTALLDIRS@
|
||||||
mkinstalldirs = $(SHELL) `case "$(MKINSTALLDIRS)" in /*) echo "$(MKINSTALLDIRS)" ;; *) echo "$(top_builddir)/$(MKINSTALLDIRS)" ;; esac`
|
mkinstalldirs = $(SHELL) $(MKINSTALLDIRS)
|
||||||
|
|
||||||
l = @INTL_LIBTOOL_SUFFIX_PREFIX@
|
l = @INTL_LIBTOOL_SUFFIX_PREFIX@
|
||||||
|
|
||||||
@ -52,57 +52,84 @@ YACC = @INTLBISON@ -y -d
|
|||||||
YFLAGS = --name-prefix=__gettext
|
YFLAGS = --name-prefix=__gettext
|
||||||
|
|
||||||
DEFS = -DLOCALEDIR=\"$(localedir)\" -DLOCALE_ALIAS_PATH=\"$(aliaspath)\" \
|
DEFS = -DLOCALEDIR=\"$(localedir)\" -DLOCALE_ALIAS_PATH=\"$(aliaspath)\" \
|
||||||
-DLIBDIR=\"$(libdir)\" @DEFS@
|
-DLIBDIR=\"$(libdir)\" -DIN_LIBINTL \
|
||||||
|
-DENABLE_RELOCATABLE=1 -DIN_LIBRARY -DINSTALLDIR=\"$(libdir)\" -DNO_XMALLOC \
|
||||||
|
-Dset_relocation_prefix=libintl_set_relocation_prefix \
|
||||||
|
-Drelocate=libintl_relocate \
|
||||||
|
-DDEPENDS_ON_LIBICONV=1 @DEFS@
|
||||||
CPPFLAGS = @CPPFLAGS@
|
CPPFLAGS = @CPPFLAGS@
|
||||||
CFLAGS = @CFLAGS@
|
CFLAGS = @CFLAGS@
|
||||||
LDFLAGS = @LDFLAGS@
|
LDFLAGS = @LDFLAGS@
|
||||||
|
LIBS = @LIBS@
|
||||||
|
|
||||||
COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS)
|
COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS)
|
||||||
|
|
||||||
HEADERS = $(COMHDRS) libgnuintl.h libgettext.h loadinfo.h
|
HEADERS = \
|
||||||
COMHDRS = gettext.h gettextP.h hash-string.h
|
gmo.h \
|
||||||
SOURCES = $(COMSRCS) intl-compat.c
|
gettextP.h \
|
||||||
COMSRCS = bindtextdom.c dcgettext.c dgettext.c gettext.c \
|
hash-string.h \
|
||||||
finddomain.c loadmsgcat.c localealias.c textdomain.c l10nflist.c \
|
loadinfo.h \
|
||||||
explodename.c dcigettext.c dcngettext.c dngettext.c ngettext.c plural.y \
|
plural-exp.h \
|
||||||
localcharset.c
|
eval-plural.h \
|
||||||
OBJECTS = @INTLOBJS@ bindtextdom.$lo dcgettext.$lo dgettext.$lo gettext.$lo \
|
localcharset.h \
|
||||||
finddomain.$lo loadmsgcat.$lo localealias.$lo textdomain.$lo l10nflist.$lo \
|
relocatable.h \
|
||||||
explodename.$lo dcigettext.$lo dcngettext.$lo dngettext.$lo ngettext.$lo \
|
os2compat.h \
|
||||||
plural.$lo localcharset.$lo
|
libgnuintl.h.in
|
||||||
GETTOBJS = intl-compat.$lo
|
SOURCES = \
|
||||||
|
bindtextdom.c \
|
||||||
|
dcgettext.c \
|
||||||
|
dgettext.c \
|
||||||
|
gettext.c \
|
||||||
|
finddomain.c \
|
||||||
|
loadmsgcat.c \
|
||||||
|
localealias.c \
|
||||||
|
textdomain.c \
|
||||||
|
l10nflist.c \
|
||||||
|
explodename.c \
|
||||||
|
dcigettext.c \
|
||||||
|
dcngettext.c \
|
||||||
|
dngettext.c \
|
||||||
|
ngettext.c \
|
||||||
|
plural.y \
|
||||||
|
plural-exp.c \
|
||||||
|
localcharset.c \
|
||||||
|
relocatable.c \
|
||||||
|
localename.c \
|
||||||
|
log.c \
|
||||||
|
osdep.c \
|
||||||
|
os2compat.c \
|
||||||
|
intl-compat.c
|
||||||
|
OBJECTS = \
|
||||||
|
bindtextdom.$lo \
|
||||||
|
dcgettext.$lo \
|
||||||
|
dgettext.$lo \
|
||||||
|
gettext.$lo \
|
||||||
|
finddomain.$lo \
|
||||||
|
loadmsgcat.$lo \
|
||||||
|
localealias.$lo \
|
||||||
|
textdomain.$lo \
|
||||||
|
l10nflist.$lo \
|
||||||
|
explodename.$lo \
|
||||||
|
dcigettext.$lo \
|
||||||
|
dcngettext.$lo \
|
||||||
|
dngettext.$lo \
|
||||||
|
ngettext.$lo \
|
||||||
|
plural.$lo \
|
||||||
|
plural-exp.$lo \
|
||||||
|
localcharset.$lo \
|
||||||
|
relocatable.$lo \
|
||||||
|
localename.$lo \
|
||||||
|
log.$lo \
|
||||||
|
osdep.$lo \
|
||||||
|
intl-compat.$lo
|
||||||
DISTFILES.common = Makefile.in \
|
DISTFILES.common = Makefile.in \
|
||||||
config.charset locale.alias ref-add.sin ref-del.sin $(HEADERS) $(SOURCES)
|
config.charset locale.alias ref-add.sin ref-del.sin $(HEADERS) $(SOURCES)
|
||||||
DISTFILES.generated = plural.c
|
DISTFILES.generated = plural.c
|
||||||
DISTFILES.normal = VERSION
|
DISTFILES.normal = VERSION
|
||||||
DISTFILES.gettext = COPYING.LIB-2 COPYING.LIB-2.1 libintl.glibc
|
DISTFILES.gettext = COPYING.LIB-2.0 COPYING.LIB-2.1 libintl.glibc \
|
||||||
DISTFILES.obsolete = xopen-msg.sed linux-msg.sed po2tbl.sed.in cat-compat.c
|
Makefile.vms libgnuintl.h.msvc-shared README.woe32 Makefile.msvc
|
||||||
|
DISTFILES.obsolete = xopen-msg.sed linux-msg.sed po2tbl.sed.in cat-compat.c \
|
||||||
# Libtool's library version information for libintl.
|
COPYING.LIB-2 gettext.h libgettext.h plural-eval.c libgnuintl.h
|
||||||
# Before making a gettext release, the gettext maintainer must change this
|
|
||||||
# according to the libtool documentation, section "Library interface versions".
|
|
||||||
# Maintainers of other packages that include the intl directory must *not*
|
|
||||||
# change these values.
|
|
||||||
LTV_CURRENT=1
|
|
||||||
LTV_REVISION=1
|
|
||||||
LTV_AGE=0
|
|
||||||
|
|
||||||
.SUFFIXES:
|
|
||||||
.SUFFIXES: .c .y .o .lo .sin .sed
|
|
||||||
.c.o:
|
|
||||||
$(COMPILE) $<
|
|
||||||
.c.lo:
|
|
||||||
$(LIBTOOL) --mode=compile $(COMPILE) $<
|
|
||||||
|
|
||||||
.y.c:
|
|
||||||
$(YACC) $(YFLAGS) --output $@ $<
|
|
||||||
rm -f $*.h
|
|
||||||
|
|
||||||
.sin.sed:
|
|
||||||
sed -e '/^#/d' -e 's/@''PACKAGE''@/@PACKAGE@/g' $< > t-$@
|
|
||||||
mv t-$@ $@
|
|
||||||
|
|
||||||
INCLUDES = -I.. -I. -I$(top_srcdir)/intl
|
|
||||||
|
|
||||||
all: all-@USE_INCLUDED_LIBINTL@
|
all: all-@USE_INCLUDED_LIBINTL@
|
||||||
all-yes: libintl.$la libintl.h charset.alias ref-add.sed ref-del.sed
|
all-yes: libintl.$la libintl.h charset.alias ref-add.sed ref-del.sed
|
||||||
@ -118,23 +145,96 @@ libintl.a libgnuintl.a: $(OBJECTS)
|
|||||||
libintl.la libgnuintl.la: $(OBJECTS)
|
libintl.la libgnuintl.la: $(OBJECTS)
|
||||||
$(LIBTOOL) --mode=link \
|
$(LIBTOOL) --mode=link \
|
||||||
$(CC) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) $(LDFLAGS) -o $@ \
|
$(CC) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) $(LDFLAGS) -o $@ \
|
||||||
$(OBJECTS) @LIBICONV@ \
|
$(OBJECTS) @LTLIBICONV@ $(LIBS) -lc \
|
||||||
-version-info $(LTV_CURRENT):$(LTV_REVISION):$(LTV_AGE) \
|
-version-info $(LTV_CURRENT):$(LTV_REVISION):$(LTV_AGE) \
|
||||||
-rpath $(libdir) \
|
-rpath $(libdir) \
|
||||||
-no-undefined
|
-no-undefined
|
||||||
|
|
||||||
libintl.h: libgnuintl.h
|
# Libtool's library version information for libintl.
|
||||||
cp $(srcdir)/libgnuintl.h libintl.h
|
# Before making a gettext release, the gettext maintainer must change this
|
||||||
|
# according to the libtool documentation, section "Library interface versions".
|
||||||
|
# Maintainers of other packages that include the intl directory must *not*
|
||||||
|
# change these values.
|
||||||
|
LTV_CURRENT=5
|
||||||
|
LTV_REVISION=0
|
||||||
|
LTV_AGE=3
|
||||||
|
|
||||||
charset.alias: config.charset
|
.SUFFIXES:
|
||||||
|
.SUFFIXES: .c .y .o .lo .sin .sed
|
||||||
|
|
||||||
|
.c.o:
|
||||||
|
$(COMPILE) $<
|
||||||
|
|
||||||
|
.y.c:
|
||||||
|
$(YACC) $(YFLAGS) --output $@ $<
|
||||||
|
rm -f $*.h
|
||||||
|
|
||||||
|
bindtextdom.lo: $(srcdir)/bindtextdom.c
|
||||||
|
$(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/bindtextdom.c
|
||||||
|
dcgettext.lo: $(srcdir)/dcgettext.c
|
||||||
|
$(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/dcgettext.c
|
||||||
|
dgettext.lo: $(srcdir)/dgettext.c
|
||||||
|
$(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/dgettext.c
|
||||||
|
gettext.lo: $(srcdir)/gettext.c
|
||||||
|
$(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/gettext.c
|
||||||
|
finddomain.lo: $(srcdir)/finddomain.c
|
||||||
|
$(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/finddomain.c
|
||||||
|
loadmsgcat.lo: $(srcdir)/loadmsgcat.c
|
||||||
|
$(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/loadmsgcat.c
|
||||||
|
localealias.lo: $(srcdir)/localealias.c
|
||||||
|
$(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/localealias.c
|
||||||
|
textdomain.lo: $(srcdir)/textdomain.c
|
||||||
|
$(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/textdomain.c
|
||||||
|
l10nflist.lo: $(srcdir)/l10nflist.c
|
||||||
|
$(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/l10nflist.c
|
||||||
|
explodename.lo: $(srcdir)/explodename.c
|
||||||
|
$(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/explodename.c
|
||||||
|
dcigettext.lo: $(srcdir)/dcigettext.c
|
||||||
|
$(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/dcigettext.c
|
||||||
|
dcngettext.lo: $(srcdir)/dcngettext.c
|
||||||
|
$(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/dcngettext.c
|
||||||
|
dngettext.lo: $(srcdir)/dngettext.c
|
||||||
|
$(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/dngettext.c
|
||||||
|
ngettext.lo: $(srcdir)/ngettext.c
|
||||||
|
$(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/ngettext.c
|
||||||
|
plural.lo: $(srcdir)/plural.c
|
||||||
|
$(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/plural.c
|
||||||
|
plural-exp.lo: $(srcdir)/plural-exp.c
|
||||||
|
$(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/plural-exp.c
|
||||||
|
localcharset.lo: $(srcdir)/localcharset.c
|
||||||
|
$(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/localcharset.c
|
||||||
|
relocatable.lo: $(srcdir)/relocatable.c
|
||||||
|
$(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/relocatable.c
|
||||||
|
localename.lo: $(srcdir)/localename.c
|
||||||
|
$(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/localename.c
|
||||||
|
log.lo: $(srcdir)/log.c
|
||||||
|
$(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/log.c
|
||||||
|
osdep.lo: $(srcdir)/osdep.c
|
||||||
|
$(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/osdep.c
|
||||||
|
intl-compat.lo: $(srcdir)/intl-compat.c
|
||||||
|
$(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/intl-compat.c
|
||||||
|
|
||||||
|
ref-add.sed: $(srcdir)/ref-add.sin
|
||||||
|
sed -e '/^#/d' -e 's/@''PACKAGE''@/@PACKAGE@/g' $(srcdir)/ref-add.sin > t-ref-add.sed
|
||||||
|
mv t-ref-add.sed ref-add.sed
|
||||||
|
ref-del.sed: $(srcdir)/ref-del.sin
|
||||||
|
sed -e '/^#/d' -e 's/@''PACKAGE''@/@PACKAGE@/g' $(srcdir)/ref-del.sin > t-ref-del.sed
|
||||||
|
mv t-ref-del.sed ref-del.sed
|
||||||
|
|
||||||
|
INCLUDES = -I. -I$(srcdir) -I..
|
||||||
|
|
||||||
|
libgnuintl.h: $(srcdir)/libgnuintl.h.in
|
||||||
|
cp $(srcdir)/libgnuintl.h.in libgnuintl.h
|
||||||
|
|
||||||
|
libintl.h: libgnuintl.h
|
||||||
|
cp libgnuintl.h libintl.h
|
||||||
|
|
||||||
|
charset.alias: $(srcdir)/config.charset
|
||||||
$(SHELL) $(srcdir)/config.charset '@host@' > t-$@
|
$(SHELL) $(srcdir)/config.charset '@host@' > t-$@
|
||||||
mv t-$@ $@
|
mv t-$@ $@
|
||||||
|
|
||||||
check: all
|
check: all
|
||||||
|
|
||||||
# This installation goal is only used in GNU gettext. Packages which
|
|
||||||
# only use the library should use install instead.
|
|
||||||
|
|
||||||
# We must not install the libintl.h/libintl.a files if we are on a
|
# We must not install the libintl.h/libintl.a files if we are on a
|
||||||
# system which has the GNU gettext() function in its C library or in a
|
# system which has the GNU gettext() function in its C library or in a
|
||||||
# separate library.
|
# separate library.
|
||||||
@ -142,17 +242,35 @@ check: all
|
|||||||
# package, you have to use `configure --with-included-gettext'.
|
# package, you have to use `configure --with-included-gettext'.
|
||||||
install: install-exec install-data
|
install: install-exec install-data
|
||||||
install-exec: all
|
install-exec: all
|
||||||
if test "$(PACKAGE)" = "gettext" \
|
if { test "$(PACKAGE)" = "gettext-runtime" || test "$(PACKAGE)" = "gettext-tools"; } \
|
||||||
&& test '@INTLOBJS@' = '$(GETTOBJS)'; then \
|
&& test '@USE_INCLUDED_LIBINTL@' = yes; then \
|
||||||
$(mkinstalldirs) $(DESTDIR)$(libdir) $(DESTDIR)$(includedir); \
|
$(mkinstalldirs) $(DESTDIR)$(libdir) $(DESTDIR)$(includedir); \
|
||||||
$(INSTALL_DATA) libintl.h $(DESTDIR)$(includedir)/libintl.h; \
|
$(INSTALL_DATA) libintl.h $(DESTDIR)$(includedir)/libintl.h; \
|
||||||
$(LIBTOOL) --mode=install \
|
$(LIBTOOL) --mode=install \
|
||||||
$(INSTALL_DATA) libintl.$la $(DESTDIR)$(libdir)/libintl.$la; \
|
$(INSTALL_DATA) libintl.$la $(DESTDIR)$(libdir)/libintl.$la; \
|
||||||
|
if test "@RELOCATABLE@" = yes; then \
|
||||||
|
dependencies=`sed -n -e 's,^dependency_libs=\(.*\),\1,p' < $(DESTDIR)$(libdir)/libintl.la | sed -e "s,^',," -e "s,'\$$,,"`; \
|
||||||
|
if test -n "$dependencies"; then \
|
||||||
|
rm -f $(DESTDIR)$(libdir)/libintl.la; \
|
||||||
|
fi; \
|
||||||
|
fi; \
|
||||||
|
else \
|
||||||
|
: ; \
|
||||||
|
fi
|
||||||
|
if test "$(PACKAGE)" = "gettext-tools" \
|
||||||
|
&& test '@USE_INCLUDED_LIBINTL@' = no; then \
|
||||||
|
$(mkinstalldirs) $(DESTDIR)$(libdir); \
|
||||||
|
$(LIBTOOL) --mode=install \
|
||||||
|
$(INSTALL_DATA) libgnuintl.$la $(DESTDIR)$(libdir)/libgnuintl.$la; \
|
||||||
|
rm -f $(DESTDIR)$(libdir)/preloadable_libintl.so; \
|
||||||
|
$(INSTALL_DATA) $(DESTDIR)$(libdir)/libgnuintl.so $(DESTDIR)$(libdir)/preloadable_libintl.so; \
|
||||||
|
$(LIBTOOL) --mode=uninstall \
|
||||||
|
rm -f $(DESTDIR)$(libdir)/libgnuintl.$la; \
|
||||||
else \
|
else \
|
||||||
: ; \
|
: ; \
|
||||||
fi
|
fi
|
||||||
if test '@USE_INCLUDED_LIBINTL@' = yes; then \
|
if test '@USE_INCLUDED_LIBINTL@' = yes; then \
|
||||||
$(mkinstalldirs) $(DESTDIR)$(libdir); \
|
test @GLIBC21@ != no || $(mkinstalldirs) $(DESTDIR)$(libdir); \
|
||||||
temp=$(DESTDIR)$(libdir)/t-charset.alias; \
|
temp=$(DESTDIR)$(libdir)/t-charset.alias; \
|
||||||
dest=$(DESTDIR)$(libdir)/charset.alias; \
|
dest=$(DESTDIR)$(libdir)/charset.alias; \
|
||||||
if test -f $(DESTDIR)$(libdir)/charset.alias; then \
|
if test -f $(DESTDIR)$(libdir)/charset.alias; then \
|
||||||
@ -181,11 +299,11 @@ install-exec: all
|
|||||||
: ; \
|
: ; \
|
||||||
fi
|
fi
|
||||||
install-data: all
|
install-data: all
|
||||||
if test "$(PACKAGE)" = "gettext"; then \
|
if test "$(PACKAGE)" = "gettext-tools"; then \
|
||||||
$(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \
|
$(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \
|
||||||
$(INSTALL_DATA) VERSION $(DESTDIR)$(gettextsrcdir)/VERSION; \
|
$(INSTALL_DATA) VERSION $(DESTDIR)$(gettextsrcdir)/VERSION; \
|
||||||
$(INSTALL_DATA) ChangeLog.inst $(DESTDIR)$(gettextsrcdir)/ChangeLog; \
|
$(INSTALL_DATA) ChangeLog.inst $(DESTDIR)$(gettextsrcdir)/ChangeLog; \
|
||||||
dists="COPYING.LIB-2 COPYING.LIB-2.1 $(DISTFILES.common)"; \
|
dists="COPYING.LIB-2.0 COPYING.LIB-2.1 $(DISTFILES.common)"; \
|
||||||
for file in $$dists; do \
|
for file in $$dists; do \
|
||||||
$(INSTALL_DATA) $(srcdir)/$$file \
|
$(INSTALL_DATA) $(srcdir)/$$file \
|
||||||
$(DESTDIR)$(gettextsrcdir)/$$file; \
|
$(DESTDIR)$(gettextsrcdir)/$$file; \
|
||||||
@ -205,18 +323,51 @@ install-data: all
|
|||||||
: ; \
|
: ; \
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
install-strip: install
|
||||||
|
|
||||||
|
installdirs:
|
||||||
|
if { test "$(PACKAGE)" = "gettext-runtime" || test "$(PACKAGE)" = "gettext-tools"; } \
|
||||||
|
&& test '@USE_INCLUDED_LIBINTL@' = yes; then \
|
||||||
|
$(mkinstalldirs) $(DESTDIR)$(libdir) $(DESTDIR)$(includedir); \
|
||||||
|
else \
|
||||||
|
: ; \
|
||||||
|
fi
|
||||||
|
if test "$(PACKAGE)" = "gettext-tools" \
|
||||||
|
&& test '@USE_INCLUDED_LIBINTL@' = no; then \
|
||||||
|
$(mkinstalldirs) $(DESTDIR)$(libdir); \
|
||||||
|
else \
|
||||||
|
: ; \
|
||||||
|
fi
|
||||||
|
if test '@USE_INCLUDED_LIBINTL@' = yes; then \
|
||||||
|
test @GLIBC21@ != no || $(mkinstalldirs) $(DESTDIR)$(libdir); \
|
||||||
|
$(mkinstalldirs) $(DESTDIR)$(localedir); \
|
||||||
|
else \
|
||||||
|
: ; \
|
||||||
|
fi
|
||||||
|
if test "$(PACKAGE)" = "gettext-tools"; then \
|
||||||
|
$(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \
|
||||||
|
else \
|
||||||
|
: ; \
|
||||||
|
fi
|
||||||
|
|
||||||
# Define this as empty until I found a useful application.
|
# Define this as empty until I found a useful application.
|
||||||
installcheck:
|
installcheck:
|
||||||
|
|
||||||
uninstall:
|
uninstall:
|
||||||
if test "$(PACKAGE)" = "gettext" \
|
if { test "$(PACKAGE)" = "gettext-runtime" || test "$(PACKAGE)" = "gettext-tools"; } \
|
||||||
&& test '@INTLOBJS@' = '$(GETTOBJS)'; then \
|
&& test '@USE_INCLUDED_LIBINTL@' = yes; then \
|
||||||
rm -f $(DESTDIR)$(includedir)/libintl.h; \
|
rm -f $(DESTDIR)$(includedir)/libintl.h; \
|
||||||
$(LIBTOOL) --mode=uninstall \
|
$(LIBTOOL) --mode=uninstall \
|
||||||
rm -f $(DESTDIR)$(libdir)/libintl.$la; \
|
rm -f $(DESTDIR)$(libdir)/libintl.$la; \
|
||||||
else \
|
else \
|
||||||
: ; \
|
: ; \
|
||||||
fi
|
fi
|
||||||
|
if test "$(PACKAGE)" = "gettext-tools" \
|
||||||
|
&& test '@USE_INCLUDED_LIBINTL@' = no; then \
|
||||||
|
rm -f $(DESTDIR)$(libdir)/preloadable_libintl.so; \
|
||||||
|
else \
|
||||||
|
: ; \
|
||||||
|
fi
|
||||||
if test '@USE_INCLUDED_LIBINTL@' = yes; then \
|
if test '@USE_INCLUDED_LIBINTL@' = yes; then \
|
||||||
if test -f $(DESTDIR)$(libdir)/charset.alias; then \
|
if test -f $(DESTDIR)$(libdir)/charset.alias; then \
|
||||||
temp=$(DESTDIR)$(libdir)/t-charset.alias; \
|
temp=$(DESTDIR)$(libdir)/t-charset.alias; \
|
||||||
@ -243,25 +394,35 @@ uninstall:
|
|||||||
else \
|
else \
|
||||||
: ; \
|
: ; \
|
||||||
fi
|
fi
|
||||||
if test "$(PACKAGE)" = "gettext"; then \
|
if test "$(PACKAGE)" = "gettext-tools"; then \
|
||||||
for file in VERSION ChangeLog COPYING.LIB-2 COPYING.LIB-2.1 $(DISTFILES.common) $(DISTFILES.generated); do \
|
for file in VERSION ChangeLog COPYING.LIB-2.0 COPYING.LIB-2.1 $(DISTFILES.common) $(DISTFILES.generated); do \
|
||||||
rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
|
rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
|
||||||
done; \
|
done; \
|
||||||
else \
|
else \
|
||||||
: ; \
|
: ; \
|
||||||
fi
|
fi
|
||||||
|
|
||||||
info dvi:
|
info dvi ps pdf html:
|
||||||
|
|
||||||
$(OBJECTS): ../config.h libgnuintl.h
|
$(OBJECTS): ../config.h libgnuintl.h
|
||||||
bindtextdom.$lo finddomain.$lo loadmsgcat.$lo: gettextP.h gettext.h loadinfo.h
|
bindtextdom.$lo dcgettext.$lo dcigettext.$lo dcngettext.$lo dgettext.$lo dngettext.$lo finddomain.$lo gettext.$lo intl-compat.$lo loadmsgcat.$lo localealias.$lo ngettext.$lo textdomain.$lo: $(srcdir)/gettextP.h $(srcdir)/gmo.h $(srcdir)/loadinfo.h
|
||||||
dcgettext.$lo: gettextP.h gettext.h hash-string.h loadinfo.h
|
dcigettext.$lo loadmsgcat.$lo: $(srcdir)/hash-string.h
|
||||||
|
explodename.$lo l10nflist.$lo: $(srcdir)/loadinfo.h
|
||||||
|
dcigettext.$lo loadmsgcat.$lo plural.$lo plural-exp.$lo: $(srcdir)/plural-exp.h
|
||||||
|
dcigettext.$lo: $(srcdir)/eval-plural.h
|
||||||
|
localcharset.$lo: $(srcdir)/localcharset.h
|
||||||
|
localealias.$lo localcharset.$lo relocatable.$lo: $(srcdir)/relocatable.h
|
||||||
|
|
||||||
tags: TAGS
|
tags: TAGS
|
||||||
|
|
||||||
TAGS: $(HEADERS) $(SOURCES)
|
TAGS: $(HEADERS) $(SOURCES)
|
||||||
here=`pwd`; cd $(srcdir) && etags -o $$here/TAGS $(HEADERS) $(SOURCES)
|
here=`pwd`; cd $(srcdir) && etags -o $$here/TAGS $(HEADERS) $(SOURCES)
|
||||||
|
|
||||||
|
ctags: CTAGS
|
||||||
|
|
||||||
|
CTAGS: $(HEADERS) $(SOURCES)
|
||||||
|
here=`pwd`; cd $(srcdir) && ctags -o $$here/CTAGS $(HEADERS) $(SOURCES)
|
||||||
|
|
||||||
id: ID
|
id: ID
|
||||||
|
|
||||||
ID: $(HEADERS) $(SOURCES)
|
ID: $(HEADERS) $(SOURCES)
|
||||||
@ -269,15 +430,15 @@ ID: $(HEADERS) $(SOURCES)
|
|||||||
|
|
||||||
|
|
||||||
mostlyclean:
|
mostlyclean:
|
||||||
rm -f *.a *.la *.o *.lo core core.*
|
rm -f *.a *.la *.o *.obj *.lo core core.*
|
||||||
rm -f libintl.h charset.alias ref-add.sed ref-del.sed
|
rm -f libgnuintl.h libintl.h charset.alias ref-add.sed ref-del.sed
|
||||||
rm -f -r .libs _libs
|
rm -f -r .libs _libs
|
||||||
|
|
||||||
clean: mostlyclean
|
clean: mostlyclean
|
||||||
|
|
||||||
distclean: clean
|
distclean: clean
|
||||||
rm -f Makefile ID TAGS
|
rm -f Makefile ID TAGS
|
||||||
if test "$(PACKAGE)" = gettext; then \
|
if test "$(PACKAGE)" = "gettext-runtime" || test "$(PACKAGE)" = "gettext-tools"; then \
|
||||||
rm -f ChangeLog.inst $(DISTFILES.normal); \
|
rm -f ChangeLog.inst $(DISTFILES.normal); \
|
||||||
else \
|
else \
|
||||||
: ; \
|
: ; \
|
||||||
@ -292,21 +453,26 @@ maintainer-clean: distclean
|
|||||||
# other files which should not be distributed in other packages.
|
# other files which should not be distributed in other packages.
|
||||||
distdir = ../$(PACKAGE)-$(VERSION)/$(subdir)
|
distdir = ../$(PACKAGE)-$(VERSION)/$(subdir)
|
||||||
dist distdir: Makefile
|
dist distdir: Makefile
|
||||||
if test "$(PACKAGE)" = gettext; then \
|
if test "$(PACKAGE)" = "gettext-tools"; then \
|
||||||
additional="$(DISTFILES.gettext)"; \
|
: ; \
|
||||||
else \
|
else \
|
||||||
additional="$(DISTFILES.normal)"; \
|
if test "$(PACKAGE)" = "gettext-runtime"; then \
|
||||||
fi; \
|
additional="$(DISTFILES.gettext)"; \
|
||||||
$(MAKE) $(DISTFILES.common) $(DISTFILES.generated) $$additional; \
|
else \
|
||||||
for file in ChangeLog $(DISTFILES.common) $(DISTFILES.generated) $$additional; do \
|
additional="$(DISTFILES.normal)"; \
|
||||||
if test -f $$file; then dir=.; else dir=$(srcdir); fi; \
|
fi; \
|
||||||
ln $$dir/$$file $(distdir) 2> /dev/null \
|
$(MAKE) $(DISTFILES.common) $(DISTFILES.generated) $$additional; \
|
||||||
|| cp -p $$dir/$$file $(distdir); \
|
for file in ChangeLog $(DISTFILES.common) $(DISTFILES.generated) $$additional; do \
|
||||||
done
|
if test -f $$file; then dir=.; else dir=$(srcdir); fi; \
|
||||||
|
cp -p $$dir/$$file $(distdir); \
|
||||||
|
done; \
|
||||||
|
fi
|
||||||
|
|
||||||
Makefile: Makefile.in ../config.status
|
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||||
cd .. \
|
cd $(top_builddir) && $(SHELL) ./config.status
|
||||||
&& CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
|
# This would be more efficient, but doesn't work any more with autoconf-2.57,
|
||||||
|
# when AC_CONFIG_FILES([intl/Makefile:somedir/Makefile.in]) is used.
|
||||||
|
# cd $(top_builddir) && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
|
||||||
|
|
||||||
# Tell versions [3.59,3.63) of GNU make not to export all variables.
|
# Tell versions [3.59,3.63) of GNU make not to export all variables.
|
||||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||||
|
@ -1 +1 @@
|
|||||||
GNU gettext library from gettext-0.10.40
|
GNU gettext library from gettext-0.12.1
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Implementation of the bindtextdomain(3) function
|
/* Implementation of the bindtextdomain(3) function
|
||||||
Copyright (C) 1995-1998, 2000, 2001 Free Software Foundation, Inc.
|
Copyright (C) 1995-1998, 2000, 2001, 2002 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it
|
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
|
under the terms of the GNU Library General Public License as published
|
||||||
@ -45,8 +45,8 @@
|
|||||||
names than the internal variables in GNU libc, otherwise programs
|
names than the internal variables in GNU libc, otherwise programs
|
||||||
using libintl.a cannot be linked statically. */
|
using libintl.a cannot be linked statically. */
|
||||||
#if !defined _LIBC
|
#if !defined _LIBC
|
||||||
# define _nl_default_dirname _nl_default_dirname__
|
# define _nl_default_dirname libintl_nl_default_dirname
|
||||||
# define _nl_domain_bindings _nl_domain_bindings__
|
# define _nl_domain_bindings libintl_nl_domain_bindings
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Some compilers, like SunOS4 cc, don't have offsetof in <stddef.h>. */
|
/* Some compilers, like SunOS4 cc, don't have offsetof in <stddef.h>. */
|
||||||
@ -58,12 +58,17 @@
|
|||||||
|
|
||||||
/* Contains the default location of the message catalogs. */
|
/* Contains the default location of the message catalogs. */
|
||||||
extern const char _nl_default_dirname[];
|
extern const char _nl_default_dirname[];
|
||||||
|
#ifdef _LIBC
|
||||||
|
extern const char _nl_default_dirname_internal[] attribute_hidden;
|
||||||
|
#else
|
||||||
|
# define INTUSE(name) name
|
||||||
|
#endif
|
||||||
|
|
||||||
/* List with bindings of specific domains. */
|
/* List with bindings of specific domains. */
|
||||||
extern struct binding *_nl_domain_bindings;
|
extern struct binding *_nl_domain_bindings;
|
||||||
|
|
||||||
/* Lock variable to protect the global data in the gettext implementation. */
|
/* Lock variable to protect the global data in the gettext implementation. */
|
||||||
__libc_rwlock_define (extern, _nl_state_lock)
|
__libc_rwlock_define (extern, _nl_state_lock attribute_hidden)
|
||||||
|
|
||||||
|
|
||||||
/* Names for the libintl functions are a problem. They must not clash
|
/* Names for the libintl functions are a problem. They must not clash
|
||||||
@ -77,15 +82,15 @@ __libc_rwlock_define (extern, _nl_state_lock)
|
|||||||
# define strdup(str) __strdup (str)
|
# define strdup(str) __strdup (str)
|
||||||
# endif
|
# endif
|
||||||
#else
|
#else
|
||||||
# define BINDTEXTDOMAIN bindtextdomain__
|
# define BINDTEXTDOMAIN libintl_bindtextdomain
|
||||||
# define BIND_TEXTDOMAIN_CODESET bind_textdomain_codeset__
|
# define BIND_TEXTDOMAIN_CODESET libintl_bind_textdomain_codeset
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Prototypes for local functions. */
|
/* Prototypes for local functions. */
|
||||||
static void set_binding_values PARAMS ((const char *domainname,
|
static void set_binding_values PARAMS ((const char *domainname,
|
||||||
const char **dirnamep,
|
const char **dirnamep,
|
||||||
const char **codesetp));
|
const char **codesetp));
|
||||||
|
|
||||||
/* Specifies the directory name *DIRNAMEP and the output codeset *CODESETP
|
/* Specifies the directory name *DIRNAMEP and the output codeset *CODESETP
|
||||||
to be used for the DOMAINNAME message catalog.
|
to be used for the DOMAINNAME message catalog.
|
||||||
If *DIRNAMEP or *CODESETP is NULL, the corresponding attribute is not
|
If *DIRNAMEP or *CODESETP is NULL, the corresponding attribute is not
|
||||||
@ -146,8 +151,8 @@ set_binding_values (domainname, dirnamep, codesetp)
|
|||||||
char *result = binding->dirname;
|
char *result = binding->dirname;
|
||||||
if (strcmp (dirname, result) != 0)
|
if (strcmp (dirname, result) != 0)
|
||||||
{
|
{
|
||||||
if (strcmp (dirname, _nl_default_dirname) == 0)
|
if (strcmp (dirname, INTUSE(_nl_default_dirname)) == 0)
|
||||||
result = (char *) _nl_default_dirname;
|
result = (char *) INTUSE(_nl_default_dirname);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
#if defined _LIBC || defined HAVE_STRDUP
|
#if defined _LIBC || defined HAVE_STRDUP
|
||||||
@ -162,7 +167,7 @@ set_binding_values (domainname, dirnamep, codesetp)
|
|||||||
|
|
||||||
if (__builtin_expect (result != NULL, 1))
|
if (__builtin_expect (result != NULL, 1))
|
||||||
{
|
{
|
||||||
if (binding->dirname != _nl_default_dirname)
|
if (binding->dirname != INTUSE(_nl_default_dirname))
|
||||||
free (binding->dirname);
|
free (binding->dirname);
|
||||||
|
|
||||||
binding->dirname = result;
|
binding->dirname = result;
|
||||||
@ -216,7 +221,7 @@ set_binding_values (domainname, dirnamep, codesetp)
|
|||||||
{
|
{
|
||||||
/* Simply return the default values. */
|
/* Simply return the default values. */
|
||||||
if (dirnamep)
|
if (dirnamep)
|
||||||
*dirnamep = _nl_default_dirname;
|
*dirnamep = INTUSE(_nl_default_dirname);
|
||||||
if (codesetp)
|
if (codesetp)
|
||||||
*codesetp = NULL;
|
*codesetp = NULL;
|
||||||
}
|
}
|
||||||
@ -238,11 +243,11 @@ set_binding_values (domainname, dirnamep, codesetp)
|
|||||||
|
|
||||||
if (dirname == NULL)
|
if (dirname == NULL)
|
||||||
/* The default value. */
|
/* The default value. */
|
||||||
dirname = _nl_default_dirname;
|
dirname = INTUSE(_nl_default_dirname);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (strcmp (dirname, _nl_default_dirname) == 0)
|
if (strcmp (dirname, INTUSE(_nl_default_dirname)) == 0)
|
||||||
dirname = _nl_default_dirname;
|
dirname = INTUSE(_nl_default_dirname);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
char *result;
|
char *result;
|
||||||
@ -265,7 +270,7 @@ set_binding_values (domainname, dirnamep, codesetp)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
/* The default value. */
|
/* The default value. */
|
||||||
new_binding->dirname = (char *) _nl_default_dirname;
|
new_binding->dirname = (char *) INTUSE(_nl_default_dirname);
|
||||||
|
|
||||||
new_binding->codeset_cntr = 0;
|
new_binding->codeset_cntr = 0;
|
||||||
|
|
||||||
@ -321,7 +326,7 @@ set_binding_values (domainname, dirnamep, codesetp)
|
|||||||
if (0)
|
if (0)
|
||||||
{
|
{
|
||||||
failed_codeset:
|
failed_codeset:
|
||||||
if (new_binding->dirname != _nl_default_dirname)
|
if (new_binding->dirname != INTUSE(_nl_default_dirname))
|
||||||
free (new_binding->dirname);
|
free (new_binding->dirname);
|
||||||
failed_dirname:
|
failed_dirname:
|
||||||
free (new_binding);
|
free (new_binding);
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#! /bin/sh
|
#! /bin/sh
|
||||||
# Output a system dependent table of character encoding aliases.
|
# Output a system dependent table of character encoding aliases.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2000-2001 Free Software Foundation, Inc.
|
# Copyright (C) 2000-2003 Free Software Foundation, Inc.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify it
|
# 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
|
# under the terms of the GNU Library General Public License as published
|
||||||
@ -34,7 +34,7 @@
|
|||||||
# ASCII, ANSI_X3.4-1968 glibc solaris freebsd
|
# ASCII, ANSI_X3.4-1968 glibc solaris freebsd
|
||||||
# ISO-8859-1 glibc aix hpux irix osf solaris freebsd yes
|
# ISO-8859-1 glibc aix hpux irix osf solaris freebsd yes
|
||||||
# ISO-8859-2 glibc aix hpux irix osf solaris freebsd yes
|
# ISO-8859-2 glibc aix hpux irix osf solaris freebsd yes
|
||||||
# ISO-8859-3 glibc yes
|
# ISO-8859-3 glibc solaris yes
|
||||||
# ISO-8859-4 osf solaris freebsd yes
|
# ISO-8859-4 osf solaris freebsd yes
|
||||||
# ISO-8859-5 glibc aix hpux irix osf solaris freebsd yes
|
# ISO-8859-5 glibc aix hpux irix osf solaris freebsd yes
|
||||||
# ISO-8859-6 glibc aix hpux solaris yes
|
# ISO-8859-6 glibc aix hpux solaris yes
|
||||||
@ -42,9 +42,11 @@
|
|||||||
# ISO-8859-8 glibc aix hpux osf solaris yes
|
# ISO-8859-8 glibc aix hpux osf solaris yes
|
||||||
# ISO-8859-9 glibc aix hpux irix osf solaris yes
|
# ISO-8859-9 glibc aix hpux irix osf solaris yes
|
||||||
# ISO-8859-13 glibc
|
# ISO-8859-13 glibc
|
||||||
|
# ISO-8859-14 glibc
|
||||||
# ISO-8859-15 glibc aix osf solaris freebsd
|
# ISO-8859-15 glibc aix osf solaris freebsd
|
||||||
# KOI8-R glibc solaris freebsd yes
|
# KOI8-R glibc solaris freebsd yes
|
||||||
# KOI8-U glibc freebsd yes
|
# KOI8-U glibc freebsd yes
|
||||||
|
# KOI8-T glibc
|
||||||
# CP437 dos
|
# CP437 dos
|
||||||
# CP775 dos
|
# CP775 dos
|
||||||
# CP850 aix osf dos
|
# CP850 aix osf dos
|
||||||
@ -58,35 +60,38 @@
|
|||||||
# CP865 dos
|
# CP865 dos
|
||||||
# CP866 freebsd dos
|
# CP866 freebsd dos
|
||||||
# CP869 dos
|
# CP869 dos
|
||||||
# CP874 win32 dos
|
# CP874 woe32 dos
|
||||||
# CP922 aix
|
# CP922 aix
|
||||||
# CP932 aix win32 dos
|
# CP932 aix woe32 dos
|
||||||
# CP943 aix
|
# CP943 aix
|
||||||
# CP949 osf win32 dos
|
# CP949 osf woe32 dos
|
||||||
# CP950 win32 dos
|
# CP950 woe32 dos
|
||||||
# CP1046 aix
|
# CP1046 aix
|
||||||
# CP1124 aix
|
# CP1124 aix
|
||||||
|
# CP1125 dos
|
||||||
# CP1129 aix
|
# CP1129 aix
|
||||||
# CP1250 win32
|
# CP1250 woe32
|
||||||
# CP1251 glibc win32
|
# CP1251 glibc solaris woe32
|
||||||
# CP1252 aix win32
|
# CP1252 aix woe32
|
||||||
# CP1253 win32
|
# CP1253 woe32
|
||||||
# CP1254 win32
|
# CP1254 woe32
|
||||||
# CP1255 win32
|
# CP1255 glibc woe32
|
||||||
# CP1256 win32
|
# CP1256 woe32
|
||||||
# CP1257 win32
|
# CP1257 woe32
|
||||||
# GB2312 glibc aix hpux irix solaris freebsd yes
|
# GB2312 glibc aix hpux irix solaris freebsd yes
|
||||||
# EUC-JP glibc aix hpux irix osf solaris freebsd yes
|
# EUC-JP glibc aix hpux irix osf solaris freebsd yes
|
||||||
# EUC-KR glibc aix hpux irix osf solaris freebsd yes
|
# EUC-KR glibc aix hpux irix osf solaris freebsd yes
|
||||||
# EUC-TW glibc aix hpux irix osf solaris
|
# EUC-TW glibc aix hpux irix osf solaris
|
||||||
# BIG5 glibc aix hpux osf solaris freebsd yes
|
# BIG5 glibc aix hpux osf solaris freebsd yes
|
||||||
# BIG5-HKSCS glibc
|
# BIG5-HKSCS glibc solaris
|
||||||
# GBK aix osf win32 dos
|
# GBK glibc aix osf solaris woe32 dos
|
||||||
# GB18030 glibc
|
# GB18030 glibc solaris
|
||||||
# SHIFT_JIS hpux osf solaris freebsd yes
|
# SHIFT_JIS hpux osf solaris freebsd yes
|
||||||
# JOHAB glibc win32
|
# JOHAB glibc solaris woe32
|
||||||
# TIS-620 glibc aix hpux osf solaris
|
# TIS-620 glibc aix hpux osf solaris
|
||||||
# VISCII glibc yes
|
# VISCII glibc yes
|
||||||
|
# TCVN5712-1 glibc
|
||||||
|
# GEORGIAN-PS glibc
|
||||||
# HP-ROMAN8 hpux
|
# HP-ROMAN8 hpux
|
||||||
# HP-ARABIC8 hpux
|
# HP-ARABIC8 hpux
|
||||||
# HP-GREEK8 hpux
|
# HP-GREEK8 hpux
|
||||||
@ -217,6 +222,7 @@ case "$os" in
|
|||||||
echo "646 ASCII"
|
echo "646 ASCII"
|
||||||
echo "ISO8859-1 ISO-8859-1"
|
echo "ISO8859-1 ISO-8859-1"
|
||||||
echo "ISO8859-2 ISO-8859-2"
|
echo "ISO8859-2 ISO-8859-2"
|
||||||
|
echo "ISO8859-3 ISO-8859-3"
|
||||||
echo "ISO8859-4 ISO-8859-4"
|
echo "ISO8859-4 ISO-8859-4"
|
||||||
echo "ISO8859-5 ISO-8859-5"
|
echo "ISO8859-5 ISO-8859-5"
|
||||||
echo "ISO8859-6 ISO-8859-6"
|
echo "ISO8859-6 ISO-8859-6"
|
||||||
@ -225,20 +231,27 @@ case "$os" in
|
|||||||
echo "ISO8859-9 ISO-8859-9"
|
echo "ISO8859-9 ISO-8859-9"
|
||||||
echo "ISO8859-15 ISO-8859-15"
|
echo "ISO8859-15 ISO-8859-15"
|
||||||
echo "koi8-r KOI8-R"
|
echo "koi8-r KOI8-R"
|
||||||
|
echo "ansi-1251 CP1251"
|
||||||
echo "BIG5 BIG5"
|
echo "BIG5 BIG5"
|
||||||
|
echo "Big5-HKSCS BIG5-HKSCS"
|
||||||
echo "gb2312 GB2312"
|
echo "gb2312 GB2312"
|
||||||
|
echo "GBK GBK"
|
||||||
|
echo "GB18030 GB18030"
|
||||||
echo "cns11643 EUC-TW"
|
echo "cns11643 EUC-TW"
|
||||||
echo "5601 EUC-KR"
|
echo "5601 EUC-KR"
|
||||||
|
echo "ko_KR.johap92 JOHAB"
|
||||||
echo "eucJP EUC-JP"
|
echo "eucJP EUC-JP"
|
||||||
echo "PCK SHIFT_JIS"
|
echo "PCK SHIFT_JIS"
|
||||||
echo "TIS620.2533 TIS-620"
|
echo "TIS620.2533 TIS-620"
|
||||||
#echo "sun_eu_greek ?" # what is this?
|
#echo "sun_eu_greek ?" # what is this?
|
||||||
echo "UTF-8 UTF-8"
|
echo "UTF-8 UTF-8"
|
||||||
;;
|
;;
|
||||||
freebsd*)
|
freebsd* | os2*)
|
||||||
# FreeBSD 4.2 doesn't have nl_langinfo(CODESET); therefore
|
# FreeBSD 4.2 doesn't have nl_langinfo(CODESET); therefore
|
||||||
# localcharset.c falls back to using the full locale name
|
# localcharset.c falls back to using the full locale name
|
||||||
# from the environment variables.
|
# from the environment variables.
|
||||||
|
# Likewise for OS/2. OS/2 has XFree86 just like FreeBSD. Just
|
||||||
|
# reuse FreeBSD's locale data for OS/2.
|
||||||
echo "C ASCII"
|
echo "C ASCII"
|
||||||
echo "US-ASCII ASCII"
|
echo "US-ASCII ASCII"
|
||||||
for l in la_LN lt_LN; do
|
for l in la_LN lt_LN; do
|
||||||
@ -270,6 +283,20 @@ case "$os" in
|
|||||||
echo "ja_JP.Shift_JIS SHIFT_JIS"
|
echo "ja_JP.Shift_JIS SHIFT_JIS"
|
||||||
echo "ko_KR.EUC EUC-KR"
|
echo "ko_KR.EUC EUC-KR"
|
||||||
;;
|
;;
|
||||||
|
netbsd*)
|
||||||
|
echo "646 ASCII"
|
||||||
|
echo "ISO8859-1 ISO-8859-1"
|
||||||
|
echo "ISO8859-2 ISO-8859-2"
|
||||||
|
echo "ISO8859-4 ISO-8859-4"
|
||||||
|
echo "ISO8859-5 ISO-8859-5"
|
||||||
|
echo "ISO8859-15 ISO-8859-15"
|
||||||
|
echo "eucCN GB2312"
|
||||||
|
echo "eucJP EUC-JP"
|
||||||
|
echo "eucKR EUC-KR"
|
||||||
|
echo "eucTW EUC-TW"
|
||||||
|
echo "BIG5 BIG5"
|
||||||
|
echo "SJIS SHIFT_JIS"
|
||||||
|
;;
|
||||||
beos*)
|
beos*)
|
||||||
# BeOS has a single locale, and it has UTF-8 encoding.
|
# BeOS has a single locale, and it has UTF-8 encoding.
|
||||||
echo "* UTF-8"
|
echo "* UTF-8"
|
||||||
@ -284,7 +311,7 @@ case "$os" in
|
|||||||
echo "# country is not the one your DOS machine actually uses, just"
|
echo "# country is not the one your DOS machine actually uses, just"
|
||||||
echo "# correct it in this file, and send a mail to"
|
echo "# correct it in this file, and send a mail to"
|
||||||
echo "# Juan Manuel Guerrero <st001906@hrz1.hrz.tu-darmstadt.de>"
|
echo "# Juan Manuel Guerrero <st001906@hrz1.hrz.tu-darmstadt.de>"
|
||||||
echo "# and Bruno Haible <haible@clisp.cons.org>."
|
echo "# and Bruno Haible <bruno@clisp.org>."
|
||||||
echo "#"
|
echo "#"
|
||||||
echo "C ASCII"
|
echo "C ASCII"
|
||||||
# ISO-8859-1 languages
|
# ISO-8859-1 languages
|
||||||
@ -394,8 +421,10 @@ case "$os" in
|
|||||||
echo "bg_BG CP866" # not CP855 ??
|
echo "bg_BG CP866" # not CP855 ??
|
||||||
echo "mk CP866" # not CP855 ??
|
echo "mk CP866" # not CP855 ??
|
||||||
echo "mk_MK CP866" # not CP855 ??
|
echo "mk_MK CP866" # not CP855 ??
|
||||||
echo "ru KOI8-R" # not CP866 ??
|
echo "ru CP866"
|
||||||
echo "ru_RU KOI8-R" # not CP866 ??
|
echo "ru_RU CP866"
|
||||||
|
echo "uk CP1125"
|
||||||
|
echo "uk_UA CP1125"
|
||||||
# ISO-8859-6 languages
|
# ISO-8859-6 languages
|
||||||
echo "ar CP864"
|
echo "ar CP864"
|
||||||
echo "ar_AE CP864"
|
echo "ar_AE CP864"
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Implementation of the dcgettext(3) function.
|
/* Implementation of the dcgettext(3) function.
|
||||||
Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
|
Copyright (C) 1995-1999, 2000, 2001, 2002 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it
|
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
|
under the terms of the GNU Library General Public License as published
|
||||||
@ -37,8 +37,8 @@
|
|||||||
# define DCGETTEXT __dcgettext
|
# define DCGETTEXT __dcgettext
|
||||||
# define DCIGETTEXT __dcigettext
|
# define DCIGETTEXT __dcigettext
|
||||||
#else
|
#else
|
||||||
# define DCGETTEXT dcgettext__
|
# define DCGETTEXT libintl_dcgettext
|
||||||
# define DCIGETTEXT dcigettext__
|
# define DCIGETTEXT libintl_dcigettext
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
|
/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
|
||||||
@ -54,5 +54,6 @@ DCGETTEXT (domainname, msgid, category)
|
|||||||
|
|
||||||
#ifdef _LIBC
|
#ifdef _LIBC
|
||||||
/* Alias for function name in GNU C Library. */
|
/* Alias for function name in GNU C Library. */
|
||||||
|
INTDEF(__dcgettext)
|
||||||
weak_alias (__dcgettext, dcgettext);
|
weak_alias (__dcgettext, dcgettext);
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Implementation of the internal dcigettext function.
|
/* Implementation of the internal dcigettext function.
|
||||||
Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
|
Copyright (C) 1995-1999, 2000-2003 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it
|
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
|
under the terms of the GNU Library General Public License as published
|
||||||
@ -33,14 +33,19 @@
|
|||||||
# define alloca __builtin_alloca
|
# define alloca __builtin_alloca
|
||||||
# define HAVE_ALLOCA 1
|
# define HAVE_ALLOCA 1
|
||||||
#else
|
#else
|
||||||
# if defined HAVE_ALLOCA_H || defined _LIBC
|
# ifdef _MSC_VER
|
||||||
# include <alloca.h>
|
# include <malloc.h>
|
||||||
|
# define alloca _alloca
|
||||||
# else
|
# else
|
||||||
# ifdef _AIX
|
# if defined HAVE_ALLOCA_H || defined _LIBC
|
||||||
#pragma alloca
|
# include <alloca.h>
|
||||||
# else
|
# else
|
||||||
# ifndef alloca
|
# ifdef _AIX
|
||||||
|
#pragma alloca
|
||||||
|
# else
|
||||||
|
# ifndef alloca
|
||||||
char *alloca ();
|
char *alloca ();
|
||||||
|
# endif
|
||||||
# endif
|
# endif
|
||||||
# endif
|
# endif
|
||||||
# endif
|
# endif
|
||||||
@ -56,13 +61,7 @@ extern int errno;
|
|||||||
|
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#if !HAVE_STRCHR && !defined _LIBC
|
|
||||||
# ifndef strchr
|
|
||||||
# define strchr index
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined HAVE_UNISTD_H || defined _LIBC
|
#if defined HAVE_UNISTD_H || defined _LIBC
|
||||||
# include <unistd.h>
|
# include <unistd.h>
|
||||||
@ -70,11 +69,26 @@ extern int errno;
|
|||||||
|
|
||||||
#include <locale.h>
|
#include <locale.h>
|
||||||
|
|
||||||
|
#ifdef _LIBC
|
||||||
|
/* Guess whether integer division by zero raises signal SIGFPE.
|
||||||
|
Set to 1 only if you know for sure. In case of doubt, set to 0. */
|
||||||
|
# if defined __alpha__ || defined __arm__ || defined __i386__ \
|
||||||
|
|| defined __m68k__ || defined __s390__
|
||||||
|
# define INTDIV0_RAISES_SIGFPE 1
|
||||||
|
# else
|
||||||
|
# define INTDIV0_RAISES_SIGFPE 0
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
#if !INTDIV0_RAISES_SIGFPE
|
||||||
|
# include <signal.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined HAVE_SYS_PARAM_H || defined _LIBC
|
#if defined HAVE_SYS_PARAM_H || defined _LIBC
|
||||||
# include <sys/param.h>
|
# include <sys/param.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "gettextP.h"
|
#include "gettextP.h"
|
||||||
|
#include "plural-exp.h"
|
||||||
#ifdef _LIBC
|
#ifdef _LIBC
|
||||||
# include <libintl.h>
|
# include <libintl.h>
|
||||||
#else
|
#else
|
||||||
@ -107,10 +121,10 @@ extern int errno;
|
|||||||
names than the internal variables in GNU libc, otherwise programs
|
names than the internal variables in GNU libc, otherwise programs
|
||||||
using libintl.a cannot be linked statically. */
|
using libintl.a cannot be linked statically. */
|
||||||
#if !defined _LIBC
|
#if !defined _LIBC
|
||||||
# define _nl_default_default_domain _nl_default_default_domain__
|
# define _nl_default_default_domain libintl_nl_default_default_domain
|
||||||
# define _nl_current_default_domain _nl_current_default_domain__
|
# define _nl_current_default_domain libintl_nl_current_default_domain
|
||||||
# define _nl_default_dirname _nl_default_dirname__
|
# define _nl_default_dirname libintl_nl_default_dirname
|
||||||
# define _nl_domain_bindings _nl_domain_bindings__
|
# define _nl_domain_bindings libintl_nl_domain_bindings
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Some compilers, like SunOS4 cc, don't have offsetof in <stddef.h>. */
|
/* Some compilers, like SunOS4 cc, don't have offsetof in <stddef.h>. */
|
||||||
@ -198,16 +212,6 @@ static void *mempcpy PARAMS ((void *dest, const void *src, size_t n));
|
|||||||
# define IS_PATH_WITH_DIR(P) (strchr (P, '/') != NULL)
|
# define IS_PATH_WITH_DIR(P) (strchr (P, '/') != NULL)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* XPG3 defines the result of `setlocale (category, NULL)' as:
|
|
||||||
``Directs `setlocale()' to query `category' and return the current
|
|
||||||
setting of `local'.''
|
|
||||||
However it does not specify the exact format. Neither do SUSV2 and
|
|
||||||
ISO C 99. So we can use this feature only on selected systems (e.g.
|
|
||||||
those using GNU C Library). */
|
|
||||||
#if defined _LIBC || (defined __GNU_LIBRARY__ && __GNU_LIBRARY__ >= 2)
|
|
||||||
# define HAVE_LOCALE_NULL
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* This is the type used for the search tree where known translations
|
/* This is the type used for the search tree where known translations
|
||||||
are stored. */
|
are stored. */
|
||||||
struct known_translation_t
|
struct known_translation_t
|
||||||
@ -272,15 +276,28 @@ transcmp (p1, p2)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef INTVARDEF
|
||||||
|
# define INTVARDEF(name)
|
||||||
|
#endif
|
||||||
|
#ifndef INTUSE
|
||||||
|
# define INTUSE(name) name
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Name of the default domain used for gettext(3) prior any call to
|
/* Name of the default domain used for gettext(3) prior any call to
|
||||||
textdomain(3). The default value for this is "messages". */
|
textdomain(3). The default value for this is "messages". */
|
||||||
const char _nl_default_default_domain[] = "messages";
|
const char _nl_default_default_domain[] attribute_hidden = "messages";
|
||||||
|
|
||||||
/* Value used as the default domain for gettext(3). */
|
/* Value used as the default domain for gettext(3). */
|
||||||
const char *_nl_current_default_domain = _nl_default_default_domain;
|
const char *_nl_current_default_domain attribute_hidden
|
||||||
|
= _nl_default_default_domain;
|
||||||
|
|
||||||
/* Contains the default location of the message catalogs. */
|
/* Contains the default location of the message catalogs. */
|
||||||
|
#if defined __EMX__
|
||||||
|
extern const char _nl_default_dirname[];
|
||||||
|
#else
|
||||||
const char _nl_default_dirname[] = LOCALEDIR;
|
const char _nl_default_dirname[] = LOCALEDIR;
|
||||||
|
INTVARDEF (_nl_default_dirname)
|
||||||
|
#endif
|
||||||
|
|
||||||
/* List with bindings of specific domains created by bindtextdomain()
|
/* List with bindings of specific domains created by bindtextdomain()
|
||||||
calls. */
|
calls. */
|
||||||
@ -292,19 +309,22 @@ static char *plural_lookup PARAMS ((struct loaded_l10nfile *domain,
|
|||||||
const char *translation,
|
const char *translation,
|
||||||
size_t translation_len))
|
size_t translation_len))
|
||||||
internal_function;
|
internal_function;
|
||||||
static unsigned long int plural_eval PARAMS ((struct expression *pexp,
|
|
||||||
unsigned long int n))
|
|
||||||
internal_function;
|
|
||||||
static const char *category_to_name PARAMS ((int category)) internal_function;
|
|
||||||
static const char *guess_category_value PARAMS ((int category,
|
static const char *guess_category_value PARAMS ((int category,
|
||||||
const char *categoryname))
|
const char *categoryname))
|
||||||
internal_function;
|
internal_function;
|
||||||
|
#ifdef _LIBC
|
||||||
|
# include "../locale/localeinfo.h"
|
||||||
|
# define category_to_name(category) _nl_category_names[category]
|
||||||
|
#else
|
||||||
|
static const char *category_to_name PARAMS ((int category)) internal_function;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* For those loosing systems which don't have `alloca' we have to add
|
/* For those loosing systems which don't have `alloca' we have to add
|
||||||
some additional code emulating it. */
|
some additional code emulating it. */
|
||||||
#ifdef HAVE_ALLOCA
|
#ifdef HAVE_ALLOCA
|
||||||
/* Nothing has to be done. */
|
/* Nothing has to be done. */
|
||||||
|
# define freea(p) /* nothing */
|
||||||
# define ADD_BLOCK(list, address) /* nothing */
|
# define ADD_BLOCK(list, address) /* nothing */
|
||||||
# define FREE_BLOCKS(list) /* nothing */
|
# define FREE_BLOCKS(list) /* nothing */
|
||||||
#else
|
#else
|
||||||
@ -329,11 +349,13 @@ struct block_list
|
|||||||
while (list != NULL) { \
|
while (list != NULL) { \
|
||||||
struct block_list *old = list; \
|
struct block_list *old = list; \
|
||||||
list = list->next; \
|
list = list->next; \
|
||||||
|
free (old->address); \
|
||||||
free (old); \
|
free (old); \
|
||||||
} \
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
# undef alloca
|
# undef alloca
|
||||||
# define alloca(size) (malloc (size))
|
# define alloca(size) (malloc (size))
|
||||||
|
# define freea(p) free (p)
|
||||||
#endif /* have alloca */
|
#endif /* have alloca */
|
||||||
|
|
||||||
|
|
||||||
@ -357,12 +379,12 @@ typedef unsigned char transmem_block_t;
|
|||||||
#ifdef _LIBC
|
#ifdef _LIBC
|
||||||
# define DCIGETTEXT __dcigettext
|
# define DCIGETTEXT __dcigettext
|
||||||
#else
|
#else
|
||||||
# define DCIGETTEXT dcigettext__
|
# define DCIGETTEXT libintl_dcigettext
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Lock variable to protect the global data in the gettext implementation. */
|
/* Lock variable to protect the global data in the gettext implementation. */
|
||||||
#ifdef _LIBC
|
#ifdef _LIBC
|
||||||
__libc_rwlock_define_initialized (, _nl_state_lock)
|
__libc_rwlock_define_initialized (, _nl_state_lock attribute_hidden)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Checking whether the binaries runs SUID must be done and glibc provides
|
/* Checking whether the binaries runs SUID must be done and glibc provides
|
||||||
@ -395,6 +417,9 @@ static int enable_secure;
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Get the function to evaluate the plural expression. */
|
||||||
|
#include "eval-plural.h"
|
||||||
|
|
||||||
/* Look up MSGID in the DOMAINNAME message catalog for the current
|
/* Look up MSGID in the DOMAINNAME message catalog for the current
|
||||||
CATEGORY locale and, if PLURAL is nonzero, search over string
|
CATEGORY locale and, if PLURAL is nonzero, search over string
|
||||||
depending on the plural form determined by N. */
|
depending on the plural form determined by N. */
|
||||||
@ -430,6 +455,15 @@ DCIGETTEXT (domainname, msgid1, msgid2, plural, n, category)
|
|||||||
if (msgid1 == NULL)
|
if (msgid1 == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
#ifdef _LIBC
|
||||||
|
if (category < 0 || category >= __LC_LAST || category == LC_ALL)
|
||||||
|
/* Bogus. */
|
||||||
|
return (plural == 0
|
||||||
|
? (char *) msgid1
|
||||||
|
/* Use the Germanic plural rule. */
|
||||||
|
: n == 1 ? (char *) msgid1 : (char *) msgid2);
|
||||||
|
#endif
|
||||||
|
|
||||||
__libc_rwlock_rdlock (_nl_state_lock);
|
__libc_rwlock_rdlock (_nl_state_lock);
|
||||||
|
|
||||||
/* If DOMAINNAME is NULL, we are interested in the default domain. If
|
/* If DOMAINNAME is NULL, we are interested in the default domain. If
|
||||||
@ -438,6 +472,12 @@ DCIGETTEXT (domainname, msgid1, msgid2, plural, n, category)
|
|||||||
if (domainname == NULL)
|
if (domainname == NULL)
|
||||||
domainname = _nl_current_default_domain;
|
domainname = _nl_current_default_domain;
|
||||||
|
|
||||||
|
/* OS/2 specific: backward compatibility with older libintl versions */
|
||||||
|
#ifdef LC_MESSAGES_COMPAT
|
||||||
|
if (category == LC_MESSAGES_COMPAT)
|
||||||
|
category = LC_MESSAGES;
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined HAVE_TSEARCH || defined _LIBC
|
#if defined HAVE_TSEARCH || defined _LIBC
|
||||||
msgid_len = strlen (msgid1) + 1;
|
msgid_len = strlen (msgid1) + 1;
|
||||||
|
|
||||||
@ -450,6 +490,7 @@ DCIGETTEXT (domainname, msgid1, msgid2, plural, n, category)
|
|||||||
search->category = category;
|
search->category = category;
|
||||||
|
|
||||||
foundp = (struct known_translation_t **) tfind (search, &root, transcmp);
|
foundp = (struct known_translation_t **) tfind (search, &root, transcmp);
|
||||||
|
freea (search);
|
||||||
if (foundp != NULL && (*foundp)->counter == _nl_msg_cat_cntr)
|
if (foundp != NULL && (*foundp)->counter == _nl_msg_cat_cntr)
|
||||||
{
|
{
|
||||||
/* Now deal with plural. */
|
/* Now deal with plural. */
|
||||||
@ -486,7 +527,7 @@ DCIGETTEXT (domainname, msgid1, msgid2, plural, n, category)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (binding == NULL)
|
if (binding == NULL)
|
||||||
dirname = (char *) _nl_default_dirname;
|
dirname = (char *) INTUSE(_nl_default_dirname);
|
||||||
else if (IS_ABSOLUTE_PATH (binding->dirname))
|
else if (IS_ABSOLUTE_PATH (binding->dirname))
|
||||||
dirname = binding->dirname;
|
dirname = binding->dirname;
|
||||||
else
|
else
|
||||||
@ -514,17 +555,9 @@ DCIGETTEXT (domainname, msgid1, msgid2, plural, n, category)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (ret == NULL)
|
if (ret == NULL)
|
||||||
{
|
/* We cannot get the current working directory. Don't signal an
|
||||||
/* We cannot get the current working directory. Don't signal an
|
error but simply return the default string. */
|
||||||
error but simply return the default string. */
|
goto return_untranslated;
|
||||||
FREE_BLOCKS (block_list);
|
|
||||||
__libc_rwlock_unlock (_nl_state_lock);
|
|
||||||
__set_errno (saved_errno);
|
|
||||||
return (plural == 0
|
|
||||||
? (char *) msgid1
|
|
||||||
/* Use the Germanic plural rule. */
|
|
||||||
: n == 1 ? (char *) msgid1 : (char *) msgid2);
|
|
||||||
}
|
|
||||||
|
|
||||||
stpcpy (stpcpy (strchr (dirname, '\0'), "/"), binding->dirname);
|
stpcpy (stpcpy (strchr (dirname, '\0'), "/"), binding->dirname);
|
||||||
}
|
}
|
||||||
@ -581,16 +614,7 @@ DCIGETTEXT (domainname, msgid1, msgid2, plural, n, category)
|
|||||||
domain. Return the MSGID. */
|
domain. Return the MSGID. */
|
||||||
if (strcmp (single_locale, "C") == 0
|
if (strcmp (single_locale, "C") == 0
|
||||||
|| strcmp (single_locale, "POSIX") == 0)
|
|| strcmp (single_locale, "POSIX") == 0)
|
||||||
{
|
break;
|
||||||
FREE_BLOCKS (block_list);
|
|
||||||
__libc_rwlock_unlock (_nl_state_lock);
|
|
||||||
__set_errno (saved_errno);
|
|
||||||
return (plural == 0
|
|
||||||
? (char *) msgid1
|
|
||||||
/* Use the Germanic plural rule. */
|
|
||||||
: n == 1 ? (char *) msgid1 : (char *) msgid2);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* Find structure describing the message catalog matching the
|
/* Find structure describing the message catalog matching the
|
||||||
DOMAINNAME and CATEGORY. */
|
DOMAINNAME and CATEGORY. */
|
||||||
@ -622,7 +646,6 @@ DCIGETTEXT (domainname, msgid1, msgid2, plural, n, category)
|
|||||||
/* Found the translation of MSGID1 in domain DOMAIN:
|
/* Found the translation of MSGID1 in domain DOMAIN:
|
||||||
starting at RETVAL, RETLEN bytes. */
|
starting at RETVAL, RETLEN bytes. */
|
||||||
FREE_BLOCKS (block_list);
|
FREE_BLOCKS (block_list);
|
||||||
__set_errno (saved_errno);
|
|
||||||
#if defined HAVE_TSEARCH || defined _LIBC
|
#if defined HAVE_TSEARCH || defined _LIBC
|
||||||
if (foundp == NULL)
|
if (foundp == NULL)
|
||||||
{
|
{
|
||||||
@ -661,6 +684,8 @@ DCIGETTEXT (domainname, msgid1, msgid2, plural, n, category)
|
|||||||
(*foundp)->translation_length = retlen;
|
(*foundp)->translation_length = retlen;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
__set_errno (saved_errno);
|
||||||
|
|
||||||
/* Now deal with plural. */
|
/* Now deal with plural. */
|
||||||
if (plural)
|
if (plural)
|
||||||
retval = plural_lookup (domain, n, retval, retlen);
|
retval = plural_lookup (domain, n, retval, retlen);
|
||||||
@ -670,7 +695,30 @@ DCIGETTEXT (domainname, msgid1, msgid2, plural, n, category)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* NOTREACHED */
|
|
||||||
|
return_untranslated:
|
||||||
|
/* Return the untranslated MSGID. */
|
||||||
|
FREE_BLOCKS (block_list);
|
||||||
|
__libc_rwlock_unlock (_nl_state_lock);
|
||||||
|
#ifndef _LIBC
|
||||||
|
if (!ENABLE_SECURE)
|
||||||
|
{
|
||||||
|
extern void _nl_log_untranslated PARAMS ((const char *logfilename,
|
||||||
|
const char *domainname,
|
||||||
|
const char *msgid1,
|
||||||
|
const char *msgid2,
|
||||||
|
int plural));
|
||||||
|
const char *logfilename = getenv ("GETTEXT_LOG_UNTRANSLATED");
|
||||||
|
|
||||||
|
if (logfilename != NULL && logfilename[0] != '\0')
|
||||||
|
_nl_log_untranslated (logfilename, domainname, msgid1, msgid2, plural);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
__set_errno (saved_errno);
|
||||||
|
return (plural == 0
|
||||||
|
? (char *) msgid1
|
||||||
|
/* Use the Germanic plural rule. */
|
||||||
|
: n == 1 ? (char *) msgid1 : (char *) msgid2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -683,6 +731,7 @@ _nl_find_msg (domain_file, domainbinding, msgid, lengthp)
|
|||||||
size_t *lengthp;
|
size_t *lengthp;
|
||||||
{
|
{
|
||||||
struct loaded_domain *domain;
|
struct loaded_domain *domain;
|
||||||
|
nls_uint32 nstrings;
|
||||||
size_t act;
|
size_t act;
|
||||||
char *result;
|
char *result;
|
||||||
size_t resultlen;
|
size_t resultlen;
|
||||||
@ -695,8 +744,10 @@ _nl_find_msg (domain_file, domainbinding, msgid, lengthp)
|
|||||||
|
|
||||||
domain = (struct loaded_domain *) domain_file->data;
|
domain = (struct loaded_domain *) domain_file->data;
|
||||||
|
|
||||||
|
nstrings = domain->nstrings;
|
||||||
|
|
||||||
/* Locate the MSGID and its translation. */
|
/* Locate the MSGID and its translation. */
|
||||||
if (domain->hash_size > 2 && domain->hash_tab != NULL)
|
if (domain->hash_tab != NULL)
|
||||||
{
|
{
|
||||||
/* Use the hashing table. */
|
/* Use the hashing table. */
|
||||||
nls_uint32 len = strlen (msgid);
|
nls_uint32 len = strlen (msgid);
|
||||||
@ -706,22 +757,30 @@ _nl_find_msg (domain_file, domainbinding, msgid, lengthp)
|
|||||||
|
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
nls_uint32 nstr = W (domain->must_swap, domain->hash_tab[idx]);
|
nls_uint32 nstr =
|
||||||
|
W (domain->must_swap_hash_tab, domain->hash_tab[idx]);
|
||||||
|
|
||||||
if (nstr == 0)
|
if (nstr == 0)
|
||||||
/* Hash table entry is empty. */
|
/* Hash table entry is empty. */
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
/* Compare msgid with the original string at index nstr-1.
|
nstr--;
|
||||||
|
|
||||||
|
/* Compare msgid with the original string at index nstr.
|
||||||
We compare the lengths with >=, not ==, because plural entries
|
We compare the lengths with >=, not ==, because plural entries
|
||||||
are represented by strings with an embedded NUL. */
|
are represented by strings with an embedded NUL. */
|
||||||
if (W (domain->must_swap, domain->orig_tab[nstr - 1].length) >= len
|
if (nstr < nstrings
|
||||||
&& (strcmp (msgid,
|
? W (domain->must_swap, domain->orig_tab[nstr].length) >= len
|
||||||
domain->data + W (domain->must_swap,
|
&& (strcmp (msgid,
|
||||||
domain->orig_tab[nstr - 1].offset))
|
domain->data + W (domain->must_swap,
|
||||||
== 0))
|
domain->orig_tab[nstr].offset))
|
||||||
|
== 0)
|
||||||
|
: domain->orig_sysdep_tab[nstr - nstrings].length > len
|
||||||
|
&& (strcmp (msgid,
|
||||||
|
domain->orig_sysdep_tab[nstr - nstrings].pointer)
|
||||||
|
== 0))
|
||||||
{
|
{
|
||||||
act = nstr - 1;
|
act = nstr;
|
||||||
goto found;
|
goto found;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -739,7 +798,7 @@ _nl_find_msg (domain_file, domainbinding, msgid, lengthp)
|
|||||||
size_t top, bottom;
|
size_t top, bottom;
|
||||||
|
|
||||||
bottom = 0;
|
bottom = 0;
|
||||||
top = domain->nstrings;
|
top = nstrings;
|
||||||
while (bottom < top)
|
while (bottom < top)
|
||||||
{
|
{
|
||||||
int cmp_val;
|
int cmp_val;
|
||||||
@ -762,9 +821,17 @@ _nl_find_msg (domain_file, domainbinding, msgid, lengthp)
|
|||||||
found:
|
found:
|
||||||
/* The translation was found at index ACT. If we have to convert the
|
/* The translation was found at index ACT. If we have to convert the
|
||||||
string to use a different character set, this is the time. */
|
string to use a different character set, this is the time. */
|
||||||
result = ((char *) domain->data
|
if (act < nstrings)
|
||||||
+ W (domain->must_swap, domain->trans_tab[act].offset));
|
{
|
||||||
resultlen = W (domain->must_swap, domain->trans_tab[act].length) + 1;
|
result = (char *)
|
||||||
|
(domain->data + W (domain->must_swap, domain->trans_tab[act].offset));
|
||||||
|
resultlen = W (domain->must_swap, domain->trans_tab[act].length) + 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result = (char *) domain->trans_sysdep_tab[act - nstrings].pointer;
|
||||||
|
resultlen = domain->trans_sysdep_tab[act - nstrings].length;
|
||||||
|
}
|
||||||
|
|
||||||
#if defined _LIBC || HAVE_ICONV
|
#if defined _LIBC || HAVE_ICONV
|
||||||
if (domain->codeset_cntr
|
if (domain->codeset_cntr
|
||||||
@ -797,8 +864,9 @@ _nl_find_msg (domain_file, domainbinding, msgid, lengthp)
|
|||||||
NULs. */
|
NULs. */
|
||||||
|
|
||||||
if (domain->conv_tab == NULL
|
if (domain->conv_tab == NULL
|
||||||
&& ((domain->conv_tab = (char **) calloc (domain->nstrings,
|
&& ((domain->conv_tab =
|
||||||
sizeof (char *)))
|
(char **) calloc (nstrings + domain->n_sysdep_strings,
|
||||||
|
sizeof (char *)))
|
||||||
== NULL))
|
== NULL))
|
||||||
/* Mark that we didn't succeed allocating a table. */
|
/* Mark that we didn't succeed allocating a table. */
|
||||||
domain->conv_tab = (char **) -1;
|
domain->conv_tab = (char **) -1;
|
||||||
@ -974,18 +1042,18 @@ plural_lookup (domain, n, translation, translation_len)
|
|||||||
size_t translation_len;
|
size_t translation_len;
|
||||||
{
|
{
|
||||||
struct loaded_domain *domaindata = (struct loaded_domain *) domain->data;
|
struct loaded_domain *domaindata = (struct loaded_domain *) domain->data;
|
||||||
unsigned long int ind; /* gnupg */
|
unsigned long int index;
|
||||||
const char *p;
|
const char *p;
|
||||||
|
|
||||||
ind = plural_eval (domaindata->plural, n); /* gnupg */
|
index = plural_eval (domaindata->plural, n);
|
||||||
if (ind >= domaindata->nplurals) /* gnupg */
|
if (index >= domaindata->nplurals)
|
||||||
/* This should never happen. It means the plural expression and the
|
/* This should never happen. It means the plural expression and the
|
||||||
given maximum value do not match. */
|
given maximum value do not match. */
|
||||||
ind = 0; /* gnupg */
|
index = 0;
|
||||||
|
|
||||||
/* Skip INDEX strings at TRANSLATION. */
|
/* Skip INDEX strings at TRANSLATION. */
|
||||||
p = translation;
|
p = translation;
|
||||||
while (ind-- > 0) /* gnupg */
|
while (index-- > 0)
|
||||||
{
|
{
|
||||||
#ifdef _LIBC
|
#ifdef _LIBC
|
||||||
p = __rawmemchr (p, '\0');
|
p = __rawmemchr (p, '\0');
|
||||||
@ -1004,88 +1072,7 @@ plural_lookup (domain, n, translation, translation_len)
|
|||||||
return (char *) p;
|
return (char *) p;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef _LIBC
|
||||||
/* Function to evaluate the plural expression and return an index value. */
|
|
||||||
static unsigned long int
|
|
||||||
internal_function
|
|
||||||
plural_eval (pexp, n)
|
|
||||||
struct expression *pexp;
|
|
||||||
unsigned long int n;
|
|
||||||
{
|
|
||||||
switch (pexp->nargs)
|
|
||||||
{
|
|
||||||
case 0:
|
|
||||||
switch (pexp->operation)
|
|
||||||
{
|
|
||||||
case var:
|
|
||||||
return n;
|
|
||||||
case num:
|
|
||||||
return pexp->val.num;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
/* NOTREACHED */
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
{
|
|
||||||
/* pexp->operation must be lnot. */
|
|
||||||
unsigned long int arg = plural_eval (pexp->val.args[0], n);
|
|
||||||
return ! arg;
|
|
||||||
}
|
|
||||||
case 2:
|
|
||||||
{
|
|
||||||
unsigned long int leftarg = plural_eval (pexp->val.args[0], n);
|
|
||||||
if (pexp->operation == lor)
|
|
||||||
return leftarg || plural_eval (pexp->val.args[1], n);
|
|
||||||
else if (pexp->operation == land)
|
|
||||||
return leftarg && plural_eval (pexp->val.args[1], n);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
unsigned long int rightarg = plural_eval (pexp->val.args[1], n);
|
|
||||||
|
|
||||||
switch (pexp->operation)
|
|
||||||
{
|
|
||||||
case mult:
|
|
||||||
return leftarg * rightarg;
|
|
||||||
case divide:
|
|
||||||
return leftarg / rightarg;
|
|
||||||
case module:
|
|
||||||
return leftarg % rightarg;
|
|
||||||
case plus:
|
|
||||||
return leftarg + rightarg;
|
|
||||||
case minus:
|
|
||||||
return leftarg - rightarg;
|
|
||||||
case less_than:
|
|
||||||
return leftarg < rightarg;
|
|
||||||
case greater_than:
|
|
||||||
return leftarg > rightarg;
|
|
||||||
case less_or_equal:
|
|
||||||
return leftarg <= rightarg;
|
|
||||||
case greater_or_equal:
|
|
||||||
return leftarg >= rightarg;
|
|
||||||
case equal:
|
|
||||||
return leftarg == rightarg;
|
|
||||||
case not_equal:
|
|
||||||
return leftarg != rightarg;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/* NOTREACHED */
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case 3:
|
|
||||||
{
|
|
||||||
/* pexp->operation must be qmop. */
|
|
||||||
unsigned long int boolarg = plural_eval (pexp->val.args[0], n);
|
|
||||||
return plural_eval (pexp->val.args[boolarg ? 1 : 2], n);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/* NOTREACHED */
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* Return string representation of locale CATEGORY. */
|
/* Return string representation of locale CATEGORY. */
|
||||||
static const char *
|
static const char *
|
||||||
internal_function
|
internal_function
|
||||||
@ -1145,6 +1132,7 @@ category_to_name (category)
|
|||||||
|
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Guess value of current locale from value of the environment variables. */
|
/* Guess value of current locale from value of the environment variables. */
|
||||||
static const char *
|
static const char *
|
||||||
@ -1166,27 +1154,21 @@ guess_category_value (category, categoryname)
|
|||||||
/* We have to proceed with the POSIX methods of looking to `LC_ALL',
|
/* We have to proceed with the POSIX methods of looking to `LC_ALL',
|
||||||
`LC_xxx', and `LANG'. On some systems this can be done by the
|
`LC_xxx', and `LANG'. On some systems this can be done by the
|
||||||
`setlocale' function itself. */
|
`setlocale' function itself. */
|
||||||
#if defined _LIBC || (defined HAVE_SETLOCALE && defined HAVE_LC_MESSAGES && defined HAVE_LOCALE_NULL)
|
#ifdef _LIBC
|
||||||
retval = setlocale (category, NULL);
|
retval = __current_locale_name (category);
|
||||||
#else
|
#else
|
||||||
/* Setting of LC_ALL overwrites all other. */
|
retval = _nl_locale_name (category, categoryname);
|
||||||
retval = getenv ("LC_ALL");
|
|
||||||
if (retval == NULL || retval[0] == '\0')
|
|
||||||
{
|
|
||||||
/* Next comes the name of the desired category. */
|
|
||||||
retval = getenv (categoryname);
|
|
||||||
if (retval == NULL || retval[0] == '\0')
|
|
||||||
{
|
|
||||||
/* Last possibility is the LANG environment variable. */
|
|
||||||
retval = getenv ("LANG");
|
|
||||||
if (retval == NULL || retval[0] == '\0')
|
|
||||||
/* We use C as the default domain. POSIX says this is
|
|
||||||
implementation defined. */
|
|
||||||
return "C";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Ignore LANGUAGE if the locale is set to "C" because
|
||||||
|
1. "C" locale usually uses the ASCII encoding, and most international
|
||||||
|
messages use non-ASCII characters. These characters get displayed
|
||||||
|
as question marks (if using glibc's iconv()) or as invalid 8-bit
|
||||||
|
characters (because other iconv()s refuse to convert most non-ASCII
|
||||||
|
characters to ASCII). In any case, the output is ugly.
|
||||||
|
2. The precise output of some programs in the "C" locale is specified
|
||||||
|
by POSIX and should not depend on environment variables like
|
||||||
|
"LANGUAGE". We allow such programs to use gettext(). */
|
||||||
return language != NULL && strcmp (retval, "C") != 0 ? language : retval;
|
return language != NULL && strcmp (retval, "C") != 0 ? language : retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1223,8 +1205,7 @@ mempcpy (dest, src, n)
|
|||||||
#ifdef _LIBC
|
#ifdef _LIBC
|
||||||
/* If we want to free all resources we have to do some work at
|
/* If we want to free all resources we have to do some work at
|
||||||
program's end. */
|
program's end. */
|
||||||
static void __attribute__ ((unused))
|
libc_freeres_fn (free_mem)
|
||||||
free_mem (void)
|
|
||||||
{
|
{
|
||||||
void *old;
|
void *old;
|
||||||
|
|
||||||
@ -1232,7 +1213,7 @@ free_mem (void)
|
|||||||
{
|
{
|
||||||
struct binding *oldp = _nl_domain_bindings;
|
struct binding *oldp = _nl_domain_bindings;
|
||||||
_nl_domain_bindings = _nl_domain_bindings->next;
|
_nl_domain_bindings = _nl_domain_bindings->next;
|
||||||
if (oldp->dirname != _nl_default_dirname)
|
if (oldp->dirname != INTUSE(_nl_default_dirname))
|
||||||
/* Yes, this is a pointer comparison. */
|
/* Yes, this is a pointer comparison. */
|
||||||
free (oldp->dirname);
|
free (oldp->dirname);
|
||||||
free (oldp->codeset);
|
free (oldp->codeset);
|
||||||
@ -1254,6 +1235,4 @@ free_mem (void)
|
|||||||
free (old);
|
free (old);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
text_set_element (__libc_subfreeres, free_mem);
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Implementation of the dcngettext(3) function.
|
/* Implementation of the dcngettext(3) function.
|
||||||
Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
|
Copyright (C) 1995-1999, 2000, 2001, 2002 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it
|
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
|
under the terms of the GNU Library General Public License as published
|
||||||
@ -37,8 +37,8 @@
|
|||||||
# define DCNGETTEXT __dcngettext
|
# define DCNGETTEXT __dcngettext
|
||||||
# define DCIGETTEXT __dcigettext
|
# define DCIGETTEXT __dcigettext
|
||||||
#else
|
#else
|
||||||
# define DCNGETTEXT dcngettext__
|
# define DCNGETTEXT libintl_dcngettext
|
||||||
# define DCIGETTEXT dcigettext__
|
# define DCIGETTEXT libintl_dcigettext
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
|
/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Implementation of the dgettext(3) function.
|
/* Implementation of the dgettext(3) function.
|
||||||
Copyright (C) 1995-1997, 2000, 2001 Free Software Foundation, Inc.
|
Copyright (C) 1995-1997, 2000, 2001, 2002 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it
|
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
|
under the terms of the GNU Library General Public License as published
|
||||||
@ -37,10 +37,10 @@
|
|||||||
prefix. So we have to make a difference here. */
|
prefix. So we have to make a difference here. */
|
||||||
#ifdef _LIBC
|
#ifdef _LIBC
|
||||||
# define DGETTEXT __dgettext
|
# define DGETTEXT __dgettext
|
||||||
# define DCGETTEXT __dcgettext
|
# define DCGETTEXT INTUSE(__dcgettext)
|
||||||
#else
|
#else
|
||||||
# define DGETTEXT dgettext__
|
# define DGETTEXT libintl_dgettext
|
||||||
# define DCGETTEXT dcgettext__
|
# define DCGETTEXT libintl_dcgettext
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Look up MSGID in the DOMAINNAME message catalog of the current
|
/* Look up MSGID in the DOMAINNAME message catalog of the current
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Implementation of the dngettext(3) function.
|
/* Implementation of the dngettext(3) function.
|
||||||
Copyright (C) 1995-1997, 2000, 2001 Free Software Foundation, Inc.
|
Copyright (C) 1995-1997, 2000, 2001, 2002 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it
|
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
|
under the terms of the GNU Library General Public License as published
|
||||||
@ -39,8 +39,8 @@
|
|||||||
# define DNGETTEXT __dngettext
|
# define DNGETTEXT __dngettext
|
||||||
# define DCNGETTEXT __dcngettext
|
# define DCNGETTEXT __dcngettext
|
||||||
#else
|
#else
|
||||||
# define DNGETTEXT dngettext__
|
# define DNGETTEXT libintl_dngettext
|
||||||
# define DCNGETTEXT dcngettext__
|
# define DCNGETTEXT libintl_dcngettext
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Look up MSGID in the DOMAINNAME message catalog of the current
|
/* Look up MSGID in the DOMAINNAME message catalog of the current
|
||||||
|
@ -178,8 +178,7 @@ _nl_find_domain (dirname, locale, domainname, domainbinding)
|
|||||||
|
|
||||||
|
|
||||||
#ifdef _LIBC
|
#ifdef _LIBC
|
||||||
static void __attribute__ ((unused))
|
libc_freeres_fn (free_mem)
|
||||||
free_mem (void)
|
|
||||||
{
|
{
|
||||||
struct loaded_l10nfile *runp = _nl_loaded_domains;
|
struct loaded_l10nfile *runp = _nl_loaded_domains;
|
||||||
|
|
||||||
@ -193,6 +192,4 @@ free_mem (void)
|
|||||||
free (here);
|
free (here);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
text_set_element (__libc_subfreeres, free_mem);
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Implementation of gettext(3) function.
|
/* Implementation of gettext(3) function.
|
||||||
Copyright (C) 1995, 1997, 2000, 2001 Free Software Foundation, Inc.
|
Copyright (C) 1995, 1997, 2000, 2001, 2002 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it
|
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
|
under the terms of the GNU Library General Public License as published
|
||||||
@ -42,10 +42,10 @@
|
|||||||
prefix. So we have to make a difference here. */
|
prefix. So we have to make a difference here. */
|
||||||
#ifdef _LIBC
|
#ifdef _LIBC
|
||||||
# define GETTEXT __gettext
|
# define GETTEXT __gettext
|
||||||
# define DCGETTEXT __dcgettext
|
# define DCGETTEXT INTUSE(__dcgettext)
|
||||||
#else
|
#else
|
||||||
# define GETTEXT gettext__
|
# define GETTEXT libintl_gettext
|
||||||
# define DCGETTEXT dcgettext__
|
# define DCGETTEXT libintl_dcgettext
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Look up MSGID in the current default message catalog for the current
|
/* Look up MSGID in the current default message catalog for the current
|
||||||
|
138
intl/gettextP.h
138
intl/gettextP.h
@ -1,5 +1,5 @@
|
|||||||
/* Header describing internals of libintl library.
|
/* Header describing internals of libintl library.
|
||||||
Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
|
Copyright (C) 1995-1999, 2000-2003 Free Software Foundation, Inc.
|
||||||
Written by Ulrich Drepper <drepper@cygnus.com>, 1995.
|
Written by Ulrich Drepper <drepper@cygnus.com>, 1995.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it
|
This program is free software; you can redistribute it and/or modify it
|
||||||
@ -20,12 +20,6 @@
|
|||||||
#ifndef _GETTEXTP_H
|
#ifndef _GETTEXTP_H
|
||||||
#define _GETTEXTP_H
|
#define _GETTEXTP_H
|
||||||
|
|
||||||
/* HP/UX users - if you get errors line "Unexpected symbol: SWAP" when
|
|
||||||
building with HP's C compiler, you will need to uncomment the
|
|
||||||
following line. This is a GnuPG-specific change. */
|
|
||||||
|
|
||||||
/* #define inline */
|
|
||||||
|
|
||||||
#include <stddef.h> /* Get size_t. */
|
#include <stddef.h> /* Get size_t. */
|
||||||
|
|
||||||
#ifdef _LIBC
|
#ifdef _LIBC
|
||||||
@ -38,12 +32,12 @@
|
|||||||
|
|
||||||
#include "loadinfo.h"
|
#include "loadinfo.h"
|
||||||
|
|
||||||
#include "gettext.h" /* Get nls_uint32. */
|
#include "gmo.h" /* Get nls_uint32. */
|
||||||
|
|
||||||
/* @@ end of prolog @@ */
|
/* @@ end of prolog @@ */
|
||||||
|
|
||||||
#ifndef PARAMS
|
#ifndef PARAMS
|
||||||
# if __STDC__
|
# if __STDC__ || defined __GNUC__ || defined __SUNPRO_C || defined __cplusplus || __PROTOTYPES
|
||||||
# define PARAMS(args) args
|
# define PARAMS(args) args
|
||||||
# else
|
# else
|
||||||
# define PARAMS(args) ()
|
# define PARAMS(args) ()
|
||||||
@ -54,6 +48,10 @@
|
|||||||
# define internal_function
|
# define internal_function
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef attribute_hidden
|
||||||
|
# define attribute_hidden
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Tell the compiler when a conditional or integer expression is
|
/* Tell the compiler when a conditional or integer expression is
|
||||||
almost always true or almost always false. */
|
almost always true or almost always false. */
|
||||||
#ifndef HAVE_BUILTIN_EXPECT
|
#ifndef HAVE_BUILTIN_EXPECT
|
||||||
@ -78,63 +76,50 @@ SWAP (i)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* This is the representation of the expressions to determine the
|
/* In-memory representation of system dependent string. */
|
||||||
plural form. */
|
struct sysdep_string_desc
|
||||||
struct expression
|
|
||||||
{
|
{
|
||||||
int nargs; /* Number of arguments. */
|
/* Length of addressed string, including the trailing NUL. */
|
||||||
enum operator
|
size_t length;
|
||||||
{
|
/* Pointer to addressed string. */
|
||||||
/* Without arguments: */
|
const char *pointer;
|
||||||
var, /* The variable "n". */
|
|
||||||
num, /* Decimal number. */
|
|
||||||
/* Unary operators: */
|
|
||||||
lnot, /* Logical NOT. */
|
|
||||||
/* Binary operators: */
|
|
||||||
mult, /* Multiplication. */
|
|
||||||
divide, /* Division. */
|
|
||||||
module, /* Module operation. */
|
|
||||||
plus, /* Addition. */
|
|
||||||
minus, /* Subtraction. */
|
|
||||||
less_than, /* Comparison. */
|
|
||||||
greater_than, /* Comparison. */
|
|
||||||
less_or_equal, /* Comparison. */
|
|
||||||
greater_or_equal, /* Comparison. */
|
|
||||||
equal, /* Comparision for equality. */
|
|
||||||
not_equal, /* Comparision for inequality. */
|
|
||||||
land, /* Logical AND. */
|
|
||||||
lor, /* Logical OR. */
|
|
||||||
/* Ternary operators: */
|
|
||||||
qmop /* Question mark operator. */
|
|
||||||
} operation;
|
|
||||||
union
|
|
||||||
{
|
|
||||||
unsigned long int num; /* Number value for `num'. */
|
|
||||||
struct expression *args[3]; /* Up to three arguments. */
|
|
||||||
} val;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/* This is the data structure to pass information to the parser and get
|
|
||||||
the result in a thread-safe way. */
|
|
||||||
struct parse_args
|
|
||||||
{
|
|
||||||
const char *cp;
|
|
||||||
struct expression *res;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/* The representation of an opened message catalog. */
|
/* The representation of an opened message catalog. */
|
||||||
struct loaded_domain
|
struct loaded_domain
|
||||||
{
|
{
|
||||||
|
/* Pointer to memory containing the .mo file. */
|
||||||
const char *data;
|
const char *data;
|
||||||
|
/* 1 if the memory is mmap()ed, 0 if the memory is malloc()ed. */
|
||||||
int use_mmap;
|
int use_mmap;
|
||||||
|
/* Size of mmap()ed memory. */
|
||||||
size_t mmap_size;
|
size_t mmap_size;
|
||||||
|
/* 1 if the .mo file uses a different endianness than this machine. */
|
||||||
int must_swap;
|
int must_swap;
|
||||||
|
/* Pointer to additional malloc()ed memory. */
|
||||||
|
void *malloced;
|
||||||
|
|
||||||
|
/* Number of static strings pairs. */
|
||||||
nls_uint32 nstrings;
|
nls_uint32 nstrings;
|
||||||
struct string_desc *orig_tab;
|
/* Pointer to descriptors of original strings in the file. */
|
||||||
struct string_desc *trans_tab;
|
const struct string_desc *orig_tab;
|
||||||
|
/* Pointer to descriptors of translated strings in the file. */
|
||||||
|
const struct string_desc *trans_tab;
|
||||||
|
|
||||||
|
/* Number of system dependent strings pairs. */
|
||||||
|
nls_uint32 n_sysdep_strings;
|
||||||
|
/* Pointer to descriptors of original sysdep strings. */
|
||||||
|
const struct sysdep_string_desc *orig_sysdep_tab;
|
||||||
|
/* Pointer to descriptors of translated sysdep strings. */
|
||||||
|
const struct sysdep_string_desc *trans_sysdep_tab;
|
||||||
|
|
||||||
|
/* Size of hash table. */
|
||||||
nls_uint32 hash_size;
|
nls_uint32 hash_size;
|
||||||
nls_uint32 *hash_tab;
|
/* Pointer to hash table. */
|
||||||
|
const nls_uint32 *hash_tab;
|
||||||
|
/* 1 if the hash table uses a different endianness than this machine. */
|
||||||
|
int must_swap_hash_tab;
|
||||||
|
|
||||||
int codeset_cntr;
|
int codeset_cntr;
|
||||||
#ifdef _LIBC
|
#ifdef _LIBC
|
||||||
__gconv_t conv;
|
__gconv_t conv;
|
||||||
@ -173,6 +158,10 @@ struct binding
|
|||||||
This variable is part of the external ABI of the GNU libintl. */
|
This variable is part of the external ABI of the GNU libintl. */
|
||||||
extern int _nl_msg_cat_cntr;
|
extern int _nl_msg_cat_cntr;
|
||||||
|
|
||||||
|
#ifndef _LIBC
|
||||||
|
const char *_nl_locale_name PARAMS ((int category, const char *categoryname));
|
||||||
|
#endif
|
||||||
|
|
||||||
struct loaded_l10nfile *_nl_find_domain PARAMS ((const char *__dirname,
|
struct loaded_l10nfile *_nl_find_domain PARAMS ((const char *__dirname,
|
||||||
char *__locale,
|
char *__locale,
|
||||||
const char *__domainname,
|
const char *__domainname,
|
||||||
@ -219,38 +208,15 @@ extern char *__bindtextdomain PARAMS ((const char *__domainname,
|
|||||||
extern char *__bind_textdomain_codeset PARAMS ((const char *__domainname,
|
extern char *__bind_textdomain_codeset PARAMS ((const char *__domainname,
|
||||||
const char *__codeset));
|
const char *__codeset));
|
||||||
#else
|
#else
|
||||||
extern char *gettext__ PARAMS ((const char *__msgid));
|
/* Declare the exported libintl_* functions, in a way that allows us to
|
||||||
extern char *dgettext__ PARAMS ((const char *__domainname,
|
call them under their real name. */
|
||||||
const char *__msgid));
|
# define _INTL_REDIRECT_MACROS
|
||||||
extern char *dcgettext__ PARAMS ((const char *__domainname,
|
# include "libgnuintl.h"
|
||||||
const char *__msgid, int __category));
|
extern char *libintl_dcigettext PARAMS ((const char *__domainname,
|
||||||
extern char *ngettext__ PARAMS ((const char *__msgid1, const char *__msgid2,
|
const char *__msgid1,
|
||||||
unsigned long int __n));
|
const char *__msgid2,
|
||||||
extern char *dngettext__ PARAMS ((const char *__domainname,
|
int __plural, unsigned long int __n,
|
||||||
const char *__msgid1, const char *__msgid2,
|
int __category));
|
||||||
unsigned long int __n));
|
|
||||||
extern char *dcngettext__ PARAMS ((const char *__domainname,
|
|
||||||
const char *__msgid1, const char *__msgid2,
|
|
||||||
unsigned long int __n, int __category));
|
|
||||||
extern char *dcigettext__ PARAMS ((const char *__domainname,
|
|
||||||
const char *__msgid1, const char *__msgid2,
|
|
||||||
int __plural, unsigned long int __n,
|
|
||||||
int __category));
|
|
||||||
extern char *textdomain__ PARAMS ((const char *__domainname));
|
|
||||||
extern char *bindtextdomain__ PARAMS ((const char *__domainname,
|
|
||||||
const char *__dirname));
|
|
||||||
extern char *bind_textdomain_codeset__ PARAMS ((const char *__domainname,
|
|
||||||
const char *__codeset));
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef _LIBC
|
|
||||||
extern void __gettext_free_exp PARAMS ((struct expression *exp))
|
|
||||||
internal_function;
|
|
||||||
extern int __gettextparse PARAMS ((void *arg));
|
|
||||||
#else
|
|
||||||
extern void gettext_free_exp__ PARAMS ((struct expression *exp))
|
|
||||||
internal_function;
|
|
||||||
extern int gettextparse__ PARAMS ((void *arg));
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* @@ begin of epilog @@ */
|
/* @@ begin of epilog @@ */
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
/* @@ end of prolog @@ */
|
/* @@ end of prolog @@ */
|
||||||
|
|
||||||
#ifndef PARAMS
|
#ifndef PARAMS
|
||||||
# if __STDC__
|
# if __STDC__ || defined __GNUC__ || defined __SUNPRO_C || defined __cplusplus || __PROTOTYPES
|
||||||
# define PARAMS(Args) Args
|
# define PARAMS(Args) Args
|
||||||
# else
|
# else
|
||||||
# define PARAMS(Args) ()
|
# define PARAMS(Args) ()
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/* intl-compat.c - Stub functions to call gettext functions from GNU gettext
|
/* intl-compat.c - Stub functions to call gettext functions from GNU gettext
|
||||||
Library.
|
Library.
|
||||||
Copyright (C) 1995, 2000, 2001 Software Foundation, Inc.
|
Copyright (C) 1995, 2000-2003 Software Foundation, Inc.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it
|
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
|
under the terms of the GNU Library General Public License as published
|
||||||
@ -21,52 +21,18 @@
|
|||||||
# include <config.h>
|
# include <config.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "libgnuintl.h"
|
|
||||||
#include "gettextP.h"
|
#include "gettextP.h"
|
||||||
|
|
||||||
/* @@ end of prolog @@ */
|
/* @@ end of prolog @@ */
|
||||||
|
|
||||||
/* This file redirects the gettext functions (without prefix or suffix) to
|
/* This file redirects the gettext functions (without prefix) to those
|
||||||
those defined in the included GNU gettext library (with "__" suffix).
|
defined in the included GNU libintl library (with "libintl_" prefix).
|
||||||
It is compiled into libintl when the included GNU gettext library is
|
It is compiled into libintl in order to make the AM_GNU_GETTEXT test
|
||||||
configured --with-included-gettext.
|
of gettext <= 0.11.2 work with the libintl library >= 0.11.3 which
|
||||||
|
has the redirections primarily in the <libintl.h> include file.
|
||||||
This redirection works also in the case that the system C library or
|
It is also compiled into libgnuintl so that libgnuintl.so can be used
|
||||||
the system libintl library contain gettext/textdomain/... functions.
|
as LD_PRELOADable library on glibc systems, to provide the extra
|
||||||
If it didn't, we would need to add preprocessor level redirections to
|
features that the functions in the libc don't have (namely, logging). */
|
||||||
libgnuintl.h of the following form:
|
|
||||||
|
|
||||||
# define gettext gettext__
|
|
||||||
# define dgettext dgettext__
|
|
||||||
# define dcgettext dcgettext__
|
|
||||||
# define ngettext ngettext__
|
|
||||||
# define dngettext dngettext__
|
|
||||||
# define dcngettext dcngettext__
|
|
||||||
# define textdomain textdomain__
|
|
||||||
# define bindtextdomain bindtextdomain__
|
|
||||||
# define bind_textdomain_codeset bind_textdomain_codeset__
|
|
||||||
|
|
||||||
How does this redirection work? There are two cases.
|
|
||||||
A. When libintl.a is linked into an executable, it works because
|
|
||||||
functions defined in the executable always override functions in
|
|
||||||
the shared libraries.
|
|
||||||
B. When libintl.so is used, it works because
|
|
||||||
1. those systems defining gettext/textdomain/... in the C library
|
|
||||||
(namely, Solaris 2.4 and newer, and GNU libc 2.0 and newer) are
|
|
||||||
ELF systems and define these symbols as weak, thus explicitly
|
|
||||||
letting other shared libraries override it.
|
|
||||||
2. those systems defining gettext/textdomain/... in a standalone
|
|
||||||
libintl.so library (namely, Solaris 2.3 and newer) have this
|
|
||||||
shared library in /usr/lib, and the linker will search /usr/lib
|
|
||||||
*after* the directory where the GNU gettext library is installed.
|
|
||||||
|
|
||||||
A third case, namely when libintl.a is linked into a shared library
|
|
||||||
whose name is not libintl.so, is not supported. In this case, on
|
|
||||||
Solaris, when -lintl precedes the linker option for the shared library
|
|
||||||
containing GNU gettext, the system's gettext would indeed override
|
|
||||||
the GNU gettext. Anyone doing this kind of stuff must be clever enough
|
|
||||||
to 1. compile libintl.a with -fPIC, 2. remove -lintl from his linker
|
|
||||||
command line. */
|
|
||||||
|
|
||||||
|
|
||||||
#undef gettext
|
#undef gettext
|
||||||
@ -80,43 +46,58 @@
|
|||||||
#undef bind_textdomain_codeset
|
#undef bind_textdomain_codeset
|
||||||
|
|
||||||
|
|
||||||
|
/* When building a DLL, we must export some functions. Note that because
|
||||||
|
the functions are only defined for binary backward compatibility, we
|
||||||
|
don't need to use __declspec(dllimport) in any case. */
|
||||||
|
#if defined _MSC_VER && BUILDING_DLL
|
||||||
|
# define DLL_EXPORTED __declspec(dllexport)
|
||||||
|
#else
|
||||||
|
# define DLL_EXPORTED
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
DLL_EXPORTED
|
||||||
char *
|
char *
|
||||||
gettext (msgid)
|
gettext (msgid)
|
||||||
const char *msgid;
|
const char *msgid;
|
||||||
{
|
{
|
||||||
return gettext__ (msgid);
|
return libintl_gettext (msgid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
DLL_EXPORTED
|
||||||
char *
|
char *
|
||||||
dgettext (domainname, msgid)
|
dgettext (domainname, msgid)
|
||||||
const char *domainname;
|
const char *domainname;
|
||||||
const char *msgid;
|
const char *msgid;
|
||||||
{
|
{
|
||||||
return dgettext__ (domainname, msgid);
|
return libintl_dgettext (domainname, msgid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
DLL_EXPORTED
|
||||||
char *
|
char *
|
||||||
dcgettext (domainname, msgid, category)
|
dcgettext (domainname, msgid, category)
|
||||||
const char *domainname;
|
const char *domainname;
|
||||||
const char *msgid;
|
const char *msgid;
|
||||||
int category;
|
int category;
|
||||||
{
|
{
|
||||||
return dcgettext__ (domainname, msgid, category);
|
return libintl_dcgettext (domainname, msgid, category);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
DLL_EXPORTED
|
||||||
char *
|
char *
|
||||||
ngettext (msgid1, msgid2, n)
|
ngettext (msgid1, msgid2, n)
|
||||||
const char *msgid1;
|
const char *msgid1;
|
||||||
const char *msgid2;
|
const char *msgid2;
|
||||||
unsigned long int n;
|
unsigned long int n;
|
||||||
{
|
{
|
||||||
return ngettext__ (msgid1, msgid2, n);
|
return libintl_ngettext (msgid1, msgid2, n);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
DLL_EXPORTED
|
||||||
char *
|
char *
|
||||||
dngettext (domainname, msgid1, msgid2, n)
|
dngettext (domainname, msgid1, msgid2, n)
|
||||||
const char *domainname;
|
const char *domainname;
|
||||||
@ -124,10 +105,11 @@ dngettext (domainname, msgid1, msgid2, n)
|
|||||||
const char *msgid2;
|
const char *msgid2;
|
||||||
unsigned long int n;
|
unsigned long int n;
|
||||||
{
|
{
|
||||||
return dngettext__ (domainname, msgid1, msgid2, n);
|
return libintl_dngettext (domainname, msgid1, msgid2, n);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
DLL_EXPORTED
|
||||||
char *
|
char *
|
||||||
dcngettext (domainname, msgid1, msgid2, n, category)
|
dcngettext (domainname, msgid1, msgid2, n, category)
|
||||||
const char *domainname;
|
const char *domainname;
|
||||||
@ -136,31 +118,34 @@ dcngettext (domainname, msgid1, msgid2, n, category)
|
|||||||
unsigned long int n;
|
unsigned long int n;
|
||||||
int category;
|
int category;
|
||||||
{
|
{
|
||||||
return dcngettext__ (domainname, msgid1, msgid2, n, category);
|
return libintl_dcngettext (domainname, msgid1, msgid2, n, category);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
DLL_EXPORTED
|
||||||
char *
|
char *
|
||||||
textdomain (domainname)
|
textdomain (domainname)
|
||||||
const char *domainname;
|
const char *domainname;
|
||||||
{
|
{
|
||||||
return textdomain__ (domainname);
|
return libintl_textdomain (domainname);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
DLL_EXPORTED
|
||||||
char *
|
char *
|
||||||
bindtextdomain (domainname, dirname)
|
bindtextdomain (domainname, dirname)
|
||||||
const char *domainname;
|
const char *domainname;
|
||||||
const char *dirname;
|
const char *dirname;
|
||||||
{
|
{
|
||||||
return bindtextdomain__ (domainname, dirname);
|
return libintl_bindtextdomain (domainname, dirname);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
DLL_EXPORTED
|
||||||
char *
|
char *
|
||||||
bind_textdomain_codeset (domainname, codeset)
|
bind_textdomain_codeset (domainname, codeset)
|
||||||
const char *domainname;
|
const char *domainname;
|
||||||
const char *codeset;
|
const char *codeset;
|
||||||
{
|
{
|
||||||
return bind_textdomain_codeset__ (domainname, codeset);
|
return libintl_bind_textdomain_codeset (domainname, codeset);
|
||||||
}
|
}
|
||||||
|
144
intl/l10nflist.c
144
intl/l10nflist.c
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
|
/* Copyright (C) 1995-1999, 2000, 2001, 2002 Free Software Foundation, Inc.
|
||||||
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
|
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it
|
This program is free software; you can redistribute it and/or modify it
|
||||||
@ -28,11 +28,6 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#if !HAVE_STRCHR && !defined _LIBC
|
|
||||||
# ifndef strchr
|
|
||||||
# define strchr index
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined _LIBC || defined HAVE_ARGZ_H
|
#if defined _LIBC || defined HAVE_ARGZ_H
|
||||||
# include <argz.h>
|
# include <argz.h>
|
||||||
@ -67,6 +62,24 @@ static char *stpcpy PARAMS ((char *dest, const char *src));
|
|||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Pathname support.
|
||||||
|
ISSLASH(C) tests whether C is a directory separator character.
|
||||||
|
IS_ABSOLUTE_PATH(P) tests whether P is an absolute path. If it is not,
|
||||||
|
it may be concatenated to a directory pathname.
|
||||||
|
*/
|
||||||
|
#if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__
|
||||||
|
/* Win32, OS/2, DOS */
|
||||||
|
# define ISSLASH(C) ((C) == '/' || (C) == '\\')
|
||||||
|
# define HAS_DEVICE(P) \
|
||||||
|
((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \
|
||||||
|
&& (P)[1] == ':')
|
||||||
|
# define IS_ABSOLUTE_PATH(P) (ISSLASH ((P)[0]) || HAS_DEVICE (P))
|
||||||
|
#else
|
||||||
|
/* Unix */
|
||||||
|
# define ISSLASH(C) ((C) == '/')
|
||||||
|
# define IS_ABSOLUTE_PATH(P) ISSLASH ((P)[0])
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Define function which are usually not available. */
|
/* Define function which are usually not available. */
|
||||||
|
|
||||||
#if !defined _LIBC && !defined HAVE___ARGZ_COUNT
|
#if !defined _LIBC && !defined HAVE___ARGZ_COUNT
|
||||||
@ -90,6 +103,10 @@ argz_count__ (argz, len)
|
|||||||
}
|
}
|
||||||
# undef __argz_count
|
# undef __argz_count
|
||||||
# define __argz_count(argz, len) argz_count__ (argz, len)
|
# define __argz_count(argz, len) argz_count__ (argz, len)
|
||||||
|
#else
|
||||||
|
# ifdef _LIBC
|
||||||
|
# define __argz_count(argz, len) INTUSE(__argz_count) (argz, len)
|
||||||
|
# endif
|
||||||
#endif /* !_LIBC && !HAVE___ARGZ_COUNT */
|
#endif /* !_LIBC && !HAVE___ARGZ_COUNT */
|
||||||
|
|
||||||
#if !defined _LIBC && !defined HAVE___ARGZ_STRINGIFY
|
#if !defined _LIBC && !defined HAVE___ARGZ_STRINGIFY
|
||||||
@ -114,6 +131,11 @@ argz_stringify__ (argz, len, sep)
|
|||||||
}
|
}
|
||||||
# undef __argz_stringify
|
# undef __argz_stringify
|
||||||
# define __argz_stringify(argz, len, sep) argz_stringify__ (argz, len, sep)
|
# define __argz_stringify(argz, len, sep) argz_stringify__ (argz, len, sep)
|
||||||
|
#else
|
||||||
|
# ifdef _LIBC
|
||||||
|
# define __argz_stringify(argz, len, sep) \
|
||||||
|
INTUSE(__argz_stringify) (argz, len, sep)
|
||||||
|
# endif
|
||||||
#endif /* !_LIBC && !HAVE___ARGZ_STRINGIFY */
|
#endif /* !_LIBC && !HAVE___ARGZ_STRINGIFY */
|
||||||
|
|
||||||
#if !defined _LIBC && !defined HAVE___ARGZ_NEXT
|
#if !defined _LIBC && !defined HAVE___ARGZ_NEXT
|
||||||
@ -181,12 +203,18 @@ _nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, mask, language,
|
|||||||
int do_allocate;
|
int do_allocate;
|
||||||
{
|
{
|
||||||
char *abs_filename;
|
char *abs_filename;
|
||||||
struct loaded_l10nfile *last = NULL;
|
struct loaded_l10nfile **lastp;
|
||||||
struct loaded_l10nfile *retval;
|
struct loaded_l10nfile *retval;
|
||||||
char *cp;
|
char *cp;
|
||||||
|
size_t dirlist_count;
|
||||||
size_t entries;
|
size_t entries;
|
||||||
int cnt;
|
int cnt;
|
||||||
|
|
||||||
|
/* If LANGUAGE contains an absolute directory specification, we ignore
|
||||||
|
DIRLIST. */
|
||||||
|
if (IS_ABSOLUTE_PATH (language))
|
||||||
|
dirlist_len = 0;
|
||||||
|
|
||||||
/* Allocate room for the full file name. */
|
/* Allocate room for the full file name. */
|
||||||
abs_filename = (char *) malloc (dirlist_len
|
abs_filename = (char *) malloc (dirlist_len
|
||||||
+ strlen (language)
|
+ strlen (language)
|
||||||
@ -204,7 +232,7 @@ _nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, mask, language,
|
|||||||
+ (((mask & CEN_SPONSOR) != 0
|
+ (((mask & CEN_SPONSOR) != 0
|
||||||
|| (mask & CEN_REVISION) != 0)
|
|| (mask & CEN_REVISION) != 0)
|
||||||
? (1 + ((mask & CEN_SPONSOR) != 0
|
? (1 + ((mask & CEN_SPONSOR) != 0
|
||||||
? strlen (sponsor) + 1 : 0)
|
? strlen (sponsor) : 0)
|
||||||
+ ((mask & CEN_REVISION) != 0
|
+ ((mask & CEN_REVISION) != 0
|
||||||
? strlen (revision) + 1 : 0)) : 0)
|
? strlen (revision) + 1 : 0)) : 0)
|
||||||
+ 1 + strlen (filename) + 1);
|
+ 1 + strlen (filename) + 1);
|
||||||
@ -212,14 +240,16 @@ _nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, mask, language,
|
|||||||
if (abs_filename == NULL)
|
if (abs_filename == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
retval = NULL;
|
|
||||||
last = NULL;
|
|
||||||
|
|
||||||
/* Construct file name. */
|
/* Construct file name. */
|
||||||
memcpy (abs_filename, dirlist, dirlist_len);
|
cp = abs_filename;
|
||||||
__argz_stringify (abs_filename, dirlist_len, PATH_SEPARATOR);
|
if (dirlist_len > 0)
|
||||||
cp = abs_filename + (dirlist_len - 1);
|
{
|
||||||
*cp++ = '/';
|
memcpy (cp, dirlist, dirlist_len);
|
||||||
|
__argz_stringify (cp, dirlist_len, PATH_SEPARATOR);
|
||||||
|
cp += dirlist_len;
|
||||||
|
cp[-1] = '/';
|
||||||
|
}
|
||||||
|
|
||||||
cp = stpcpy (cp, language);
|
cp = stpcpy (cp, language);
|
||||||
|
|
||||||
if ((mask & TERRITORY) != 0)
|
if ((mask & TERRITORY) != 0)
|
||||||
@ -266,7 +296,7 @@ _nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, mask, language,
|
|||||||
|
|
||||||
/* Look in list of already loaded domains whether it is already
|
/* Look in list of already loaded domains whether it is already
|
||||||
available. */
|
available. */
|
||||||
last = NULL;
|
lastp = l10nfile_list;
|
||||||
for (retval = *l10nfile_list; retval != NULL; retval = retval->next)
|
for (retval = *l10nfile_list; retval != NULL; retval = retval->next)
|
||||||
if (retval->filename != NULL)
|
if (retval->filename != NULL)
|
||||||
{
|
{
|
||||||
@ -281,7 +311,7 @@ _nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, mask, language,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
last = retval;
|
lastp = &retval->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (retval != NULL || do_allocate == 0)
|
if (retval != NULL || do_allocate == 0)
|
||||||
@ -290,48 +320,66 @@ _nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, mask, language,
|
|||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
retval = (struct loaded_l10nfile *)
|
dirlist_count = (dirlist_len > 0 ? __argz_count (dirlist, dirlist_len) : 1);
|
||||||
malloc (sizeof (*retval) + (__argz_count (dirlist, dirlist_len)
|
|
||||||
* (1 << pop (mask))
|
/* Allocate a new loaded_l10nfile. */
|
||||||
* sizeof (struct loaded_l10nfile *)));
|
retval =
|
||||||
|
(struct loaded_l10nfile *)
|
||||||
|
malloc (sizeof (*retval)
|
||||||
|
+ (((dirlist_count << pop (mask)) + (dirlist_count > 1 ? 1 : 0))
|
||||||
|
* sizeof (struct loaded_l10nfile *)));
|
||||||
if (retval == NULL)
|
if (retval == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
retval->filename = abs_filename;
|
retval->filename = abs_filename;
|
||||||
retval->decided = (__argz_count (dirlist, dirlist_len) != 1
|
|
||||||
|
/* We set retval->data to NULL here; it is filled in later.
|
||||||
|
Setting retval->decided to 1 here means that retval does not
|
||||||
|
correspond to a real file (dirlist_count > 1) or is not worth
|
||||||
|
looking up (if an unnormalized codeset was specified). */
|
||||||
|
retval->decided = (dirlist_count > 1
|
||||||
|| ((mask & XPG_CODESET) != 0
|
|| ((mask & XPG_CODESET) != 0
|
||||||
&& (mask & XPG_NORM_CODESET) != 0));
|
&& (mask & XPG_NORM_CODESET) != 0));
|
||||||
retval->data = NULL;
|
retval->data = NULL;
|
||||||
|
|
||||||
if (last == NULL)
|
retval->next = *lastp;
|
||||||
{
|
*lastp = retval;
|
||||||
retval->next = *l10nfile_list;
|
|
||||||
*l10nfile_list = retval;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
retval->next = last->next;
|
|
||||||
last->next = retval;
|
|
||||||
}
|
|
||||||
|
|
||||||
entries = 0;
|
entries = 0;
|
||||||
/* If the DIRLIST is a real list the RETVAL entry corresponds not to
|
/* Recurse to fill the inheritance list of RETVAL.
|
||||||
a real file. So we have to use the DIRLIST separation mechanism
|
If the DIRLIST is a real list (i.e. DIRLIST_COUNT > 1), the RETVAL
|
||||||
of the inner loop. */
|
entry does not correspond to a real file; retval->filename contains
|
||||||
cnt = __argz_count (dirlist, dirlist_len) == 1 ? mask - 1 : mask;
|
colons. In this case we loop across all elements of DIRLIST and
|
||||||
for (; cnt >= 0; --cnt)
|
across all bit patterns dominated by MASK.
|
||||||
|
If the DIRLIST is a single directory or entirely redundant (i.e.
|
||||||
|
DIRLIST_COUNT == 1), we loop across all bit patterns dominated by
|
||||||
|
MASK, excluding MASK itself.
|
||||||
|
In either case, we loop down from MASK to 0. This has the effect
|
||||||
|
that the extra bits in the locale name are dropped in this order:
|
||||||
|
first the modifier, then the territory, then the codeset, then the
|
||||||
|
normalized_codeset. */
|
||||||
|
for (cnt = dirlist_count > 1 ? mask : mask - 1; cnt >= 0; --cnt)
|
||||||
if ((cnt & ~mask) == 0
|
if ((cnt & ~mask) == 0
|
||||||
&& ((cnt & CEN_SPECIFIC) == 0 || (cnt & XPG_SPECIFIC) == 0)
|
&& ((cnt & CEN_SPECIFIC) == 0 || (cnt & XPG_SPECIFIC) == 0)
|
||||||
&& ((cnt & XPG_CODESET) == 0 || (cnt & XPG_NORM_CODESET) == 0))
|
&& ((cnt & XPG_CODESET) == 0 || (cnt & XPG_NORM_CODESET) == 0))
|
||||||
{
|
{
|
||||||
/* Iterate over all elements of the DIRLIST. */
|
if (dirlist_count > 1)
|
||||||
char *dir = NULL;
|
{
|
||||||
|
/* Iterate over all elements of the DIRLIST. */
|
||||||
|
char *dir = NULL;
|
||||||
|
|
||||||
while ((dir = __argz_next ((char *) dirlist, dirlist_len, dir))
|
while ((dir = __argz_next ((char *) dirlist, dirlist_len, dir))
|
||||||
!= NULL)
|
!= NULL)
|
||||||
|
retval->successor[entries++]
|
||||||
|
= _nl_make_l10nflist (l10nfile_list, dir, strlen (dir) + 1,
|
||||||
|
cnt, language, territory, codeset,
|
||||||
|
normalized_codeset, modifier, special,
|
||||||
|
sponsor, revision, filename, 1);
|
||||||
|
}
|
||||||
|
else
|
||||||
retval->successor[entries++]
|
retval->successor[entries++]
|
||||||
= _nl_make_l10nflist (l10nfile_list, dir, strlen (dir) + 1, cnt,
|
= _nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len,
|
||||||
language, territory, codeset,
|
cnt, language, territory, codeset,
|
||||||
normalized_codeset, modifier, special,
|
normalized_codeset, modifier, special,
|
||||||
sponsor, revision, filename, 1);
|
sponsor, revision, filename, 1);
|
||||||
}
|
}
|
||||||
@ -356,11 +404,11 @@ _nl_normalize_codeset (codeset, name_len)
|
|||||||
size_t cnt;
|
size_t cnt;
|
||||||
|
|
||||||
for (cnt = 0; cnt < name_len; ++cnt)
|
for (cnt = 0; cnt < name_len; ++cnt)
|
||||||
if (isalnum (codeset[cnt]))
|
if (isalnum ((unsigned char) codeset[cnt]))
|
||||||
{
|
{
|
||||||
++len;
|
++len;
|
||||||
|
|
||||||
if (isalpha (codeset[cnt]))
|
if (isalpha ((unsigned char) codeset[cnt]))
|
||||||
only_digit = 0;
|
only_digit = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -374,9 +422,9 @@ _nl_normalize_codeset (codeset, name_len)
|
|||||||
wp = retval;
|
wp = retval;
|
||||||
|
|
||||||
for (cnt = 0; cnt < name_len; ++cnt)
|
for (cnt = 0; cnt < name_len; ++cnt)
|
||||||
if (isalpha (codeset[cnt]))
|
if (isalpha ((unsigned char) codeset[cnt]))
|
||||||
*wp++ = tolower (codeset[cnt]);
|
*wp++ = tolower ((unsigned char) codeset[cnt]);
|
||||||
else if (isdigit (codeset[cnt]))
|
else if (isdigit ((unsigned char) codeset[cnt]))
|
||||||
*wp++ = codeset[cnt];
|
*wp++ = codeset[cnt];
|
||||||
|
|
||||||
*wp = '\0';
|
*wp = '\0';
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 1996-1999, 2000, 2001 Free Software Foundation, Inc.
|
/* Copyright (C) 1996-1999, 2000-2002 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
|
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
|
||||||
|
|
||||||
@ -20,8 +20,20 @@
|
|||||||
#ifndef _LOADINFO_H
|
#ifndef _LOADINFO_H
|
||||||
#define _LOADINFO_H 1
|
#define _LOADINFO_H 1
|
||||||
|
|
||||||
|
/* Declarations of locale dependent catalog lookup functions.
|
||||||
|
Implemented in
|
||||||
|
|
||||||
|
localealias.c Possibly replace a locale name by another.
|
||||||
|
explodename.c Split a locale name into its various fields.
|
||||||
|
l10nflist.c Generate a list of filenames of possible message catalogs.
|
||||||
|
finddomain.c Find and open the relevant message catalogs.
|
||||||
|
|
||||||
|
The main function _nl_find_domain() in finddomain.c is declared
|
||||||
|
in gettextP.h.
|
||||||
|
*/
|
||||||
|
|
||||||
#ifndef PARAMS
|
#ifndef PARAMS
|
||||||
# if __STDC__
|
# if __STDC__ || defined __GNUC__ || defined __SUNPRO_C || defined __cplusplus || __PROTOTYPES
|
||||||
# define PARAMS(args) args
|
# define PARAMS(args) args
|
||||||
# else
|
# else
|
||||||
# define PARAMS(args) ()
|
# define PARAMS(args) ()
|
||||||
@ -80,6 +92,20 @@ struct loaded_l10nfile
|
|||||||
extern const char *_nl_normalize_codeset PARAMS ((const char *codeset,
|
extern const char *_nl_normalize_codeset PARAMS ((const char *codeset,
|
||||||
size_t name_len));
|
size_t name_len));
|
||||||
|
|
||||||
|
/* Lookup a locale dependent file.
|
||||||
|
*L10NFILE_LIST denotes a pool of lookup results of locale dependent
|
||||||
|
files of the same kind, sorted in decreasing order of ->filename.
|
||||||
|
DIRLIST and DIRLIST_LEN are an argz list of directories in which to
|
||||||
|
look, containing at least one directory (i.e. DIRLIST_LEN > 0).
|
||||||
|
MASK, LANGUAGE, TERRITORY, CODESET, NORMALIZED_CODESET, MODIFIER,
|
||||||
|
SPECIAL, SPONSOR, REVISION are the pieces of the locale name, as
|
||||||
|
produced by _nl_explode_name(). FILENAME is the filename suffix.
|
||||||
|
The return value is the lookup result, either found in *L10NFILE_LIST,
|
||||||
|
or - if DO_ALLOCATE is nonzero - freshly allocated, or possibly NULL.
|
||||||
|
If the return value is non-NULL, it is added to *L10NFILE_LIST, and
|
||||||
|
its ->next field denotes the chaining inside *L10NFILE_LIST, and
|
||||||
|
furthermore its ->successor[] field contains a list of other lookup
|
||||||
|
results from which this lookup result inherits. */
|
||||||
extern struct loaded_l10nfile *
|
extern struct loaded_l10nfile *
|
||||||
_nl_make_l10nflist PARAMS ((struct loaded_l10nfile **l10nfile_list,
|
_nl_make_l10nflist PARAMS ((struct loaded_l10nfile **l10nfile_list,
|
||||||
const char *dirlist, size_t dirlist_len, int mask,
|
const char *dirlist, size_t dirlist_len, int mask,
|
||||||
@ -90,11 +116,29 @@ _nl_make_l10nflist PARAMS ((struct loaded_l10nfile **l10nfile_list,
|
|||||||
const char *sponsor, const char *revision,
|
const char *sponsor, const char *revision,
|
||||||
const char *filename, int do_allocate));
|
const char *filename, int do_allocate));
|
||||||
|
|
||||||
|
/* Lookup the real locale name for a locale alias NAME, or NULL if
|
||||||
|
NAME is not a locale alias (but possibly a real locale name).
|
||||||
|
The return value is statically allocated and must not be freed. */
|
||||||
extern const char *_nl_expand_alias PARAMS ((const char *name));
|
extern const char *_nl_expand_alias PARAMS ((const char *name));
|
||||||
|
|
||||||
/* normalized_codeset is dynamically allocated and has to be freed by
|
/* Split a locale name NAME into its pieces: language, modifier,
|
||||||
the caller. */
|
territory, codeset, special, sponsor, revision.
|
||||||
|
NAME gets destructively modified: NUL bytes are inserted here and
|
||||||
|
there. *LANGUAGE gets assigned NAME. Each of *MODIFIER, *TERRITORY,
|
||||||
|
*CODESET, *SPECIAL, *SPONSOR, *REVISION gets assigned either a
|
||||||
|
pointer into the old NAME string, or NULL. *NORMALIZED_CODESET
|
||||||
|
gets assigned the expanded *CODESET, if it is different from *CODESET;
|
||||||
|
this one is dynamically allocated and has to be freed by the caller.
|
||||||
|
The return value is a bitmask, where each bit corresponds to one
|
||||||
|
filled-in value:
|
||||||
|
XPG_MODIFIER, CEN_AUDIENCE for *MODIFIER,
|
||||||
|
TERRITORY for *TERRITORY,
|
||||||
|
XPG_CODESET for *CODESET,
|
||||||
|
XPG_NORM_CODESET for *NORMALIZED_CODESET,
|
||||||
|
CEN_SPECIAL for *SPECIAL,
|
||||||
|
CEN_SPONSOR for *SPONSOR,
|
||||||
|
CEN_REVISION for *REVISION.
|
||||||
|
*/
|
||||||
extern int _nl_explode_name PARAMS ((char *name, const char **language,
|
extern int _nl_explode_name PARAMS ((char *name, const char **language,
|
||||||
const char **modifier,
|
const char **modifier,
|
||||||
const char **territory,
|
const char **territory,
|
||||||
@ -104,6 +148,9 @@ extern int _nl_explode_name PARAMS ((char *name, const char **language,
|
|||||||
const char **sponsor,
|
const char **sponsor,
|
||||||
const char **revision));
|
const char **revision));
|
||||||
|
|
||||||
|
/* Split a locale name NAME into a leading language part and all the
|
||||||
|
rest. Return a pointer to the first character after the language,
|
||||||
|
i.e. to the first byte of the rest. */
|
||||||
extern char *_nl_find_language PARAMS ((const char *name));
|
extern char *_nl_find_language PARAMS ((const char *name));
|
||||||
|
|
||||||
#endif /* loadinfo.h */
|
#endif /* loadinfo.h */
|
||||||
|
1055
intl/loadmsgcat.c
1055
intl/loadmsgcat.c
File diff suppressed because it is too large
Load Diff
@ -1,6 +1,6 @@
|
|||||||
/* Determine a canonical name for the current locale's character encoding.
|
/* Determine a canonical name for the current locale's character encoding.
|
||||||
|
|
||||||
Copyright (C) 2000-2001 Free Software Foundation, Inc.
|
Copyright (C) 2000-2003 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it
|
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
|
under the terms of the GNU Library General Public License as published
|
||||||
@ -17,12 +17,15 @@
|
|||||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
USA. */
|
USA. */
|
||||||
|
|
||||||
/* Written by Bruno Haible <haible@clisp.cons.org>. */
|
/* Written by Bruno Haible <bruno@clisp.org>. */
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
# include <config.h>
|
# include <config.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Specification. */
|
||||||
|
#include "localcharset.h"
|
||||||
|
|
||||||
#if HAVE_STDDEF_H
|
#if HAVE_STDDEF_H
|
||||||
# include <stddef.h>
|
# include <stddef.h>
|
||||||
#endif
|
#endif
|
||||||
@ -42,7 +45,12 @@
|
|||||||
# define WIN32
|
# define WIN32
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef WIN32
|
#if defined __EMX__
|
||||||
|
/* Assume EMX program runs on OS/2, even if compiled under DOS. */
|
||||||
|
# define OS2
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined WIN32
|
||||||
# if HAVE_LANGINFO_CODESET
|
# if HAVE_LANGINFO_CODESET
|
||||||
# include <langinfo.h>
|
# include <langinfo.h>
|
||||||
# else
|
# else
|
||||||
@ -50,10 +58,25 @@
|
|||||||
# include <locale.h>
|
# include <locale.h>
|
||||||
# endif
|
# endif
|
||||||
# endif
|
# endif
|
||||||
#else /* WIN32 */
|
#elif defined WIN32
|
||||||
# define WIN32_LEAN_AND_MEAN
|
# define WIN32_LEAN_AND_MEAN
|
||||||
# include <windows.h>
|
# include <windows.h>
|
||||||
#endif
|
#endif
|
||||||
|
#if defined OS2
|
||||||
|
# define INCL_DOS
|
||||||
|
# include <os2.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if ENABLE_RELOCATABLE
|
||||||
|
# include "relocatable.h"
|
||||||
|
#else
|
||||||
|
# define relocate(pathname) (pathname)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__
|
||||||
|
/* Win32, OS/2, DOS */
|
||||||
|
# define ISSLASH(C) ((C) == '/' || (C) == '\\')
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef DIRECTORY_SEPARATOR
|
#ifndef DIRECTORY_SEPARATOR
|
||||||
# define DIRECTORY_SEPARATOR '/'
|
# define DIRECTORY_SEPARATOR '/'
|
||||||
@ -63,6 +86,11 @@
|
|||||||
# define ISSLASH(C) ((C) == DIRECTORY_SEPARATOR)
|
# define ISSLASH(C) ((C) == DIRECTORY_SEPARATOR)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_GETC_UNLOCKED
|
||||||
|
# undef getc
|
||||||
|
# define getc getc_unlocked
|
||||||
|
#endif
|
||||||
|
|
||||||
/* The following static variable is declared 'volatile' to avoid a
|
/* The following static variable is declared 'volatile' to avoid a
|
||||||
possible multithread problem in the function get_charset_aliases. If we
|
possible multithread problem in the function get_charset_aliases. If we
|
||||||
are running in a threaded environment, and if two threads initialize
|
are running in a threaded environment, and if two threads initialize
|
||||||
@ -86,9 +114,9 @@ get_charset_aliases ()
|
|||||||
cp = charset_aliases;
|
cp = charset_aliases;
|
||||||
if (cp == NULL)
|
if (cp == NULL)
|
||||||
{
|
{
|
||||||
#ifndef WIN32
|
#if !(defined VMS || defined WIN32)
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
const char *dir = LIBDIR;
|
const char *dir = relocate (LIBDIR);
|
||||||
const char *base = "charset.alias";
|
const char *base = "charset.alias";
|
||||||
char *file_name;
|
char *file_name;
|
||||||
|
|
||||||
@ -138,19 +166,19 @@ get_charset_aliases ()
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
ungetc (c, fp);
|
ungetc (c, fp);
|
||||||
if (fscanf(fp, "%50s %50s", buf1, buf2) < 2)
|
if (fscanf (fp, "%50s %50s", buf1, buf2) < 2)
|
||||||
break;
|
break;
|
||||||
l1 = strlen (buf1);
|
l1 = strlen (buf1);
|
||||||
l2 = strlen (buf2);
|
l2 = strlen (buf2);
|
||||||
if (res_size == 0)
|
if (res_size == 0)
|
||||||
{
|
{
|
||||||
res_size = l1 + 1 + l2 + 1;
|
res_size = l1 + 1 + l2 + 1;
|
||||||
res_ptr = malloc (res_size + 1);
|
res_ptr = (char *) malloc (res_size + 1);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
res_size += l1 + 1 + l2 + 1;
|
res_size += l1 + 1 + l2 + 1;
|
||||||
res_ptr = realloc (res_ptr, res_size + 1);
|
res_ptr = (char *) realloc (res_ptr, res_size + 1);
|
||||||
}
|
}
|
||||||
if (res_ptr == NULL)
|
if (res_ptr == NULL)
|
||||||
{
|
{
|
||||||
@ -174,14 +202,54 @@ get_charset_aliases ()
|
|||||||
if (file_name != NULL)
|
if (file_name != NULL)
|
||||||
free (file_name);
|
free (file_name);
|
||||||
|
|
||||||
#else /* WIN32 */
|
#else
|
||||||
|
|
||||||
|
# if defined VMS
|
||||||
|
/* To avoid the troubles of an extra file charset.alias_vms in the
|
||||||
|
sources of many GNU packages, simply inline the aliases here. */
|
||||||
|
/* The list of encodings is taken from the OpenVMS 7.3-1 documentation
|
||||||
|
"Compaq C Run-Time Library Reference Manual for OpenVMS systems"
|
||||||
|
section 10.7 "Handling Different Character Sets". */
|
||||||
|
cp = "ISO8859-1" "\0" "ISO-8859-1" "\0"
|
||||||
|
"ISO8859-2" "\0" "ISO-8859-2" "\0"
|
||||||
|
"ISO8859-5" "\0" "ISO-8859-5" "\0"
|
||||||
|
"ISO8859-7" "\0" "ISO-8859-7" "\0"
|
||||||
|
"ISO8859-8" "\0" "ISO-8859-8" "\0"
|
||||||
|
"ISO8859-9" "\0" "ISO-8859-9" "\0"
|
||||||
|
/* Japanese */
|
||||||
|
"eucJP" "\0" "EUC-JP" "\0"
|
||||||
|
"SJIS" "\0" "SHIFT_JIS" "\0"
|
||||||
|
"DECKANJI" "\0" "DEC-KANJI" "\0"
|
||||||
|
"SDECKANJI" "\0" "EUC-JP" "\0"
|
||||||
|
/* Chinese */
|
||||||
|
"eucTW" "\0" "EUC-TW" "\0"
|
||||||
|
"DECHANYU" "\0" "DEC-HANYU" "\0"
|
||||||
|
"DECHANZI" "\0" "GB2312" "\0"
|
||||||
|
/* Korean */
|
||||||
|
"DECKOREAN" "\0" "EUC-KR" "\0";
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# if defined WIN32
|
||||||
/* To avoid the troubles of installing a separate file in the same
|
/* To avoid the troubles of installing a separate file in the same
|
||||||
directory as the DLL and of retrieving the DLL's directory at
|
directory as the DLL and of retrieving the DLL's directory at
|
||||||
runtime, simply inline the aliases here. */
|
runtime, simply inline the aliases here. */
|
||||||
|
|
||||||
cp = "CP936" "\0" "GBK" "\0"
|
cp = "CP936" "\0" "GBK" "\0"
|
||||||
"CP1361" "\0" "JOHAB" "\0";
|
"CP1361" "\0" "JOHAB" "\0"
|
||||||
|
"CP20127" "\0" "ASCII" "\0"
|
||||||
|
"CP20866" "\0" "KOI8-R" "\0"
|
||||||
|
"CP21866" "\0" "KOI8-RU" "\0"
|
||||||
|
"CP28591" "\0" "ISO-8859-1" "\0"
|
||||||
|
"CP28592" "\0" "ISO-8859-2" "\0"
|
||||||
|
"CP28593" "\0" "ISO-8859-3" "\0"
|
||||||
|
"CP28594" "\0" "ISO-8859-4" "\0"
|
||||||
|
"CP28595" "\0" "ISO-8859-5" "\0"
|
||||||
|
"CP28596" "\0" "ISO-8859-6" "\0"
|
||||||
|
"CP28597" "\0" "ISO-8859-7" "\0"
|
||||||
|
"CP28598" "\0" "ISO-8859-8" "\0"
|
||||||
|
"CP28599" "\0" "ISO-8859-9" "\0"
|
||||||
|
"CP28605" "\0" "ISO-8859-15" "\0";
|
||||||
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
charset_aliases = cp;
|
charset_aliases = cp;
|
||||||
@ -205,7 +273,7 @@ locale_charset ()
|
|||||||
const char *codeset;
|
const char *codeset;
|
||||||
const char *aliases;
|
const char *aliases;
|
||||||
|
|
||||||
#ifndef WIN32
|
#if !(defined WIN32 || defined OS2)
|
||||||
|
|
||||||
# if HAVE_LANGINFO_CODESET
|
# if HAVE_LANGINFO_CODESET
|
||||||
|
|
||||||
@ -242,14 +310,67 @@ locale_charset ()
|
|||||||
|
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
#else /* WIN32 */
|
#elif defined WIN32
|
||||||
|
|
||||||
static char buf[2 + 10 + 1];
|
static char buf[2 + 10 + 1];
|
||||||
|
|
||||||
/* Win32 has a function returning the locale's codepage as a number. */
|
/* Woe32 has a function returning the locale's codepage as a number. */
|
||||||
sprintf (buf, "CP%u", GetACP ());
|
sprintf (buf, "CP%u", GetACP ());
|
||||||
codeset = buf;
|
codeset = buf;
|
||||||
|
|
||||||
|
#elif defined OS2
|
||||||
|
|
||||||
|
const char *locale;
|
||||||
|
static char buf[2 + 10 + 1];
|
||||||
|
ULONG cp[3];
|
||||||
|
ULONG cplen;
|
||||||
|
|
||||||
|
/* Allow user to override the codeset, as set in the operating system,
|
||||||
|
with standard language environment variables. */
|
||||||
|
locale = getenv ("LC_ALL");
|
||||||
|
if (locale == NULL || locale[0] == '\0')
|
||||||
|
{
|
||||||
|
locale = getenv ("LC_CTYPE");
|
||||||
|
if (locale == NULL || locale[0] == '\0')
|
||||||
|
locale = getenv ("LANG");
|
||||||
|
}
|
||||||
|
if (locale != NULL && locale[0] != '\0')
|
||||||
|
{
|
||||||
|
/* If the locale name contains an encoding after the dot, return it. */
|
||||||
|
const char *dot = strchr (locale, '.');
|
||||||
|
|
||||||
|
if (dot != NULL)
|
||||||
|
{
|
||||||
|
const char *modifier;
|
||||||
|
|
||||||
|
dot++;
|
||||||
|
/* Look for the possible @... trailer and remove it, if any. */
|
||||||
|
modifier = strchr (dot, '@');
|
||||||
|
if (modifier == NULL)
|
||||||
|
return dot;
|
||||||
|
if (modifier - dot < sizeof (buf))
|
||||||
|
{
|
||||||
|
memcpy (buf, dot, modifier - dot);
|
||||||
|
buf [modifier - dot] = '\0';
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Resolve through the charset.alias file. */
|
||||||
|
codeset = locale;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* OS/2 has a function returning the locale's codepage as a number. */
|
||||||
|
if (DosQueryCp (sizeof (cp), cp, &cplen))
|
||||||
|
codeset = "";
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sprintf (buf, "CP%u", cp[0]);
|
||||||
|
codeset = buf;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (codeset == NULL)
|
if (codeset == NULL)
|
||||||
@ -267,5 +388,11 @@ locale_charset ()
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Don't return an empty string. GNU libc and GNU libiconv interpret
|
||||||
|
the empty string as denoting "the locale's character encoding",
|
||||||
|
thus GNU libiconv would call this function a second time. */
|
||||||
|
if (codeset[0] == '\0')
|
||||||
|
codeset = "ASCII";
|
||||||
|
|
||||||
return codeset;
|
return codeset;
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Handle aliases for locale names.
|
/* Handle aliases for locale names.
|
||||||
Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
|
Copyright (C) 1995-1999, 2000-2001, 2003 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it
|
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
|
under the terms of the GNU Library General Public License as published
|
||||||
@ -29,36 +29,45 @@
|
|||||||
|
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#if defined _LIBC || defined HAVE___FSETLOCKING
|
||||||
|
# include <stdio_ext.h>
|
||||||
|
#endif
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
|
# undef alloca
|
||||||
# define alloca __builtin_alloca
|
# define alloca __builtin_alloca
|
||||||
# define HAVE_ALLOCA 1
|
# define HAVE_ALLOCA 1
|
||||||
#else
|
#else
|
||||||
# if defined HAVE_ALLOCA_H || defined _LIBC
|
# ifdef _MSC_VER
|
||||||
# include <alloca.h>
|
# include <malloc.h>
|
||||||
|
# define alloca _alloca
|
||||||
# else
|
# else
|
||||||
# ifdef _AIX
|
# if defined HAVE_ALLOCA_H || defined _LIBC
|
||||||
#pragma alloca
|
# include <alloca.h>
|
||||||
# else
|
# else
|
||||||
# ifndef alloca
|
# ifdef _AIX
|
||||||
|
#pragma alloca
|
||||||
|
# else
|
||||||
|
# ifndef alloca
|
||||||
char *alloca ();
|
char *alloca ();
|
||||||
|
# endif
|
||||||
# endif
|
# endif
|
||||||
# endif
|
# endif
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#if !HAVE_STRCHR && !defined _LIBC
|
|
||||||
# ifndef strchr
|
|
||||||
# define strchr index
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "gettextP.h"
|
#include "gettextP.h"
|
||||||
|
|
||||||
|
#if ENABLE_RELOCATABLE
|
||||||
|
# include "relocatable.h"
|
||||||
|
#else
|
||||||
|
# define relocate(pathname) (pathname)
|
||||||
|
#endif
|
||||||
|
|
||||||
/* @@ end of prolog @@ */
|
/* @@ end of prolog @@ */
|
||||||
|
|
||||||
#ifdef _LIBC
|
#ifdef _LIBC
|
||||||
@ -71,6 +80,7 @@ char *alloca ();
|
|||||||
# define mempcpy __mempcpy
|
# define mempcpy __mempcpy
|
||||||
# endif
|
# endif
|
||||||
# define HAVE_MEMPCPY 1
|
# define HAVE_MEMPCPY 1
|
||||||
|
# define HAVE___FSETLOCKING 1
|
||||||
|
|
||||||
/* We need locking here since we can be called from different places. */
|
/* We need locking here since we can be called from different places. */
|
||||||
# include <bits/libc-lock.h>
|
# include <bits/libc-lock.h>
|
||||||
@ -82,6 +92,15 @@ __libc_lock_define_initialized (static, lock);
|
|||||||
# define internal_function
|
# define internal_function
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Some optimizations for glibc. */
|
||||||
|
#ifdef _LIBC
|
||||||
|
# define FEOF(fp) feof_unlocked (fp)
|
||||||
|
# define FGETS(buf, n, fp) fgets_unlocked (buf, n, fp)
|
||||||
|
#else
|
||||||
|
# define FEOF(fp) feof (fp)
|
||||||
|
# define FGETS(buf, n, fp) fgets (buf, n, fp)
|
||||||
|
#endif
|
||||||
|
|
||||||
/* For those losing systems which don't have `alloca' we have to add
|
/* For those losing systems which don't have `alloca' we have to add
|
||||||
some additional code emulating it. */
|
some additional code emulating it. */
|
||||||
#ifdef HAVE_ALLOCA
|
#ifdef HAVE_ALLOCA
|
||||||
@ -108,10 +127,14 @@ struct alias_map
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
static char *string_space;
|
#ifndef _LIBC
|
||||||
|
# define libc_freeres_ptr(decl) decl
|
||||||
|
#endif
|
||||||
|
|
||||||
|
libc_freeres_ptr (static char *string_space);
|
||||||
static size_t string_space_act;
|
static size_t string_space_act;
|
||||||
static size_t string_space_max;
|
static size_t string_space_max;
|
||||||
static struct alias_map *map;
|
libc_freeres_ptr (static struct alias_map *map);
|
||||||
static size_t nmap;
|
static size_t nmap;
|
||||||
static size_t maxmap;
|
static size_t maxmap;
|
||||||
|
|
||||||
@ -128,7 +151,7 @@ const char *
|
|||||||
_nl_expand_alias (name)
|
_nl_expand_alias (name)
|
||||||
const char *name;
|
const char *name;
|
||||||
{
|
{
|
||||||
static const char *locale_alias_path = LOCALE_ALIAS_PATH;
|
static const char *locale_alias_path;
|
||||||
struct alias_map *retval;
|
struct alias_map *retval;
|
||||||
const char *result = NULL;
|
const char *result = NULL;
|
||||||
size_t added;
|
size_t added;
|
||||||
@ -137,6 +160,9 @@ _nl_expand_alias (name)
|
|||||||
__libc_lock_lock (lock);
|
__libc_lock_lock (lock);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (locale_alias_path == NULL)
|
||||||
|
locale_alias_path = LOCALE_ALIAS_PATH;
|
||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
struct alias_map item;
|
struct alias_map item;
|
||||||
@ -207,58 +233,52 @@ read_alias_file (fname, fname_len)
|
|||||||
memcpy (&full_fname[fname_len], aliasfile, sizeof aliasfile);
|
memcpy (&full_fname[fname_len], aliasfile, sizeof aliasfile);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
fp = fopen (full_fname, "r");
|
fp = fopen (relocate (full_fname), "r");
|
||||||
freea (full_fname);
|
freea (full_fname);
|
||||||
if (fp == NULL)
|
if (fp == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
#ifdef HAVE___FSETLOCKING
|
||||||
|
/* No threads present. */
|
||||||
|
__fsetlocking (fp, FSETLOCKING_BYCALLER);
|
||||||
|
#endif
|
||||||
|
|
||||||
added = 0;
|
added = 0;
|
||||||
while (!feof (fp))
|
while (!FEOF (fp))
|
||||||
{
|
{
|
||||||
/* It is a reasonable approach to use a fix buffer here because
|
/* It is a reasonable approach to use a fix buffer here because
|
||||||
a) we are only interested in the first two fields
|
a) we are only interested in the first two fields
|
||||||
b) these fields must be usable as file names and so must not
|
b) these fields must be usable as file names and so must not
|
||||||
be that long
|
be that long
|
||||||
*/
|
We avoid a multi-kilobyte buffer here since this would use up
|
||||||
char buf[BUFSIZ];
|
stack space which we might not have if the program ran out of
|
||||||
|
memory. */
|
||||||
|
char buf[400];
|
||||||
char *alias;
|
char *alias;
|
||||||
char *value;
|
char *value;
|
||||||
char *cp;
|
char *cp;
|
||||||
|
|
||||||
if (fgets (buf, sizeof buf, fp) == NULL)
|
if (FGETS (buf, sizeof buf, fp) == NULL)
|
||||||
/* EOF reached. */
|
/* EOF reached. */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/* Possibly not the whole line fits into the buffer. Ignore
|
|
||||||
the rest of the line. */
|
|
||||||
if (strchr (buf, '\n') == NULL)
|
|
||||||
{
|
|
||||||
char altbuf[BUFSIZ];
|
|
||||||
do
|
|
||||||
if (fgets (altbuf, sizeof altbuf, fp) == NULL)
|
|
||||||
/* Make sure the inner loop will be left. The outer loop
|
|
||||||
will exit at the `feof' test. */
|
|
||||||
break;
|
|
||||||
while (strchr (altbuf, '\n') == NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
cp = buf;
|
cp = buf;
|
||||||
/* Ignore leading white space. */
|
/* Ignore leading white space. */
|
||||||
while (isspace (cp[0]))
|
while (isspace ((unsigned char) cp[0]))
|
||||||
++cp;
|
++cp;
|
||||||
|
|
||||||
/* A leading '#' signals a comment line. */
|
/* A leading '#' signals a comment line. */
|
||||||
if (cp[0] != '\0' && cp[0] != '#')
|
if (cp[0] != '\0' && cp[0] != '#')
|
||||||
{
|
{
|
||||||
alias = cp++;
|
alias = cp++;
|
||||||
while (cp[0] != '\0' && !isspace (cp[0]))
|
while (cp[0] != '\0' && !isspace ((unsigned char) cp[0]))
|
||||||
++cp;
|
++cp;
|
||||||
/* Terminate alias name. */
|
/* Terminate alias name. */
|
||||||
if (cp[0] != '\0')
|
if (cp[0] != '\0')
|
||||||
*cp++ = '\0';
|
*cp++ = '\0';
|
||||||
|
|
||||||
/* Now look for the beginning of the value. */
|
/* Now look for the beginning of the value. */
|
||||||
while (isspace (cp[0]))
|
while (isspace ((unsigned char) cp[0]))
|
||||||
++cp;
|
++cp;
|
||||||
|
|
||||||
if (cp[0] != '\0')
|
if (cp[0] != '\0')
|
||||||
@ -267,7 +287,7 @@ read_alias_file (fname, fname_len)
|
|||||||
size_t value_len;
|
size_t value_len;
|
||||||
|
|
||||||
value = cp++;
|
value = cp++;
|
||||||
while (cp[0] != '\0' && !isspace (cp[0]))
|
while (cp[0] != '\0' && !isspace ((unsigned char) cp[0]))
|
||||||
++cp;
|
++cp;
|
||||||
/* Terminate value. */
|
/* Terminate value. */
|
||||||
if (cp[0] == '\n')
|
if (cp[0] == '\n')
|
||||||
@ -325,6 +345,14 @@ read_alias_file (fname, fname_len)
|
|||||||
++added;
|
++added;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Possibly not the whole line fits into the buffer. Ignore
|
||||||
|
the rest of the line. */
|
||||||
|
while (strchr (buf, '\n') == NULL)
|
||||||
|
if (FGETS (buf, sizeof buf, fp) == NULL)
|
||||||
|
/* Make sure the inner loop will be left. The outer loop
|
||||||
|
will exit at the `feof' test. */
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Should we test for ferror()? I think we have to silently ignore
|
/* Should we test for ferror()? I think we have to silently ignore
|
||||||
@ -358,19 +386,6 @@ extend_alias_table ()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifdef _LIBC
|
|
||||||
static void __attribute__ ((unused))
|
|
||||||
free_mem (void)
|
|
||||||
{
|
|
||||||
if (string_space != NULL)
|
|
||||||
free (string_space);
|
|
||||||
if (map != NULL)
|
|
||||||
free (map);
|
|
||||||
}
|
|
||||||
text_set_element (__libc_subfreeres, free_mem);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
alias_compare (map1, map2)
|
alias_compare (map1, map2)
|
||||||
const struct alias_map *map1;
|
const struct alias_map *map1;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Implementation of ngettext(3) function.
|
/* Implementation of ngettext(3) function.
|
||||||
Copyright (C) 1995, 1997, 2000, 2001 Free Software Foundation, Inc.
|
Copyright (C) 1995, 1997, 2000, 2001, 2002 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it
|
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
|
under the terms of the GNU Library General Public License as published
|
||||||
@ -46,8 +46,8 @@
|
|||||||
# define NGETTEXT __ngettext
|
# define NGETTEXT __ngettext
|
||||||
# define DCNGETTEXT __dcngettext
|
# define DCNGETTEXT __dcngettext
|
||||||
#else
|
#else
|
||||||
# define NGETTEXT ngettext__
|
# define NGETTEXT libintl_ngettext
|
||||||
# define DCNGETTEXT dcngettext__
|
# define DCNGETTEXT libintl_dcngettext
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Look up MSGID in the current default message catalog for the current
|
/* Look up MSGID in the current default message catalog for the current
|
||||||
|
1288
intl/plural.c
1288
intl/plural.c
File diff suppressed because it is too large
Load Diff
@ -30,25 +30,21 @@
|
|||||||
# include <config.h>
|
# include <config.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include <stddef.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include "gettextP.h"
|
#include "plural-exp.h"
|
||||||
|
|
||||||
/* Names for the libintl functions are a problem. They must not clash
|
/* The main function generated by the parser is called __gettextparse,
|
||||||
with existing names and they should follow ANSI C. But this source
|
but we want it to be called PLURAL_PARSE. */
|
||||||
code is also used in GNU C Library where the names have a __
|
#ifndef _LIBC
|
||||||
prefix. So we have to make a difference here. */
|
# define __gettextparse PLURAL_PARSE
|
||||||
#ifdef _LIBC
|
|
||||||
# define FREE_EXPRESSION __gettext_free_exp
|
|
||||||
#else
|
|
||||||
# define FREE_EXPRESSION gettext_free_exp__
|
|
||||||
# define __gettextparse gettextparse__
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define YYLEX_PARAM &((struct parse_args *) arg)->cp
|
#define YYLEX_PARAM &((struct parse_args *) arg)->cp
|
||||||
#define YYPARSE_PARAM arg
|
#define YYPARSE_PARAM arg
|
||||||
%}
|
%}
|
||||||
%pure_parser
|
%pure_parser
|
||||||
%expect 10
|
%expect 7
|
||||||
|
|
||||||
%union {
|
%union {
|
||||||
unsigned long int num;
|
unsigned long int num;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Implementation of the textdomain(3) function.
|
/* Implementation of the textdomain(3) function.
|
||||||
Copyright (C) 1995-1998, 2000, 2001 Free Software Foundation, Inc.
|
Copyright (C) 1995-1998, 2000, 2001, 2002 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it
|
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
|
under the terms of the GNU Library General Public License as published
|
||||||
@ -44,17 +44,17 @@
|
|||||||
names than the internal variables in GNU libc, otherwise programs
|
names than the internal variables in GNU libc, otherwise programs
|
||||||
using libintl.a cannot be linked statically. */
|
using libintl.a cannot be linked statically. */
|
||||||
#if !defined _LIBC
|
#if !defined _LIBC
|
||||||
# define _nl_default_default_domain _nl_default_default_domain__
|
# define _nl_default_default_domain libintl_nl_default_default_domain
|
||||||
# define _nl_current_default_domain _nl_current_default_domain__
|
# define _nl_current_default_domain libintl_nl_current_default_domain
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* @@ end of prolog @@ */
|
/* @@ end of prolog @@ */
|
||||||
|
|
||||||
/* Name of the default text domain. */
|
/* Name of the default text domain. */
|
||||||
extern const char _nl_default_default_domain[];
|
extern const char _nl_default_default_domain[] attribute_hidden;
|
||||||
|
|
||||||
/* Default text domain in which entries for gettext(3) are to be found. */
|
/* Default text domain in which entries for gettext(3) are to be found. */
|
||||||
extern const char *_nl_current_default_domain;
|
extern const char *_nl_current_default_domain attribute_hidden;
|
||||||
|
|
||||||
|
|
||||||
/* Names for the libintl functions are a problem. They must not clash
|
/* Names for the libintl functions are a problem. They must not clash
|
||||||
@ -67,11 +67,11 @@ extern const char *_nl_current_default_domain;
|
|||||||
# define strdup(str) __strdup (str)
|
# define strdup(str) __strdup (str)
|
||||||
# endif
|
# endif
|
||||||
#else
|
#else
|
||||||
# define TEXTDOMAIN textdomain__
|
# define TEXTDOMAIN libintl_textdomain
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Lock variable to protect the global data in the gettext implementation. */
|
/* Lock variable to protect the global data in the gettext implementation. */
|
||||||
__libc_rwlock_define (extern, _nl_state_lock)
|
__libc_rwlock_define (extern, _nl_state_lock attribute_hidden)
|
||||||
|
|
||||||
/* Set the current default message catalog to DOMAINNAME.
|
/* Set the current default message catalog to DOMAINNAME.
|
||||||
If DOMAINNAME is null, return the current default.
|
If DOMAINNAME is null, return the current default.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user