mirror of
git://git.gnupg.org/gnupg.git
synced 2025-04-17 15:44:34 +02:00
* configure.ac (AM_GNU_GETTEXT_VERSION): New.
(min_automake_version): New. * LINGUAS: Added all languages we supported in 1.2.5. Copied all po files from 1.2.5. * autogen.sh: Updated to the modern version, grepping the required tool versions from configure.ac.
This commit is contained in:
parent
0aad41079e
commit
5d4fb57347
@ -1,3 +1,8 @@
|
|||||||
|
2004-07-27 Werner Koch <wk@g10code.de>
|
||||||
|
|
||||||
|
* configure.ac (AM_GNU_GETTEXT_VERSION): New.
|
||||||
|
(min_automake_version): New.
|
||||||
|
|
||||||
2004-05-24 David Shaw <dshaw@jabberwocky.com>
|
2004-05-24 David Shaw <dshaw@jabberwocky.com>
|
||||||
|
|
||||||
* configure.ac: Try for wldap32 on Win32 platforms.
|
* configure.ac: Try for wldap32 on Win32 platforms.
|
||||||
|
1
THANKS
1
THANKS
@ -173,6 +173,7 @@ Roger Sondermann r.so@bigfoot.com
|
|||||||
Roland Rosenfeld roland@spinnaker.rhein.de
|
Roland Rosenfeld roland@spinnaker.rhein.de
|
||||||
Roman Pavlik rp@tns.cz
|
Roman Pavlik rp@tns.cz
|
||||||
Ross Golder rossigee@bigfoot.com
|
Ross Golder rossigee@bigfoot.com
|
||||||
|
Russell Coker russell@coker.com.au
|
||||||
Ryan Malayter rmalayter@bai.org
|
Ryan Malayter rmalayter@bai.org
|
||||||
Sam Roberts sam@cogent.ca
|
Sam Roberts sam@cogent.ca
|
||||||
Sami Tolvanen sami@tolvanen.com
|
Sami Tolvanen sami@tolvanen.com
|
||||||
|
12
TODO
12
TODO
@ -1,4 +1,16 @@
|
|||||||
|
* From: Nicolas Sierro
|
||||||
|
Date: Thu, 17 Jun 2004 12:31:24 +0200
|
||||||
|
|
||||||
|
I understand your concern regarding the GNU coding standards. In
|
||||||
|
zlib-1.2.1, apart from several bug fixes, the inflate code is about
|
||||||
|
20% faster and the crc32 code about 50% faster. Some memory leaks were
|
||||||
|
also fixed according to the ChangeLog.
|
||||||
|
|
||||||
|
If it can help you, here is what I did to update the distribution is
|
||||||
|
to remove all files in the zlib folder except Makefile.am. To copy all
|
||||||
|
the file in the zlib121.zip archive to the zlib folder with the
|
||||||
|
exception of configure, example.c, FAQ, INDEX, Makefile, Makefile.in
|
||||||
|
and zlib.3. I then edited Makefile.am to match the new file list and
|
||||||
|
|
||||||
* Reword the "Not enough entropy" messages.
|
* Reword the "Not enough entropy" messages.
|
||||||
|
|
||||||
|
@ -22,10 +22,11 @@ dnl (Process this file with autoconf to produce a configure script.)
|
|||||||
dnlAC_REVISION($Revision$)dnl
|
dnlAC_REVISION($Revision$)dnl
|
||||||
|
|
||||||
AC_PREREQ(2.57)
|
AC_PREREQ(2.57)
|
||||||
|
min_automake_version="1.7.9"
|
||||||
|
|
||||||
# Remember to change the version number immediately *after* a release
|
# Remember to change the version number immediately *after* a release
|
||||||
# and remove the "-cvs" or "rc" suffix immediately *before* a release.
|
# and remove the "-cvs" or "rc" suffix immediately *before* a release.
|
||||||
AC_INIT(gnupg, 1.3.6, bug-gnupg@gnu.org)
|
AC_INIT(gnupg, 1.3.90-cvs, bug-gnupg@gnu.org)
|
||||||
# Set development_version to yes if the minor number is odd or you
|
# Set development_version to yes if the minor number is odd or you
|
||||||
# feel that the default check for a development version is not
|
# feel that the default check for a development version is not
|
||||||
# sufficient.
|
# sufficient.
|
||||||
@ -647,6 +648,7 @@ AC_SUBST(MPI_OPT_FLAGS)
|
|||||||
|
|
||||||
dnl Checks for libraries.
|
dnl Checks for libraries.
|
||||||
|
|
||||||
|
AM_GNU_GETTEXT_VERSION(0.14.1)
|
||||||
if test "$try_gettext" = yes; then
|
if test "$try_gettext" = yes; then
|
||||||
AM_GNU_GETTEXT(,[need-ngettext])
|
AM_GNU_GETTEXT(,[need-ngettext])
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
2003-05-22 GNU <bug-gnu-gettext@gnu.org>
|
2004-01-29 GNU <bug-gnu-gettext@gnu.org>
|
||||||
|
|
||||||
* Version 0.12.1 released.
|
* Version 0.14.1 released.
|
||||||
|
|
||||||
|
@ -73,6 +73,10 @@ HEADERS = \
|
|||||||
eval-plural.h \
|
eval-plural.h \
|
||||||
localcharset.h \
|
localcharset.h \
|
||||||
relocatable.h \
|
relocatable.h \
|
||||||
|
xsize.h \
|
||||||
|
printf-args.h printf-args.c \
|
||||||
|
printf-parse.h wprintf-parse.h printf-parse.c \
|
||||||
|
vasnprintf.h vasnwprintf.h vasnprintf.c \
|
||||||
os2compat.h \
|
os2compat.h \
|
||||||
libgnuintl.h.in
|
libgnuintl.h.in
|
||||||
SOURCES = \
|
SOURCES = \
|
||||||
@ -96,6 +100,7 @@ SOURCES = \
|
|||||||
relocatable.c \
|
relocatable.c \
|
||||||
localename.c \
|
localename.c \
|
||||||
log.c \
|
log.c \
|
||||||
|
printf.c \
|
||||||
osdep.c \
|
osdep.c \
|
||||||
os2compat.c \
|
os2compat.c \
|
||||||
intl-compat.c
|
intl-compat.c
|
||||||
@ -120,6 +125,7 @@ OBJECTS = \
|
|||||||
relocatable.$lo \
|
relocatable.$lo \
|
||||||
localename.$lo \
|
localename.$lo \
|
||||||
log.$lo \
|
log.$lo \
|
||||||
|
printf.$lo \
|
||||||
osdep.$lo \
|
osdep.$lo \
|
||||||
intl-compat.$lo
|
intl-compat.$lo
|
||||||
DISTFILES.common = Makefile.in \
|
DISTFILES.common = Makefile.in \
|
||||||
@ -127,7 +133,8 @@ 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.0 COPYING.LIB-2.1 libintl.glibc \
|
DISTFILES.gettext = COPYING.LIB-2.0 COPYING.LIB-2.1 libintl.glibc \
|
||||||
Makefile.vms libgnuintl.h.msvc-shared README.woe32 Makefile.msvc
|
libgnuintl.h_vms Makefile.vms \
|
||||||
|
libgnuintl.h.msvc-static libgnuintl.h.msvc-shared README.woe32 Makefile.msvc
|
||||||
DISTFILES.obsolete = xopen-msg.sed linux-msg.sed po2tbl.sed.in cat-compat.c \
|
DISTFILES.obsolete = xopen-msg.sed linux-msg.sed po2tbl.sed.in cat-compat.c \
|
||||||
COPYING.LIB-2 gettext.h libgettext.h plural-eval.c libgnuintl.h
|
COPYING.LIB-2 gettext.h libgettext.h plural-eval.c libgnuintl.h
|
||||||
|
|
||||||
@ -155,9 +162,9 @@ libintl.la libgnuintl.la: $(OBJECTS)
|
|||||||
# according to the libtool documentation, section "Library interface versions".
|
# according to the libtool documentation, section "Library interface versions".
|
||||||
# Maintainers of other packages that include the intl directory must *not*
|
# Maintainers of other packages that include the intl directory must *not*
|
||||||
# change these values.
|
# change these values.
|
||||||
LTV_CURRENT=5
|
LTV_CURRENT=7
|
||||||
LTV_REVISION=0
|
LTV_REVISION=0
|
||||||
LTV_AGE=3
|
LTV_AGE=4
|
||||||
|
|
||||||
.SUFFIXES:
|
.SUFFIXES:
|
||||||
.SUFFIXES: .c .y .o .lo .sin .sed
|
.SUFFIXES: .c .y .o .lo .sin .sed
|
||||||
@ -209,6 +216,8 @@ localename.lo: $(srcdir)/localename.c
|
|||||||
$(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/localename.c
|
$(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/localename.c
|
||||||
log.lo: $(srcdir)/log.c
|
log.lo: $(srcdir)/log.c
|
||||||
$(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/log.c
|
$(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/log.c
|
||||||
|
printf.lo: $(srcdir)/printf.c
|
||||||
|
$(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/printf.c
|
||||||
osdep.lo: $(srcdir)/osdep.c
|
osdep.lo: $(srcdir)/osdep.c
|
||||||
$(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/osdep.c
|
$(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/osdep.c
|
||||||
intl-compat.lo: $(srcdir)/intl-compat.c
|
intl-compat.lo: $(srcdir)/intl-compat.c
|
||||||
@ -224,7 +233,11 @@ ref-del.sed: $(srcdir)/ref-del.sin
|
|||||||
INCLUDES = -I. -I$(srcdir) -I..
|
INCLUDES = -I. -I$(srcdir) -I..
|
||||||
|
|
||||||
libgnuintl.h: $(srcdir)/libgnuintl.h.in
|
libgnuintl.h: $(srcdir)/libgnuintl.h.in
|
||||||
cp $(srcdir)/libgnuintl.h.in libgnuintl.h
|
sed -e 's,@''HAVE_POSIX_PRINTF''@,@HAVE_POSIX_PRINTF@,g' \
|
||||||
|
-e 's,@''HAVE_ASPRINTF''@,@HAVE_ASPRINTF@,g' \
|
||||||
|
-e 's,@''HAVE_SNPRINTF''@,@HAVE_SNPRINTF@,g' \
|
||||||
|
-e 's,@''HAVE_WPRINTF''@,@HAVE_WPRINTF@,g' \
|
||||||
|
< $(srcdir)/libgnuintl.h.in > libgnuintl.h
|
||||||
|
|
||||||
libintl.h: libgnuintl.h
|
libintl.h: libgnuintl.h
|
||||||
cp libgnuintl.h libintl.h
|
cp libgnuintl.h libintl.h
|
||||||
@ -250,7 +263,7 @@ install-exec: all
|
|||||||
$(INSTALL_DATA) libintl.$la $(DESTDIR)$(libdir)/libintl.$la; \
|
$(INSTALL_DATA) libintl.$la $(DESTDIR)$(libdir)/libintl.$la; \
|
||||||
if test "@RELOCATABLE@" = yes; then \
|
if test "@RELOCATABLE@" = yes; then \
|
||||||
dependencies=`sed -n -e 's,^dependency_libs=\(.*\),\1,p' < $(DESTDIR)$(libdir)/libintl.la | sed -e "s,^',," -e "s,'\$$,,"`; \
|
dependencies=`sed -n -e 's,^dependency_libs=\(.*\),\1,p' < $(DESTDIR)$(libdir)/libintl.la | sed -e "s,^',," -e "s,'\$$,,"`; \
|
||||||
if test -n "$dependencies"; then \
|
if test -n "$$dependencies"; then \
|
||||||
rm -f $(DESTDIR)$(libdir)/libintl.la; \
|
rm -f $(DESTDIR)$(libdir)/libintl.la; \
|
||||||
fi; \
|
fi; \
|
||||||
fi; \
|
fi; \
|
||||||
@ -412,6 +425,7 @@ dcigettext.$lo loadmsgcat.$lo plural.$lo plural-exp.$lo: $(srcdir)/plural-exp.h
|
|||||||
dcigettext.$lo: $(srcdir)/eval-plural.h
|
dcigettext.$lo: $(srcdir)/eval-plural.h
|
||||||
localcharset.$lo: $(srcdir)/localcharset.h
|
localcharset.$lo: $(srcdir)/localcharset.h
|
||||||
localealias.$lo localcharset.$lo relocatable.$lo: $(srcdir)/relocatable.h
|
localealias.$lo localcharset.$lo relocatable.$lo: $(srcdir)/relocatable.h
|
||||||
|
printf.$lo: $(srcdir)/printf-args.h $(srcdir)/printf-args.c $(srcdir)/printf-parse.h $(srcdir)/wprintf-parse.h $(srcdir)/xsize.h $(srcdir)/printf-parse.c $(srcdir)/vasnprintf.h $(srcdir)/vasnwprintf.h $(srcdir)/vasnprintf.c
|
||||||
|
|
||||||
tags: TAGS
|
tags: TAGS
|
||||||
|
|
||||||
|
@ -1 +1 @@
|
|||||||
GNU gettext library from gettext-0.12.1
|
GNU gettext library from gettext-0.14.1
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Implementation of the bindtextdomain(3) function
|
/* Implementation of the bindtextdomain(3) function
|
||||||
Copyright (C) 1995-1998, 2000, 2001, 2002 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
|
||||||
@ -86,11 +86,6 @@ __libc_rwlock_define (extern, _nl_state_lock attribute_hidden)
|
|||||||
# define BIND_TEXTDOMAIN_CODESET libintl_bind_textdomain_codeset
|
# define BIND_TEXTDOMAIN_CODESET libintl_bind_textdomain_codeset
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Prototypes for local functions. */
|
|
||||||
static void set_binding_values PARAMS ((const char *domainname,
|
|
||||||
const char **dirnamep,
|
|
||||||
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
|
||||||
@ -98,10 +93,8 @@ static void set_binding_values PARAMS ((const char *domainname,
|
|||||||
If DIRNAMEP or CODESETP is NULL, the corresponding attribute is neither
|
If DIRNAMEP or CODESETP is NULL, the corresponding attribute is neither
|
||||||
modified nor returned. */
|
modified nor returned. */
|
||||||
static void
|
static void
|
||||||
set_binding_values (domainname, dirnamep, codesetp)
|
set_binding_values (const char *domainname,
|
||||||
const char *domainname;
|
const char **dirnamep, const char **codesetp)
|
||||||
const char **dirnamep;
|
|
||||||
const char **codesetp;
|
|
||||||
{
|
{
|
||||||
struct binding *binding;
|
struct binding *binding;
|
||||||
int modified;
|
int modified;
|
||||||
@ -348,9 +341,7 @@ set_binding_values (domainname, dirnamep, codesetp)
|
|||||||
/* Specify that the DOMAINNAME message catalog will be found
|
/* Specify that the DOMAINNAME message catalog will be found
|
||||||
in DIRNAME rather than in the system locale data base. */
|
in DIRNAME rather than in the system locale data base. */
|
||||||
char *
|
char *
|
||||||
BINDTEXTDOMAIN (domainname, dirname)
|
BINDTEXTDOMAIN (const char *domainname, const char *dirname)
|
||||||
const char *domainname;
|
|
||||||
const char *dirname;
|
|
||||||
{
|
{
|
||||||
set_binding_values (domainname, &dirname, NULL);
|
set_binding_values (domainname, &dirname, NULL);
|
||||||
return (char *) dirname;
|
return (char *) dirname;
|
||||||
@ -359,9 +350,7 @@ BINDTEXTDOMAIN (domainname, dirname)
|
|||||||
/* Specify the character encoding in which the messages from the
|
/* Specify the character encoding in which the messages from the
|
||||||
DOMAINNAME message catalog will be returned. */
|
DOMAINNAME message catalog will be returned. */
|
||||||
char *
|
char *
|
||||||
BIND_TEXTDOMAIN_CODESET (domainname, codeset)
|
BIND_TEXTDOMAIN_CODESET (const char *domainname, const char *codeset)
|
||||||
const char *domainname;
|
|
||||||
const char *codeset;
|
|
||||||
{
|
{
|
||||||
set_binding_values (domainname, NULL, &codeset);
|
set_binding_values (domainname, NULL, &codeset);
|
||||||
return (char *) codeset;
|
return (char *) codeset;
|
||||||
|
@ -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-2003 Free Software Foundation, Inc.
|
# Copyright (C) 2000-2004 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
|
||||||
@ -30,77 +30,77 @@
|
|||||||
# MIME charset name is preferred.
|
# MIME charset name is preferred.
|
||||||
# The current list of GNU canonical charset names is as follows.
|
# The current list of GNU canonical charset names is as follows.
|
||||||
#
|
#
|
||||||
# name used by which systems a MIME name?
|
# name MIME? used by which systems
|
||||||
# ASCII, ANSI_X3.4-1968 glibc solaris freebsd
|
# ASCII, ANSI_X3.4-1968 glibc solaris freebsd darwin
|
||||||
# ISO-8859-1 glibc aix hpux irix osf solaris freebsd yes
|
# ISO-8859-1 Y glibc aix hpux irix osf solaris freebsd darwin
|
||||||
# ISO-8859-2 glibc aix hpux irix osf solaris freebsd yes
|
# ISO-8859-2 Y glibc aix hpux irix osf solaris freebsd darwin
|
||||||
# ISO-8859-3 glibc solaris yes
|
# ISO-8859-3 Y glibc solaris
|
||||||
# ISO-8859-4 osf solaris freebsd yes
|
# ISO-8859-4 Y osf solaris freebsd darwin
|
||||||
# ISO-8859-5 glibc aix hpux irix osf solaris freebsd yes
|
# ISO-8859-5 Y glibc aix hpux irix osf solaris freebsd darwin
|
||||||
# ISO-8859-6 glibc aix hpux solaris yes
|
# ISO-8859-6 Y glibc aix hpux solaris
|
||||||
# ISO-8859-7 glibc aix hpux irix osf solaris yes
|
# ISO-8859-7 Y glibc aix hpux irix osf solaris
|
||||||
# ISO-8859-8 glibc aix hpux osf solaris yes
|
# ISO-8859-8 Y glibc aix hpux osf solaris
|
||||||
# ISO-8859-9 glibc aix hpux irix osf solaris yes
|
# ISO-8859-9 Y glibc aix hpux irix osf solaris
|
||||||
# ISO-8859-13 glibc
|
# ISO-8859-13 glibc
|
||||||
# ISO-8859-14 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 Y glibc solaris freebsd darwin
|
||||||
# KOI8-U glibc freebsd yes
|
# KOI8-U Y glibc freebsd darwin
|
||||||
# KOI8-T glibc
|
# KOI8-T glibc
|
||||||
# CP437 dos
|
# CP437 dos
|
||||||
# CP775 dos
|
# CP775 dos
|
||||||
# CP850 aix osf dos
|
# CP850 aix osf dos
|
||||||
# CP852 dos
|
# CP852 dos
|
||||||
# CP855 dos
|
# CP855 dos
|
||||||
# CP856 aix
|
# CP856 aix
|
||||||
# CP857 dos
|
# CP857 dos
|
||||||
# CP861 dos
|
# CP861 dos
|
||||||
# CP862 dos
|
# CP862 dos
|
||||||
# CP864 dos
|
# CP864 dos
|
||||||
# CP865 dos
|
# CP865 dos
|
||||||
# CP866 freebsd dos
|
# CP866 freebsd darwin dos
|
||||||
# CP869 dos
|
# CP869 dos
|
||||||
# CP874 woe32 dos
|
# CP874 woe32 dos
|
||||||
# CP922 aix
|
# CP922 aix
|
||||||
# CP932 aix woe32 dos
|
# CP932 aix woe32 dos
|
||||||
# CP943 aix
|
# CP943 aix
|
||||||
# CP949 osf woe32 dos
|
# CP949 osf woe32 dos
|
||||||
# CP950 woe32 dos
|
# CP950 woe32 dos
|
||||||
# CP1046 aix
|
# CP1046 aix
|
||||||
# CP1124 aix
|
# CP1124 aix
|
||||||
# CP1125 dos
|
# CP1125 dos
|
||||||
# CP1129 aix
|
# CP1129 aix
|
||||||
# CP1250 woe32
|
# CP1250 woe32
|
||||||
# CP1251 glibc solaris woe32
|
# CP1251 glibc solaris darwin woe32
|
||||||
# CP1252 aix woe32
|
# CP1252 aix woe32
|
||||||
# CP1253 woe32
|
# CP1253 woe32
|
||||||
# CP1254 woe32
|
# CP1254 woe32
|
||||||
# CP1255 glibc woe32
|
# CP1255 glibc woe32
|
||||||
# CP1256 woe32
|
# CP1256 woe32
|
||||||
# CP1257 woe32
|
# CP1257 woe32
|
||||||
# GB2312 glibc aix hpux irix solaris freebsd yes
|
# GB2312 Y glibc aix hpux irix solaris freebsd darwin
|
||||||
# EUC-JP glibc aix hpux irix osf solaris freebsd yes
|
# EUC-JP Y glibc aix hpux irix osf solaris freebsd darwin
|
||||||
# EUC-KR glibc aix hpux irix osf solaris freebsd yes
|
# EUC-KR Y glibc aix hpux irix osf solaris freebsd darwin
|
||||||
# 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 Y glibc aix hpux osf solaris freebsd darwin
|
||||||
# BIG5-HKSCS glibc solaris
|
# BIG5-HKSCS glibc solaris
|
||||||
# GBK glibc aix osf solaris woe32 dos
|
# GBK glibc aix osf solaris woe32 dos
|
||||||
# GB18030 glibc solaris
|
# GB18030 glibc solaris
|
||||||
# SHIFT_JIS hpux osf solaris freebsd yes
|
# SHIFT_JIS Y hpux osf solaris freebsd darwin
|
||||||
# JOHAB glibc solaris woe32
|
# JOHAB glibc solaris woe32
|
||||||
# TIS-620 glibc aix hpux osf solaris
|
# TIS-620 glibc aix hpux osf solaris
|
||||||
# VISCII glibc yes
|
# VISCII Y glibc
|
||||||
# TCVN5712-1 glibc
|
# TCVN5712-1 glibc
|
||||||
# GEORGIAN-PS glibc
|
# GEORGIAN-PS glibc
|
||||||
# HP-ROMAN8 hpux
|
# HP-ROMAN8 hpux
|
||||||
# HP-ARABIC8 hpux
|
# HP-ARABIC8 hpux
|
||||||
# HP-GREEK8 hpux
|
# HP-GREEK8 hpux
|
||||||
# HP-HEBREW8 hpux
|
# HP-HEBREW8 hpux
|
||||||
# HP-TURKISH8 hpux
|
# HP-TURKISH8 hpux
|
||||||
# HP-KANA8 hpux
|
# HP-KANA8 hpux
|
||||||
# DEC-KANJI osf
|
# DEC-KANJI osf
|
||||||
# DEC-HANYU osf
|
# DEC-HANYU osf
|
||||||
# UTF-8 glibc aix hpux osf solaris yes
|
# UTF-8 Y glibc aix hpux osf solaris
|
||||||
#
|
#
|
||||||
# Note: Names which are not marked as being a MIME name should not be used in
|
# Note: Names which are not marked as being a MIME name should not be used in
|
||||||
# Internet protocols for information interchange (mail, news, etc.).
|
# Internet protocols for information interchange (mail, news, etc.).
|
||||||
@ -121,6 +121,105 @@ echo "# It was automatically generated from config.charset."
|
|||||||
# List of references, updated during installation:
|
# List of references, updated during installation:
|
||||||
echo "# Packages using this file: "
|
echo "# Packages using this file: "
|
||||||
case "$os" in
|
case "$os" in
|
||||||
|
linux-gnulibc1*)
|
||||||
|
# Linux libc5 doesn't have nl_langinfo(CODESET); therefore
|
||||||
|
# localcharset.c falls back to using the full locale name
|
||||||
|
# from the environment variables.
|
||||||
|
echo "C ASCII"
|
||||||
|
echo "POSIX ASCII"
|
||||||
|
for l in af af_ZA ca ca_ES da da_DK de de_AT de_BE de_CH de_DE de_LU \
|
||||||
|
en en_AU en_BW en_CA en_DK en_GB en_IE en_NZ en_US en_ZA \
|
||||||
|
en_ZW es es_AR es_BO es_CL es_CO es_DO es_EC es_ES es_GT \
|
||||||
|
es_HN es_MX es_PA es_PE es_PY es_SV es_US es_UY es_VE et \
|
||||||
|
et_EE eu eu_ES fi fi_FI fo fo_FO fr fr_BE fr_CA fr_CH fr_FR \
|
||||||
|
fr_LU ga ga_IE gl gl_ES id id_ID in in_ID is is_IS it it_CH \
|
||||||
|
it_IT kl kl_GL nl nl_BE nl_NL no no_NO pt pt_BR pt_PT sv \
|
||||||
|
sv_FI sv_SE; do
|
||||||
|
echo "$l ISO-8859-1"
|
||||||
|
echo "$l.iso-8859-1 ISO-8859-1"
|
||||||
|
echo "$l.iso-8859-15 ISO-8859-15"
|
||||||
|
echo "$l.iso-8859-15@euro ISO-8859-15"
|
||||||
|
echo "$l@euro ISO-8859-15"
|
||||||
|
echo "$l.cp-437 CP437"
|
||||||
|
echo "$l.cp-850 CP850"
|
||||||
|
echo "$l.cp-1252 CP1252"
|
||||||
|
echo "$l.cp-1252@euro CP1252"
|
||||||
|
#echo "$l.atari-st ATARI-ST" # not a commonly used encoding
|
||||||
|
echo "$l.utf-8 UTF-8"
|
||||||
|
echo "$l.utf-8@euro UTF-8"
|
||||||
|
done
|
||||||
|
for l in cs cs_CZ hr hr_HR hu hu_HU pl pl_PL ro ro_RO sk sk_SK sl \
|
||||||
|
sl_SI sr sr_CS sr_YU; do
|
||||||
|
echo "$l ISO-8859-2"
|
||||||
|
echo "$l.iso-8859-2 ISO-8859-2"
|
||||||
|
echo "$l.cp-852 CP852"
|
||||||
|
echo "$l.cp-1250 CP1250"
|
||||||
|
echo "$l.utf-8 UTF-8"
|
||||||
|
done
|
||||||
|
for l in mk mk_MK ru ru_RU; do
|
||||||
|
echo "$l ISO-8859-5"
|
||||||
|
echo "$l.iso-8859-5 ISO-8859-5"
|
||||||
|
echo "$l.koi8-r KOI8-R"
|
||||||
|
echo "$l.cp-866 CP866"
|
||||||
|
echo "$l.cp-1251 CP1251"
|
||||||
|
echo "$l.utf-8 UTF-8"
|
||||||
|
done
|
||||||
|
for l in ar ar_SA; do
|
||||||
|
echo "$l ISO-8859-6"
|
||||||
|
echo "$l.iso-8859-6 ISO-8859-6"
|
||||||
|
echo "$l.cp-864 CP864"
|
||||||
|
#echo "$l.cp-868 CP868" # not a commonly used encoding
|
||||||
|
echo "$l.cp-1256 CP1256"
|
||||||
|
echo "$l.utf-8 UTF-8"
|
||||||
|
done
|
||||||
|
for l in el el_GR gr gr_GR; do
|
||||||
|
echo "$l ISO-8859-7"
|
||||||
|
echo "$l.iso-8859-7 ISO-8859-7"
|
||||||
|
echo "$l.cp-869 CP869"
|
||||||
|
echo "$l.cp-1253 CP1253"
|
||||||
|
echo "$l.cp-1253@euro CP1253"
|
||||||
|
echo "$l.utf-8 UTF-8"
|
||||||
|
echo "$l.utf-8@euro UTF-8"
|
||||||
|
done
|
||||||
|
for l in he he_IL iw iw_IL; do
|
||||||
|
echo "$l ISO-8859-8"
|
||||||
|
echo "$l.iso-8859-8 ISO-8859-8"
|
||||||
|
echo "$l.cp-862 CP862"
|
||||||
|
echo "$l.cp-1255 CP1255"
|
||||||
|
echo "$l.utf-8 UTF-8"
|
||||||
|
done
|
||||||
|
for l in tr tr_TR; do
|
||||||
|
echo "$l ISO-8859-9"
|
||||||
|
echo "$l.iso-8859-9 ISO-8859-9"
|
||||||
|
echo "$l.cp-857 CP857"
|
||||||
|
echo "$l.cp-1254 CP1254"
|
||||||
|
echo "$l.utf-8 UTF-8"
|
||||||
|
done
|
||||||
|
for l in lt lt_LT lv lv_LV; do
|
||||||
|
#echo "$l BALTIC" # not a commonly used encoding, wrong encoding name
|
||||||
|
echo "$l ISO-8859-13"
|
||||||
|
done
|
||||||
|
for l in ru_UA uk uk_UA; do
|
||||||
|
echo "$l KOI8-U"
|
||||||
|
done
|
||||||
|
for l in zh zh_CN; do
|
||||||
|
#echo "$l GB_2312-80" # not a commonly used encoding, wrong encoding name
|
||||||
|
echo "$l GB2312"
|
||||||
|
done
|
||||||
|
for l in ja ja_JP ja_JP.EUC; do
|
||||||
|
echo "$l EUC-JP"
|
||||||
|
done
|
||||||
|
for l in ko ko_KR; do
|
||||||
|
echo "$l EUC-KR"
|
||||||
|
done
|
||||||
|
for l in th th_TH; do
|
||||||
|
echo "$l TIS-620"
|
||||||
|
done
|
||||||
|
for l in fa fa_IR; do
|
||||||
|
#echo "$l ISIRI-3342" # a broken encoding
|
||||||
|
echo "$l.utf-8 UTF-8"
|
||||||
|
done
|
||||||
|
;;
|
||||||
linux* | *-gnu*)
|
linux* | *-gnu*)
|
||||||
# With glibc-2.1 or newer, we don't need any canonicalization,
|
# With glibc-2.1 or newer, we don't need any canonicalization,
|
||||||
# because glibc has iconv and both glibc and libiconv support all
|
# because glibc has iconv and both glibc and libiconv support all
|
||||||
@ -297,6 +396,47 @@ case "$os" in
|
|||||||
echo "BIG5 BIG5"
|
echo "BIG5 BIG5"
|
||||||
echo "SJIS SHIFT_JIS"
|
echo "SJIS SHIFT_JIS"
|
||||||
;;
|
;;
|
||||||
|
darwin*)
|
||||||
|
# Darwin 6.8 doesn't have nl_langinfo(CODESET); therefore
|
||||||
|
# localcharset.c falls back to using the full locale name
|
||||||
|
# from the environment variables.
|
||||||
|
echo "C ASCII"
|
||||||
|
for l in en_AU en_CA en_GB en_US la_LN; do
|
||||||
|
echo "$l.US-ASCII ASCII"
|
||||||
|
done
|
||||||
|
for l in da_DK de_AT de_CH de_DE en_AU en_CA en_GB en_US es_ES \
|
||||||
|
fi_FI fr_BE fr_CA fr_CH fr_FR is_IS it_CH it_IT nl_BE \
|
||||||
|
nl_NL no_NO pt_PT sv_SE; do
|
||||||
|
echo "$l ISO-8859-1"
|
||||||
|
echo "$l.ISO8859-1 ISO-8859-1"
|
||||||
|
echo "$l.ISO8859-15 ISO-8859-15"
|
||||||
|
done
|
||||||
|
for l in la_LN; do
|
||||||
|
echo "$l.ISO8859-1 ISO-8859-1"
|
||||||
|
echo "$l.ISO8859-15 ISO-8859-15"
|
||||||
|
done
|
||||||
|
for l in cs_CZ hr_HR hu_HU la_LN pl_PL sl_SI; do
|
||||||
|
echo "$l.ISO8859-2 ISO-8859-2"
|
||||||
|
done
|
||||||
|
for l in la_LN lt_LT; do
|
||||||
|
echo "$l.ISO8859-4 ISO-8859-4"
|
||||||
|
done
|
||||||
|
for l in ru_RU; do
|
||||||
|
echo "$l.KOI8-R KOI8-R"
|
||||||
|
echo "$l.ISO8859-5 ISO-8859-5"
|
||||||
|
echo "$l.CP866 CP866"
|
||||||
|
done
|
||||||
|
for l in bg_BG; do
|
||||||
|
echo "$l.CP1251 CP1251"
|
||||||
|
done
|
||||||
|
echo "uk_UA.KOI8-U KOI8-U"
|
||||||
|
echo "zh_TW.BIG5 BIG5"
|
||||||
|
echo "zh_TW.Big5 BIG5"
|
||||||
|
echo "zh_CN.EUC GB2312"
|
||||||
|
echo "ja_JP.EUC EUC-JP"
|
||||||
|
echo "ja_JP.SJIS SHIFT_JIS"
|
||||||
|
echo "ko_KR.EUC EUC-KR"
|
||||||
|
;;
|
||||||
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"
|
||||||
@ -410,6 +550,7 @@ case "$os" in
|
|||||||
echo "sq CP852"
|
echo "sq CP852"
|
||||||
echo "sq_AL CP852"
|
echo "sq_AL CP852"
|
||||||
echo "sr CP852" # CP852 or CP866 or CP855 ??
|
echo "sr CP852" # CP852 or CP866 or CP855 ??
|
||||||
|
echo "sr_CS CP852" # CP852 or CP866 or CP855 ??
|
||||||
echo "sr_YU CP852" # CP852 or CP866 or CP855 ??
|
echo "sr_YU CP852" # CP852 or CP866 or CP855 ??
|
||||||
# ISO-8859-3 languages
|
# ISO-8859-3 languages
|
||||||
echo "mt CP850"
|
echo "mt CP850"
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Implementation of the dcgettext(3) function.
|
/* Implementation of the dcgettext(3) function.
|
||||||
Copyright (C) 1995-1999, 2000, 2001, 2002 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
|
||||||
@ -44,10 +44,7 @@
|
|||||||
/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
|
/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
|
||||||
locale. */
|
locale. */
|
||||||
char *
|
char *
|
||||||
DCGETTEXT (domainname, msgid, category)
|
DCGETTEXT (const char *domainname, const char *msgid, int category)
|
||||||
const char *domainname;
|
|
||||||
const char *msgid;
|
|
||||||
int category;
|
|
||||||
{
|
{
|
||||||
return DCIGETTEXT (domainname, msgid, NULL, 0, 0, category);
|
return DCIGETTEXT (domainname, msgid, NULL, 0, 0, category);
|
||||||
}
|
}
|
||||||
|
@ -148,13 +148,17 @@ extern int errno;
|
|||||||
char *getwd ();
|
char *getwd ();
|
||||||
# define getcwd(buf, max) getwd (buf)
|
# define getcwd(buf, max) getwd (buf)
|
||||||
# else
|
# else
|
||||||
|
# if VMS
|
||||||
|
# define getcwd(buf, max) (getcwd) (buf, max, 0)
|
||||||
|
# else
|
||||||
char *getcwd ();
|
char *getcwd ();
|
||||||
|
# endif
|
||||||
# endif
|
# endif
|
||||||
# ifndef HAVE_STPCPY
|
# ifndef HAVE_STPCPY
|
||||||
static char *stpcpy PARAMS ((char *dest, const char *src));
|
static char *stpcpy (char *dest, const char *src);
|
||||||
# endif
|
# endif
|
||||||
# ifndef HAVE_MEMPCPY
|
# ifndef HAVE_MEMPCPY
|
||||||
static void *mempcpy PARAMS ((void *dest, const void *src, size_t n));
|
static void *mempcpy (void *dest, const void *src, size_t n);
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -248,11 +252,8 @@ static void *root;
|
|||||||
# endif
|
# endif
|
||||||
|
|
||||||
/* Function to compare two entries in the table of known translations. */
|
/* Function to compare two entries in the table of known translations. */
|
||||||
static int transcmp PARAMS ((const void *p1, const void *p2));
|
|
||||||
static int
|
static int
|
||||||
transcmp (p1, p2)
|
transcmp (const void *p1, const void *p2)
|
||||||
const void *p1;
|
|
||||||
const void *p2;
|
|
||||||
{
|
{
|
||||||
const struct known_translation_t *s1;
|
const struct known_translation_t *s1;
|
||||||
const struct known_translation_t *s2;
|
const struct known_translation_t *s2;
|
||||||
@ -304,19 +305,18 @@ INTVARDEF (_nl_default_dirname)
|
|||||||
struct binding *_nl_domain_bindings;
|
struct binding *_nl_domain_bindings;
|
||||||
|
|
||||||
/* Prototypes for local functions. */
|
/* Prototypes for local functions. */
|
||||||
static char *plural_lookup PARAMS ((struct loaded_l10nfile *domain,
|
static char *plural_lookup (struct loaded_l10nfile *domain,
|
||||||
unsigned long int n,
|
unsigned long int n,
|
||||||
const char *translation,
|
const char *translation, size_t translation_len)
|
||||||
size_t translation_len))
|
|
||||||
internal_function;
|
internal_function;
|
||||||
static const char *guess_category_value PARAMS ((int category,
|
static const char *guess_category_value (int category,
|
||||||
const char *categoryname))
|
const char *categoryname)
|
||||||
internal_function;
|
internal_function;
|
||||||
#ifdef _LIBC
|
#ifdef _LIBC
|
||||||
# include "../locale/localeinfo.h"
|
# include "../locale/localeinfo.h"
|
||||||
# define category_to_name(category) _nl_category_names[category]
|
# define category_to_name(category) _nl_category_names[category]
|
||||||
#else
|
#else
|
||||||
static const char *category_to_name PARAMS ((int category)) internal_function;
|
static const char *category_to_name (int category) internal_function;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
@ -424,13 +424,8 @@ static int enable_secure;
|
|||||||
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. */
|
||||||
char *
|
char *
|
||||||
DCIGETTEXT (domainname, msgid1, msgid2, plural, n, category)
|
DCIGETTEXT (const char *domainname, const char *msgid1, const char *msgid2,
|
||||||
const char *domainname;
|
int plural, unsigned long int n, int category)
|
||||||
const char *msgid1;
|
|
||||||
const char *msgid2;
|
|
||||||
int plural;
|
|
||||||
unsigned long int n;
|
|
||||||
int category;
|
|
||||||
{
|
{
|
||||||
#ifndef HAVE_ALLOCA
|
#ifndef HAVE_ALLOCA
|
||||||
struct block_list *block_list = NULL;
|
struct block_list *block_list = NULL;
|
||||||
@ -703,11 +698,10 @@ DCIGETTEXT (domainname, msgid1, msgid2, plural, n, category)
|
|||||||
#ifndef _LIBC
|
#ifndef _LIBC
|
||||||
if (!ENABLE_SECURE)
|
if (!ENABLE_SECURE)
|
||||||
{
|
{
|
||||||
extern void _nl_log_untranslated PARAMS ((const char *logfilename,
|
extern void _nl_log_untranslated (const char *logfilename,
|
||||||
const char *domainname,
|
const char *domainname,
|
||||||
const char *msgid1,
|
const char *msgid1, const char *msgid2,
|
||||||
const char *msgid2,
|
int plural);
|
||||||
int plural));
|
|
||||||
const char *logfilename = getenv ("GETTEXT_LOG_UNTRANSLATED");
|
const char *logfilename = getenv ("GETTEXT_LOG_UNTRANSLATED");
|
||||||
|
|
||||||
if (logfilename != NULL && logfilename[0] != '\0')
|
if (logfilename != NULL && logfilename[0] != '\0')
|
||||||
@ -724,11 +718,9 @@ DCIGETTEXT (domainname, msgid1, msgid2, plural, n, category)
|
|||||||
|
|
||||||
char *
|
char *
|
||||||
internal_function
|
internal_function
|
||||||
_nl_find_msg (domain_file, domainbinding, msgid, lengthp)
|
_nl_find_msg (struct loaded_l10nfile *domain_file,
|
||||||
struct loaded_l10nfile *domain_file;
|
struct binding *domainbinding, const char *msgid,
|
||||||
struct binding *domainbinding;
|
size_t *lengthp)
|
||||||
const char *msgid;
|
|
||||||
size_t *lengthp;
|
|
||||||
{
|
{
|
||||||
struct loaded_domain *domain;
|
struct loaded_domain *domain;
|
||||||
nls_uint32 nstrings;
|
nls_uint32 nstrings;
|
||||||
@ -1035,11 +1027,8 @@ _nl_find_msg (domain_file, domainbinding, msgid, lengthp)
|
|||||||
/* Look up a plural variant. */
|
/* Look up a plural variant. */
|
||||||
static char *
|
static char *
|
||||||
internal_function
|
internal_function
|
||||||
plural_lookup (domain, n, translation, translation_len)
|
plural_lookup (struct loaded_l10nfile *domain, unsigned long int n,
|
||||||
struct loaded_l10nfile *domain;
|
const char *translation, size_t translation_len)
|
||||||
unsigned long int n;
|
|
||||||
const char *translation;
|
|
||||||
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 index;
|
unsigned long int index;
|
||||||
@ -1076,8 +1065,7 @@ plural_lookup (domain, n, translation, translation_len)
|
|||||||
/* Return string representation of locale CATEGORY. */
|
/* Return string representation of locale CATEGORY. */
|
||||||
static const char *
|
static const char *
|
||||||
internal_function
|
internal_function
|
||||||
category_to_name (category)
|
category_to_name (int category)
|
||||||
int category;
|
|
||||||
{
|
{
|
||||||
const char *retval;
|
const char *retval;
|
||||||
|
|
||||||
@ -1137,9 +1125,7 @@ category_to_name (category)
|
|||||||
/* 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 *
|
||||||
internal_function
|
internal_function
|
||||||
guess_category_value (category, categoryname)
|
guess_category_value (int category, const char *categoryname)
|
||||||
int category;
|
|
||||||
const char *categoryname;
|
|
||||||
{
|
{
|
||||||
const char *language;
|
const char *language;
|
||||||
const char *retval;
|
const char *retval;
|
||||||
@ -1180,9 +1166,7 @@ guess_category_value (category, categoryname)
|
|||||||
to be defined. */
|
to be defined. */
|
||||||
#if !_LIBC && !HAVE_STPCPY
|
#if !_LIBC && !HAVE_STPCPY
|
||||||
static char *
|
static char *
|
||||||
stpcpy (dest, src)
|
stpcpy (char *dest, const char *src)
|
||||||
char *dest;
|
|
||||||
const char *src;
|
|
||||||
{
|
{
|
||||||
while ((*dest++ = *src++) != '\0')
|
while ((*dest++ = *src++) != '\0')
|
||||||
/* Do nothing. */ ;
|
/* Do nothing. */ ;
|
||||||
@ -1192,10 +1176,7 @@ stpcpy (dest, src)
|
|||||||
|
|
||||||
#if !_LIBC && !HAVE_MEMPCPY
|
#if !_LIBC && !HAVE_MEMPCPY
|
||||||
static void *
|
static void *
|
||||||
mempcpy (dest, src, n)
|
mempcpy (void *dest, const void *src, size_t n)
|
||||||
void *dest;
|
|
||||||
const void *src;
|
|
||||||
size_t n;
|
|
||||||
{
|
{
|
||||||
return (void *) ((char *) memcpy (dest, src, n) + n);
|
return (void *) ((char *) memcpy (dest, src, n) + n);
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Implementation of the dcngettext(3) function.
|
/* Implementation of the dcngettext(3) function.
|
||||||
Copyright (C) 1995-1999, 2000, 2001, 2002 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
|
||||||
@ -44,12 +44,9 @@
|
|||||||
/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
|
/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
|
||||||
locale. */
|
locale. */
|
||||||
char *
|
char *
|
||||||
DCNGETTEXT (domainname, msgid1, msgid2, n, category)
|
DCNGETTEXT (const char *domainname,
|
||||||
const char *domainname;
|
const char *msgid1, const char *msgid2, unsigned long int n,
|
||||||
const char *msgid1;
|
int category)
|
||||||
const char *msgid2;
|
|
||||||
unsigned long int n;
|
|
||||||
int category;
|
|
||||||
{
|
{
|
||||||
return DCIGETTEXT (domainname, msgid1, msgid2, 1, n, category);
|
return DCIGETTEXT (domainname, msgid1, msgid2, 1, n, category);
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Implementation of the dgettext(3) function.
|
/* Implementation of the dgettext(3) function.
|
||||||
Copyright (C) 1995-1997, 2000, 2001, 2002 Free Software Foundation, Inc.
|
Copyright (C) 1995-1997, 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
|
||||||
@ -20,9 +20,10 @@
|
|||||||
# include <config.h>
|
# include <config.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include "gettextP.h"
|
||||||
|
|
||||||
#include <locale.h>
|
#include <locale.h>
|
||||||
|
|
||||||
#include "gettextP.h"
|
|
||||||
#ifdef _LIBC
|
#ifdef _LIBC
|
||||||
# include <libintl.h>
|
# include <libintl.h>
|
||||||
#else
|
#else
|
||||||
@ -46,9 +47,7 @@
|
|||||||
/* Look up MSGID in the DOMAINNAME message catalog of the current
|
/* Look up MSGID in the DOMAINNAME message catalog of the current
|
||||||
LC_MESSAGES locale. */
|
LC_MESSAGES locale. */
|
||||||
char *
|
char *
|
||||||
DGETTEXT (domainname, msgid)
|
DGETTEXT (const char *domainname, const char *msgid)
|
||||||
const char *domainname;
|
|
||||||
const char *msgid;
|
|
||||||
{
|
{
|
||||||
return DCGETTEXT (domainname, msgid, LC_MESSAGES);
|
return DCGETTEXT (domainname, msgid, LC_MESSAGES);
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Implementation of the dngettext(3) function.
|
/* Implementation of the dngettext(3) function.
|
||||||
Copyright (C) 1995-1997, 2000, 2001, 2002 Free Software Foundation, Inc.
|
Copyright (C) 1995-1997, 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
|
||||||
@ -20,9 +20,10 @@
|
|||||||
# include <config.h>
|
# include <config.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include "gettextP.h"
|
||||||
|
|
||||||
#include <locale.h>
|
#include <locale.h>
|
||||||
|
|
||||||
#include "gettextP.h"
|
|
||||||
#ifdef _LIBC
|
#ifdef _LIBC
|
||||||
# include <libintl.h>
|
# include <libintl.h>
|
||||||
#else
|
#else
|
||||||
@ -46,11 +47,8 @@
|
|||||||
/* Look up MSGID in the DOMAINNAME message catalog of the current
|
/* Look up MSGID in the DOMAINNAME message catalog of the current
|
||||||
LC_MESSAGES locale and skip message according to the plural form. */
|
LC_MESSAGES locale and skip message according to the plural form. */
|
||||||
char *
|
char *
|
||||||
DNGETTEXT (domainname, msgid1, msgid2, n)
|
DNGETTEXT (const char *domainname,
|
||||||
const char *domainname;
|
const char *msgid1, const char *msgid2, unsigned long int n)
|
||||||
const char *msgid1;
|
|
||||||
const char *msgid2;
|
|
||||||
unsigned long int n;
|
|
||||||
{
|
{
|
||||||
return DCNGETTEXT (domainname, msgid1, msgid2, n, LC_MESSAGES);
|
return DCNGETTEXT (domainname, msgid1, msgid2, n, LC_MESSAGES);
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Plural expression evaluation.
|
/* Plural expression evaluation.
|
||||||
Copyright (C) 2000-2002 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
|
||||||
@ -21,16 +21,10 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Evaluate the plural expression and return an index value. */
|
/* Evaluate the plural expression and return an index value. */
|
||||||
STATIC unsigned long int plural_eval PARAMS ((struct expression *pexp,
|
|
||||||
unsigned long int n))
|
|
||||||
internal_function;
|
|
||||||
|
|
||||||
STATIC
|
STATIC
|
||||||
unsigned long int
|
unsigned long int
|
||||||
internal_function
|
internal_function
|
||||||
plural_eval (pexp, n)
|
plural_eval (struct expression *pexp, unsigned long int n)
|
||||||
struct expression *pexp;
|
|
||||||
unsigned long int n;
|
|
||||||
{
|
{
|
||||||
switch (pexp->nargs)
|
switch (pexp->nargs)
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 1995-1998, 2000, 2001 Free Software Foundation, Inc.
|
/* Copyright (C) 1995-1998, 2000-2001, 2003 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
|
||||||
@ -38,8 +38,7 @@
|
|||||||
/* @@ end of prolog @@ */
|
/* @@ end of prolog @@ */
|
||||||
|
|
||||||
char *
|
char *
|
||||||
_nl_find_language (name)
|
_nl_find_language (const char *name)
|
||||||
const char *name;
|
|
||||||
{
|
{
|
||||||
while (name[0] != '\0' && name[0] != '_' && name[0] != '@'
|
while (name[0] != '\0' && name[0] != '_' && name[0] != '@'
|
||||||
&& name[0] != '+' && name[0] != ',')
|
&& name[0] != '+' && name[0] != ',')
|
||||||
@ -50,17 +49,11 @@ _nl_find_language (name)
|
|||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
_nl_explode_name (name, language, modifier, territory, codeset,
|
_nl_explode_name (char *name,
|
||||||
normalized_codeset, special, sponsor, revision)
|
const char **language, const char **modifier,
|
||||||
char *name;
|
const char **territory, const char **codeset,
|
||||||
const char **language;
|
const char **normalized_codeset, const char **special,
|
||||||
const char **modifier;
|
const char **sponsor, const char **revision)
|
||||||
const char **territory;
|
|
||||||
const char **codeset;
|
|
||||||
const char **normalized_codeset;
|
|
||||||
const char **special;
|
|
||||||
const char **sponsor;
|
|
||||||
const char **revision;
|
|
||||||
{
|
{
|
||||||
enum { undecided, xpg, cen } syntax;
|
enum { undecided, xpg, cen } syntax;
|
||||||
char *cp;
|
char *cp;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Handle list of needed message catalogs
|
/* Handle list of needed message catalogs
|
||||||
Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
|
Copyright (C) 1995-1999, 2000-2001, 2003 Free Software Foundation, Inc.
|
||||||
Written by Ulrich Drepper <drepper@gnu.org>, 1995.
|
Written by Ulrich Drepper <drepper@gnu.org>, 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
|
||||||
@ -47,11 +47,8 @@ static struct loaded_l10nfile *_nl_loaded_domains;
|
|||||||
established bindings. */
|
established bindings. */
|
||||||
struct loaded_l10nfile *
|
struct loaded_l10nfile *
|
||||||
internal_function
|
internal_function
|
||||||
_nl_find_domain (dirname, locale, domainname, domainbinding)
|
_nl_find_domain (const char *dirname, char *locale,
|
||||||
const char *dirname;
|
const char *domainname, struct binding *domainbinding)
|
||||||
char *locale;
|
|
||||||
const char *domainname;
|
|
||||||
struct binding *domainbinding;
|
|
||||||
{
|
{
|
||||||
struct loaded_l10nfile *retval;
|
struct loaded_l10nfile *retval;
|
||||||
const char *language;
|
const char *language;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Implementation of gettext(3) function.
|
/* Implementation of gettext(3) function.
|
||||||
Copyright (C) 1995, 1997, 2000, 2001, 2002 Free Software Foundation, Inc.
|
Copyright (C) 1995, 1997, 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
|
||||||
@ -52,8 +52,7 @@
|
|||||||
LC_MESSAGES locale. If not found, returns MSGID itself (the default
|
LC_MESSAGES locale. If not found, returns MSGID itself (the default
|
||||||
text). */
|
text). */
|
||||||
char *
|
char *
|
||||||
GETTEXT (msgid)
|
GETTEXT (const char *msgid)
|
||||||
const char *msgid;
|
|
||||||
{
|
{
|
||||||
return DCGETTEXT (NULL, msgid, LC_MESSAGES);
|
return DCGETTEXT (NULL, msgid, LC_MESSAGES);
|
||||||
}
|
}
|
||||||
|
@ -36,14 +36,6 @@
|
|||||||
|
|
||||||
/* @@ end of prolog @@ */
|
/* @@ end of prolog @@ */
|
||||||
|
|
||||||
#ifndef PARAMS
|
|
||||||
# if __STDC__ || defined __GNUC__ || defined __SUNPRO_C || defined __cplusplus || __PROTOTYPES
|
|
||||||
# define PARAMS(args) args
|
|
||||||
# else
|
|
||||||
# define PARAMS(args) ()
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef internal_function
|
#ifndef internal_function
|
||||||
# define internal_function
|
# define internal_function
|
||||||
#endif
|
#endif
|
||||||
@ -159,64 +151,63 @@ struct binding
|
|||||||
extern int _nl_msg_cat_cntr;
|
extern int _nl_msg_cat_cntr;
|
||||||
|
|
||||||
#ifndef _LIBC
|
#ifndef _LIBC
|
||||||
const char *_nl_locale_name PARAMS ((int category, const char *categoryname));
|
const char *_nl_locale_name (int category, const char *categoryname);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
struct loaded_l10nfile *_nl_find_domain PARAMS ((const char *__dirname,
|
struct loaded_l10nfile *_nl_find_domain (const char *__dirname, char *__locale,
|
||||||
char *__locale,
|
const char *__domainname,
|
||||||
const char *__domainname,
|
struct binding *__domainbinding)
|
||||||
struct binding *__domainbinding))
|
|
||||||
internal_function;
|
internal_function;
|
||||||
void _nl_load_domain PARAMS ((struct loaded_l10nfile *__domain,
|
void _nl_load_domain (struct loaded_l10nfile *__domain,
|
||||||
struct binding *__domainbinding))
|
struct binding *__domainbinding)
|
||||||
internal_function;
|
internal_function;
|
||||||
void _nl_unload_domain PARAMS ((struct loaded_domain *__domain))
|
void _nl_unload_domain (struct loaded_domain *__domain)
|
||||||
internal_function;
|
internal_function;
|
||||||
const char *_nl_init_domain_conv PARAMS ((struct loaded_l10nfile *__domain_file,
|
const char *_nl_init_domain_conv (struct loaded_l10nfile *__domain_file,
|
||||||
struct loaded_domain *__domain,
|
struct loaded_domain *__domain,
|
||||||
struct binding *__domainbinding))
|
struct binding *__domainbinding)
|
||||||
internal_function;
|
internal_function;
|
||||||
void _nl_free_domain_conv PARAMS ((struct loaded_domain *__domain))
|
void _nl_free_domain_conv (struct loaded_domain *__domain)
|
||||||
internal_function;
|
internal_function;
|
||||||
|
|
||||||
char *_nl_find_msg PARAMS ((struct loaded_l10nfile *domain_file,
|
char *_nl_find_msg (struct loaded_l10nfile *domain_file,
|
||||||
struct binding *domainbinding,
|
struct binding *domainbinding, const char *msgid,
|
||||||
const char *msgid, size_t *lengthp))
|
size_t *lengthp)
|
||||||
internal_function;
|
internal_function;
|
||||||
|
|
||||||
#ifdef _LIBC
|
#ifdef _LIBC
|
||||||
extern char *__gettext PARAMS ((const char *__msgid));
|
extern char *__gettext (const char *__msgid);
|
||||||
extern char *__dgettext PARAMS ((const char *__domainname,
|
extern char *__dgettext (const char *__domainname, const char *__msgid);
|
||||||
const char *__msgid));
|
extern char *__dcgettext (const char *__domainname, const char *__msgid,
|
||||||
extern char *__dcgettext PARAMS ((const char *__domainname,
|
int __category);
|
||||||
const char *__msgid, int __category));
|
extern char *__ngettext (const char *__msgid1, const char *__msgid2,
|
||||||
extern char *__ngettext PARAMS ((const char *__msgid1, const char *__msgid2,
|
unsigned long int __n);
|
||||||
unsigned long int __n));
|
extern char *__dngettext (const char *__domainname,
|
||||||
extern char *__dngettext PARAMS ((const char *__domainname,
|
const char *__msgid1, const char *__msgid2,
|
||||||
const char *__msgid1, const char *__msgid2,
|
unsigned long int n);
|
||||||
unsigned long int n));
|
extern char *__dcngettext (const char *__domainname,
|
||||||
extern char *__dcngettext PARAMS ((const char *__domainname,
|
const char *__msgid1, const char *__msgid2,
|
||||||
const char *__msgid1, const char *__msgid2,
|
unsigned long int __n, int __category);
|
||||||
unsigned long int __n, int __category));
|
extern char *__dcigettext (const char *__domainname,
|
||||||
extern char *__dcigettext PARAMS ((const char *__domainname,
|
const char *__msgid1, const char *__msgid2,
|
||||||
const char *__msgid1, const char *__msgid2,
|
int __plural, unsigned long int __n,
|
||||||
int __plural, unsigned long int __n,
|
int __category);
|
||||||
int __category));
|
extern char *__textdomain (const char *__domainname);
|
||||||
extern char *__textdomain PARAMS ((const char *__domainname));
|
extern char *__bindtextdomain (const char *__domainname,
|
||||||
extern char *__bindtextdomain PARAMS ((const char *__domainname,
|
const char *__dirname);
|
||||||
const char *__dirname));
|
extern char *__bind_textdomain_codeset (const char *__domainname,
|
||||||
extern char *__bind_textdomain_codeset PARAMS ((const char *__domainname,
|
const char *__codeset);
|
||||||
const char *__codeset));
|
|
||||||
#else
|
#else
|
||||||
/* Declare the exported libintl_* functions, in a way that allows us to
|
/* Declare the exported libintl_* functions, in a way that allows us to
|
||||||
call them under their real name. */
|
call them under their real name. */
|
||||||
|
# undef _INTL_REDIRECT_INLINE
|
||||||
|
# undef _INTL_REDIRECT_MACROS
|
||||||
# define _INTL_REDIRECT_MACROS
|
# define _INTL_REDIRECT_MACROS
|
||||||
# include "libgnuintl.h"
|
# include "libgnuintl.h"
|
||||||
extern char *libintl_dcigettext PARAMS ((const char *__domainname,
|
extern char *libintl_dcigettext (const char *__domainname,
|
||||||
const char *__msgid1,
|
const char *__msgid1, const char *__msgid2,
|
||||||
const char *__msgid2,
|
int __plural, unsigned long int __n,
|
||||||
int __plural, unsigned long int __n,
|
int __category);
|
||||||
int __category));
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* @@ begin of epilog @@ */
|
/* @@ begin of epilog @@ */
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Description of GNU message catalog format: general file layout.
|
/* Description of GNU message catalog format: general file layout.
|
||||||
Copyright (C) 1995, 1997, 2000-2002 Free Software Foundation, Inc.
|
Copyright (C) 1995, 1997, 2000-2002, 2004 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,6 +29,7 @@
|
|||||||
|
|
||||||
/* Revision number of the currently used .mo (binary) file format. */
|
/* Revision number of the currently used .mo (binary) file format. */
|
||||||
#define MO_REVISION_NUMBER 0
|
#define MO_REVISION_NUMBER 0
|
||||||
|
#define MO_REVISION_NUMBER_WITH_SYSDEP_I 1
|
||||||
|
|
||||||
/* The following contortions are an attempt to use the C preprocessor
|
/* The following contortions are an attempt to use the C preprocessor
|
||||||
to determine an unsigned integral type that is 32 bits wide. An
|
to determine an unsigned integral type that is 32 bits wide. An
|
||||||
@ -76,7 +77,7 @@ struct mo_file_header
|
|||||||
/* The revision number of the file format. */
|
/* The revision number of the file format. */
|
||||||
nls_uint32 revision;
|
nls_uint32 revision;
|
||||||
|
|
||||||
/* The following are only used in .mo files with major revision 0. */
|
/* The following are only used in .mo files with major revision 0 or 1. */
|
||||||
|
|
||||||
/* The number of strings pairs. */
|
/* The number of strings pairs. */
|
||||||
nls_uint32 nstrings;
|
nls_uint32 nstrings;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Description of GNU message catalog format: string hashing function.
|
/* Description of GNU message catalog format: string hashing function.
|
||||||
Copyright (C) 1995, 1997, 1998, 2000, 2001 Free Software Foundation, Inc.
|
Copyright (C) 1995, 1997-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
|
||||||
@ -18,14 +18,6 @@
|
|||||||
|
|
||||||
/* @@ end of prolog @@ */
|
/* @@ end of prolog @@ */
|
||||||
|
|
||||||
#ifndef PARAMS
|
|
||||||
# if __STDC__ || defined __GNUC__ || defined __SUNPRO_C || defined __cplusplus || __PROTOTYPES
|
|
||||||
# define PARAMS(Args) Args
|
|
||||||
# else
|
|
||||||
# define PARAMS(Args) ()
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* We assume to have `unsigned long int' value with at least 32 bits. */
|
/* We assume to have `unsigned long int' value with at least 32 bits. */
|
||||||
#define HASHWORDBITS 32
|
#define HASHWORDBITS 32
|
||||||
|
|
||||||
@ -33,11 +25,8 @@
|
|||||||
/* Defines the so called `hashpjw' function by P.J. Weinberger
|
/* Defines the so called `hashpjw' function by P.J. Weinberger
|
||||||
[see Aho/Sethi/Ullman, COMPILERS: Principles, Techniques and Tools,
|
[see Aho/Sethi/Ullman, COMPILERS: Principles, Techniques and Tools,
|
||||||
1986, 1987 Bell Telephone Laboratories, Inc.] */
|
1986, 1987 Bell Telephone Laboratories, Inc.] */
|
||||||
static unsigned long int hash_string PARAMS ((const char *__str_param));
|
|
||||||
|
|
||||||
static inline unsigned long int
|
static inline unsigned long int
|
||||||
hash_string (str_param)
|
hash_string (const char *str_param)
|
||||||
const char *str_param;
|
|
||||||
{
|
{
|
||||||
unsigned long int hval, g;
|
unsigned long int hval, g;
|
||||||
const char *str = str_param;
|
const char *str = str_param;
|
||||||
@ -47,7 +36,7 @@ hash_string (str_param)
|
|||||||
while (*str != '\0')
|
while (*str != '\0')
|
||||||
{
|
{
|
||||||
hval <<= 4;
|
hval <<= 4;
|
||||||
hval += (unsigned long int) *str++;
|
hval += (unsigned char) *str++;
|
||||||
g = hval & ((unsigned long int) 0xf << (HASHWORDBITS - 4));
|
g = hval & ((unsigned long int) 0xf << (HASHWORDBITS - 4));
|
||||||
if (g != 0)
|
if (g != 0)
|
||||||
{
|
{
|
||||||
|
@ -58,8 +58,7 @@
|
|||||||
|
|
||||||
DLL_EXPORTED
|
DLL_EXPORTED
|
||||||
char *
|
char *
|
||||||
gettext (msgid)
|
gettext (const char *msgid)
|
||||||
const char *msgid;
|
|
||||||
{
|
{
|
||||||
return libintl_gettext (msgid);
|
return libintl_gettext (msgid);
|
||||||
}
|
}
|
||||||
@ -67,9 +66,7 @@ gettext (msgid)
|
|||||||
|
|
||||||
DLL_EXPORTED
|
DLL_EXPORTED
|
||||||
char *
|
char *
|
||||||
dgettext (domainname, msgid)
|
dgettext (const char *domainname, const char *msgid)
|
||||||
const char *domainname;
|
|
||||||
const char *msgid;
|
|
||||||
{
|
{
|
||||||
return libintl_dgettext (domainname, msgid);
|
return libintl_dgettext (domainname, msgid);
|
||||||
}
|
}
|
||||||
@ -77,10 +74,7 @@ dgettext (domainname, msgid)
|
|||||||
|
|
||||||
DLL_EXPORTED
|
DLL_EXPORTED
|
||||||
char *
|
char *
|
||||||
dcgettext (domainname, msgid, category)
|
dcgettext (const char *domainname, const char *msgid, int category)
|
||||||
const char *domainname;
|
|
||||||
const char *msgid;
|
|
||||||
int category;
|
|
||||||
{
|
{
|
||||||
return libintl_dcgettext (domainname, msgid, category);
|
return libintl_dcgettext (domainname, msgid, category);
|
||||||
}
|
}
|
||||||
@ -88,10 +82,7 @@ dcgettext (domainname, msgid, category)
|
|||||||
|
|
||||||
DLL_EXPORTED
|
DLL_EXPORTED
|
||||||
char *
|
char *
|
||||||
ngettext (msgid1, msgid2, n)
|
ngettext (const char *msgid1, const char *msgid2, unsigned long int n)
|
||||||
const char *msgid1;
|
|
||||||
const char *msgid2;
|
|
||||||
unsigned long int n;
|
|
||||||
{
|
{
|
||||||
return libintl_ngettext (msgid1, msgid2, n);
|
return libintl_ngettext (msgid1, msgid2, n);
|
||||||
}
|
}
|
||||||
@ -99,11 +90,8 @@ ngettext (msgid1, msgid2, n)
|
|||||||
|
|
||||||
DLL_EXPORTED
|
DLL_EXPORTED
|
||||||
char *
|
char *
|
||||||
dngettext (domainname, msgid1, msgid2, n)
|
dngettext (const char *domainname,
|
||||||
const char *domainname;
|
const char *msgid1, const char *msgid2, unsigned long int n)
|
||||||
const char *msgid1;
|
|
||||||
const char *msgid2;
|
|
||||||
unsigned long int n;
|
|
||||||
{
|
{
|
||||||
return libintl_dngettext (domainname, msgid1, msgid2, n);
|
return libintl_dngettext (domainname, msgid1, msgid2, n);
|
||||||
}
|
}
|
||||||
@ -111,12 +99,9 @@ dngettext (domainname, msgid1, msgid2, n)
|
|||||||
|
|
||||||
DLL_EXPORTED
|
DLL_EXPORTED
|
||||||
char *
|
char *
|
||||||
dcngettext (domainname, msgid1, msgid2, n, category)
|
dcngettext (const char *domainname,
|
||||||
const char *domainname;
|
const char *msgid1, const char *msgid2, unsigned long int n,
|
||||||
const char *msgid1;
|
int category)
|
||||||
const char *msgid2;
|
|
||||||
unsigned long int n;
|
|
||||||
int category;
|
|
||||||
{
|
{
|
||||||
return libintl_dcngettext (domainname, msgid1, msgid2, n, category);
|
return libintl_dcngettext (domainname, msgid1, msgid2, n, category);
|
||||||
}
|
}
|
||||||
@ -124,8 +109,7 @@ dcngettext (domainname, msgid1, msgid2, n, category)
|
|||||||
|
|
||||||
DLL_EXPORTED
|
DLL_EXPORTED
|
||||||
char *
|
char *
|
||||||
textdomain (domainname)
|
textdomain (const char *domainname)
|
||||||
const char *domainname;
|
|
||||||
{
|
{
|
||||||
return libintl_textdomain (domainname);
|
return libintl_textdomain (domainname);
|
||||||
}
|
}
|
||||||
@ -133,9 +117,7 @@ textdomain (domainname)
|
|||||||
|
|
||||||
DLL_EXPORTED
|
DLL_EXPORTED
|
||||||
char *
|
char *
|
||||||
bindtextdomain (domainname, dirname)
|
bindtextdomain (const char *domainname, const char *dirname)
|
||||||
const char *domainname;
|
|
||||||
const char *dirname;
|
|
||||||
{
|
{
|
||||||
return libintl_bindtextdomain (domainname, dirname);
|
return libintl_bindtextdomain (domainname, dirname);
|
||||||
}
|
}
|
||||||
@ -143,9 +125,7 @@ bindtextdomain (domainname, dirname)
|
|||||||
|
|
||||||
DLL_EXPORTED
|
DLL_EXPORTED
|
||||||
char *
|
char *
|
||||||
bind_textdomain_codeset (domainname, codeset)
|
bind_textdomain_codeset (const char *domainname, const char *codeset)
|
||||||
const char *domainname;
|
|
||||||
const char *codeset;
|
|
||||||
{
|
{
|
||||||
return libintl_bind_textdomain_codeset (domainname, codeset);
|
return libintl_bind_textdomain_codeset (domainname, codeset);
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 1995-1999, 2000, 2001, 2002 Free Software Foundation, Inc.
|
/* Copyright (C) 1995-1999, 2000-2003 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
|
||||||
@ -58,7 +58,7 @@
|
|||||||
# endif
|
# endif
|
||||||
#else
|
#else
|
||||||
# ifndef HAVE_STPCPY
|
# ifndef HAVE_STPCPY
|
||||||
static char *stpcpy PARAMS ((char *dest, const char *src));
|
static char *stpcpy (char *dest, const char *src);
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -84,12 +84,8 @@ static char *stpcpy PARAMS ((char *dest, const char *src));
|
|||||||
|
|
||||||
#if !defined _LIBC && !defined HAVE___ARGZ_COUNT
|
#if !defined _LIBC && !defined HAVE___ARGZ_COUNT
|
||||||
/* Returns the number of strings in ARGZ. */
|
/* Returns the number of strings in ARGZ. */
|
||||||
static size_t argz_count__ PARAMS ((const char *argz, size_t len));
|
|
||||||
|
|
||||||
static size_t
|
static size_t
|
||||||
argz_count__ (argz, len)
|
argz_count__ (const char *argz, size_t len)
|
||||||
const char *argz;
|
|
||||||
size_t len;
|
|
||||||
{
|
{
|
||||||
size_t count = 0;
|
size_t count = 0;
|
||||||
while (len > 0)
|
while (len > 0)
|
||||||
@ -112,13 +108,8 @@ argz_count__ (argz, len)
|
|||||||
#if !defined _LIBC && !defined HAVE___ARGZ_STRINGIFY
|
#if !defined _LIBC && !defined HAVE___ARGZ_STRINGIFY
|
||||||
/* Make '\0' separated arg vector ARGZ printable by converting all the '\0's
|
/* Make '\0' separated arg vector ARGZ printable by converting all the '\0's
|
||||||
except the last into the character SEP. */
|
except the last into the character SEP. */
|
||||||
static void argz_stringify__ PARAMS ((char *argz, size_t len, int sep));
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
argz_stringify__ (argz, len, sep)
|
argz_stringify__ (char *argz, size_t len, int sep)
|
||||||
char *argz;
|
|
||||||
size_t len;
|
|
||||||
int sep;
|
|
||||||
{
|
{
|
||||||
while (len > 0)
|
while (len > 0)
|
||||||
{
|
{
|
||||||
@ -139,14 +130,8 @@ argz_stringify__ (argz, len, sep)
|
|||||||
#endif /* !_LIBC && !HAVE___ARGZ_STRINGIFY */
|
#endif /* !_LIBC && !HAVE___ARGZ_STRINGIFY */
|
||||||
|
|
||||||
#if !defined _LIBC && !defined HAVE___ARGZ_NEXT
|
#if !defined _LIBC && !defined HAVE___ARGZ_NEXT
|
||||||
static char *argz_next__ PARAMS ((char *argz, size_t argz_len,
|
|
||||||
const char *entry));
|
|
||||||
|
|
||||||
static char *
|
static char *
|
||||||
argz_next__ (argz, argz_len, entry)
|
argz_next__ (char *argz, size_t argz_len, const char *entry)
|
||||||
char *argz;
|
|
||||||
size_t argz_len;
|
|
||||||
const char *entry;
|
|
||||||
{
|
{
|
||||||
if (entry)
|
if (entry)
|
||||||
{
|
{
|
||||||
@ -167,11 +152,8 @@ argz_next__ (argz, argz_len, entry)
|
|||||||
|
|
||||||
|
|
||||||
/* Return number of bits set in X. */
|
/* Return number of bits set in X. */
|
||||||
static int pop PARAMS ((int x));
|
|
||||||
|
|
||||||
static inline int
|
static inline int
|
||||||
pop (x)
|
pop (int x)
|
||||||
int x;
|
|
||||||
{
|
{
|
||||||
/* We assume that no more than 16 bits are used. */
|
/* We assume that no more than 16 bits are used. */
|
||||||
x = ((x & ~0x5555) >> 1) + (x & 0x5555);
|
x = ((x & ~0x5555) >> 1) + (x & 0x5555);
|
||||||
@ -184,23 +166,13 @@ pop (x)
|
|||||||
|
|
||||||
|
|
||||||
struct loaded_l10nfile *
|
struct loaded_l10nfile *
|
||||||
_nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, mask, language,
|
_nl_make_l10nflist (struct loaded_l10nfile **l10nfile_list,
|
||||||
territory, codeset, normalized_codeset, modifier, special,
|
const char *dirlist, size_t dirlist_len,
|
||||||
sponsor, revision, filename, do_allocate)
|
int mask, const char *language, const char *territory,
|
||||||
struct loaded_l10nfile **l10nfile_list;
|
const char *codeset, const char *normalized_codeset,
|
||||||
const char *dirlist;
|
const char *modifier, const char *special,
|
||||||
size_t dirlist_len;
|
const char *sponsor, const char *revision,
|
||||||
int mask;
|
const char *filename, int do_allocate)
|
||||||
const char *language;
|
|
||||||
const char *territory;
|
|
||||||
const char *codeset;
|
|
||||||
const char *normalized_codeset;
|
|
||||||
const char *modifier;
|
|
||||||
const char *special;
|
|
||||||
const char *sponsor;
|
|
||||||
const char *revision;
|
|
||||||
const char *filename;
|
|
||||||
int do_allocate;
|
|
||||||
{
|
{
|
||||||
char *abs_filename;
|
char *abs_filename;
|
||||||
struct loaded_l10nfile **lastp;
|
struct loaded_l10nfile **lastp;
|
||||||
@ -393,9 +365,7 @@ _nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, mask, language,
|
|||||||
names. The return value is dynamically allocated and has to be
|
names. The return value is dynamically allocated and has to be
|
||||||
freed by the caller. */
|
freed by the caller. */
|
||||||
const char *
|
const char *
|
||||||
_nl_normalize_codeset (codeset, name_len)
|
_nl_normalize_codeset (const char *codeset, size_t name_len)
|
||||||
const char *codeset;
|
|
||||||
size_t name_len;
|
|
||||||
{
|
{
|
||||||
int len = 0;
|
int len = 0;
|
||||||
int only_digit = 1;
|
int only_digit = 1;
|
||||||
@ -442,9 +412,7 @@ _nl_normalize_codeset (codeset, name_len)
|
|||||||
to be defined. */
|
to be defined. */
|
||||||
#if !_LIBC && !HAVE_STPCPY
|
#if !_LIBC && !HAVE_STPCPY
|
||||||
static char *
|
static char *
|
||||||
stpcpy (dest, src)
|
stpcpy (char *dest, const char *src)
|
||||||
char *dest;
|
|
||||||
const char *src;
|
|
||||||
{
|
{
|
||||||
while ((*dest++ = *src++) != '\0')
|
while ((*dest++ = *src++) != '\0')
|
||||||
/* Do nothing. */ ;
|
/* Do nothing. */ ;
|
||||||
|
@ -47,16 +47,6 @@
|
|||||||
# undef gettext
|
# undef gettext
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Use _INTL_PARAMS, not PARAMS, in order to avoid clashes with identifiers
|
|
||||||
used by programs. Similarly, test __PROTOTYPES, not PROTOTYPES. */
|
|
||||||
#ifndef _INTL_PARAMS
|
|
||||||
# if __STDC__ || defined __GNUC__ || defined __SUNPRO_C || defined __cplusplus || __PROTOTYPES
|
|
||||||
# define _INTL_PARAMS(args) args
|
|
||||||
# else
|
|
||||||
# define _INTL_PARAMS(args) ()
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
@ -93,7 +83,7 @@ extern "C" {
|
|||||||
If he doesn't, we choose the method. A third possible method is
|
If he doesn't, we choose the method. A third possible method is
|
||||||
_INTL_REDIRECT_ASM, supported only by GCC. */
|
_INTL_REDIRECT_ASM, supported only by GCC. */
|
||||||
#if !(defined _INTL_REDIRECT_INLINE || defined _INTL_REDIRECT_MACROS)
|
#if !(defined _INTL_REDIRECT_INLINE || defined _INTL_REDIRECT_MACROS)
|
||||||
# if __GNUC__ >= 2 && !defined __APPLE_CC__ && (defined __STDC__ || defined __cplusplus)
|
# if __GNUC__ >= 2 && !defined __APPLE_CC__ && !defined __MINGW32__ && !(__GNUC__ == 2 && defined _AIX) && (defined __STDC__ || defined __cplusplus)
|
||||||
# define _INTL_REDIRECT_ASM
|
# define _INTL_REDIRECT_ASM
|
||||||
# else
|
# else
|
||||||
# ifdef __cplusplus
|
# ifdef __cplusplus
|
||||||
@ -125,7 +115,7 @@ static inline char *gettext (const char *__msgid)
|
|||||||
#ifdef _INTL_REDIRECT_MACROS
|
#ifdef _INTL_REDIRECT_MACROS
|
||||||
# define gettext libintl_gettext
|
# define gettext libintl_gettext
|
||||||
#endif
|
#endif
|
||||||
extern char *gettext _INTL_PARAMS ((const char *__msgid))
|
extern char *gettext (const char *__msgid)
|
||||||
_INTL_ASM (libintl_gettext);
|
_INTL_ASM (libintl_gettext);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -141,8 +131,7 @@ static inline char *dgettext (const char *__domainname, const char *__msgid)
|
|||||||
#ifdef _INTL_REDIRECT_MACROS
|
#ifdef _INTL_REDIRECT_MACROS
|
||||||
# define dgettext libintl_dgettext
|
# define dgettext libintl_dgettext
|
||||||
#endif
|
#endif
|
||||||
extern char *dgettext _INTL_PARAMS ((const char *__domainname,
|
extern char *dgettext (const char *__domainname, const char *__msgid)
|
||||||
const char *__msgid))
|
|
||||||
_INTL_ASM (libintl_dgettext);
|
_INTL_ASM (libintl_dgettext);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -160,9 +149,8 @@ static inline char *dcgettext (const char *__domainname, const char *__msgid,
|
|||||||
#ifdef _INTL_REDIRECT_MACROS
|
#ifdef _INTL_REDIRECT_MACROS
|
||||||
# define dcgettext libintl_dcgettext
|
# define dcgettext libintl_dcgettext
|
||||||
#endif
|
#endif
|
||||||
extern char *dcgettext _INTL_PARAMS ((const char *__domainname,
|
extern char *dcgettext (const char *__domainname, const char *__msgid,
|
||||||
const char *__msgid,
|
int __category)
|
||||||
int __category))
|
|
||||||
_INTL_ASM (libintl_dcgettext);
|
_INTL_ASM (libintl_dcgettext);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -181,9 +169,8 @@ static inline char *ngettext (const char *__msgid1, const char *__msgid2,
|
|||||||
#ifdef _INTL_REDIRECT_MACROS
|
#ifdef _INTL_REDIRECT_MACROS
|
||||||
# define ngettext libintl_ngettext
|
# define ngettext libintl_ngettext
|
||||||
#endif
|
#endif
|
||||||
extern char *ngettext _INTL_PARAMS ((const char *__msgid1,
|
extern char *ngettext (const char *__msgid1, const char *__msgid2,
|
||||||
const char *__msgid2,
|
unsigned long int __n)
|
||||||
unsigned long int __n))
|
|
||||||
_INTL_ASM (libintl_ngettext);
|
_INTL_ASM (libintl_ngettext);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -201,10 +188,9 @@ static inline char *dngettext (const char *__domainname, const char *__msgid1,
|
|||||||
#ifdef _INTL_REDIRECT_MACROS
|
#ifdef _INTL_REDIRECT_MACROS
|
||||||
# define dngettext libintl_dngettext
|
# define dngettext libintl_dngettext
|
||||||
#endif
|
#endif
|
||||||
extern char *dngettext _INTL_PARAMS ((const char *__domainname,
|
extern char *dngettext (const char *__domainname,
|
||||||
const char *__msgid1,
|
const char *__msgid1, const char *__msgid2,
|
||||||
const char *__msgid2,
|
unsigned long int __n)
|
||||||
unsigned long int __n))
|
|
||||||
_INTL_ASM (libintl_dngettext);
|
_INTL_ASM (libintl_dngettext);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -224,11 +210,9 @@ static inline char *dcngettext (const char *__domainname,
|
|||||||
#ifdef _INTL_REDIRECT_MACROS
|
#ifdef _INTL_REDIRECT_MACROS
|
||||||
# define dcngettext libintl_dcngettext
|
# define dcngettext libintl_dcngettext
|
||||||
#endif
|
#endif
|
||||||
extern char *dcngettext _INTL_PARAMS ((const char *__domainname,
|
extern char *dcngettext (const char *__domainname,
|
||||||
const char *__msgid1,
|
const char *__msgid1, const char *__msgid2,
|
||||||
const char *__msgid2,
|
unsigned long int __n, int __category)
|
||||||
unsigned long int __n,
|
|
||||||
int __category))
|
|
||||||
_INTL_ASM (libintl_dcngettext);
|
_INTL_ASM (libintl_dcngettext);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -246,7 +230,7 @@ static inline char *textdomain (const char *__domainname)
|
|||||||
#ifdef _INTL_REDIRECT_MACROS
|
#ifdef _INTL_REDIRECT_MACROS
|
||||||
# define textdomain libintl_textdomain
|
# define textdomain libintl_textdomain
|
||||||
#endif
|
#endif
|
||||||
extern char *textdomain _INTL_PARAMS ((const char *__domainname))
|
extern char *textdomain (const char *__domainname)
|
||||||
_INTL_ASM (libintl_textdomain);
|
_INTL_ASM (libintl_textdomain);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -264,8 +248,7 @@ static inline char *bindtextdomain (const char *__domainname,
|
|||||||
#ifdef _INTL_REDIRECT_MACROS
|
#ifdef _INTL_REDIRECT_MACROS
|
||||||
# define bindtextdomain libintl_bindtextdomain
|
# define bindtextdomain libintl_bindtextdomain
|
||||||
#endif
|
#endif
|
||||||
extern char *bindtextdomain _INTL_PARAMS ((const char *__domainname,
|
extern char *bindtextdomain (const char *__domainname, const char *__dirname)
|
||||||
const char *__dirname))
|
|
||||||
_INTL_ASM (libintl_bindtextdomain);
|
_INTL_ASM (libintl_bindtextdomain);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -283,12 +266,103 @@ static inline char *bind_textdomain_codeset (const char *__domainname,
|
|||||||
#ifdef _INTL_REDIRECT_MACROS
|
#ifdef _INTL_REDIRECT_MACROS
|
||||||
# define bind_textdomain_codeset libintl_bind_textdomain_codeset
|
# define bind_textdomain_codeset libintl_bind_textdomain_codeset
|
||||||
#endif
|
#endif
|
||||||
extern char *bind_textdomain_codeset _INTL_PARAMS ((const char *__domainname,
|
extern char *bind_textdomain_codeset (const char *__domainname,
|
||||||
const char *__codeset))
|
const char *__codeset)
|
||||||
_INTL_ASM (libintl_bind_textdomain_codeset);
|
_INTL_ASM (libintl_bind_textdomain_codeset);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* Support for format strings with positions in *printf(), following the
|
||||||
|
POSIX/XSI specification.
|
||||||
|
Note: These replacements for the *printf() functions are visible only
|
||||||
|
in source files that #include <libintl.h> or #include "gettext.h".
|
||||||
|
Packages that use *printf() in source files that don't refer to _()
|
||||||
|
or gettext() but for which the format string could be the return value
|
||||||
|
of _() or gettext() need to add this #include. Oh well. */
|
||||||
|
|
||||||
|
#if !@HAVE_POSIX_PRINTF@
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
|
/* Get va_list. */
|
||||||
|
#if __STDC__ || defined __cplusplus || defined _MSC_VER
|
||||||
|
# include <stdarg.h>
|
||||||
|
#else
|
||||||
|
# include <varargs.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#undef fprintf
|
||||||
|
#define fprintf libintl_fprintf
|
||||||
|
extern int fprintf (FILE *, const char *, ...);
|
||||||
|
#undef vfprintf
|
||||||
|
#define vfprintf libintl_vfprintf
|
||||||
|
extern int vfprintf (FILE *, const char *, va_list);
|
||||||
|
|
||||||
|
#undef printf
|
||||||
|
#define printf libintl_printf
|
||||||
|
extern int printf (const char *, ...);
|
||||||
|
#undef vprintf
|
||||||
|
#define vprintf libintl_vprintf
|
||||||
|
extern int vprintf (const char *, va_list);
|
||||||
|
|
||||||
|
#undef sprintf
|
||||||
|
#define sprintf libintl_sprintf
|
||||||
|
extern int sprintf (char *, const char *, ...);
|
||||||
|
#undef vsprintf
|
||||||
|
#define vsprintf libintl_vsprintf
|
||||||
|
extern int vsprintf (char *, const char *, va_list);
|
||||||
|
|
||||||
|
#if @HAVE_SNPRINTF@
|
||||||
|
|
||||||
|
#undef snprintf
|
||||||
|
#define snprintf libintl_snprintf
|
||||||
|
extern int snprintf (char *, size_t, const char *, ...);
|
||||||
|
#undef vsnprintf
|
||||||
|
#define vsnprintf libintl_vsnprintf
|
||||||
|
extern int vsnprintf (char *, size_t, const char *, va_list);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if @HAVE_ASPRINTF@
|
||||||
|
|
||||||
|
#undef asprintf
|
||||||
|
#define asprintf libintl_asprintf
|
||||||
|
extern int asprintf (char **, const char *, ...);
|
||||||
|
#undef vasprintf
|
||||||
|
#define vasprintf libintl_vasprintf
|
||||||
|
extern int vasprintf (char **, const char *, va_list);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if @HAVE_WPRINTF@
|
||||||
|
|
||||||
|
#undef fwprintf
|
||||||
|
#define fwprintf libintl_fwprintf
|
||||||
|
extern int fwprintf (FILE *, const wchar_t *, ...);
|
||||||
|
#undef vfwprintf
|
||||||
|
#define vfwprintf libintl_vfwprintf
|
||||||
|
extern int vfwprintf (FILE *, const wchar_t *, va_list);
|
||||||
|
|
||||||
|
#undef wprintf
|
||||||
|
#define wprintf libintl_wprintf
|
||||||
|
extern int wprintf (const wchar_t *, ...);
|
||||||
|
#undef vwprintf
|
||||||
|
#define vwprintf libintl_vwprintf
|
||||||
|
extern int vwprintf (const wchar_t *, va_list);
|
||||||
|
|
||||||
|
#undef swprintf
|
||||||
|
#define swprintf libintl_swprintf
|
||||||
|
extern int swprintf (wchar_t *, size_t, const wchar_t *, ...);
|
||||||
|
#undef vswprintf
|
||||||
|
#define vswprintf libintl_vswprintf
|
||||||
|
extern int vswprintf (wchar_t *, size_t, const wchar_t *, va_list);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* Support for relocatable packages. */
|
/* Support for relocatable packages. */
|
||||||
|
|
||||||
/* Sets the original and the current installation prefix of the package.
|
/* Sets the original and the current installation prefix of the package.
|
||||||
@ -298,8 +372,8 @@ extern char *bind_textdomain_codeset _INTL_PARAMS ((const char *__domainname,
|
|||||||
instead of "/"). */
|
instead of "/"). */
|
||||||
#define libintl_set_relocation_prefix libintl_set_relocation_prefix
|
#define libintl_set_relocation_prefix libintl_set_relocation_prefix
|
||||||
extern void
|
extern void
|
||||||
libintl_set_relocation_prefix _INTL_PARAMS ((const char *orig_prefix,
|
libintl_set_relocation_prefix (const char *orig_prefix,
|
||||||
const char *curr_prefix));
|
const char *curr_prefix);
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 1996-1999, 2000-2002 Free Software Foundation, Inc.
|
/* Copyright (C) 1996-1999, 2000-2003 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.
|
||||||
|
|
||||||
@ -32,14 +32,6 @@
|
|||||||
in gettextP.h.
|
in gettextP.h.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef PARAMS
|
|
||||||
# if __STDC__ || defined __GNUC__ || defined __SUNPRO_C || defined __cplusplus || __PROTOTYPES
|
|
||||||
# define PARAMS(args) args
|
|
||||||
# else
|
|
||||||
# define PARAMS(args) ()
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef internal_function
|
#ifndef internal_function
|
||||||
# define internal_function
|
# define internal_function
|
||||||
#endif
|
#endif
|
||||||
@ -89,8 +81,8 @@ struct loaded_l10nfile
|
|||||||
names. Normalization allows the user to use any of the common
|
names. Normalization allows the user to use any of the common
|
||||||
names. The return value is dynamically allocated and has to be
|
names. The return value is dynamically allocated and has to be
|
||||||
freed by the caller. */
|
freed by the caller. */
|
||||||
extern const char *_nl_normalize_codeset PARAMS ((const char *codeset,
|
extern const char *_nl_normalize_codeset (const char *codeset,
|
||||||
size_t name_len));
|
size_t name_len);
|
||||||
|
|
||||||
/* Lookup a locale dependent file.
|
/* Lookup a locale dependent file.
|
||||||
*L10NFILE_LIST denotes a pool of lookup results of locale dependent
|
*L10NFILE_LIST denotes a pool of lookup results of locale dependent
|
||||||
@ -107,19 +99,18 @@ extern const char *_nl_normalize_codeset PARAMS ((const char *codeset,
|
|||||||
furthermore its ->successor[] field contains a list of other lookup
|
furthermore its ->successor[] field contains a list of other lookup
|
||||||
results from which this lookup result inherits. */
|
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 (struct loaded_l10nfile **l10nfile_list,
|
||||||
const char *dirlist, size_t dirlist_len, int mask,
|
const char *dirlist, size_t dirlist_len, int mask,
|
||||||
const char *language, const char *territory,
|
const char *language, const char *territory,
|
||||||
const char *codeset,
|
const char *codeset, const char *normalized_codeset,
|
||||||
const char *normalized_codeset,
|
const char *modifier, const char *special,
|
||||||
const char *modifier, const char *special,
|
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
|
/* 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).
|
NAME is not a locale alias (but possibly a real locale name).
|
||||||
The return value is statically allocated and must not be freed. */
|
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 (const char *name);
|
||||||
|
|
||||||
/* Split a locale name NAME into its pieces: language, modifier,
|
/* Split a locale name NAME into its pieces: language, modifier,
|
||||||
territory, codeset, special, sponsor, revision.
|
territory, codeset, special, sponsor, revision.
|
||||||
@ -139,18 +130,16 @@ extern const char *_nl_expand_alias PARAMS ((const char *name));
|
|||||||
CEN_SPONSOR for *SPONSOR,
|
CEN_SPONSOR for *SPONSOR,
|
||||||
CEN_REVISION for *REVISION.
|
CEN_REVISION for *REVISION.
|
||||||
*/
|
*/
|
||||||
extern int _nl_explode_name PARAMS ((char *name, const char **language,
|
extern int _nl_explode_name (char *name, const char **language,
|
||||||
const char **modifier,
|
const char **modifier, const char **territory,
|
||||||
const char **territory,
|
const char **codeset,
|
||||||
const char **codeset,
|
const char **normalized_codeset,
|
||||||
const char **normalized_codeset,
|
const char **special, const char **sponsor,
|
||||||
const char **special,
|
const char **revision);
|
||||||
const char **sponsor,
|
|
||||||
const char **revision));
|
|
||||||
|
|
||||||
/* Split a locale name NAME into a leading language part and all the
|
/* Split a locale name NAME into a leading language part and all the
|
||||||
rest. Return a pointer to the first character after the language,
|
rest. Return a pointer to the first character after the language,
|
||||||
i.e. to the first byte of the rest. */
|
i.e. to the first byte of the rest. */
|
||||||
extern char *_nl_find_language PARAMS ((const char *name));
|
extern char *_nl_find_language (const char *name);
|
||||||
|
|
||||||
#endif /* loadinfo.h */
|
#endif /* loadinfo.h */
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Load needed message catalogs.
|
/* Load needed message catalogs.
|
||||||
Copyright (C) 1995-1999, 2000-2003 Free Software Foundation, Inc.
|
Copyright (C) 1995-1999, 2000-2004 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
|
||||||
@ -491,11 +491,6 @@ char *alloca ();
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* Prototypes for local functions. Needed to ensure compiler checking of
|
|
||||||
function argument counts despite of K&R C function definition syntax. */
|
|
||||||
static const char *get_sysdep_segment_value PARAMS ((const char *name));
|
|
||||||
|
|
||||||
|
|
||||||
/* We need a sign, whether a new catalog was loaded, which can be associated
|
/* We need a sign, whether a new catalog was loaded, which can be associated
|
||||||
with all translations. This is important if the translations are
|
with all translations. This is important if the translations are
|
||||||
cached by one of GCC's features. */
|
cached by one of GCC's features. */
|
||||||
@ -504,8 +499,7 @@ int _nl_msg_cat_cntr;
|
|||||||
|
|
||||||
/* Expand a system dependent string segment. Return NULL if unsupported. */
|
/* Expand a system dependent string segment. Return NULL if unsupported. */
|
||||||
static const char *
|
static const char *
|
||||||
get_sysdep_segment_value (name)
|
get_sysdep_segment_value (const char *name)
|
||||||
const char *name;
|
|
||||||
{
|
{
|
||||||
/* Test for an ISO C 99 section 7.8.1 format string directive.
|
/* Test for an ISO C 99 section 7.8.1 format string directive.
|
||||||
Syntax:
|
Syntax:
|
||||||
@ -754,6 +748,18 @@ get_sysdep_segment_value (name)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/* Test for a glibc specific printf() format directive flag. */
|
||||||
|
if (name[0] == 'I' && name[1] == '\0')
|
||||||
|
{
|
||||||
|
#if defined _LIBC || __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2)
|
||||||
|
/* The 'I' flag, in numeric format directives, replaces ASCII digits
|
||||||
|
with the 'outdigits' defined in the LC_CTYPE locale facet. This is
|
||||||
|
used for Farsi (Persian) and maybe Arabic. */
|
||||||
|
return "I";
|
||||||
|
#else
|
||||||
|
return "";
|
||||||
|
#endif
|
||||||
|
}
|
||||||
/* Other system dependent strings are not valid. */
|
/* Other system dependent strings are not valid. */
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@ -762,10 +768,9 @@ get_sysdep_segment_value (name)
|
|||||||
Return the header entry. */
|
Return the header entry. */
|
||||||
const char *
|
const char *
|
||||||
internal_function
|
internal_function
|
||||||
_nl_init_domain_conv (domain_file, domain, domainbinding)
|
_nl_init_domain_conv (struct loaded_l10nfile *domain_file,
|
||||||
struct loaded_l10nfile *domain_file;
|
struct loaded_domain *domain,
|
||||||
struct loaded_domain *domain;
|
struct binding *domainbinding)
|
||||||
struct binding *domainbinding;
|
|
||||||
{
|
{
|
||||||
/* Find out about the character set the file is encoded with.
|
/* Find out about the character set the file is encoded with.
|
||||||
This can be found (in textual form) in the entry "". If this
|
This can be found (in textual form) in the entry "". If this
|
||||||
@ -829,7 +834,7 @@ _nl_init_domain_conv (domain_file, domain, domainbinding)
|
|||||||
outcharset = _NL_CURRENT (LC_CTYPE, CODESET);
|
outcharset = _NL_CURRENT (LC_CTYPE, CODESET);
|
||||||
# else
|
# else
|
||||||
# if HAVE_ICONV
|
# if HAVE_ICONV
|
||||||
extern const char *locale_charset PARAMS ((void));
|
extern const char *locale_charset (void);
|
||||||
outcharset = locale_charset ();
|
outcharset = locale_charset ();
|
||||||
# endif
|
# endif
|
||||||
# endif
|
# endif
|
||||||
@ -881,8 +886,7 @@ _nl_init_domain_conv (domain_file, domain, domainbinding)
|
|||||||
/* Frees the codeset dependent parts of an opened message catalog. */
|
/* Frees the codeset dependent parts of an opened message catalog. */
|
||||||
void
|
void
|
||||||
internal_function
|
internal_function
|
||||||
_nl_free_domain_conv (domain)
|
_nl_free_domain_conv (struct loaded_domain *domain)
|
||||||
struct loaded_domain *domain;
|
|
||||||
{
|
{
|
||||||
if (domain->conv_tab != NULL && domain->conv_tab != (char **) -1)
|
if (domain->conv_tab != NULL && domain->conv_tab != (char **) -1)
|
||||||
free (domain->conv_tab);
|
free (domain->conv_tab);
|
||||||
@ -902,9 +906,8 @@ _nl_free_domain_conv (domain)
|
|||||||
message catalog do nothing. */
|
message catalog do nothing. */
|
||||||
void
|
void
|
||||||
internal_function
|
internal_function
|
||||||
_nl_load_domain (domain_file, domainbinding)
|
_nl_load_domain (struct loaded_l10nfile *domain_file,
|
||||||
struct loaded_l10nfile *domain_file;
|
struct binding *domainbinding)
|
||||||
struct binding *domainbinding;
|
|
||||||
{
|
{
|
||||||
int fd;
|
int fd;
|
||||||
size_t size;
|
size_t size;
|
||||||
@ -1028,10 +1031,11 @@ _nl_load_domain (domain_file, domainbinding)
|
|||||||
|
|
||||||
/* Fill in the information about the available tables. */
|
/* Fill in the information about the available tables. */
|
||||||
revision = W (domain->must_swap, data->revision);
|
revision = W (domain->must_swap, data->revision);
|
||||||
/* We support only the major revision 0. */
|
/* We support only the major revisions 0 and 1. */
|
||||||
switch (revision >> 16)
|
switch (revision >> 16)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
|
case 1:
|
||||||
domain->nstrings = W (domain->must_swap, data->nstrings);
|
domain->nstrings = W (domain->must_swap, data->nstrings);
|
||||||
domain->orig_tab = (const struct string_desc *)
|
domain->orig_tab = (const struct string_desc *)
|
||||||
((char *) data + W (domain->must_swap, data->orig_tab_offset));
|
((char *) data + W (domain->must_swap, data->orig_tab_offset));
|
||||||
@ -1071,12 +1075,13 @@ _nl_load_domain (domain_file, domainbinding)
|
|||||||
const char **sysdep_segment_values;
|
const char **sysdep_segment_values;
|
||||||
const nls_uint32 *orig_sysdep_tab;
|
const nls_uint32 *orig_sysdep_tab;
|
||||||
const nls_uint32 *trans_sysdep_tab;
|
const nls_uint32 *trans_sysdep_tab;
|
||||||
|
nls_uint32 n_inmem_sysdep_strings;
|
||||||
size_t memneed;
|
size_t memneed;
|
||||||
char *mem;
|
char *mem;
|
||||||
struct sysdep_string_desc *inmem_orig_sysdep_tab;
|
struct sysdep_string_desc *inmem_orig_sysdep_tab;
|
||||||
struct sysdep_string_desc *inmem_trans_sysdep_tab;
|
struct sysdep_string_desc *inmem_trans_sysdep_tab;
|
||||||
nls_uint32 *inmem_hash_tab;
|
nls_uint32 *inmem_hash_tab;
|
||||||
unsigned int i;
|
unsigned int i, j;
|
||||||
|
|
||||||
/* Get the values of the system dependent segments. */
|
/* Get the values of the system dependent segments. */
|
||||||
n_sysdep_segments =
|
n_sysdep_segments =
|
||||||
@ -1111,153 +1116,247 @@ _nl_load_domain (domain_file, domainbinding)
|
|||||||
+ W (domain->must_swap, data->trans_sysdep_tab_offset));
|
+ W (domain->must_swap, data->trans_sysdep_tab_offset));
|
||||||
|
|
||||||
/* Compute the amount of additional memory needed for the
|
/* Compute the amount of additional memory needed for the
|
||||||
system dependent strings and the augmented hash table. */
|
system dependent strings and the augmented hash table.
|
||||||
memneed = 2 * n_sysdep_strings
|
At the same time, also drop string pairs which refer to
|
||||||
* sizeof (struct sysdep_string_desc)
|
an undefined system dependent segment. */
|
||||||
+ domain->hash_size * sizeof (nls_uint32);
|
n_inmem_sysdep_strings = 0;
|
||||||
for (i = 0; i < 2 * n_sysdep_strings; i++)
|
memneed = domain->hash_size * sizeof (nls_uint32);
|
||||||
{
|
|
||||||
const struct sysdep_string *sysdep_string =
|
|
||||||
(const struct sysdep_string *)
|
|
||||||
((char *) data
|
|
||||||
+ W (domain->must_swap,
|
|
||||||
i < n_sysdep_strings
|
|
||||||
? orig_sysdep_tab[i]
|
|
||||||
: trans_sysdep_tab[i - n_sysdep_strings]));
|
|
||||||
size_t need = 0;
|
|
||||||
const struct segment_pair *p = sysdep_string->segments;
|
|
||||||
|
|
||||||
if (W (domain->must_swap, p->sysdepref) != SEGMENTS_END)
|
|
||||||
for (p = sysdep_string->segments;; p++)
|
|
||||||
{
|
|
||||||
nls_uint32 sysdepref;
|
|
||||||
|
|
||||||
need += W (domain->must_swap, p->segsize);
|
|
||||||
|
|
||||||
sysdepref = W (domain->must_swap, p->sysdepref);
|
|
||||||
if (sysdepref == SEGMENTS_END)
|
|
||||||
break;
|
|
||||||
|
|
||||||
if (sysdepref >= n_sysdep_segments)
|
|
||||||
{
|
|
||||||
/* Invalid. */
|
|
||||||
freea (sysdep_segment_values);
|
|
||||||
goto invalid;
|
|
||||||
}
|
|
||||||
|
|
||||||
need += strlen (sysdep_segment_values[sysdepref]);
|
|
||||||
}
|
|
||||||
|
|
||||||
memneed += need;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Allocate additional memory. */
|
|
||||||
mem = (char *) malloc (memneed);
|
|
||||||
if (mem == NULL)
|
|
||||||
goto invalid;
|
|
||||||
|
|
||||||
domain->malloced = mem;
|
|
||||||
inmem_orig_sysdep_tab = (struct sysdep_string_desc *) mem;
|
|
||||||
mem += n_sysdep_strings * sizeof (struct sysdep_string_desc);
|
|
||||||
inmem_trans_sysdep_tab = (struct sysdep_string_desc *) mem;
|
|
||||||
mem += n_sysdep_strings * sizeof (struct sysdep_string_desc);
|
|
||||||
inmem_hash_tab = (nls_uint32 *) mem;
|
|
||||||
mem += domain->hash_size * sizeof (nls_uint32);
|
|
||||||
|
|
||||||
/* Compute the system dependent strings. */
|
|
||||||
for (i = 0; i < 2 * n_sysdep_strings; i++)
|
|
||||||
{
|
|
||||||
const struct sysdep_string *sysdep_string =
|
|
||||||
(const struct sysdep_string *)
|
|
||||||
((char *) data
|
|
||||||
+ W (domain->must_swap,
|
|
||||||
i < n_sysdep_strings
|
|
||||||
? orig_sysdep_tab[i]
|
|
||||||
: trans_sysdep_tab[i - n_sysdep_strings]));
|
|
||||||
const char *static_segments =
|
|
||||||
(char *) data
|
|
||||||
+ W (domain->must_swap, sysdep_string->offset);
|
|
||||||
const struct segment_pair *p = sysdep_string->segments;
|
|
||||||
|
|
||||||
/* Concatenate the segments, and fill
|
|
||||||
inmem_orig_sysdep_tab[i] (for i < n_sysdep_strings) and
|
|
||||||
inmem_trans_sysdep_tab[i-n_sysdep_strings] (for
|
|
||||||
i >= n_sysdep_strings). */
|
|
||||||
|
|
||||||
if (W (domain->must_swap, p->sysdepref) == SEGMENTS_END)
|
|
||||||
{
|
|
||||||
/* Only one static segment. */
|
|
||||||
inmem_orig_sysdep_tab[i].length =
|
|
||||||
W (domain->must_swap, p->segsize);
|
|
||||||
inmem_orig_sysdep_tab[i].pointer = static_segments;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
inmem_orig_sysdep_tab[i].pointer = mem;
|
|
||||||
|
|
||||||
for (p = sysdep_string->segments;; p++)
|
|
||||||
{
|
|
||||||
nls_uint32 segsize =
|
|
||||||
W (domain->must_swap, p->segsize);
|
|
||||||
nls_uint32 sysdepref =
|
|
||||||
W (domain->must_swap, p->sysdepref);
|
|
||||||
size_t n;
|
|
||||||
|
|
||||||
if (segsize > 0)
|
|
||||||
{
|
|
||||||
memcpy (mem, static_segments, segsize);
|
|
||||||
mem += segsize;
|
|
||||||
static_segments += segsize;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (sysdepref == SEGMENTS_END)
|
|
||||||
break;
|
|
||||||
|
|
||||||
n = strlen (sysdep_segment_values[sysdepref]);
|
|
||||||
memcpy (mem, sysdep_segment_values[sysdepref], n);
|
|
||||||
mem += n;
|
|
||||||
}
|
|
||||||
|
|
||||||
inmem_orig_sysdep_tab[i].length =
|
|
||||||
mem - inmem_orig_sysdep_tab[i].pointer;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Compute the augmented hash table. */
|
|
||||||
for (i = 0; i < domain->hash_size; i++)
|
|
||||||
inmem_hash_tab[i] =
|
|
||||||
W (domain->must_swap_hash_tab, domain->hash_tab[i]);
|
|
||||||
for (i = 0; i < n_sysdep_strings; i++)
|
for (i = 0; i < n_sysdep_strings; i++)
|
||||||
{
|
{
|
||||||
const char *msgid = inmem_orig_sysdep_tab[i].pointer;
|
int valid = 1;
|
||||||
nls_uint32 hash_val = hash_string (msgid);
|
size_t needs[2];
|
||||||
nls_uint32 idx = hash_val % domain->hash_size;
|
|
||||||
nls_uint32 incr = 1 + (hash_val % (domain->hash_size - 2));
|
|
||||||
|
|
||||||
for (;;)
|
for (j = 0; j < 2; j++)
|
||||||
{
|
{
|
||||||
if (inmem_hash_tab[idx] == 0)
|
const struct sysdep_string *sysdep_string =
|
||||||
|
(const struct sysdep_string *)
|
||||||
|
((char *) data
|
||||||
|
+ W (domain->must_swap,
|
||||||
|
j == 0
|
||||||
|
? orig_sysdep_tab[i]
|
||||||
|
: trans_sysdep_tab[i]));
|
||||||
|
size_t need = 0;
|
||||||
|
const struct segment_pair *p = sysdep_string->segments;
|
||||||
|
|
||||||
|
if (W (domain->must_swap, p->sysdepref) != SEGMENTS_END)
|
||||||
|
for (p = sysdep_string->segments;; p++)
|
||||||
|
{
|
||||||
|
nls_uint32 sysdepref;
|
||||||
|
|
||||||
|
need += W (domain->must_swap, p->segsize);
|
||||||
|
|
||||||
|
sysdepref = W (domain->must_swap, p->sysdepref);
|
||||||
|
if (sysdepref == SEGMENTS_END)
|
||||||
|
break;
|
||||||
|
|
||||||
|
if (sysdepref >= n_sysdep_segments)
|
||||||
|
{
|
||||||
|
/* Invalid. */
|
||||||
|
freea (sysdep_segment_values);
|
||||||
|
goto invalid;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sysdep_segment_values[sysdepref] == NULL)
|
||||||
|
{
|
||||||
|
/* This particular string pair is invalid. */
|
||||||
|
valid = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
need += strlen (sysdep_segment_values[sysdepref]);
|
||||||
|
}
|
||||||
|
|
||||||
|
needs[j] = need;
|
||||||
|
if (!valid)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (valid)
|
||||||
|
{
|
||||||
|
n_inmem_sysdep_strings++;
|
||||||
|
memneed += needs[0] + needs[1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
memneed += 2 * n_inmem_sysdep_strings
|
||||||
|
* sizeof (struct sysdep_string_desc);
|
||||||
|
|
||||||
|
if (n_inmem_sysdep_strings > 0)
|
||||||
|
{
|
||||||
|
unsigned int k;
|
||||||
|
|
||||||
|
/* Allocate additional memory. */
|
||||||
|
mem = (char *) malloc (memneed);
|
||||||
|
if (mem == NULL)
|
||||||
|
goto invalid;
|
||||||
|
|
||||||
|
domain->malloced = mem;
|
||||||
|
inmem_orig_sysdep_tab = (struct sysdep_string_desc *) mem;
|
||||||
|
mem += n_inmem_sysdep_strings
|
||||||
|
* sizeof (struct sysdep_string_desc);
|
||||||
|
inmem_trans_sysdep_tab = (struct sysdep_string_desc *) mem;
|
||||||
|
mem += n_inmem_sysdep_strings
|
||||||
|
* sizeof (struct sysdep_string_desc);
|
||||||
|
inmem_hash_tab = (nls_uint32 *) mem;
|
||||||
|
mem += domain->hash_size * sizeof (nls_uint32);
|
||||||
|
|
||||||
|
/* Compute the system dependent strings. */
|
||||||
|
k = 0;
|
||||||
|
for (i = 0; i < n_sysdep_strings; i++)
|
||||||
|
{
|
||||||
|
int valid = 1;
|
||||||
|
|
||||||
|
for (j = 0; j < 2; j++)
|
||||||
{
|
{
|
||||||
/* Hash table entry is empty. Use it. */
|
const struct sysdep_string *sysdep_string =
|
||||||
inmem_hash_tab[idx] = 1 + domain->nstrings + i;
|
(const struct sysdep_string *)
|
||||||
break;
|
((char *) data
|
||||||
|
+ W (domain->must_swap,
|
||||||
|
j == 0
|
||||||
|
? orig_sysdep_tab[i]
|
||||||
|
: trans_sysdep_tab[i]));
|
||||||
|
const struct segment_pair *p =
|
||||||
|
sysdep_string->segments;
|
||||||
|
|
||||||
|
if (W (domain->must_swap, p->sysdepref)
|
||||||
|
!= SEGMENTS_END)
|
||||||
|
for (p = sysdep_string->segments;; p++)
|
||||||
|
{
|
||||||
|
nls_uint32 sysdepref;
|
||||||
|
|
||||||
|
sysdepref =
|
||||||
|
W (domain->must_swap, p->sysdepref);
|
||||||
|
if (sysdepref == SEGMENTS_END)
|
||||||
|
break;
|
||||||
|
|
||||||
|
if (sysdep_segment_values[sysdepref] == NULL)
|
||||||
|
{
|
||||||
|
/* This particular string pair is
|
||||||
|
invalid. */
|
||||||
|
valid = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!valid)
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (idx >= domain->hash_size - incr)
|
if (valid)
|
||||||
idx -= domain->hash_size - incr;
|
{
|
||||||
else
|
for (j = 0; j < 2; j++)
|
||||||
idx += incr;
|
{
|
||||||
|
const struct sysdep_string *sysdep_string =
|
||||||
|
(const struct sysdep_string *)
|
||||||
|
((char *) data
|
||||||
|
+ W (domain->must_swap,
|
||||||
|
j == 0
|
||||||
|
? orig_sysdep_tab[i]
|
||||||
|
: trans_sysdep_tab[i]));
|
||||||
|
const char *static_segments =
|
||||||
|
(char *) data
|
||||||
|
+ W (domain->must_swap, sysdep_string->offset);
|
||||||
|
const struct segment_pair *p =
|
||||||
|
sysdep_string->segments;
|
||||||
|
|
||||||
|
/* Concatenate the segments, and fill
|
||||||
|
inmem_orig_sysdep_tab[k] (for j == 0) and
|
||||||
|
inmem_trans_sysdep_tab[k] (for j == 1). */
|
||||||
|
|
||||||
|
struct sysdep_string_desc *inmem_tab_entry =
|
||||||
|
(j == 0
|
||||||
|
? inmem_orig_sysdep_tab
|
||||||
|
: inmem_trans_sysdep_tab)
|
||||||
|
+ k;
|
||||||
|
|
||||||
|
if (W (domain->must_swap, p->sysdepref)
|
||||||
|
== SEGMENTS_END)
|
||||||
|
{
|
||||||
|
/* Only one static segment. */
|
||||||
|
inmem_tab_entry->length =
|
||||||
|
W (domain->must_swap, p->segsize);
|
||||||
|
inmem_tab_entry->pointer = static_segments;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
inmem_tab_entry->pointer = mem;
|
||||||
|
|
||||||
|
for (p = sysdep_string->segments;; p++)
|
||||||
|
{
|
||||||
|
nls_uint32 segsize =
|
||||||
|
W (domain->must_swap, p->segsize);
|
||||||
|
nls_uint32 sysdepref =
|
||||||
|
W (domain->must_swap, p->sysdepref);
|
||||||
|
size_t n;
|
||||||
|
|
||||||
|
if (segsize > 0)
|
||||||
|
{
|
||||||
|
memcpy (mem, static_segments, segsize);
|
||||||
|
mem += segsize;
|
||||||
|
static_segments += segsize;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sysdepref == SEGMENTS_END)
|
||||||
|
break;
|
||||||
|
|
||||||
|
n = strlen (sysdep_segment_values[sysdepref]);
|
||||||
|
memcpy (mem, sysdep_segment_values[sysdepref], n);
|
||||||
|
mem += n;
|
||||||
|
}
|
||||||
|
|
||||||
|
inmem_tab_entry->length =
|
||||||
|
mem - inmem_tab_entry->pointer;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
k++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
if (k != n_inmem_sysdep_strings)
|
||||||
|
abort ();
|
||||||
|
|
||||||
|
/* Compute the augmented hash table. */
|
||||||
|
for (i = 0; i < domain->hash_size; i++)
|
||||||
|
inmem_hash_tab[i] =
|
||||||
|
W (domain->must_swap_hash_tab, domain->hash_tab[i]);
|
||||||
|
for (i = 0; i < n_inmem_sysdep_strings; i++)
|
||||||
|
{
|
||||||
|
const char *msgid = inmem_orig_sysdep_tab[i].pointer;
|
||||||
|
nls_uint32 hash_val = hash_string (msgid);
|
||||||
|
nls_uint32 idx = hash_val % domain->hash_size;
|
||||||
|
nls_uint32 incr =
|
||||||
|
1 + (hash_val % (domain->hash_size - 2));
|
||||||
|
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
if (inmem_hash_tab[idx] == 0)
|
||||||
|
{
|
||||||
|
/* Hash table entry is empty. Use it. */
|
||||||
|
inmem_hash_tab[idx] = 1 + domain->nstrings + i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (idx >= domain->hash_size - incr)
|
||||||
|
idx -= domain->hash_size - incr;
|
||||||
|
else
|
||||||
|
idx += incr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
domain->n_sysdep_strings = n_inmem_sysdep_strings;
|
||||||
|
domain->orig_sysdep_tab = inmem_orig_sysdep_tab;
|
||||||
|
domain->trans_sysdep_tab = inmem_trans_sysdep_tab;
|
||||||
|
|
||||||
|
domain->hash_tab = inmem_hash_tab;
|
||||||
|
domain->must_swap_hash_tab = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
domain->n_sysdep_strings = 0;
|
||||||
|
domain->orig_sysdep_tab = NULL;
|
||||||
|
domain->trans_sysdep_tab = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
freea (sysdep_segment_values);
|
freea (sysdep_segment_values);
|
||||||
|
|
||||||
domain->n_sysdep_strings = n_sysdep_strings;
|
|
||||||
domain->orig_sysdep_tab = inmem_orig_sysdep_tab;
|
|
||||||
domain->trans_sysdep_tab = inmem_trans_sysdep_tab;
|
|
||||||
|
|
||||||
domain->hash_tab = inmem_hash_tab;
|
|
||||||
domain->must_swap_hash_tab = 0;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -1299,8 +1398,7 @@ _nl_load_domain (domain_file, domainbinding)
|
|||||||
#ifdef _LIBC
|
#ifdef _LIBC
|
||||||
void
|
void
|
||||||
internal_function
|
internal_function
|
||||||
_nl_unload_domain (domain)
|
_nl_unload_domain (struct loaded_domain *domain)
|
||||||
struct loaded_domain *domain;
|
|
||||||
{
|
{
|
||||||
if (domain->plural != &__gettext_germanic_plural)
|
if (domain->plural != &__gettext_germanic_plural)
|
||||||
__gettext_free_exp (domain->plural);
|
__gettext_free_exp (domain->plural);
|
||||||
|
@ -86,7 +86,7 @@
|
|||||||
# define ISSLASH(C) ((C) == DIRECTORY_SEPARATOR)
|
# define ISSLASH(C) ((C) == DIRECTORY_SEPARATOR)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_GETC_UNLOCKED
|
#if HAVE_DECL_GETC_UNLOCKED
|
||||||
# undef getc
|
# undef getc
|
||||||
# define getc getc_unlocked
|
# define getc getc_unlocked
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
# Locale name alias data base.
|
# Locale name alias data base.
|
||||||
# Copyright (C) 1996,1997,1998,1999,2000,2001 Free Software Foundation, Inc.
|
# Copyright (C) 1996-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,8 +29,8 @@
|
|||||||
|
|
||||||
# Packages using this file:
|
# Packages using this file:
|
||||||
|
|
||||||
bokmal no_NO.ISO-8859-1
|
bokmal nb_NO.ISO-8859-1
|
||||||
bokmål no_NO.ISO-8859-1
|
bokmål nb_NO.ISO-8859-1
|
||||||
catalan ca_ES.ISO-8859-1
|
catalan ca_ES.ISO-8859-1
|
||||||
croatian hr_HR.ISO-8859-2
|
croatian hr_HR.ISO-8859-2
|
||||||
czech cs_CZ.ISO-8859-2
|
czech cs_CZ.ISO-8859-2
|
||||||
@ -61,9 +61,9 @@ korean ko_KR.eucKR
|
|||||||
korean.euc ko_KR.eucKR
|
korean.euc ko_KR.eucKR
|
||||||
ko_KR ko_KR.eucKR
|
ko_KR ko_KR.eucKR
|
||||||
lithuanian lt_LT.ISO-8859-13
|
lithuanian lt_LT.ISO-8859-13
|
||||||
nb_NO no_NO.ISO-8859-1
|
no_NO nb_NO.ISO-8859-1
|
||||||
nb_NO.ISO-8859-1 no_NO.ISO-8859-1
|
no_NO.ISO-8859-1 nb_NO.ISO-8859-1
|
||||||
norwegian no_NO.ISO-8859-1
|
norwegian nb_NO.ISO-8859-1
|
||||||
nynorsk nn_NO.ISO-8859-1
|
nynorsk nn_NO.ISO-8859-1
|
||||||
polish pl_PL.ISO-8859-2
|
polish pl_PL.ISO-8859-2
|
||||||
portuguese pt_PT.ISO-8859-1
|
portuguese pt_PT.ISO-8859-1
|
||||||
|
@ -110,11 +110,11 @@ __libc_lock_define_initialized (static, lock);
|
|||||||
# define freea(p) free (p)
|
# define freea(p) free (p)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined _LIBC_REENTRANT || defined HAVE_FGETS_UNLOCKED
|
#if defined _LIBC_REENTRANT || HAVE_DECL_FGETS_UNLOCKED
|
||||||
# undef fgets
|
# undef fgets
|
||||||
# define fgets(buf, len, s) fgets_unlocked (buf, len, s)
|
# define fgets(buf, len, s) fgets_unlocked (buf, len, s)
|
||||||
#endif
|
#endif
|
||||||
#if defined _LIBC_REENTRANT || defined HAVE_FEOF_UNLOCKED
|
#if defined _LIBC_REENTRANT || HAVE_DECL_FEOF_UNLOCKED
|
||||||
# undef feof
|
# undef feof
|
||||||
# define feof(s) feof_unlocked (s)
|
# define feof(s) feof_unlocked (s)
|
||||||
#endif
|
#endif
|
||||||
@ -140,16 +140,15 @@ static size_t maxmap;
|
|||||||
|
|
||||||
|
|
||||||
/* Prototypes for local functions. */
|
/* Prototypes for local functions. */
|
||||||
static size_t read_alias_file PARAMS ((const char *fname, int fname_len))
|
static size_t read_alias_file (const char *fname, int fname_len)
|
||||||
internal_function;
|
internal_function;
|
||||||
static int extend_alias_table PARAMS ((void));
|
static int extend_alias_table (void);
|
||||||
static int alias_compare PARAMS ((const struct alias_map *map1,
|
static int alias_compare (const struct alias_map *map1,
|
||||||
const struct alias_map *map2));
|
const struct alias_map *map2);
|
||||||
|
|
||||||
|
|
||||||
const char *
|
const char *
|
||||||
_nl_expand_alias (name)
|
_nl_expand_alias (const char *name)
|
||||||
const char *name;
|
|
||||||
{
|
{
|
||||||
static const char *locale_alias_path;
|
static const char *locale_alias_path;
|
||||||
struct alias_map *retval;
|
struct alias_map *retval;
|
||||||
@ -172,8 +171,8 @@ _nl_expand_alias (name)
|
|||||||
if (nmap > 0)
|
if (nmap > 0)
|
||||||
retval = (struct alias_map *) bsearch (&item, map, nmap,
|
retval = (struct alias_map *) bsearch (&item, map, nmap,
|
||||||
sizeof (struct alias_map),
|
sizeof (struct alias_map),
|
||||||
(int (*) PARAMS ((const void *,
|
(int (*) (const void *,
|
||||||
const void *))
|
const void *)
|
||||||
) alias_compare);
|
) alias_compare);
|
||||||
else
|
else
|
||||||
retval = NULL;
|
retval = NULL;
|
||||||
@ -215,9 +214,7 @@ _nl_expand_alias (name)
|
|||||||
|
|
||||||
static size_t
|
static size_t
|
||||||
internal_function
|
internal_function
|
||||||
read_alias_file (fname, fname_len)
|
read_alias_file (const char *fname, int fname_len)
|
||||||
const char *fname;
|
|
||||||
int fname_len;
|
|
||||||
{
|
{
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
char *full_fname;
|
char *full_fname;
|
||||||
@ -361,7 +358,7 @@ read_alias_file (fname, fname_len)
|
|||||||
|
|
||||||
if (added > 0)
|
if (added > 0)
|
||||||
qsort (map, nmap, sizeof (struct alias_map),
|
qsort (map, nmap, sizeof (struct alias_map),
|
||||||
(int (*) PARAMS ((const void *, const void *))) alias_compare);
|
(int (*) (const void *, const void *)) alias_compare);
|
||||||
|
|
||||||
return added;
|
return added;
|
||||||
}
|
}
|
||||||
@ -387,9 +384,7 @@ extend_alias_table ()
|
|||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
alias_compare (map1, map2)
|
alias_compare (const struct alias_map *map1, const struct alias_map *map2)
|
||||||
const struct alias_map *map1;
|
|
||||||
const struct alias_map *map2;
|
|
||||||
{
|
{
|
||||||
#if defined _LIBC || defined HAVE_STRCASECMP
|
#if defined _LIBC || defined HAVE_STRCASECMP
|
||||||
return strcasecmp (map1->alias, map2->alias);
|
return strcasecmp (map1->alias, map2->alias);
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Determine the current selected locale.
|
/* Determine the current selected locale.
|
||||||
Copyright (C) 1995-1999, 2000-2002 Free Software Foundation, Inc.
|
Copyright (C) 1995-1999, 2000-2004 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,6 +34,124 @@
|
|||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
# define WIN32_LEAN_AND_MEAN
|
# define WIN32_LEAN_AND_MEAN
|
||||||
# include <windows.h>
|
# include <windows.h>
|
||||||
|
/* List of language codes, sorted by value:
|
||||||
|
0x01 LANG_ARABIC
|
||||||
|
0x02 LANG_BULGARIAN
|
||||||
|
0x03 LANG_CATALAN
|
||||||
|
0x04 LANG_CHINESE
|
||||||
|
0x05 LANG_CZECH
|
||||||
|
0x06 LANG_DANISH
|
||||||
|
0x07 LANG_GERMAN
|
||||||
|
0x08 LANG_GREEK
|
||||||
|
0x09 LANG_ENGLISH
|
||||||
|
0x0a LANG_SPANISH
|
||||||
|
0x0b LANG_FINNISH
|
||||||
|
0x0c LANG_FRENCH
|
||||||
|
0x0d LANG_HEBREW
|
||||||
|
0x0e LANG_HUNGARIAN
|
||||||
|
0x0f LANG_ICELANDIC
|
||||||
|
0x10 LANG_ITALIAN
|
||||||
|
0x11 LANG_JAPANESE
|
||||||
|
0x12 LANG_KOREAN
|
||||||
|
0x13 LANG_DUTCH
|
||||||
|
0x14 LANG_NORWEGIAN
|
||||||
|
0x15 LANG_POLISH
|
||||||
|
0x16 LANG_PORTUGUESE
|
||||||
|
0x17 LANG_RHAETO_ROMANCE
|
||||||
|
0x18 LANG_ROMANIAN
|
||||||
|
0x19 LANG_RUSSIAN
|
||||||
|
0x1a LANG_CROATIAN == LANG_SERBIAN
|
||||||
|
0x1b LANG_SLOVAK
|
||||||
|
0x1c LANG_ALBANIAN
|
||||||
|
0x1d LANG_SWEDISH
|
||||||
|
0x1e LANG_THAI
|
||||||
|
0x1f LANG_TURKISH
|
||||||
|
0x20 LANG_URDU
|
||||||
|
0x21 LANG_INDONESIAN
|
||||||
|
0x22 LANG_UKRAINIAN
|
||||||
|
0x23 LANG_BELARUSIAN
|
||||||
|
0x24 LANG_SLOVENIAN
|
||||||
|
0x25 LANG_ESTONIAN
|
||||||
|
0x26 LANG_LATVIAN
|
||||||
|
0x27 LANG_LITHUANIAN
|
||||||
|
0x28 LANG_TAJIK
|
||||||
|
0x29 LANG_FARSI
|
||||||
|
0x2a LANG_VIETNAMESE
|
||||||
|
0x2b LANG_ARMENIAN
|
||||||
|
0x2c LANG_AZERI
|
||||||
|
0x2d LANG_BASQUE
|
||||||
|
0x2e LANG_SORBIAN
|
||||||
|
0x2f LANG_MACEDONIAN
|
||||||
|
0x30 LANG_SUTU
|
||||||
|
0x31 LANG_TSONGA
|
||||||
|
0x32 LANG_TSWANA
|
||||||
|
0x33 LANG_VENDA
|
||||||
|
0x34 LANG_XHOSA
|
||||||
|
0x35 LANG_ZULU
|
||||||
|
0x36 LANG_AFRIKAANS
|
||||||
|
0x37 LANG_GEORGIAN
|
||||||
|
0x38 LANG_FAEROESE
|
||||||
|
0x39 LANG_HINDI
|
||||||
|
0x3a LANG_MALTESE
|
||||||
|
0x3b LANG_SAAMI
|
||||||
|
0x3c LANG_GAELIC
|
||||||
|
0x3d LANG_YIDDISH
|
||||||
|
0x3e LANG_MALAY
|
||||||
|
0x3f LANG_KAZAK
|
||||||
|
0x40 LANG_KYRGYZ
|
||||||
|
0x41 LANG_SWAHILI
|
||||||
|
0x42 LANG_TURKMEN
|
||||||
|
0x43 LANG_UZBEK
|
||||||
|
0x44 LANG_TATAR
|
||||||
|
0x45 LANG_BENGALI
|
||||||
|
0x46 LANG_PUNJABI
|
||||||
|
0x47 LANG_GUJARATI
|
||||||
|
0x48 LANG_ORIYA
|
||||||
|
0x49 LANG_TAMIL
|
||||||
|
0x4a LANG_TELUGU
|
||||||
|
0x4b LANG_KANNADA
|
||||||
|
0x4c LANG_MALAYALAM
|
||||||
|
0x4d LANG_ASSAMESE
|
||||||
|
0x4e LANG_MARATHI
|
||||||
|
0x4f LANG_SANSKRIT
|
||||||
|
0x50 LANG_MONGOLIAN
|
||||||
|
0x51 LANG_TIBETAN
|
||||||
|
0x52 LANG_WELSH
|
||||||
|
0x53 LANG_CAMBODIAN
|
||||||
|
0x54 LANG_LAO
|
||||||
|
0x55 LANG_BURMESE
|
||||||
|
0x56 LANG_GALICIAN
|
||||||
|
0x57 LANG_KONKANI
|
||||||
|
0x58 LANG_MANIPURI
|
||||||
|
0x59 LANG_SINDHI
|
||||||
|
0x5a LANG_SYRIAC
|
||||||
|
0x5b LANG_SINHALESE
|
||||||
|
0x5c LANG_CHEROKEE
|
||||||
|
0x5d LANG_INUKTITUT
|
||||||
|
0x5e LANG_AMHARIC
|
||||||
|
0x5f LANG_TAMAZIGHT
|
||||||
|
0x60 LANG_KASHMIRI
|
||||||
|
0x61 LANG_NEPALI
|
||||||
|
0x62 LANG_FRISIAN
|
||||||
|
0x63 LANG_PASHTO
|
||||||
|
0x64 LANG_TAGALOG
|
||||||
|
0x65 LANG_DIVEHI
|
||||||
|
0x66 LANG_EDO
|
||||||
|
0x67 LANG_FULFULDE
|
||||||
|
0x68 LANG_HAUSA
|
||||||
|
0x69 LANG_IBIBIO
|
||||||
|
0x6a LANG_YORUBA
|
||||||
|
0x70 LANG_IGBO
|
||||||
|
0x71 LANG_KANURI
|
||||||
|
0x72 LANG_OROMO
|
||||||
|
0x73 LANG_TIGRINYA
|
||||||
|
0x74 LANG_GUARANI
|
||||||
|
0x75 LANG_HAWAIIAN
|
||||||
|
0x76 LANG_LATIN
|
||||||
|
0x77 LANG_SOMALI
|
||||||
|
0x78 LANG_YI
|
||||||
|
0x79 LANG_PAPIAMENTU
|
||||||
|
*/
|
||||||
/* Mingw headers don't have latest language and sublanguage codes. */
|
/* Mingw headers don't have latest language and sublanguage codes. */
|
||||||
# ifndef LANG_AFRIKAANS
|
# ifndef LANG_AFRIKAANS
|
||||||
# define LANG_AFRIKAANS 0x36
|
# define LANG_AFRIKAANS 0x36
|
||||||
@ -41,6 +159,9 @@
|
|||||||
# ifndef LANG_ALBANIAN
|
# ifndef LANG_ALBANIAN
|
||||||
# define LANG_ALBANIAN 0x1c
|
# define LANG_ALBANIAN 0x1c
|
||||||
# endif
|
# endif
|
||||||
|
# ifndef LANG_AMHARIC
|
||||||
|
# define LANG_AMHARIC 0x5e
|
||||||
|
# endif
|
||||||
# ifndef LANG_ARABIC
|
# ifndef LANG_ARABIC
|
||||||
# define LANG_ARABIC 0x01
|
# define LANG_ARABIC 0x01
|
||||||
# endif
|
# endif
|
||||||
@ -62,12 +183,24 @@
|
|||||||
# ifndef LANG_BENGALI
|
# ifndef LANG_BENGALI
|
||||||
# define LANG_BENGALI 0x45
|
# define LANG_BENGALI 0x45
|
||||||
# endif
|
# endif
|
||||||
|
# ifndef LANG_BURMESE
|
||||||
|
# define LANG_BURMESE 0x55
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_CAMBODIAN
|
||||||
|
# define LANG_CAMBODIAN 0x53
|
||||||
|
# endif
|
||||||
# ifndef LANG_CATALAN
|
# ifndef LANG_CATALAN
|
||||||
# define LANG_CATALAN 0x03
|
# define LANG_CATALAN 0x03
|
||||||
# endif
|
# endif
|
||||||
|
# ifndef LANG_CHEROKEE
|
||||||
|
# define LANG_CHEROKEE 0x5c
|
||||||
|
# endif
|
||||||
# ifndef LANG_DIVEHI
|
# ifndef LANG_DIVEHI
|
||||||
# define LANG_DIVEHI 0x65
|
# define LANG_DIVEHI 0x65
|
||||||
# endif
|
# endif
|
||||||
|
# ifndef LANG_EDO
|
||||||
|
# define LANG_EDO 0x66
|
||||||
|
# endif
|
||||||
# ifndef LANG_ESTONIAN
|
# ifndef LANG_ESTONIAN
|
||||||
# define LANG_ESTONIAN 0x25
|
# define LANG_ESTONIAN 0x25
|
||||||
# endif
|
# endif
|
||||||
@ -77,27 +210,57 @@
|
|||||||
# ifndef LANG_FARSI
|
# ifndef LANG_FARSI
|
||||||
# define LANG_FARSI 0x29
|
# define LANG_FARSI 0x29
|
||||||
# endif
|
# endif
|
||||||
|
# ifndef LANG_FRISIAN
|
||||||
|
# define LANG_FRISIAN 0x62
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_FULFULDE
|
||||||
|
# define LANG_FULFULDE 0x67
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_GAELIC
|
||||||
|
# define LANG_GAELIC 0x3c
|
||||||
|
# endif
|
||||||
# ifndef LANG_GALICIAN
|
# ifndef LANG_GALICIAN
|
||||||
# define LANG_GALICIAN 0x56
|
# define LANG_GALICIAN 0x56
|
||||||
# endif
|
# endif
|
||||||
# ifndef LANG_GEORGIAN
|
# ifndef LANG_GEORGIAN
|
||||||
# define LANG_GEORGIAN 0x37
|
# define LANG_GEORGIAN 0x37
|
||||||
# endif
|
# endif
|
||||||
|
# ifndef LANG_GUARANI
|
||||||
|
# define LANG_GUARANI 0x74
|
||||||
|
# endif
|
||||||
# ifndef LANG_GUJARATI
|
# ifndef LANG_GUJARATI
|
||||||
# define LANG_GUJARATI 0x47
|
# define LANG_GUJARATI 0x47
|
||||||
# endif
|
# endif
|
||||||
|
# ifndef LANG_HAUSA
|
||||||
|
# define LANG_HAUSA 0x68
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_HAWAIIAN
|
||||||
|
# define LANG_HAWAIIAN 0x75
|
||||||
|
# endif
|
||||||
# ifndef LANG_HEBREW
|
# ifndef LANG_HEBREW
|
||||||
# define LANG_HEBREW 0x0d
|
# define LANG_HEBREW 0x0d
|
||||||
# endif
|
# endif
|
||||||
# ifndef LANG_HINDI
|
# ifndef LANG_HINDI
|
||||||
# define LANG_HINDI 0x39
|
# define LANG_HINDI 0x39
|
||||||
# endif
|
# endif
|
||||||
|
# ifndef LANG_IBIBIO
|
||||||
|
# define LANG_IBIBIO 0x69
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_IGBO
|
||||||
|
# define LANG_IGBO 0x70
|
||||||
|
# endif
|
||||||
# ifndef LANG_INDONESIAN
|
# ifndef LANG_INDONESIAN
|
||||||
# define LANG_INDONESIAN 0x21
|
# define LANG_INDONESIAN 0x21
|
||||||
# endif
|
# endif
|
||||||
|
# ifndef LANG_INUKTITUT
|
||||||
|
# define LANG_INUKTITUT 0x5d
|
||||||
|
# endif
|
||||||
# ifndef LANG_KANNADA
|
# ifndef LANG_KANNADA
|
||||||
# define LANG_KANNADA 0x4b
|
# define LANG_KANNADA 0x4b
|
||||||
# endif
|
# endif
|
||||||
|
# ifndef LANG_KANURI
|
||||||
|
# define LANG_KANURI 0x71
|
||||||
|
# endif
|
||||||
# ifndef LANG_KASHMIRI
|
# ifndef LANG_KASHMIRI
|
||||||
# define LANG_KASHMIRI 0x60
|
# define LANG_KASHMIRI 0x60
|
||||||
# endif
|
# endif
|
||||||
@ -110,6 +273,12 @@
|
|||||||
# ifndef LANG_KYRGYZ
|
# ifndef LANG_KYRGYZ
|
||||||
# define LANG_KYRGYZ 0x40
|
# define LANG_KYRGYZ 0x40
|
||||||
# endif
|
# endif
|
||||||
|
# ifndef LANG_LAO
|
||||||
|
# define LANG_LAO 0x54
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_LATIN
|
||||||
|
# define LANG_LATIN 0x76
|
||||||
|
# endif
|
||||||
# ifndef LANG_LATVIAN
|
# ifndef LANG_LATVIAN
|
||||||
# define LANG_LATVIAN 0x26
|
# define LANG_LATVIAN 0x26
|
||||||
# endif
|
# endif
|
||||||
@ -125,6 +294,9 @@
|
|||||||
# ifndef LANG_MALAYALAM
|
# ifndef LANG_MALAYALAM
|
||||||
# define LANG_MALAYALAM 0x4c
|
# define LANG_MALAYALAM 0x4c
|
||||||
# endif
|
# endif
|
||||||
|
# ifndef LANG_MALTESE
|
||||||
|
# define LANG_MALTESE 0x3a
|
||||||
|
# endif
|
||||||
# ifndef LANG_MANIPURI
|
# ifndef LANG_MANIPURI
|
||||||
# define LANG_MANIPURI 0x58
|
# define LANG_MANIPURI 0x58
|
||||||
# endif
|
# endif
|
||||||
@ -140,9 +312,24 @@
|
|||||||
# ifndef LANG_ORIYA
|
# ifndef LANG_ORIYA
|
||||||
# define LANG_ORIYA 0x48
|
# define LANG_ORIYA 0x48
|
||||||
# endif
|
# endif
|
||||||
|
# ifndef LANG_OROMO
|
||||||
|
# define LANG_OROMO 0x72
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_PAPIAMENTU
|
||||||
|
# define LANG_PAPIAMENTU 0x79
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_PASHTO
|
||||||
|
# define LANG_PASHTO 0x63
|
||||||
|
# endif
|
||||||
# ifndef LANG_PUNJABI
|
# ifndef LANG_PUNJABI
|
||||||
# define LANG_PUNJABI 0x46
|
# define LANG_PUNJABI 0x46
|
||||||
# endif
|
# endif
|
||||||
|
# ifndef LANG_RHAETO_ROMANCE
|
||||||
|
# define LANG_RHAETO_ROMANCE 0x17
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_SAAMI
|
||||||
|
# define LANG_SAAMI 0x3b
|
||||||
|
# endif
|
||||||
# ifndef LANG_SANSKRIT
|
# ifndef LANG_SANSKRIT
|
||||||
# define LANG_SANSKRIT 0x4f
|
# define LANG_SANSKRIT 0x4f
|
||||||
# endif
|
# endif
|
||||||
@ -152,18 +339,36 @@
|
|||||||
# ifndef LANG_SINDHI
|
# ifndef LANG_SINDHI
|
||||||
# define LANG_SINDHI 0x59
|
# define LANG_SINDHI 0x59
|
||||||
# endif
|
# endif
|
||||||
|
# ifndef LANG_SINHALESE
|
||||||
|
# define LANG_SINHALESE 0x5b
|
||||||
|
# endif
|
||||||
# ifndef LANG_SLOVAK
|
# ifndef LANG_SLOVAK
|
||||||
# define LANG_SLOVAK 0x1b
|
# define LANG_SLOVAK 0x1b
|
||||||
# endif
|
# endif
|
||||||
|
# ifndef LANG_SOMALI
|
||||||
|
# define LANG_SOMALI 0x77
|
||||||
|
# endif
|
||||||
# ifndef LANG_SORBIAN
|
# ifndef LANG_SORBIAN
|
||||||
# define LANG_SORBIAN 0x2e
|
# define LANG_SORBIAN 0x2e
|
||||||
# endif
|
# endif
|
||||||
|
# ifndef LANG_SUTU
|
||||||
|
# define LANG_SUTU 0x30
|
||||||
|
# endif
|
||||||
# ifndef LANG_SWAHILI
|
# ifndef LANG_SWAHILI
|
||||||
# define LANG_SWAHILI 0x41
|
# define LANG_SWAHILI 0x41
|
||||||
# endif
|
# endif
|
||||||
# ifndef LANG_SYRIAC
|
# ifndef LANG_SYRIAC
|
||||||
# define LANG_SYRIAC 0x5a
|
# define LANG_SYRIAC 0x5a
|
||||||
# endif
|
# endif
|
||||||
|
# ifndef LANG_TAGALOG
|
||||||
|
# define LANG_TAGALOG 0x64
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_TAJIK
|
||||||
|
# define LANG_TAJIK 0x28
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_TAMAZIGHT
|
||||||
|
# define LANG_TAMAZIGHT 0x5f
|
||||||
|
# endif
|
||||||
# ifndef LANG_TAMIL
|
# ifndef LANG_TAMIL
|
||||||
# define LANG_TAMIL 0x49
|
# define LANG_TAMIL 0x49
|
||||||
# endif
|
# endif
|
||||||
@ -176,6 +381,21 @@
|
|||||||
# ifndef LANG_THAI
|
# ifndef LANG_THAI
|
||||||
# define LANG_THAI 0x1e
|
# define LANG_THAI 0x1e
|
||||||
# endif
|
# endif
|
||||||
|
# ifndef LANG_TIBETAN
|
||||||
|
# define LANG_TIBETAN 0x51
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_TIGRINYA
|
||||||
|
# define LANG_TIGRINYA 0x73
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_TSONGA
|
||||||
|
# define LANG_TSONGA 0x31
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_TSWANA
|
||||||
|
# define LANG_TSWANA 0x32
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_TURKMEN
|
||||||
|
# define LANG_TURKMEN 0x42
|
||||||
|
# endif
|
||||||
# ifndef LANG_UKRAINIAN
|
# ifndef LANG_UKRAINIAN
|
||||||
# define LANG_UKRAINIAN 0x22
|
# define LANG_UKRAINIAN 0x22
|
||||||
# endif
|
# endif
|
||||||
@ -185,9 +405,30 @@
|
|||||||
# ifndef LANG_UZBEK
|
# ifndef LANG_UZBEK
|
||||||
# define LANG_UZBEK 0x43
|
# define LANG_UZBEK 0x43
|
||||||
# endif
|
# endif
|
||||||
|
# ifndef LANG_VENDA
|
||||||
|
# define LANG_VENDA 0x33
|
||||||
|
# endif
|
||||||
# ifndef LANG_VIETNAMESE
|
# ifndef LANG_VIETNAMESE
|
||||||
# define LANG_VIETNAMESE 0x2a
|
# define LANG_VIETNAMESE 0x2a
|
||||||
# endif
|
# endif
|
||||||
|
# ifndef LANG_WELSH
|
||||||
|
# define LANG_WELSH 0x52
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_XHOSA
|
||||||
|
# define LANG_XHOSA 0x34
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_YI
|
||||||
|
# define LANG_YI 0x78
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_YIDDISH
|
||||||
|
# define LANG_YIDDISH 0x3d
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_YORUBA
|
||||||
|
# define LANG_YORUBA 0x6a
|
||||||
|
# endif
|
||||||
|
# ifndef LANG_ZULU
|
||||||
|
# define LANG_ZULU 0x35
|
||||||
|
# endif
|
||||||
# ifndef SUBLANG_ARABIC_SAUDI_ARABIA
|
# ifndef SUBLANG_ARABIC_SAUDI_ARABIA
|
||||||
# define SUBLANG_ARABIC_SAUDI_ARABIA 0x01
|
# define SUBLANG_ARABIC_SAUDI_ARABIA 0x01
|
||||||
# endif
|
# endif
|
||||||
@ -242,6 +483,12 @@
|
|||||||
# ifndef SUBLANG_AZERI_CYRILLIC
|
# ifndef SUBLANG_AZERI_CYRILLIC
|
||||||
# define SUBLANG_AZERI_CYRILLIC 0x02
|
# define SUBLANG_AZERI_CYRILLIC 0x02
|
||||||
# endif
|
# endif
|
||||||
|
# ifndef SUBLANG_BENGALI_INDIA
|
||||||
|
# define SUBLANG_BENGALI_INDIA 0x00
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_BENGALI_BANGLADESH
|
||||||
|
# define SUBLANG_BENGALI_BANGLADESH 0x01
|
||||||
|
# endif
|
||||||
# ifndef SUBLANG_CHINESE_MACAU
|
# ifndef SUBLANG_CHINESE_MACAU
|
||||||
# define SUBLANG_CHINESE_MACAU 0x05
|
# define SUBLANG_CHINESE_MACAU 0x05
|
||||||
# endif
|
# endif
|
||||||
@ -266,12 +513,54 @@
|
|||||||
# ifndef SUBLANG_ENGLISH_PHILIPPINES
|
# ifndef SUBLANG_ENGLISH_PHILIPPINES
|
||||||
# define SUBLANG_ENGLISH_PHILIPPINES 0x0d
|
# define SUBLANG_ENGLISH_PHILIPPINES 0x0d
|
||||||
# endif
|
# endif
|
||||||
|
# ifndef SUBLANG_ENGLISH_INDONESIA
|
||||||
|
# define SUBLANG_ENGLISH_INDONESIA 0x0e
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_ENGLISH_HONGKONG
|
||||||
|
# define SUBLANG_ENGLISH_HONGKONG 0x0f
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_ENGLISH_INDIA
|
||||||
|
# define SUBLANG_ENGLISH_INDIA 0x10
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_ENGLISH_MALAYSIA
|
||||||
|
# define SUBLANG_ENGLISH_MALAYSIA 0x11
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_ENGLISH_SINGAPORE
|
||||||
|
# define SUBLANG_ENGLISH_SINGAPORE 0x12
|
||||||
|
# endif
|
||||||
# ifndef SUBLANG_FRENCH_LUXEMBOURG
|
# ifndef SUBLANG_FRENCH_LUXEMBOURG
|
||||||
# define SUBLANG_FRENCH_LUXEMBOURG 0x05
|
# define SUBLANG_FRENCH_LUXEMBOURG 0x05
|
||||||
# endif
|
# endif
|
||||||
# ifndef SUBLANG_FRENCH_MONACO
|
# ifndef SUBLANG_FRENCH_MONACO
|
||||||
# define SUBLANG_FRENCH_MONACO 0x06
|
# define SUBLANG_FRENCH_MONACO 0x06
|
||||||
# endif
|
# endif
|
||||||
|
# ifndef SUBLANG_FRENCH_WESTINDIES
|
||||||
|
# define SUBLANG_FRENCH_WESTINDIES 0x07
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_FRENCH_REUNION
|
||||||
|
# define SUBLANG_FRENCH_REUNION 0x08
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_FRENCH_CONGO
|
||||||
|
# define SUBLANG_FRENCH_CONGO 0x09
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_FRENCH_SENEGAL
|
||||||
|
# define SUBLANG_FRENCH_SENEGAL 0x0a
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_FRENCH_CAMEROON
|
||||||
|
# define SUBLANG_FRENCH_CAMEROON 0x0b
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_FRENCH_COTEDIVOIRE
|
||||||
|
# define SUBLANG_FRENCH_COTEDIVOIRE 0x0c
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_FRENCH_MALI
|
||||||
|
# define SUBLANG_FRENCH_MALI 0x0d
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_FRENCH_MOROCCO
|
||||||
|
# define SUBLANG_FRENCH_MOROCCO 0x0e
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_FRENCH_HAITI
|
||||||
|
# define SUBLANG_FRENCH_HAITI 0x0f
|
||||||
|
# endif
|
||||||
# ifndef SUBLANG_GERMAN_LUXEMBOURG
|
# ifndef SUBLANG_GERMAN_LUXEMBOURG
|
||||||
# define SUBLANG_GERMAN_LUXEMBOURG 0x04
|
# define SUBLANG_GERMAN_LUXEMBOURG 0x04
|
||||||
# endif
|
# endif
|
||||||
@ -290,12 +579,30 @@
|
|||||||
# ifndef SUBLANG_NEPALI_INDIA
|
# ifndef SUBLANG_NEPALI_INDIA
|
||||||
# define SUBLANG_NEPALI_INDIA 0x02
|
# define SUBLANG_NEPALI_INDIA 0x02
|
||||||
# endif
|
# endif
|
||||||
|
# ifndef SUBLANG_PUNJABI_INDIA
|
||||||
|
# define SUBLANG_PUNJABI_INDIA 0x00
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_PUNJABI_PAKISTAN
|
||||||
|
# define SUBLANG_PUNJABI_PAKISTAN 0x01
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_ROMANIAN_ROMANIA
|
||||||
|
# define SUBLANG_ROMANIAN_ROMANIA 0x00
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_ROMANIAN_MOLDOVA
|
||||||
|
# define SUBLANG_ROMANIAN_MOLDOVA 0x01
|
||||||
|
# endif
|
||||||
# ifndef SUBLANG_SERBIAN_LATIN
|
# ifndef SUBLANG_SERBIAN_LATIN
|
||||||
# define SUBLANG_SERBIAN_LATIN 0x02
|
# define SUBLANG_SERBIAN_LATIN 0x02
|
||||||
# endif
|
# endif
|
||||||
# ifndef SUBLANG_SERBIAN_CYRILLIC
|
# ifndef SUBLANG_SERBIAN_CYRILLIC
|
||||||
# define SUBLANG_SERBIAN_CYRILLIC 0x03
|
# define SUBLANG_SERBIAN_CYRILLIC 0x03
|
||||||
# endif
|
# endif
|
||||||
|
# ifndef SUBLANG_SINDHI_INDIA
|
||||||
|
# define SUBLANG_SINDHI_INDIA 0x00
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_SINDHI_PAKISTAN
|
||||||
|
# define SUBLANG_SINDHI_PAKISTAN 0x01
|
||||||
|
# endif
|
||||||
# ifndef SUBLANG_SPANISH_GUATEMALA
|
# ifndef SUBLANG_SPANISH_GUATEMALA
|
||||||
# define SUBLANG_SPANISH_GUATEMALA 0x04
|
# define SUBLANG_SPANISH_GUATEMALA 0x04
|
||||||
# endif
|
# endif
|
||||||
@ -350,6 +657,18 @@
|
|||||||
# ifndef SUBLANG_SWEDISH_FINLAND
|
# ifndef SUBLANG_SWEDISH_FINLAND
|
||||||
# define SUBLANG_SWEDISH_FINLAND 0x02
|
# define SUBLANG_SWEDISH_FINLAND 0x02
|
||||||
# endif
|
# endif
|
||||||
|
# ifndef SUBLANG_TAMAZIGHT_ARABIC
|
||||||
|
# define SUBLANG_TAMAZIGHT_ARABIC 0x01
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_TAMAZIGHT_LATIN
|
||||||
|
# define SUBLANG_TAMAZIGHT_LATIN 0x02
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_TIGRINYA_ETHIOPIA
|
||||||
|
# define SUBLANG_TIGRINYA_ETHIOPIA 0x00
|
||||||
|
# endif
|
||||||
|
# ifndef SUBLANG_TIGRINYA_ERITREA
|
||||||
|
# define SUBLANG_TIGRINYA_ERITREA 0x01
|
||||||
|
# endif
|
||||||
# ifndef SUBLANG_URDU_PAKISTAN
|
# ifndef SUBLANG_URDU_PAKISTAN
|
||||||
# define SUBLANG_URDU_PAKISTAN 0x01
|
# define SUBLANG_URDU_PAKISTAN 0x01
|
||||||
# endif
|
# endif
|
||||||
@ -381,9 +700,7 @@
|
|||||||
The result must not be freed; it is statically allocated. */
|
The result must not be freed; it is statically allocated. */
|
||||||
|
|
||||||
const char *
|
const char *
|
||||||
_nl_locale_name (category, categoryname)
|
_nl_locale_name (int category, const char *categoryname)
|
||||||
int category;
|
|
||||||
const char *categoryname;
|
|
||||||
{
|
{
|
||||||
const char *retval;
|
const char *retval;
|
||||||
|
|
||||||
@ -454,7 +771,7 @@ _nl_locale_name (category, categoryname)
|
|||||||
{
|
{
|
||||||
case LANG_AFRIKAANS: return "af_ZA";
|
case LANG_AFRIKAANS: return "af_ZA";
|
||||||
case LANG_ALBANIAN: return "sq_AL";
|
case LANG_ALBANIAN: return "sq_AL";
|
||||||
case 0x5e: /* AMHARIC */ return "am_ET";
|
case LANG_AMHARIC: return "am_ET";
|
||||||
case LANG_ARABIC:
|
case LANG_ARABIC:
|
||||||
switch (sub)
|
switch (sub)
|
||||||
{
|
{
|
||||||
@ -489,12 +806,18 @@ _nl_locale_name (category, categoryname)
|
|||||||
case LANG_BASQUE:
|
case LANG_BASQUE:
|
||||||
return "eu"; /* Ambiguous: could be "eu_ES" or "eu_FR". */
|
return "eu"; /* Ambiguous: could be "eu_ES" or "eu_FR". */
|
||||||
case LANG_BELARUSIAN: return "be_BY";
|
case LANG_BELARUSIAN: return "be_BY";
|
||||||
case LANG_BENGALI: return "bn_IN";
|
case LANG_BENGALI:
|
||||||
|
switch (sub)
|
||||||
|
{
|
||||||
|
case SUBLANG_BENGALI_INDIA: return "bn_IN";
|
||||||
|
case SUBLANG_BENGALI_BANGLADESH: return "bn_BD";
|
||||||
|
}
|
||||||
|
return "bn";
|
||||||
case LANG_BULGARIAN: return "bg_BG";
|
case LANG_BULGARIAN: return "bg_BG";
|
||||||
case 0x55: /* BURMESE */ return "my_MM";
|
case LANG_BURMESE: return "my_MM";
|
||||||
case 0x53: /* CAMBODIAN */ return "km_KH";
|
case LANG_CAMBODIAN: return "km_KH";
|
||||||
case LANG_CATALAN: return "ca_ES";
|
case LANG_CATALAN: return "ca_ES";
|
||||||
case 0x5c: /* CHEROKEE */ return "chr_US";
|
case LANG_CHEROKEE: return "chr_US";
|
||||||
case LANG_CHINESE:
|
case LANG_CHINESE:
|
||||||
switch (sub)
|
switch (sub)
|
||||||
{
|
{
|
||||||
@ -516,13 +839,13 @@ _nl_locale_name (category, categoryname)
|
|||||||
switch (sub)
|
switch (sub)
|
||||||
{
|
{
|
||||||
case SUBLANG_DEFAULT: return "hr_HR";
|
case SUBLANG_DEFAULT: return "hr_HR";
|
||||||
case SUBLANG_SERBIAN_LATIN: return "sr_YU";
|
case SUBLANG_SERBIAN_LATIN: return "sr_CS";
|
||||||
case SUBLANG_SERBIAN_CYRILLIC: return "sr_YU@cyrillic";
|
case SUBLANG_SERBIAN_CYRILLIC: return "sr_CS@cyrillic";
|
||||||
}
|
}
|
||||||
return "hr";
|
return "hr";
|
||||||
case LANG_CZECH: return "cs_CZ";
|
case LANG_CZECH: return "cs_CZ";
|
||||||
case LANG_DANISH: return "da_DK";
|
case LANG_DANISH: return "da_DK";
|
||||||
case LANG_DIVEHI: return "div_MV";
|
case LANG_DIVEHI: return "dv_MV";
|
||||||
case LANG_DUTCH:
|
case LANG_DUTCH:
|
||||||
switch (sub)
|
switch (sub)
|
||||||
{
|
{
|
||||||
@ -530,7 +853,7 @@ _nl_locale_name (category, categoryname)
|
|||||||
case SUBLANG_DUTCH_BELGIAN: /* FLEMISH, VLAAMS */ return "nl_BE";
|
case SUBLANG_DUTCH_BELGIAN: /* FLEMISH, VLAAMS */ return "nl_BE";
|
||||||
}
|
}
|
||||||
return "nl";
|
return "nl";
|
||||||
case 0x66: /* EDO */ return "bin_NG";
|
case LANG_EDO: return "bin_NG";
|
||||||
case LANG_ENGLISH:
|
case LANG_ENGLISH:
|
||||||
switch (sub)
|
switch (sub)
|
||||||
{
|
{
|
||||||
@ -551,6 +874,11 @@ _nl_locale_name (category, categoryname)
|
|||||||
case SUBLANG_ENGLISH_TRINIDAD: return "en_TT";
|
case SUBLANG_ENGLISH_TRINIDAD: return "en_TT";
|
||||||
case SUBLANG_ENGLISH_ZIMBABWE: return "en_ZW";
|
case SUBLANG_ENGLISH_ZIMBABWE: return "en_ZW";
|
||||||
case SUBLANG_ENGLISH_PHILIPPINES: return "en_PH";
|
case SUBLANG_ENGLISH_PHILIPPINES: return "en_PH";
|
||||||
|
case SUBLANG_ENGLISH_INDONESIA: return "en_ID";
|
||||||
|
case SUBLANG_ENGLISH_HONGKONG: return "en_HK";
|
||||||
|
case SUBLANG_ENGLISH_INDIA: return "en_IN";
|
||||||
|
case SUBLANG_ENGLISH_MALAYSIA: return "en_MY";
|
||||||
|
case SUBLANG_ENGLISH_SINGAPORE: return "en_SG";
|
||||||
}
|
}
|
||||||
return "en";
|
return "en";
|
||||||
case LANG_ESTONIAN: return "et_EE";
|
case LANG_ESTONIAN: return "et_EE";
|
||||||
@ -566,11 +894,22 @@ _nl_locale_name (category, categoryname)
|
|||||||
case SUBLANG_FRENCH_SWISS: return "fr_CH";
|
case SUBLANG_FRENCH_SWISS: return "fr_CH";
|
||||||
case SUBLANG_FRENCH_LUXEMBOURG: return "fr_LU";
|
case SUBLANG_FRENCH_LUXEMBOURG: return "fr_LU";
|
||||||
case SUBLANG_FRENCH_MONACO: return "fr_MC";
|
case SUBLANG_FRENCH_MONACO: return "fr_MC";
|
||||||
|
case SUBLANG_FRENCH_WESTINDIES: return "fr"; /* Caribbean? */
|
||||||
|
case SUBLANG_FRENCH_REUNION: return "fr_RE";
|
||||||
|
case SUBLANG_FRENCH_CONGO: return "fr_CG";
|
||||||
|
case SUBLANG_FRENCH_SENEGAL: return "fr_SN";
|
||||||
|
case SUBLANG_FRENCH_CAMEROON: return "fr_CM";
|
||||||
|
case SUBLANG_FRENCH_COTEDIVOIRE: return "fr_CI";
|
||||||
|
case SUBLANG_FRENCH_MALI: return "fr_ML";
|
||||||
|
case SUBLANG_FRENCH_MOROCCO: return "fr_MA";
|
||||||
|
case SUBLANG_FRENCH_HAITI: return "fr_HT";
|
||||||
}
|
}
|
||||||
return "fr";
|
return "fr";
|
||||||
case 0x62: /* FRISIAN */ return "fy_NL";
|
case LANG_FRISIAN: return "fy_NL";
|
||||||
case 0x67: /* FULFULDE */ return "ful_NG";
|
case LANG_FULFULDE:
|
||||||
case 0x3c: /* GAELIC */
|
/* Spoken in Nigeria, Guinea, Senegal, Mali, Niger, Cameroon, Benin. */
|
||||||
|
return "ff_NG";
|
||||||
|
case LANG_GAELIC:
|
||||||
switch (sub)
|
switch (sub)
|
||||||
{
|
{
|
||||||
case 0x01: /* SCOTTISH */ return "gd_GB";
|
case 0x01: /* SCOTTISH */ return "gd_GB";
|
||||||
@ -590,21 +929,21 @@ _nl_locale_name (category, categoryname)
|
|||||||
}
|
}
|
||||||
return "de";
|
return "de";
|
||||||
case LANG_GREEK: return "el_GR";
|
case LANG_GREEK: return "el_GR";
|
||||||
case 0x74: /* GUARANI */ return "gn_PY";
|
case LANG_GUARANI: return "gn_PY";
|
||||||
case LANG_GUJARATI: return "gu_IN";
|
case LANG_GUJARATI: return "gu_IN";
|
||||||
case 0x68: /* HAUSA */ return "ha_NG";
|
case LANG_HAUSA: return "ha_NG";
|
||||||
case 0x75: /* HAWAIIAN */
|
case LANG_HAWAIIAN:
|
||||||
/* FIXME: Do they mean Hawaiian ("haw_US", 1000 speakers)
|
/* FIXME: Do they mean Hawaiian ("haw_US", 1000 speakers)
|
||||||
or Hawaii Creole English ("cpe_US", 600000 speakers)? */
|
or Hawaii Creole English ("cpe_US", 600000 speakers)? */
|
||||||
return "cpe_US";
|
return "cpe_US";
|
||||||
case LANG_HEBREW: return "he_IL";
|
case LANG_HEBREW: return "he_IL";
|
||||||
case LANG_HINDI: return "hi_IN";
|
case LANG_HINDI: return "hi_IN";
|
||||||
case LANG_HUNGARIAN: return "hu_HU";
|
case LANG_HUNGARIAN: return "hu_HU";
|
||||||
case 0x69: /* IBIBIO */ return "nic_NG";
|
case LANG_IBIBIO: return "nic_NG";
|
||||||
case LANG_ICELANDIC: return "is_IS";
|
case LANG_ICELANDIC: return "is_IS";
|
||||||
case 0x70: /* IGBO */ return "ibo_NG";
|
case LANG_IGBO: return "ig_NG";
|
||||||
case LANG_INDONESIAN: return "id_ID";
|
case LANG_INDONESIAN: return "id_ID";
|
||||||
case 0x5d: /* INUKTITUT */ return "iu_CA";
|
case LANG_INUKTITUT: return "iu_CA";
|
||||||
case LANG_ITALIAN:
|
case LANG_ITALIAN:
|
||||||
switch (sub)
|
switch (sub)
|
||||||
{
|
{
|
||||||
@ -614,7 +953,7 @@ _nl_locale_name (category, categoryname)
|
|||||||
return "it";
|
return "it";
|
||||||
case LANG_JAPANESE: return "ja_JP";
|
case LANG_JAPANESE: return "ja_JP";
|
||||||
case LANG_KANNADA: return "kn_IN";
|
case LANG_KANNADA: return "kn_IN";
|
||||||
case 0x71: /* KANURI */ return "kau_NG";
|
case LANG_KANURI: return "kr_NG";
|
||||||
case LANG_KASHMIRI:
|
case LANG_KASHMIRI:
|
||||||
switch (sub)
|
switch (sub)
|
||||||
{
|
{
|
||||||
@ -628,8 +967,8 @@ _nl_locale_name (category, categoryname)
|
|||||||
return "kok_IN";
|
return "kok_IN";
|
||||||
case LANG_KOREAN: return "ko_KR";
|
case LANG_KOREAN: return "ko_KR";
|
||||||
case LANG_KYRGYZ: return "ky_KG";
|
case LANG_KYRGYZ: return "ky_KG";
|
||||||
case 0x54: /* LAO */ return "lo_LA";
|
case LANG_LAO: return "lo_LA";
|
||||||
case 0x76: /* LATIN */ return "la_VA";
|
case LANG_LATIN: return "la_VA";
|
||||||
case LANG_LATVIAN: return "lv_LV";
|
case LANG_LATVIAN: return "lv_LV";
|
||||||
case LANG_LITHUANIAN: return "lt_LT";
|
case LANG_LITHUANIAN: return "lt_LT";
|
||||||
case LANG_MACEDONIAN: return "mk_MK";
|
case LANG_MACEDONIAN: return "mk_MK";
|
||||||
@ -641,7 +980,7 @@ _nl_locale_name (category, categoryname)
|
|||||||
}
|
}
|
||||||
return "ms";
|
return "ms";
|
||||||
case LANG_MALAYALAM: return "ml_IN";
|
case LANG_MALAYALAM: return "ml_IN";
|
||||||
case 0x3a: /* MALTESE */ return "mt_MT";
|
case LANG_MALTESE: return "mt_MT";
|
||||||
case LANG_MANIPURI:
|
case LANG_MANIPURI:
|
||||||
/* FIXME: Adjust this when such locales appear on Unix. */
|
/* FIXME: Adjust this when such locales appear on Unix. */
|
||||||
return "mni_IN";
|
return "mni_IN";
|
||||||
@ -663,9 +1002,9 @@ _nl_locale_name (category, categoryname)
|
|||||||
}
|
}
|
||||||
return "no";
|
return "no";
|
||||||
case LANG_ORIYA: return "or_IN";
|
case LANG_ORIYA: return "or_IN";
|
||||||
case 0x72: /* OROMO */ return "om_ET";
|
case LANG_OROMO: return "om_ET";
|
||||||
case 0x79: /* PAPIAMENTU */ return "pap_AN";
|
case LANG_PAPIAMENTU: return "pap_AN";
|
||||||
case 0x63: /* PASHTO */
|
case LANG_PASHTO:
|
||||||
return "ps"; /* Ambiguous: could be "ps_PK" or "ps_AF". */
|
return "ps"; /* Ambiguous: could be "ps_PK" or "ps_AF". */
|
||||||
case LANG_POLISH: return "pl_PL";
|
case LANG_POLISH: return "pl_PL";
|
||||||
case LANG_PORTUGUESE:
|
case LANG_PORTUGUESE:
|
||||||
@ -677,18 +1016,36 @@ _nl_locale_name (category, categoryname)
|
|||||||
case SUBLANG_PORTUGUESE_BRAZILIAN: return "pt_BR";
|
case SUBLANG_PORTUGUESE_BRAZILIAN: return "pt_BR";
|
||||||
}
|
}
|
||||||
return "pt";
|
return "pt";
|
||||||
case LANG_PUNJABI: return "pa_IN";
|
case LANG_PUNJABI:
|
||||||
case 0x17: /* RHAETO-ROMANCE */ return "rm_CH";
|
switch (sub)
|
||||||
case LANG_ROMANIAN: return "ro_RO";
|
{
|
||||||
|
case SUBLANG_PUNJABI_INDIA: return "pa_IN"; /* Gurmukhi script */
|
||||||
|
case SUBLANG_PUNJABI_PAKISTAN: return "pa_PK"; /* Arabic script */
|
||||||
|
}
|
||||||
|
return "pa";
|
||||||
|
case LANG_RHAETO_ROMANCE: return "rm_CH";
|
||||||
|
case LANG_ROMANIAN:
|
||||||
|
switch (sub)
|
||||||
|
{
|
||||||
|
case SUBLANG_ROMANIAN_ROMANIA: return "ro_RO";
|
||||||
|
case SUBLANG_ROMANIAN_MOLDOVA: return "ro_MD";
|
||||||
|
}
|
||||||
|
return "ro";
|
||||||
case LANG_RUSSIAN:
|
case LANG_RUSSIAN:
|
||||||
return "ru"; /* Ambiguous: could be "ru_RU" or "ru_UA". */
|
return "ru"; /* Ambiguous: could be "ru_RU" or "ru_UA" or "ru_MD". */
|
||||||
case 0x3b: /* SAMI */ return "se_NO";
|
case LANG_SAAMI: /* actually Northern Sami */ return "se_NO";
|
||||||
case LANG_SANSKRIT: return "sa_IN";
|
case LANG_SANSKRIT: return "sa_IN";
|
||||||
case LANG_SINDHI: return "sd";
|
case LANG_SINDHI:
|
||||||
case 0x5b: /* SINHALESE */ return "si_LK";
|
switch (sub)
|
||||||
|
{
|
||||||
|
case SUBLANG_SINDHI_INDIA: return "sd_IN";
|
||||||
|
case SUBLANG_SINDHI_PAKISTAN: return "sd_PK";
|
||||||
|
}
|
||||||
|
return "sd";
|
||||||
|
case LANG_SINHALESE: return "si_LK";
|
||||||
case LANG_SLOVAK: return "sk_SK";
|
case LANG_SLOVAK: return "sk_SK";
|
||||||
case LANG_SLOVENIAN: return "sl_SI";
|
case LANG_SLOVENIAN: return "sl_SI";
|
||||||
case 0x77: /* SOMALI */ return "so_SO";
|
case LANG_SOMALI: return "so_SO";
|
||||||
case LANG_SORBIAN:
|
case LANG_SORBIAN:
|
||||||
/* FIXME: Adjust this when such locales appear on Unix. */
|
/* FIXME: Adjust this when such locales appear on Unix. */
|
||||||
return "wen_DE";
|
return "wen_DE";
|
||||||
@ -718,7 +1075,7 @@ _nl_locale_name (category, categoryname)
|
|||||||
case SUBLANG_SPANISH_PUERTO_RICO: return "es_PR";
|
case SUBLANG_SPANISH_PUERTO_RICO: return "es_PR";
|
||||||
}
|
}
|
||||||
return "es";
|
return "es";
|
||||||
case 0x30: /* SUTU */ return "bnt_TZ";
|
case LANG_SUTU: return "bnt_TZ"; /* or "st_LS" or "nso_ZA"? */
|
||||||
case LANG_SWAHILI: return "sw_KE";
|
case LANG_SWAHILI: return "sw_KE";
|
||||||
case LANG_SWEDISH:
|
case LANG_SWEDISH:
|
||||||
switch (sub)
|
switch (sub)
|
||||||
@ -728,19 +1085,33 @@ _nl_locale_name (category, categoryname)
|
|||||||
}
|
}
|
||||||
return "sv";
|
return "sv";
|
||||||
case LANG_SYRIAC: return "syr_TR"; /* An extinct language. */
|
case LANG_SYRIAC: return "syr_TR"; /* An extinct language. */
|
||||||
case 0x64: /* TAGALOG */ return "tl_PH";
|
case LANG_TAGALOG: return "tl_PH";
|
||||||
case 0x28: /* TAJIK */ return "tg_TJ";
|
case LANG_TAJIK: return "tg_TJ";
|
||||||
case 0x5f: /* TAMAZIGHT */ return "ber_MA";
|
case LANG_TAMAZIGHT:
|
||||||
|
switch (sub)
|
||||||
|
{
|
||||||
|
/* FIXME: Adjust this when Tamazight locales appear on Unix. */
|
||||||
|
case SUBLANG_TAMAZIGHT_ARABIC: return "ber_MA@arabic";
|
||||||
|
case SUBLANG_TAMAZIGHT_LATIN: return "ber_MA@latin";
|
||||||
|
}
|
||||||
|
return "ber_MA";
|
||||||
case LANG_TAMIL:
|
case LANG_TAMIL:
|
||||||
return "ta"; /* Ambiguous: could be "ta_IN" or "ta_LK" or "ta_SG". */
|
return "ta"; /* Ambiguous: could be "ta_IN" or "ta_LK" or "ta_SG". */
|
||||||
case LANG_TATAR: return "tt_RU";
|
case LANG_TATAR: return "tt_RU";
|
||||||
case LANG_TELUGU: return "te_IN";
|
case LANG_TELUGU: return "te_IN";
|
||||||
case LANG_THAI: return "th_TH";
|
case LANG_THAI: return "th_TH";
|
||||||
case 0x51: /* TIBETAN */ return "bo_CN";
|
case LANG_TIBETAN: return "bo_CN";
|
||||||
case 0x73: /* TIGRINYA */ return "ti_ET";
|
case LANG_TIGRINYA:
|
||||||
case 0x31: /* TSONGA */ return "ts_ZA";
|
switch (sub)
|
||||||
|
{
|
||||||
|
case SUBLANG_TIGRINYA_ETHIOPIA: return "ti_ET";
|
||||||
|
case SUBLANG_TIGRINYA_ERITREA: return "ti_ER";
|
||||||
|
}
|
||||||
|
return "ti";
|
||||||
|
case LANG_TSONGA: return "ts_ZA";
|
||||||
|
case LANG_TSWANA: return "tn_BW";
|
||||||
case LANG_TURKISH: return "tr_TR";
|
case LANG_TURKISH: return "tr_TR";
|
||||||
case 0x42: /* TURKMEN */ return "tk_TM";
|
case LANG_TURKMEN: return "tk_TM";
|
||||||
case LANG_UKRAINIAN: return "uk_UA";
|
case LANG_UKRAINIAN: return "uk_UA";
|
||||||
case LANG_URDU:
|
case LANG_URDU:
|
||||||
switch (sub)
|
switch (sub)
|
||||||
@ -752,19 +1123,18 @@ _nl_locale_name (category, categoryname)
|
|||||||
case LANG_UZBEK:
|
case LANG_UZBEK:
|
||||||
switch (sub)
|
switch (sub)
|
||||||
{
|
{
|
||||||
/* FIXME: Adjust this when Uzbek locales appear on Unix. */
|
case SUBLANG_UZBEK_LATIN: return "uz_UZ";
|
||||||
case SUBLANG_UZBEK_LATIN: return "uz_UZ@latin";
|
|
||||||
case SUBLANG_UZBEK_CYRILLIC: return "uz_UZ@cyrillic";
|
case SUBLANG_UZBEK_CYRILLIC: return "uz_UZ@cyrillic";
|
||||||
}
|
}
|
||||||
return "uz";
|
return "uz";
|
||||||
case 0x33: /* VENDA */ return "ven_ZA";
|
case LANG_VENDA: return "ve_ZA";
|
||||||
case LANG_VIETNAMESE: return "vi_VN";
|
case LANG_VIETNAMESE: return "vi_VN";
|
||||||
case 0x52: /* WELSH */ return "cy_GB";
|
case LANG_WELSH: return "cy_GB";
|
||||||
case 0x34: /* XHOSA */ return "xh_ZA";
|
case LANG_XHOSA: return "xh_ZA";
|
||||||
case 0x78: /* YI */ return "sit_CN";
|
case LANG_YI: return "sit_CN";
|
||||||
case 0x3d: /* YIDDISH */ return "yi_IL";
|
case LANG_YIDDISH: return "yi_IL";
|
||||||
case 0x6a: /* YORUBA */ return "yo_NG";
|
case LANG_YORUBA: return "yo_NG";
|
||||||
case 0x35: /* ZULU */ return "zu_ZA";
|
case LANG_ZULU: return "zu_ZA";
|
||||||
default: return "C";
|
default: return "C";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
12
intl/log.c
12
intl/log.c
@ -28,9 +28,7 @@
|
|||||||
|
|
||||||
/* Print an ASCII string with quotes and escape sequences where needed. */
|
/* Print an ASCII string with quotes and escape sequences where needed. */
|
||||||
static void
|
static void
|
||||||
print_escaped (stream, str)
|
print_escaped (FILE *stream, const char *str)
|
||||||
FILE *stream;
|
|
||||||
const char *str;
|
|
||||||
{
|
{
|
||||||
putc ('"', stream);
|
putc ('"', stream);
|
||||||
for (; *str != '\0'; str++)
|
for (; *str != '\0'; str++)
|
||||||
@ -52,12 +50,8 @@ print_escaped (stream, str)
|
|||||||
|
|
||||||
/* Add to the log file an entry denoting a failed translation. */
|
/* Add to the log file an entry denoting a failed translation. */
|
||||||
void
|
void
|
||||||
_nl_log_untranslated (logfilename, domainname, msgid1, msgid2, plural)
|
_nl_log_untranslated (const char *logfilename, const char *domainname,
|
||||||
const char *logfilename;
|
const char *msgid1, const char *msgid2, int plural)
|
||||||
const char *domainname;
|
|
||||||
const char *msgid1;
|
|
||||||
const char *msgid2;
|
|
||||||
int plural;
|
|
||||||
{
|
{
|
||||||
static char *last_logfilename = NULL;
|
static char *last_logfilename = NULL;
|
||||||
static FILE *last_logfile = NULL;
|
static FILE *last_logfile = NULL;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Implementation of ngettext(3) function.
|
/* Implementation of ngettext(3) function.
|
||||||
Copyright (C) 1995, 1997, 2000, 2001, 2002 Free Software Foundation, Inc.
|
Copyright (C) 1995, 1997, 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
|
||||||
@ -54,10 +54,7 @@
|
|||||||
LC_MESSAGES locale. If not found, returns MSGID itself (the default
|
LC_MESSAGES locale. If not found, returns MSGID itself (the default
|
||||||
text). */
|
text). */
|
||||||
char *
|
char *
|
||||||
NGETTEXT (msgid1, msgid2, n)
|
NGETTEXT (const char *msgid1, const char *msgid2, unsigned long int n)
|
||||||
const char *msgid1;
|
|
||||||
const char *msgid2;
|
|
||||||
unsigned long int n;
|
|
||||||
{
|
{
|
||||||
return DCNGETTEXT (NULL, msgid1, msgid2, n, LC_MESSAGES);
|
return DCNGETTEXT (NULL, msgid1, msgid2, n, LC_MESSAGES);
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Expression parsing for plural form selection.
|
/* Expression parsing for plural form selection.
|
||||||
Copyright (C) 2000, 2001 Free Software Foundation, Inc.
|
Copyright (C) 2000-2001, 2003 Free Software Foundation, Inc.
|
||||||
Written by Ulrich Drepper <drepper@cygnus.com>, 2000.
|
Written by Ulrich Drepper <drepper@cygnus.com>, 2000.
|
||||||
|
|
||||||
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
|
||||||
@ -96,10 +96,8 @@ init_germanic_plural ()
|
|||||||
|
|
||||||
void
|
void
|
||||||
internal_function
|
internal_function
|
||||||
EXTRACT_PLURAL_EXPRESSION (nullentry, pluralp, npluralsp)
|
EXTRACT_PLURAL_EXPRESSION (const char *nullentry, struct expression **pluralp,
|
||||||
const char *nullentry;
|
unsigned long int *npluralsp)
|
||||||
struct expression **pluralp;
|
|
||||||
unsigned long int *npluralsp;
|
|
||||||
{
|
{
|
||||||
if (nullentry != NULL)
|
if (nullentry != NULL)
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Expression parsing and evaluation for plural form selection.
|
/* Expression parsing and evaluation for plural form selection.
|
||||||
Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
|
Copyright (C) 2000-2003 Free Software Foundation, Inc.
|
||||||
Written by Ulrich Drepper <drepper@cygnus.com>, 2000.
|
Written by Ulrich Drepper <drepper@cygnus.com>, 2000.
|
||||||
|
|
||||||
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,14 +20,6 @@
|
|||||||
#ifndef _PLURAL_EXP_H
|
#ifndef _PLURAL_EXP_H
|
||||||
#define _PLURAL_EXP_H
|
#define _PLURAL_EXP_H
|
||||||
|
|
||||||
#ifndef PARAMS
|
|
||||||
# if __STDC__ || defined __GNUC__ || defined __SUNPRO_C || defined __cplusplus || __PROTOTYPES
|
|
||||||
# define PARAMS(args) args
|
|
||||||
# else
|
|
||||||
# define PARAMS(args) ()
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef internal_function
|
#ifndef internal_function
|
||||||
# define internal_function
|
# define internal_function
|
||||||
#endif
|
#endif
|
||||||
@ -109,18 +101,18 @@ struct parse_args
|
|||||||
# define EXTRACT_PLURAL_EXPRESSION extract_plural_expression
|
# define EXTRACT_PLURAL_EXPRESSION extract_plural_expression
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern void FREE_EXPRESSION PARAMS ((struct expression *exp))
|
extern void FREE_EXPRESSION (struct expression *exp)
|
||||||
internal_function;
|
internal_function;
|
||||||
extern int PLURAL_PARSE PARAMS ((void *arg));
|
extern int PLURAL_PARSE (void *arg);
|
||||||
extern struct expression GERMANIC_PLURAL attribute_hidden;
|
extern struct expression GERMANIC_PLURAL attribute_hidden;
|
||||||
extern void EXTRACT_PLURAL_EXPRESSION PARAMS ((const char *nullentry,
|
extern void EXTRACT_PLURAL_EXPRESSION (const char *nullentry,
|
||||||
struct expression **pluralp,
|
struct expression **pluralp,
|
||||||
unsigned long int *npluralsp))
|
unsigned long int *npluralsp)
|
||||||
internal_function;
|
internal_function;
|
||||||
|
|
||||||
#if !defined (_LIBC) && !defined (IN_LIBINTL)
|
#if !defined (_LIBC) && !defined (IN_LIBINTL)
|
||||||
extern unsigned long int plural_eval PARAMS ((struct expression *pexp,
|
extern unsigned long int plural_eval (struct expression *pexp,
|
||||||
unsigned long int n));
|
unsigned long int n);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* _PLURAL_EXP_H */
|
#endif /* _PLURAL_EXP_H */
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
#line 1 "plural.y"
|
#line 1 "plural.y"
|
||||||
|
|
||||||
/* Expression parsing for plural form selection.
|
/* Expression parsing for plural form selection.
|
||||||
Copyright (C) 2000, 2001 Free Software Foundation, Inc.
|
Copyright (C) 2000-2001, 2003 Free Software Foundation, Inc.
|
||||||
Written by Ulrich Drepper <drepper@cygnus.com>, 2000.
|
Written by Ulrich Drepper <drepper@cygnus.com>, 2000.
|
||||||
|
|
||||||
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
|
||||||
@ -75,28 +75,13 @@ typedef union {
|
|||||||
#line 55 "plural.y"
|
#line 55 "plural.y"
|
||||||
|
|
||||||
/* Prototypes for local functions. */
|
/* Prototypes for local functions. */
|
||||||
static struct expression *new_exp PARAMS ((int nargs, enum operator op,
|
static int yylex (YYSTYPE *lval, const char **pexp);
|
||||||
struct expression * const *args));
|
static void yyerror (const char *str);
|
||||||
static inline struct expression *new_exp_0 PARAMS ((enum operator op));
|
|
||||||
static inline struct expression *new_exp_1 PARAMS ((enum operator op,
|
|
||||||
struct expression *right));
|
|
||||||
static struct expression *new_exp_2 PARAMS ((enum operator op,
|
|
||||||
struct expression *left,
|
|
||||||
struct expression *right));
|
|
||||||
static inline struct expression *new_exp_3 PARAMS ((enum operator op,
|
|
||||||
struct expression *bexp,
|
|
||||||
struct expression *tbranch,
|
|
||||||
struct expression *fbranch));
|
|
||||||
static int yylex PARAMS ((YYSTYPE *lval, const char **pexp));
|
|
||||||
static void yyerror PARAMS ((const char *str));
|
|
||||||
|
|
||||||
/* Allocation of expressions. */
|
/* Allocation of expressions. */
|
||||||
|
|
||||||
static struct expression *
|
static struct expression *
|
||||||
new_exp (nargs, op, args)
|
new_exp (int nargs, enum operator op, struct expression * const *args)
|
||||||
int nargs;
|
|
||||||
enum operator op;
|
|
||||||
struct expression * const *args;
|
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
struct expression *newp;
|
struct expression *newp;
|
||||||
@ -125,16 +110,13 @@ new_exp (nargs, op, args)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static inline struct expression *
|
static inline struct expression *
|
||||||
new_exp_0 (op)
|
new_exp_0 (enum operator op)
|
||||||
enum operator op;
|
|
||||||
{
|
{
|
||||||
return new_exp (0, op, NULL);
|
return new_exp (0, op, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline struct expression *
|
static inline struct expression *
|
||||||
new_exp_1 (op, right)
|
new_exp_1 (enum operator op, struct expression *right)
|
||||||
enum operator op;
|
|
||||||
struct expression *right;
|
|
||||||
{
|
{
|
||||||
struct expression *args[1];
|
struct expression *args[1];
|
||||||
|
|
||||||
@ -143,10 +125,7 @@ new_exp_1 (op, right)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static struct expression *
|
static struct expression *
|
||||||
new_exp_2 (op, left, right)
|
new_exp_2 (enum operator op, struct expression *left, struct expression *right)
|
||||||
enum operator op;
|
|
||||||
struct expression *left;
|
|
||||||
struct expression *right;
|
|
||||||
{
|
{
|
||||||
struct expression *args[2];
|
struct expression *args[2];
|
||||||
|
|
||||||
@ -156,11 +135,8 @@ new_exp_2 (op, left, right)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static inline struct expression *
|
static inline struct expression *
|
||||||
new_exp_3 (op, bexp, tbranch, fbranch)
|
new_exp_3 (enum operator op, struct expression *bexp,
|
||||||
enum operator op;
|
struct expression *tbranch, struct expression *fbranch)
|
||||||
struct expression *bexp;
|
|
||||||
struct expression *tbranch;
|
|
||||||
struct expression *fbranch;
|
|
||||||
{
|
{
|
||||||
struct expression *args[3];
|
struct expression *args[3];
|
||||||
|
|
||||||
@ -236,8 +212,8 @@ static const short yyrhs[] =
|
|||||||
/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
|
/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
|
||||||
static const short yyrline[] =
|
static const short yyrline[] =
|
||||||
{
|
{
|
||||||
0, 174, 182, 186, 190, 194, 198, 202, 206, 210,
|
0, 150, 158, 162, 166, 170, 174, 178, 182, 186,
|
||||||
214, 218, 223
|
190, 194, 199
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -1027,7 +1003,7 @@ yyreduce:
|
|||||||
switch (yyn) {
|
switch (yyn) {
|
||||||
|
|
||||||
case 1:
|
case 1:
|
||||||
#line 175 "plural.y"
|
#line 151 "plural.y"
|
||||||
{
|
{
|
||||||
if (yyvsp[0].exp == NULL)
|
if (yyvsp[0].exp == NULL)
|
||||||
YYABORT;
|
YYABORT;
|
||||||
@ -1035,68 +1011,68 @@ case 1:
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
#line 183 "plural.y"
|
#line 159 "plural.y"
|
||||||
{
|
{
|
||||||
yyval.exp = new_exp_3 (qmop, yyvsp[-4].exp, yyvsp[-2].exp, yyvsp[0].exp);
|
yyval.exp = new_exp_3 (qmop, yyvsp[-4].exp, yyvsp[-2].exp, yyvsp[0].exp);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
#line 187 "plural.y"
|
#line 163 "plural.y"
|
||||||
{
|
{
|
||||||
yyval.exp = new_exp_2 (lor, yyvsp[-2].exp, yyvsp[0].exp);
|
yyval.exp = new_exp_2 (lor, yyvsp[-2].exp, yyvsp[0].exp);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
#line 191 "plural.y"
|
#line 167 "plural.y"
|
||||||
{
|
{
|
||||||
yyval.exp = new_exp_2 (land, yyvsp[-2].exp, yyvsp[0].exp);
|
yyval.exp = new_exp_2 (land, yyvsp[-2].exp, yyvsp[0].exp);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 5:
|
case 5:
|
||||||
#line 195 "plural.y"
|
#line 171 "plural.y"
|
||||||
{
|
{
|
||||||
yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp);
|
yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 6:
|
case 6:
|
||||||
#line 199 "plural.y"
|
#line 175 "plural.y"
|
||||||
{
|
{
|
||||||
yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp);
|
yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 7:
|
case 7:
|
||||||
#line 203 "plural.y"
|
#line 179 "plural.y"
|
||||||
{
|
{
|
||||||
yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp);
|
yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 8:
|
case 8:
|
||||||
#line 207 "plural.y"
|
#line 183 "plural.y"
|
||||||
{
|
{
|
||||||
yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp);
|
yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 9:
|
case 9:
|
||||||
#line 211 "plural.y"
|
#line 187 "plural.y"
|
||||||
{
|
{
|
||||||
yyval.exp = new_exp_1 (lnot, yyvsp[0].exp);
|
yyval.exp = new_exp_1 (lnot, yyvsp[0].exp);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 10:
|
case 10:
|
||||||
#line 215 "plural.y"
|
#line 191 "plural.y"
|
||||||
{
|
{
|
||||||
yyval.exp = new_exp_0 (var);
|
yyval.exp = new_exp_0 (var);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 11:
|
case 11:
|
||||||
#line 219 "plural.y"
|
#line 195 "plural.y"
|
||||||
{
|
{
|
||||||
if ((yyval.exp = new_exp_0 (num)) != NULL)
|
if ((yyval.exp = new_exp_0 (num)) != NULL)
|
||||||
yyval.exp->val.num = yyvsp[0].num;
|
yyval.exp->val.num = yyvsp[0].num;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 12:
|
case 12:
|
||||||
#line 224 "plural.y"
|
#line 200 "plural.y"
|
||||||
{
|
{
|
||||||
yyval.exp = yyvsp[-1].exp;
|
yyval.exp = yyvsp[-1].exp;
|
||||||
}
|
}
|
||||||
@ -1334,13 +1310,12 @@ yyreturn:
|
|||||||
#endif
|
#endif
|
||||||
return yyresult;
|
return yyresult;
|
||||||
}
|
}
|
||||||
#line 229 "plural.y"
|
#line 205 "plural.y"
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
internal_function
|
internal_function
|
||||||
FREE_EXPRESSION (exp)
|
FREE_EXPRESSION (struct expression *exp)
|
||||||
struct expression *exp;
|
|
||||||
{
|
{
|
||||||
if (exp == NULL)
|
if (exp == NULL)
|
||||||
return;
|
return;
|
||||||
@ -1366,9 +1341,7 @@ FREE_EXPRESSION (exp)
|
|||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
yylex (lval, pexp)
|
yylex (YYSTYPE *lval, const char **pexp)
|
||||||
YYSTYPE *lval;
|
|
||||||
const char **pexp;
|
|
||||||
{
|
{
|
||||||
const char *exp = *pexp;
|
const char *exp = *pexp;
|
||||||
int result;
|
int result;
|
||||||
@ -1511,8 +1484,7 @@ yylex (lval, pexp)
|
|||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
yyerror (str)
|
yyerror (const char *str)
|
||||||
const char *str;
|
|
||||||
{
|
{
|
||||||
/* Do nothing. We don't print error messages here. */
|
/* Do nothing. We don't print error messages here. */
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
%{
|
%{
|
||||||
/* Expression parsing for plural form selection.
|
/* Expression parsing for plural form selection.
|
||||||
Copyright (C) 2000, 2001 Free Software Foundation, Inc.
|
Copyright (C) 2000-2001, 2003 Free Software Foundation, Inc.
|
||||||
Written by Ulrich Drepper <drepper@cygnus.com>, 2000.
|
Written by Ulrich Drepper <drepper@cygnus.com>, 2000.
|
||||||
|
|
||||||
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
|
||||||
@ -54,28 +54,13 @@
|
|||||||
|
|
||||||
%{
|
%{
|
||||||
/* Prototypes for local functions. */
|
/* Prototypes for local functions. */
|
||||||
static struct expression *new_exp PARAMS ((int nargs, enum operator op,
|
static int yylex (YYSTYPE *lval, const char **pexp);
|
||||||
struct expression * const *args));
|
static void yyerror (const char *str);
|
||||||
static inline struct expression *new_exp_0 PARAMS ((enum operator op));
|
|
||||||
static inline struct expression *new_exp_1 PARAMS ((enum operator op,
|
|
||||||
struct expression *right));
|
|
||||||
static struct expression *new_exp_2 PARAMS ((enum operator op,
|
|
||||||
struct expression *left,
|
|
||||||
struct expression *right));
|
|
||||||
static inline struct expression *new_exp_3 PARAMS ((enum operator op,
|
|
||||||
struct expression *bexp,
|
|
||||||
struct expression *tbranch,
|
|
||||||
struct expression *fbranch));
|
|
||||||
static int yylex PARAMS ((YYSTYPE *lval, const char **pexp));
|
|
||||||
static void yyerror PARAMS ((const char *str));
|
|
||||||
|
|
||||||
/* Allocation of expressions. */
|
/* Allocation of expressions. */
|
||||||
|
|
||||||
static struct expression *
|
static struct expression *
|
||||||
new_exp (nargs, op, args)
|
new_exp (int nargs, enum operator op, struct expression * const *args)
|
||||||
int nargs;
|
|
||||||
enum operator op;
|
|
||||||
struct expression * const *args;
|
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
struct expression *newp;
|
struct expression *newp;
|
||||||
@ -104,16 +89,13 @@ new_exp (nargs, op, args)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static inline struct expression *
|
static inline struct expression *
|
||||||
new_exp_0 (op)
|
new_exp_0 (enum operator op)
|
||||||
enum operator op;
|
|
||||||
{
|
{
|
||||||
return new_exp (0, op, NULL);
|
return new_exp (0, op, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline struct expression *
|
static inline struct expression *
|
||||||
new_exp_1 (op, right)
|
new_exp_1 (enum operator op, struct expression *right)
|
||||||
enum operator op;
|
|
||||||
struct expression *right;
|
|
||||||
{
|
{
|
||||||
struct expression *args[1];
|
struct expression *args[1];
|
||||||
|
|
||||||
@ -122,10 +104,7 @@ new_exp_1 (op, right)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static struct expression *
|
static struct expression *
|
||||||
new_exp_2 (op, left, right)
|
new_exp_2 (enum operator op, struct expression *left, struct expression *right)
|
||||||
enum operator op;
|
|
||||||
struct expression *left;
|
|
||||||
struct expression *right;
|
|
||||||
{
|
{
|
||||||
struct expression *args[2];
|
struct expression *args[2];
|
||||||
|
|
||||||
@ -135,11 +114,8 @@ new_exp_2 (op, left, right)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static inline struct expression *
|
static inline struct expression *
|
||||||
new_exp_3 (op, bexp, tbranch, fbranch)
|
new_exp_3 (enum operator op, struct expression *bexp,
|
||||||
enum operator op;
|
struct expression *tbranch, struct expression *fbranch)
|
||||||
struct expression *bexp;
|
|
||||||
struct expression *tbranch;
|
|
||||||
struct expression *fbranch;
|
|
||||||
{
|
{
|
||||||
struct expression *args[3];
|
struct expression *args[3];
|
||||||
|
|
||||||
@ -230,8 +206,7 @@ exp: exp '?' exp ':' exp
|
|||||||
|
|
||||||
void
|
void
|
||||||
internal_function
|
internal_function
|
||||||
FREE_EXPRESSION (exp)
|
FREE_EXPRESSION (struct expression *exp)
|
||||||
struct expression *exp;
|
|
||||||
{
|
{
|
||||||
if (exp == NULL)
|
if (exp == NULL)
|
||||||
return;
|
return;
|
||||||
@ -257,9 +232,7 @@ FREE_EXPRESSION (exp)
|
|||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
yylex (lval, pexp)
|
yylex (YYSTYPE *lval, const char **pexp)
|
||||||
YYSTYPE *lval;
|
|
||||||
const char **pexp;
|
|
||||||
{
|
{
|
||||||
const char *exp = *pexp;
|
const char *exp = *pexp;
|
||||||
int result;
|
int result;
|
||||||
@ -402,8 +375,7 @@ yylex (lval, pexp)
|
|||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
yyerror (str)
|
yyerror (const char *str)
|
||||||
const char *str;
|
|
||||||
{
|
{
|
||||||
/* Do nothing. We don't print error messages here. */
|
/* Do nothing. We don't print error messages here. */
|
||||||
}
|
}
|
||||||
|
119
intl/printf-args.c
Normal file
119
intl/printf-args.c
Normal file
@ -0,0 +1,119 @@
|
|||||||
|
/* Decomposed printf argument list.
|
||||||
|
Copyright (C) 1999, 2002-2003 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU Library General Public License as published
|
||||||
|
by the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
USA. */
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
# include <config.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Specification. */
|
||||||
|
#include "printf-args.h"
|
||||||
|
|
||||||
|
#ifdef STATIC
|
||||||
|
STATIC
|
||||||
|
#endif
|
||||||
|
int
|
||||||
|
printf_fetchargs (va_list args, arguments *a)
|
||||||
|
{
|
||||||
|
size_t i;
|
||||||
|
argument *ap;
|
||||||
|
|
||||||
|
for (i = 0, ap = &a->arg[0]; i < a->count; i++, ap++)
|
||||||
|
switch (ap->type)
|
||||||
|
{
|
||||||
|
case TYPE_SCHAR:
|
||||||
|
ap->a.a_schar = va_arg (args, /*signed char*/ int);
|
||||||
|
break;
|
||||||
|
case TYPE_UCHAR:
|
||||||
|
ap->a.a_uchar = va_arg (args, /*unsigned char*/ int);
|
||||||
|
break;
|
||||||
|
case TYPE_SHORT:
|
||||||
|
ap->a.a_short = va_arg (args, /*short*/ int);
|
||||||
|
break;
|
||||||
|
case TYPE_USHORT:
|
||||||
|
ap->a.a_ushort = va_arg (args, /*unsigned short*/ int);
|
||||||
|
break;
|
||||||
|
case TYPE_INT:
|
||||||
|
ap->a.a_int = va_arg (args, int);
|
||||||
|
break;
|
||||||
|
case TYPE_UINT:
|
||||||
|
ap->a.a_uint = va_arg (args, unsigned int);
|
||||||
|
break;
|
||||||
|
case TYPE_LONGINT:
|
||||||
|
ap->a.a_longint = va_arg (args, long int);
|
||||||
|
break;
|
||||||
|
case TYPE_ULONGINT:
|
||||||
|
ap->a.a_ulongint = va_arg (args, unsigned long int);
|
||||||
|
break;
|
||||||
|
#ifdef HAVE_LONG_LONG
|
||||||
|
case TYPE_LONGLONGINT:
|
||||||
|
ap->a.a_longlongint = va_arg (args, long long int);
|
||||||
|
break;
|
||||||
|
case TYPE_ULONGLONGINT:
|
||||||
|
ap->a.a_ulonglongint = va_arg (args, unsigned long long int);
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
case TYPE_DOUBLE:
|
||||||
|
ap->a.a_double = va_arg (args, double);
|
||||||
|
break;
|
||||||
|
#ifdef HAVE_LONG_DOUBLE
|
||||||
|
case TYPE_LONGDOUBLE:
|
||||||
|
ap->a.a_longdouble = va_arg (args, long double);
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
case TYPE_CHAR:
|
||||||
|
ap->a.a_char = va_arg (args, int);
|
||||||
|
break;
|
||||||
|
#ifdef HAVE_WINT_T
|
||||||
|
case TYPE_WIDE_CHAR:
|
||||||
|
ap->a.a_wide_char = va_arg (args, wint_t);
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
case TYPE_STRING:
|
||||||
|
ap->a.a_string = va_arg (args, const char *);
|
||||||
|
break;
|
||||||
|
#ifdef HAVE_WCHAR_T
|
||||||
|
case TYPE_WIDE_STRING:
|
||||||
|
ap->a.a_wide_string = va_arg (args, const wchar_t *);
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
case TYPE_POINTER:
|
||||||
|
ap->a.a_pointer = va_arg (args, void *);
|
||||||
|
break;
|
||||||
|
case TYPE_COUNT_SCHAR_POINTER:
|
||||||
|
ap->a.a_count_schar_pointer = va_arg (args, signed char *);
|
||||||
|
break;
|
||||||
|
case TYPE_COUNT_SHORT_POINTER:
|
||||||
|
ap->a.a_count_short_pointer = va_arg (args, short *);
|
||||||
|
break;
|
||||||
|
case TYPE_COUNT_INT_POINTER:
|
||||||
|
ap->a.a_count_int_pointer = va_arg (args, int *);
|
||||||
|
break;
|
||||||
|
case TYPE_COUNT_LONGINT_POINTER:
|
||||||
|
ap->a.a_count_longint_pointer = va_arg (args, long int *);
|
||||||
|
break;
|
||||||
|
#ifdef HAVE_LONG_LONG
|
||||||
|
case TYPE_COUNT_LONGLONGINT_POINTER:
|
||||||
|
ap->a.a_count_longlongint_pointer = va_arg (args, long long int *);
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
default:
|
||||||
|
/* Unknown type. */
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
137
intl/printf-args.h
Normal file
137
intl/printf-args.h
Normal file
@ -0,0 +1,137 @@
|
|||||||
|
/* Decomposed printf argument list.
|
||||||
|
Copyright (C) 1999, 2002-2003 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU Library General Public License as published
|
||||||
|
by the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
USA. */
|
||||||
|
|
||||||
|
#ifndef _PRINTF_ARGS_H
|
||||||
|
#define _PRINTF_ARGS_H
|
||||||
|
|
||||||
|
/* Get size_t. */
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
|
/* Get wchar_t. */
|
||||||
|
#ifdef HAVE_WCHAR_T
|
||||||
|
# include <stddef.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Get wint_t. */
|
||||||
|
#ifdef HAVE_WINT_T
|
||||||
|
# include <wchar.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Get va_list. */
|
||||||
|
#include <stdarg.h>
|
||||||
|
|
||||||
|
|
||||||
|
/* Argument types */
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
TYPE_NONE,
|
||||||
|
TYPE_SCHAR,
|
||||||
|
TYPE_UCHAR,
|
||||||
|
TYPE_SHORT,
|
||||||
|
TYPE_USHORT,
|
||||||
|
TYPE_INT,
|
||||||
|
TYPE_UINT,
|
||||||
|
TYPE_LONGINT,
|
||||||
|
TYPE_ULONGINT,
|
||||||
|
#ifdef HAVE_LONG_LONG
|
||||||
|
TYPE_LONGLONGINT,
|
||||||
|
TYPE_ULONGLONGINT,
|
||||||
|
#endif
|
||||||
|
TYPE_DOUBLE,
|
||||||
|
#ifdef HAVE_LONG_DOUBLE
|
||||||
|
TYPE_LONGDOUBLE,
|
||||||
|
#endif
|
||||||
|
TYPE_CHAR,
|
||||||
|
#ifdef HAVE_WINT_T
|
||||||
|
TYPE_WIDE_CHAR,
|
||||||
|
#endif
|
||||||
|
TYPE_STRING,
|
||||||
|
#ifdef HAVE_WCHAR_T
|
||||||
|
TYPE_WIDE_STRING,
|
||||||
|
#endif
|
||||||
|
TYPE_POINTER,
|
||||||
|
TYPE_COUNT_SCHAR_POINTER,
|
||||||
|
TYPE_COUNT_SHORT_POINTER,
|
||||||
|
TYPE_COUNT_INT_POINTER,
|
||||||
|
TYPE_COUNT_LONGINT_POINTER
|
||||||
|
#ifdef HAVE_LONG_LONG
|
||||||
|
, TYPE_COUNT_LONGLONGINT_POINTER
|
||||||
|
#endif
|
||||||
|
} arg_type;
|
||||||
|
|
||||||
|
/* Polymorphic argument */
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
arg_type type;
|
||||||
|
union
|
||||||
|
{
|
||||||
|
signed char a_schar;
|
||||||
|
unsigned char a_uchar;
|
||||||
|
short a_short;
|
||||||
|
unsigned short a_ushort;
|
||||||
|
int a_int;
|
||||||
|
unsigned int a_uint;
|
||||||
|
long int a_longint;
|
||||||
|
unsigned long int a_ulongint;
|
||||||
|
#ifdef HAVE_LONG_LONG
|
||||||
|
long long int a_longlongint;
|
||||||
|
unsigned long long int a_ulonglongint;
|
||||||
|
#endif
|
||||||
|
float a_float;
|
||||||
|
double a_double;
|
||||||
|
#ifdef HAVE_LONG_DOUBLE
|
||||||
|
long double a_longdouble;
|
||||||
|
#endif
|
||||||
|
int a_char;
|
||||||
|
#ifdef HAVE_WINT_T
|
||||||
|
wint_t a_wide_char;
|
||||||
|
#endif
|
||||||
|
const char* a_string;
|
||||||
|
#ifdef HAVE_WCHAR_T
|
||||||
|
const wchar_t* a_wide_string;
|
||||||
|
#endif
|
||||||
|
void* a_pointer;
|
||||||
|
signed char * a_count_schar_pointer;
|
||||||
|
short * a_count_short_pointer;
|
||||||
|
int * a_count_int_pointer;
|
||||||
|
long int * a_count_longint_pointer;
|
||||||
|
#ifdef HAVE_LONG_LONG
|
||||||
|
long long int * a_count_longlongint_pointer;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
a;
|
||||||
|
}
|
||||||
|
argument;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
size_t count;
|
||||||
|
argument *arg;
|
||||||
|
}
|
||||||
|
arguments;
|
||||||
|
|
||||||
|
|
||||||
|
/* Fetch the arguments, putting them into a. */
|
||||||
|
#ifdef STATIC
|
||||||
|
STATIC
|
||||||
|
#else
|
||||||
|
extern
|
||||||
|
#endif
|
||||||
|
int printf_fetchargs (va_list args, arguments *a);
|
||||||
|
|
||||||
|
#endif /* _PRINTF_ARGS_H */
|
537
intl/printf-parse.c
Normal file
537
intl/printf-parse.c
Normal file
@ -0,0 +1,537 @@
|
|||||||
|
/* Formatted output to strings.
|
||||||
|
Copyright (C) 1999-2000, 2002-2003 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU Library General Public License as published
|
||||||
|
by the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
USA. */
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
# include <config.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Specification. */
|
||||||
|
#if WIDE_CHAR_VERSION
|
||||||
|
# include "wprintf-parse.h"
|
||||||
|
#else
|
||||||
|
# include "printf-parse.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Get size_t, NULL. */
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
|
/* Get intmax_t. */
|
||||||
|
#if HAVE_STDINT_H_WITH_UINTMAX
|
||||||
|
# include <stdint.h>
|
||||||
|
#endif
|
||||||
|
#if HAVE_INTTYPES_H_WITH_UINTMAX
|
||||||
|
# include <inttypes.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* malloc(), realloc(), free(). */
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
/* Checked size_t computations. */
|
||||||
|
#include "xsize.h"
|
||||||
|
|
||||||
|
#if WIDE_CHAR_VERSION
|
||||||
|
# define PRINTF_PARSE wprintf_parse
|
||||||
|
# define CHAR_T wchar_t
|
||||||
|
# define DIRECTIVE wchar_t_directive
|
||||||
|
# define DIRECTIVES wchar_t_directives
|
||||||
|
#else
|
||||||
|
# define PRINTF_PARSE printf_parse
|
||||||
|
# define CHAR_T char
|
||||||
|
# define DIRECTIVE char_directive
|
||||||
|
# define DIRECTIVES char_directives
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef STATIC
|
||||||
|
STATIC
|
||||||
|
#endif
|
||||||
|
int
|
||||||
|
PRINTF_PARSE (const CHAR_T *format, DIRECTIVES *d, arguments *a)
|
||||||
|
{
|
||||||
|
const CHAR_T *cp = format; /* pointer into format */
|
||||||
|
size_t arg_posn = 0; /* number of regular arguments consumed */
|
||||||
|
size_t d_allocated; /* allocated elements of d->dir */
|
||||||
|
size_t a_allocated; /* allocated elements of a->arg */
|
||||||
|
size_t max_width_length = 0;
|
||||||
|
size_t max_precision_length = 0;
|
||||||
|
|
||||||
|
d->count = 0;
|
||||||
|
d_allocated = 1;
|
||||||
|
d->dir = malloc (d_allocated * sizeof (DIRECTIVE));
|
||||||
|
if (d->dir == NULL)
|
||||||
|
/* Out of memory. */
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
a->count = 0;
|
||||||
|
a_allocated = 0;
|
||||||
|
a->arg = NULL;
|
||||||
|
|
||||||
|
#define REGISTER_ARG(_index_,_type_) \
|
||||||
|
{ \
|
||||||
|
size_t n = (_index_); \
|
||||||
|
if (n >= a_allocated) \
|
||||||
|
{ \
|
||||||
|
size_t memory_size; \
|
||||||
|
argument *memory; \
|
||||||
|
\
|
||||||
|
a_allocated = xtimes (a_allocated, 2); \
|
||||||
|
if (a_allocated <= n) \
|
||||||
|
a_allocated = xsum (n, 1); \
|
||||||
|
memory_size = xtimes (a_allocated, sizeof (argument)); \
|
||||||
|
if (size_overflow_p (memory_size)) \
|
||||||
|
/* Overflow, would lead to out of memory. */ \
|
||||||
|
goto error; \
|
||||||
|
memory = (a->arg \
|
||||||
|
? realloc (a->arg, memory_size) \
|
||||||
|
: malloc (memory_size)); \
|
||||||
|
if (memory == NULL) \
|
||||||
|
/* Out of memory. */ \
|
||||||
|
goto error; \
|
||||||
|
a->arg = memory; \
|
||||||
|
} \
|
||||||
|
while (a->count <= n) \
|
||||||
|
a->arg[a->count++].type = TYPE_NONE; \
|
||||||
|
if (a->arg[n].type == TYPE_NONE) \
|
||||||
|
a->arg[n].type = (_type_); \
|
||||||
|
else if (a->arg[n].type != (_type_)) \
|
||||||
|
/* Ambiguous type for positional argument. */ \
|
||||||
|
goto error; \
|
||||||
|
}
|
||||||
|
|
||||||
|
while (*cp != '\0')
|
||||||
|
{
|
||||||
|
CHAR_T c = *cp++;
|
||||||
|
if (c == '%')
|
||||||
|
{
|
||||||
|
size_t arg_index = ARG_NONE;
|
||||||
|
DIRECTIVE *dp = &d->dir[d->count];/* pointer to next directive */
|
||||||
|
|
||||||
|
/* Initialize the next directive. */
|
||||||
|
dp->dir_start = cp - 1;
|
||||||
|
dp->flags = 0;
|
||||||
|
dp->width_start = NULL;
|
||||||
|
dp->width_end = NULL;
|
||||||
|
dp->width_arg_index = ARG_NONE;
|
||||||
|
dp->precision_start = NULL;
|
||||||
|
dp->precision_end = NULL;
|
||||||
|
dp->precision_arg_index = ARG_NONE;
|
||||||
|
dp->arg_index = ARG_NONE;
|
||||||
|
|
||||||
|
/* Test for positional argument. */
|
||||||
|
if (*cp >= '0' && *cp <= '9')
|
||||||
|
{
|
||||||
|
const CHAR_T *np;
|
||||||
|
|
||||||
|
for (np = cp; *np >= '0' && *np <= '9'; np++)
|
||||||
|
;
|
||||||
|
if (*np == '$')
|
||||||
|
{
|
||||||
|
size_t n = 0;
|
||||||
|
|
||||||
|
for (np = cp; *np >= '0' && *np <= '9'; np++)
|
||||||
|
n = xsum (xtimes (n, 10), *np - '0');
|
||||||
|
if (n == 0)
|
||||||
|
/* Positional argument 0. */
|
||||||
|
goto error;
|
||||||
|
if (size_overflow_p (n))
|
||||||
|
/* n too large, would lead to out of memory later. */
|
||||||
|
goto error;
|
||||||
|
arg_index = n - 1;
|
||||||
|
cp = np + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Read the flags. */
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
if (*cp == '\'')
|
||||||
|
{
|
||||||
|
dp->flags |= FLAG_GROUP;
|
||||||
|
cp++;
|
||||||
|
}
|
||||||
|
else if (*cp == '-')
|
||||||
|
{
|
||||||
|
dp->flags |= FLAG_LEFT;
|
||||||
|
cp++;
|
||||||
|
}
|
||||||
|
else if (*cp == '+')
|
||||||
|
{
|
||||||
|
dp->flags |= FLAG_SHOWSIGN;
|
||||||
|
cp++;
|
||||||
|
}
|
||||||
|
else if (*cp == ' ')
|
||||||
|
{
|
||||||
|
dp->flags |= FLAG_SPACE;
|
||||||
|
cp++;
|
||||||
|
}
|
||||||
|
else if (*cp == '#')
|
||||||
|
{
|
||||||
|
dp->flags |= FLAG_ALT;
|
||||||
|
cp++;
|
||||||
|
}
|
||||||
|
else if (*cp == '0')
|
||||||
|
{
|
||||||
|
dp->flags |= FLAG_ZERO;
|
||||||
|
cp++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Parse the field width. */
|
||||||
|
if (*cp == '*')
|
||||||
|
{
|
||||||
|
dp->width_start = cp;
|
||||||
|
cp++;
|
||||||
|
dp->width_end = cp;
|
||||||
|
if (max_width_length < 1)
|
||||||
|
max_width_length = 1;
|
||||||
|
|
||||||
|
/* Test for positional argument. */
|
||||||
|
if (*cp >= '0' && *cp <= '9')
|
||||||
|
{
|
||||||
|
const CHAR_T *np;
|
||||||
|
|
||||||
|
for (np = cp; *np >= '0' && *np <= '9'; np++)
|
||||||
|
;
|
||||||
|
if (*np == '$')
|
||||||
|
{
|
||||||
|
size_t n = 0;
|
||||||
|
|
||||||
|
for (np = cp; *np >= '0' && *np <= '9'; np++)
|
||||||
|
n = xsum (xtimes (n, 10), *np - '0');
|
||||||
|
if (n == 0)
|
||||||
|
/* Positional argument 0. */
|
||||||
|
goto error;
|
||||||
|
if (size_overflow_p (n))
|
||||||
|
/* n too large, would lead to out of memory later. */
|
||||||
|
goto error;
|
||||||
|
dp->width_arg_index = n - 1;
|
||||||
|
cp = np + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (dp->width_arg_index == ARG_NONE)
|
||||||
|
{
|
||||||
|
dp->width_arg_index = arg_posn++;
|
||||||
|
if (dp->width_arg_index == ARG_NONE)
|
||||||
|
/* arg_posn wrapped around. */
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
REGISTER_ARG (dp->width_arg_index, TYPE_INT);
|
||||||
|
}
|
||||||
|
else if (*cp >= '0' && *cp <= '9')
|
||||||
|
{
|
||||||
|
size_t width_length;
|
||||||
|
|
||||||
|
dp->width_start = cp;
|
||||||
|
for (; *cp >= '0' && *cp <= '9'; cp++)
|
||||||
|
;
|
||||||
|
dp->width_end = cp;
|
||||||
|
width_length = dp->width_end - dp->width_start;
|
||||||
|
if (max_width_length < width_length)
|
||||||
|
max_width_length = width_length;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Parse the precision. */
|
||||||
|
if (*cp == '.')
|
||||||
|
{
|
||||||
|
cp++;
|
||||||
|
if (*cp == '*')
|
||||||
|
{
|
||||||
|
dp->precision_start = cp - 1;
|
||||||
|
cp++;
|
||||||
|
dp->precision_end = cp;
|
||||||
|
if (max_precision_length < 2)
|
||||||
|
max_precision_length = 2;
|
||||||
|
|
||||||
|
/* Test for positional argument. */
|
||||||
|
if (*cp >= '0' && *cp <= '9')
|
||||||
|
{
|
||||||
|
const CHAR_T *np;
|
||||||
|
|
||||||
|
for (np = cp; *np >= '0' && *np <= '9'; np++)
|
||||||
|
;
|
||||||
|
if (*np == '$')
|
||||||
|
{
|
||||||
|
size_t n = 0;
|
||||||
|
|
||||||
|
for (np = cp; *np >= '0' && *np <= '9'; np++)
|
||||||
|
n = xsum (xtimes (n, 10), *np - '0');
|
||||||
|
if (n == 0)
|
||||||
|
/* Positional argument 0. */
|
||||||
|
goto error;
|
||||||
|
if (size_overflow_p (n))
|
||||||
|
/* n too large, would lead to out of memory
|
||||||
|
later. */
|
||||||
|
goto error;
|
||||||
|
dp->precision_arg_index = n - 1;
|
||||||
|
cp = np + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (dp->precision_arg_index == ARG_NONE)
|
||||||
|
{
|
||||||
|
dp->precision_arg_index = arg_posn++;
|
||||||
|
if (dp->precision_arg_index == ARG_NONE)
|
||||||
|
/* arg_posn wrapped around. */
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
REGISTER_ARG (dp->precision_arg_index, TYPE_INT);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
size_t precision_length;
|
||||||
|
|
||||||
|
dp->precision_start = cp - 1;
|
||||||
|
for (; *cp >= '0' && *cp <= '9'; cp++)
|
||||||
|
;
|
||||||
|
dp->precision_end = cp;
|
||||||
|
precision_length = dp->precision_end - dp->precision_start;
|
||||||
|
if (max_precision_length < precision_length)
|
||||||
|
max_precision_length = precision_length;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
arg_type type;
|
||||||
|
|
||||||
|
/* Parse argument type/size specifiers. */
|
||||||
|
{
|
||||||
|
int flags = 0;
|
||||||
|
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
if (*cp == 'h')
|
||||||
|
{
|
||||||
|
flags |= (1 << (flags & 1));
|
||||||
|
cp++;
|
||||||
|
}
|
||||||
|
else if (*cp == 'L')
|
||||||
|
{
|
||||||
|
flags |= 4;
|
||||||
|
cp++;
|
||||||
|
}
|
||||||
|
else if (*cp == 'l')
|
||||||
|
{
|
||||||
|
flags += 8;
|
||||||
|
cp++;
|
||||||
|
}
|
||||||
|
#ifdef HAVE_INTMAX_T
|
||||||
|
else if (*cp == 'j')
|
||||||
|
{
|
||||||
|
if (sizeof (intmax_t) > sizeof (long))
|
||||||
|
{
|
||||||
|
/* intmax_t = long long */
|
||||||
|
flags += 16;
|
||||||
|
}
|
||||||
|
else if (sizeof (intmax_t) > sizeof (int))
|
||||||
|
{
|
||||||
|
/* intmax_t = long */
|
||||||
|
flags += 8;
|
||||||
|
}
|
||||||
|
cp++;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
else if (*cp == 'z' || *cp == 'Z')
|
||||||
|
{
|
||||||
|
/* 'z' is standardized in ISO C 99, but glibc uses 'Z'
|
||||||
|
because the warning facility in gcc-2.95.2 understands
|
||||||
|
only 'Z' (see gcc-2.95.2/gcc/c-common.c:1784). */
|
||||||
|
if (sizeof (size_t) > sizeof (long))
|
||||||
|
{
|
||||||
|
/* size_t = long long */
|
||||||
|
flags += 16;
|
||||||
|
}
|
||||||
|
else if (sizeof (size_t) > sizeof (int))
|
||||||
|
{
|
||||||
|
/* size_t = long */
|
||||||
|
flags += 8;
|
||||||
|
}
|
||||||
|
cp++;
|
||||||
|
}
|
||||||
|
else if (*cp == 't')
|
||||||
|
{
|
||||||
|
if (sizeof (ptrdiff_t) > sizeof (long))
|
||||||
|
{
|
||||||
|
/* ptrdiff_t = long long */
|
||||||
|
flags += 16;
|
||||||
|
}
|
||||||
|
else if (sizeof (ptrdiff_t) > sizeof (int))
|
||||||
|
{
|
||||||
|
/* ptrdiff_t = long */
|
||||||
|
flags += 8;
|
||||||
|
}
|
||||||
|
cp++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Read the conversion character. */
|
||||||
|
c = *cp++;
|
||||||
|
switch (c)
|
||||||
|
{
|
||||||
|
case 'd': case 'i':
|
||||||
|
#ifdef HAVE_LONG_LONG
|
||||||
|
if (flags >= 16 || (flags & 4))
|
||||||
|
type = TYPE_LONGLONGINT;
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
if (flags >= 8)
|
||||||
|
type = TYPE_LONGINT;
|
||||||
|
else if (flags & 2)
|
||||||
|
type = TYPE_SCHAR;
|
||||||
|
else if (flags & 1)
|
||||||
|
type = TYPE_SHORT;
|
||||||
|
else
|
||||||
|
type = TYPE_INT;
|
||||||
|
break;
|
||||||
|
case 'o': case 'u': case 'x': case 'X':
|
||||||
|
#ifdef HAVE_LONG_LONG
|
||||||
|
if (flags >= 16 || (flags & 4))
|
||||||
|
type = TYPE_ULONGLONGINT;
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
if (flags >= 8)
|
||||||
|
type = TYPE_ULONGINT;
|
||||||
|
else if (flags & 2)
|
||||||
|
type = TYPE_UCHAR;
|
||||||
|
else if (flags & 1)
|
||||||
|
type = TYPE_USHORT;
|
||||||
|
else
|
||||||
|
type = TYPE_UINT;
|
||||||
|
break;
|
||||||
|
case 'f': case 'F': case 'e': case 'E': case 'g': case 'G':
|
||||||
|
case 'a': case 'A':
|
||||||
|
#ifdef HAVE_LONG_DOUBLE
|
||||||
|
if (flags >= 16 || (flags & 4))
|
||||||
|
type = TYPE_LONGDOUBLE;
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
type = TYPE_DOUBLE;
|
||||||
|
break;
|
||||||
|
case 'c':
|
||||||
|
if (flags >= 8)
|
||||||
|
#ifdef HAVE_WINT_T
|
||||||
|
type = TYPE_WIDE_CHAR;
|
||||||
|
#else
|
||||||
|
goto error;
|
||||||
|
#endif
|
||||||
|
else
|
||||||
|
type = TYPE_CHAR;
|
||||||
|
break;
|
||||||
|
#ifdef HAVE_WINT_T
|
||||||
|
case 'C':
|
||||||
|
type = TYPE_WIDE_CHAR;
|
||||||
|
c = 'c';
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
case 's':
|
||||||
|
if (flags >= 8)
|
||||||
|
#ifdef HAVE_WCHAR_T
|
||||||
|
type = TYPE_WIDE_STRING;
|
||||||
|
#else
|
||||||
|
goto error;
|
||||||
|
#endif
|
||||||
|
else
|
||||||
|
type = TYPE_STRING;
|
||||||
|
break;
|
||||||
|
#ifdef HAVE_WCHAR_T
|
||||||
|
case 'S':
|
||||||
|
type = TYPE_WIDE_STRING;
|
||||||
|
c = 's';
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
case 'p':
|
||||||
|
type = TYPE_POINTER;
|
||||||
|
break;
|
||||||
|
case 'n':
|
||||||
|
#ifdef HAVE_LONG_LONG
|
||||||
|
if (flags >= 16 || (flags & 4))
|
||||||
|
type = TYPE_COUNT_LONGLONGINT_POINTER;
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
if (flags >= 8)
|
||||||
|
type = TYPE_COUNT_LONGINT_POINTER;
|
||||||
|
else if (flags & 2)
|
||||||
|
type = TYPE_COUNT_SCHAR_POINTER;
|
||||||
|
else if (flags & 1)
|
||||||
|
type = TYPE_COUNT_SHORT_POINTER;
|
||||||
|
else
|
||||||
|
type = TYPE_COUNT_INT_POINTER;
|
||||||
|
break;
|
||||||
|
case '%':
|
||||||
|
type = TYPE_NONE;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
/* Unknown conversion character. */
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (type != TYPE_NONE)
|
||||||
|
{
|
||||||
|
dp->arg_index = arg_index;
|
||||||
|
if (dp->arg_index == ARG_NONE)
|
||||||
|
{
|
||||||
|
dp->arg_index = arg_posn++;
|
||||||
|
if (dp->arg_index == ARG_NONE)
|
||||||
|
/* arg_posn wrapped around. */
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
REGISTER_ARG (dp->arg_index, type);
|
||||||
|
}
|
||||||
|
dp->conversion = c;
|
||||||
|
dp->dir_end = cp;
|
||||||
|
}
|
||||||
|
|
||||||
|
d->count++;
|
||||||
|
if (d->count >= d_allocated)
|
||||||
|
{
|
||||||
|
size_t memory_size;
|
||||||
|
DIRECTIVE *memory;
|
||||||
|
|
||||||
|
d_allocated = xtimes (d_allocated, 2);
|
||||||
|
memory_size = xtimes (d_allocated, sizeof (DIRECTIVE));
|
||||||
|
if (size_overflow_p (memory_size))
|
||||||
|
/* Overflow, would lead to out of memory. */
|
||||||
|
goto error;
|
||||||
|
memory = realloc (d->dir, memory_size);
|
||||||
|
if (memory == NULL)
|
||||||
|
/* Out of memory. */
|
||||||
|
goto error;
|
||||||
|
d->dir = memory;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
d->dir[d->count].dir_start = cp;
|
||||||
|
|
||||||
|
d->max_width_length = max_width_length;
|
||||||
|
d->max_precision_length = max_precision_length;
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
error:
|
||||||
|
if (a->arg)
|
||||||
|
free (a->arg);
|
||||||
|
if (d->dir)
|
||||||
|
free (d->dir);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#undef DIRECTIVES
|
||||||
|
#undef DIRECTIVE
|
||||||
|
#undef CHAR_T
|
||||||
|
#undef PRINTF_PARSE
|
75
intl/printf-parse.h
Normal file
75
intl/printf-parse.h
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
/* Parse printf format string.
|
||||||
|
Copyright (C) 1999, 2002-2003 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU Library General Public License as published
|
||||||
|
by the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
USA. */
|
||||||
|
|
||||||
|
#ifndef _PRINTF_PARSE_H
|
||||||
|
#define _PRINTF_PARSE_H
|
||||||
|
|
||||||
|
#include "printf-args.h"
|
||||||
|
|
||||||
|
|
||||||
|
/* Flags */
|
||||||
|
#define FLAG_GROUP 1 /* ' flag */
|
||||||
|
#define FLAG_LEFT 2 /* - flag */
|
||||||
|
#define FLAG_SHOWSIGN 4 /* + flag */
|
||||||
|
#define FLAG_SPACE 8 /* space flag */
|
||||||
|
#define FLAG_ALT 16 /* # flag */
|
||||||
|
#define FLAG_ZERO 32
|
||||||
|
|
||||||
|
/* arg_index value indicating that no argument is consumed. */
|
||||||
|
#define ARG_NONE (~(size_t)0)
|
||||||
|
|
||||||
|
/* A parsed directive. */
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
const char* dir_start;
|
||||||
|
const char* dir_end;
|
||||||
|
int flags;
|
||||||
|
const char* width_start;
|
||||||
|
const char* width_end;
|
||||||
|
size_t width_arg_index;
|
||||||
|
const char* precision_start;
|
||||||
|
const char* precision_end;
|
||||||
|
size_t precision_arg_index;
|
||||||
|
char conversion; /* d i o u x X f e E g G c s p n U % but not C S */
|
||||||
|
size_t arg_index;
|
||||||
|
}
|
||||||
|
char_directive;
|
||||||
|
|
||||||
|
/* A parsed format string. */
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
size_t count;
|
||||||
|
char_directive *dir;
|
||||||
|
size_t max_width_length;
|
||||||
|
size_t max_precision_length;
|
||||||
|
}
|
||||||
|
char_directives;
|
||||||
|
|
||||||
|
|
||||||
|
/* Parses the format string. Fills in the number N of directives, and fills
|
||||||
|
in directives[0], ..., directives[N-1], and sets directives[N].dir_start
|
||||||
|
to the end of the format string. Also fills in the arg_type fields of the
|
||||||
|
arguments and the needed count of arguments. */
|
||||||
|
#ifdef STATIC
|
||||||
|
STATIC
|
||||||
|
#else
|
||||||
|
extern
|
||||||
|
#endif
|
||||||
|
int printf_parse (const char *format, char_directives *d, arguments *a);
|
||||||
|
|
||||||
|
#endif /* _PRINTF_PARSE_H */
|
371
intl/printf.c
Normal file
371
intl/printf.c
Normal file
@ -0,0 +1,371 @@
|
|||||||
|
/* Formatted output to strings, using POSIX/XSI format strings with positions.
|
||||||
|
Copyright (C) 2003 Free Software Foundation, Inc.
|
||||||
|
Written by Bruno Haible <bruno@clisp.org>, 2003.
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU Library General Public License as published
|
||||||
|
by the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
USA. */
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
# include <config.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __GNUC__
|
||||||
|
# define alloca __builtin_alloca
|
||||||
|
# define HAVE_ALLOCA 1
|
||||||
|
#else
|
||||||
|
# ifdef _MSC_VER
|
||||||
|
# include <malloc.h>
|
||||||
|
# define alloca _alloca
|
||||||
|
# else
|
||||||
|
# if defined HAVE_ALLOCA_H || defined _LIBC
|
||||||
|
# include <alloca.h>
|
||||||
|
# else
|
||||||
|
# ifdef _AIX
|
||||||
|
#pragma alloca
|
||||||
|
# else
|
||||||
|
# ifndef alloca
|
||||||
|
char *alloca ();
|
||||||
|
# endif
|
||||||
|
# endif
|
||||||
|
# endif
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#if !HAVE_POSIX_PRINTF
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
/* 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
|
||||||
|
|
||||||
|
#define STATIC static
|
||||||
|
|
||||||
|
/* Define auxiliary functions declared in "printf-args.h". */
|
||||||
|
#include "printf-args.c"
|
||||||
|
|
||||||
|
/* Define auxiliary functions declared in "printf-parse.h". */
|
||||||
|
#include "printf-parse.c"
|
||||||
|
|
||||||
|
/* Define functions declared in "vasnprintf.h". */
|
||||||
|
#define vasnprintf libintl_vasnprintf
|
||||||
|
#include "vasnprintf.c"
|
||||||
|
#if 0 /* not needed */
|
||||||
|
#define asnprintf libintl_asnprintf
|
||||||
|
#include "asnprintf.c"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
DLL_EXPORTED
|
||||||
|
int
|
||||||
|
libintl_vfprintf (FILE *stream, const char *format, va_list args)
|
||||||
|
{
|
||||||
|
if (strchr (format, '$') == NULL)
|
||||||
|
return vfprintf (stream, format, args);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
size_t length;
|
||||||
|
char *result = libintl_vasnprintf (NULL, &length, format, args);
|
||||||
|
int retval = -1;
|
||||||
|
if (result != NULL)
|
||||||
|
{
|
||||||
|
if (fwrite (result, 1, length, stream) == length)
|
||||||
|
retval = length;
|
||||||
|
free (result);
|
||||||
|
}
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
DLL_EXPORTED
|
||||||
|
int
|
||||||
|
libintl_fprintf (FILE *stream, const char *format, ...)
|
||||||
|
{
|
||||||
|
va_list args;
|
||||||
|
int retval;
|
||||||
|
|
||||||
|
va_start (args, format);
|
||||||
|
retval = libintl_vfprintf (stream, format, args);
|
||||||
|
va_end (args);
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
DLL_EXPORTED
|
||||||
|
int
|
||||||
|
libintl_vprintf (const char *format, va_list args)
|
||||||
|
{
|
||||||
|
return libintl_vfprintf (stdout, format, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
DLL_EXPORTED
|
||||||
|
int
|
||||||
|
libintl_printf (const char *format, ...)
|
||||||
|
{
|
||||||
|
va_list args;
|
||||||
|
int retval;
|
||||||
|
|
||||||
|
va_start (args, format);
|
||||||
|
retval = libintl_vprintf (format, args);
|
||||||
|
va_end (args);
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
DLL_EXPORTED
|
||||||
|
int
|
||||||
|
libintl_vsprintf (char *resultbuf, const char *format, va_list args)
|
||||||
|
{
|
||||||
|
if (strchr (format, '$') == NULL)
|
||||||
|
return vsprintf (resultbuf, format, args);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
size_t length = (size_t) ~0 / (4 * sizeof (char));
|
||||||
|
char *result = libintl_vasnprintf (resultbuf, &length, format, args);
|
||||||
|
if (result != resultbuf)
|
||||||
|
{
|
||||||
|
free (result);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return length;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
DLL_EXPORTED
|
||||||
|
int
|
||||||
|
libintl_sprintf (char *resultbuf, const char *format, ...)
|
||||||
|
{
|
||||||
|
va_list args;
|
||||||
|
int retval;
|
||||||
|
|
||||||
|
va_start (args, format);
|
||||||
|
retval = libintl_vsprintf (resultbuf, format, args);
|
||||||
|
va_end (args);
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if HAVE_SNPRINTF
|
||||||
|
|
||||||
|
# if HAVE_DECL__SNPRINTF
|
||||||
|
/* Windows. */
|
||||||
|
# define system_vsnprintf _vsnprintf
|
||||||
|
# else
|
||||||
|
/* Unix. */
|
||||||
|
# define system_vsnprintf vsnprintf
|
||||||
|
# endif
|
||||||
|
|
||||||
|
DLL_EXPORTED
|
||||||
|
int
|
||||||
|
libintl_vsnprintf (char *resultbuf, size_t length, const char *format, va_list args)
|
||||||
|
{
|
||||||
|
if (strchr (format, '$') == NULL)
|
||||||
|
return system_vsnprintf (resultbuf, length, format, args);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
size_t maxlength = length;
|
||||||
|
char *result = libintl_vasnprintf (resultbuf, &length, format, args);
|
||||||
|
if (result != resultbuf)
|
||||||
|
{
|
||||||
|
if (maxlength > 0)
|
||||||
|
{
|
||||||
|
if (length < maxlength)
|
||||||
|
abort ();
|
||||||
|
memcpy (resultbuf, result, maxlength - 1);
|
||||||
|
resultbuf[maxlength - 1] = '\0';
|
||||||
|
}
|
||||||
|
free (result);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return length;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
DLL_EXPORTED
|
||||||
|
int
|
||||||
|
libintl_snprintf (char *resultbuf, size_t length, const char *format, ...)
|
||||||
|
{
|
||||||
|
va_list args;
|
||||||
|
int retval;
|
||||||
|
|
||||||
|
va_start (args, format);
|
||||||
|
retval = libintl_vsnprintf (resultbuf, length, format, args);
|
||||||
|
va_end (args);
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if HAVE_ASPRINTF
|
||||||
|
|
||||||
|
DLL_EXPORTED
|
||||||
|
int
|
||||||
|
libintl_vasprintf (char **resultp, const char *format, va_list args)
|
||||||
|
{
|
||||||
|
size_t length;
|
||||||
|
char *result = libintl_vasnprintf (NULL, &length, format, args);
|
||||||
|
if (result == NULL)
|
||||||
|
return -1;
|
||||||
|
*resultp = result;
|
||||||
|
return length;
|
||||||
|
}
|
||||||
|
|
||||||
|
DLL_EXPORTED
|
||||||
|
int
|
||||||
|
libintl_asprintf (char **resultp, const char *format, ...)
|
||||||
|
{
|
||||||
|
va_list args;
|
||||||
|
int retval;
|
||||||
|
|
||||||
|
va_start (args, format);
|
||||||
|
retval = libintl_vasprintf (resultp, format, args);
|
||||||
|
va_end (args);
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if HAVE_FWPRINTF
|
||||||
|
|
||||||
|
#include <wchar.h>
|
||||||
|
|
||||||
|
#define WIDE_CHAR_VERSION 1
|
||||||
|
|
||||||
|
/* Define auxiliary functions declared in "wprintf-parse.h". */
|
||||||
|
#include "printf-parse.c"
|
||||||
|
|
||||||
|
/* Define functions declared in "vasnprintf.h". */
|
||||||
|
#define vasnwprintf libintl_vasnwprintf
|
||||||
|
#include "vasnprintf.c"
|
||||||
|
#if 0 /* not needed */
|
||||||
|
#define asnwprintf libintl_asnwprintf
|
||||||
|
#include "asnprintf.c"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
# if HAVE_DECL__SNWPRINTF
|
||||||
|
/* Windows. */
|
||||||
|
# define system_vswprintf _vsnwprintf
|
||||||
|
# else
|
||||||
|
/* Unix. */
|
||||||
|
# define system_vswprintf vswprintf
|
||||||
|
# endif
|
||||||
|
|
||||||
|
DLL_EXPORTED
|
||||||
|
int
|
||||||
|
libintl_vfwprintf (FILE *stream, const wchar_t *format, va_list args)
|
||||||
|
{
|
||||||
|
if (wcschr (format, '$') == NULL)
|
||||||
|
return vfwprintf (stream, format, args);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
size_t length;
|
||||||
|
wchar_t *result = libintl_vasnwprintf (NULL, &length, format, args);
|
||||||
|
int retval = -1;
|
||||||
|
if (result != NULL)
|
||||||
|
{
|
||||||
|
size_t i;
|
||||||
|
for (i = 0; i < length; i++)
|
||||||
|
if (fputwc (result[i], stream) == WEOF)
|
||||||
|
break;
|
||||||
|
if (i == length)
|
||||||
|
retval = length;
|
||||||
|
free (result);
|
||||||
|
}
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
DLL_EXPORTED
|
||||||
|
int
|
||||||
|
libintl_fwprintf (FILE *stream, const wchar_t *format, ...)
|
||||||
|
{
|
||||||
|
va_list args;
|
||||||
|
int retval;
|
||||||
|
|
||||||
|
va_start (args, format);
|
||||||
|
retval = libintl_vfwprintf (stream, format, args);
|
||||||
|
va_end (args);
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
DLL_EXPORTED
|
||||||
|
int
|
||||||
|
libintl_vwprintf (const wchar_t *format, va_list args)
|
||||||
|
{
|
||||||
|
return libintl_vfwprintf (stdout, format, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
DLL_EXPORTED
|
||||||
|
int
|
||||||
|
libintl_wprintf (const wchar_t *format, ...)
|
||||||
|
{
|
||||||
|
va_list args;
|
||||||
|
int retval;
|
||||||
|
|
||||||
|
va_start (args, format);
|
||||||
|
retval = libintl_vwprintf (format, args);
|
||||||
|
va_end (args);
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
DLL_EXPORTED
|
||||||
|
int
|
||||||
|
libintl_vswprintf (wchar_t *resultbuf, size_t length, const wchar_t *format, va_list args)
|
||||||
|
{
|
||||||
|
if (wcschr (format, '$') == NULL)
|
||||||
|
return system_vswprintf (resultbuf, length, format, args);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
size_t maxlength = length;
|
||||||
|
wchar_t *result = libintl_vasnwprintf (resultbuf, &length, format, args);
|
||||||
|
if (result != resultbuf)
|
||||||
|
{
|
||||||
|
if (maxlength > 0)
|
||||||
|
{
|
||||||
|
if (length < maxlength)
|
||||||
|
abort ();
|
||||||
|
memcpy (resultbuf, result, (maxlength - 1) * sizeof (wchar_t));
|
||||||
|
resultbuf[maxlength - 1] = 0;
|
||||||
|
}
|
||||||
|
free (result);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return length;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
DLL_EXPORTED
|
||||||
|
int
|
||||||
|
libintl_swprintf (wchar_t *resultbuf, size_t length, const wchar_t *format, ...)
|
||||||
|
{
|
||||||
|
va_list args;
|
||||||
|
int retval;
|
||||||
|
|
||||||
|
va_start (args, format);
|
||||||
|
retval = libintl_vswprintf (resultbuf, length, format, args);
|
||||||
|
va_end (args);
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
@ -42,7 +42,12 @@
|
|||||||
#ifdef NO_XMALLOC
|
#ifdef NO_XMALLOC
|
||||||
# define xmalloc malloc
|
# define xmalloc malloc
|
||||||
#else
|
#else
|
||||||
# include "xmalloc.h"
|
# include "xalloc.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined _WIN32 || defined __WIN32__
|
||||||
|
# define WIN32_LEAN_AND_MEAN
|
||||||
|
# include <windows.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if DEPENDS_ON_LIBCHARSET
|
#if DEPENDS_ON_LIBCHARSET
|
||||||
@ -152,6 +157,8 @@ set_relocation_prefix (const char *orig_prefix_arg, const char *curr_prefix_arg)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if !defined IN_LIBRARY || (defined PIC && defined INSTALLDIR)
|
||||||
|
|
||||||
/* Convenience function:
|
/* Convenience function:
|
||||||
Computes the current installation prefix, based on the original
|
Computes the current installation prefix, based on the original
|
||||||
installation prefix, the original installation directory of a particular
|
installation prefix, the original installation directory of a particular
|
||||||
@ -266,6 +273,8 @@ compute_curr_prefix (const char *orig_installprefix,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif /* !IN_LIBRARY || PIC */
|
||||||
|
|
||||||
#if defined PIC && defined INSTALLDIR
|
#if defined PIC && defined INSTALLDIR
|
||||||
|
|
||||||
/* Full pathname of shared library, or NULL. */
|
/* Full pathname of shared library, or NULL. */
|
||||||
@ -304,7 +313,8 @@ DllMain (HINSTANCE module_handle, DWORD event, LPVOID reserved)
|
|||||||
static void
|
static void
|
||||||
find_shared_library_fullname ()
|
find_shared_library_fullname ()
|
||||||
{
|
{
|
||||||
#ifdef __linux__
|
#if defined __linux__ && __GLIBC__ >= 2
|
||||||
|
/* Linux has /proc/self/maps. glibc 2 has the getline() function. */
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
|
|
||||||
/* Open the current process' maps file. It describes one VMA per line. */
|
/* Open the current process' maps file. It describes one VMA per line. */
|
||||||
|
@ -20,6 +20,11 @@
|
|||||||
#ifndef _RELOCATABLE_H
|
#ifndef _RELOCATABLE_H
|
||||||
#define _RELOCATABLE_H
|
#define _RELOCATABLE_H
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* This can be enabled through the configure --enable-relocatable option. */
|
/* This can be enabled through the configure --enable-relocatable option. */
|
||||||
#if ENABLE_RELOCATABLE
|
#if ENABLE_RELOCATABLE
|
||||||
|
|
||||||
@ -64,4 +69,9 @@ extern const char * compute_curr_prefix (const char *orig_installprefix,
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif /* _RELOCATABLE_H */
|
#endif /* _RELOCATABLE_H */
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Implementation of the textdomain(3) function.
|
/* Implementation of the textdomain(3) function.
|
||||||
Copyright (C) 1995-1998, 2000, 2001, 2002 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
|
||||||
@ -77,8 +77,7 @@ __libc_rwlock_define (extern, _nl_state_lock attribute_hidden)
|
|||||||
If DOMAINNAME is null, return the current default.
|
If DOMAINNAME is null, return the current default.
|
||||||
If DOMAINNAME is "", reset to the default of "messages". */
|
If DOMAINNAME is "", reset to the default of "messages". */
|
||||||
char *
|
char *
|
||||||
TEXTDOMAIN (domainname)
|
TEXTDOMAIN (const char *domainname)
|
||||||
const char *domainname;
|
|
||||||
{
|
{
|
||||||
char *new_domain;
|
char *new_domain;
|
||||||
char *old_domain;
|
char *old_domain;
|
||||||
|
887
intl/vasnprintf.c
Normal file
887
intl/vasnprintf.c
Normal file
@ -0,0 +1,887 @@
|
|||||||
|
/* vsprintf with automatic memory allocation.
|
||||||
|
Copyright (C) 1999, 2002-2003 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU Library General Public License as published
|
||||||
|
by the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
USA. */
|
||||||
|
|
||||||
|
/* Tell glibc's <stdio.h> to provide a prototype for snprintf().
|
||||||
|
This must come before <config.h> because <config.h> may include
|
||||||
|
<features.h>, and once <features.h> has been included, it's too late. */
|
||||||
|
#ifndef _GNU_SOURCE
|
||||||
|
# define _GNU_SOURCE 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
# include <config.h>
|
||||||
|
#endif
|
||||||
|
#ifndef IN_LIBINTL
|
||||||
|
# include <alloca.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Specification. */
|
||||||
|
#if WIDE_CHAR_VERSION
|
||||||
|
# include "vasnwprintf.h"
|
||||||
|
#else
|
||||||
|
# include "vasnprintf.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <stdio.h> /* snprintf(), sprintf() */
|
||||||
|
#include <stdlib.h> /* abort(), malloc(), realloc(), free() */
|
||||||
|
#include <string.h> /* memcpy(), strlen() */
|
||||||
|
#include <errno.h> /* errno */
|
||||||
|
#include <limits.h> /* CHAR_BIT */
|
||||||
|
#include <float.h> /* DBL_MAX_EXP, LDBL_MAX_EXP */
|
||||||
|
#if WIDE_CHAR_VERSION
|
||||||
|
# include "wprintf-parse.h"
|
||||||
|
#else
|
||||||
|
# include "printf-parse.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Checked size_t computations. */
|
||||||
|
#include "xsize.h"
|
||||||
|
|
||||||
|
#ifdef HAVE_WCHAR_T
|
||||||
|
# ifdef HAVE_WCSLEN
|
||||||
|
# define local_wcslen wcslen
|
||||||
|
# else
|
||||||
|
/* Solaris 2.5.1 has wcslen() in a separate library libw.so. To avoid
|
||||||
|
a dependency towards this library, here is a local substitute.
|
||||||
|
Define this substitute only once, even if this file is included
|
||||||
|
twice in the same compilation unit. */
|
||||||
|
# ifndef local_wcslen_defined
|
||||||
|
# define local_wcslen_defined 1
|
||||||
|
static size_t
|
||||||
|
local_wcslen (const wchar_t *s)
|
||||||
|
{
|
||||||
|
const wchar_t *ptr;
|
||||||
|
|
||||||
|
for (ptr = s; *ptr != (wchar_t) 0; ptr++)
|
||||||
|
;
|
||||||
|
return ptr - s;
|
||||||
|
}
|
||||||
|
# endif
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if WIDE_CHAR_VERSION
|
||||||
|
# define VASNPRINTF vasnwprintf
|
||||||
|
# define CHAR_T wchar_t
|
||||||
|
# define DIRECTIVE wchar_t_directive
|
||||||
|
# define DIRECTIVES wchar_t_directives
|
||||||
|
# define PRINTF_PARSE wprintf_parse
|
||||||
|
# define USE_SNPRINTF 1
|
||||||
|
# if HAVE_DECL__SNWPRINTF
|
||||||
|
/* On Windows, the function swprintf() has a different signature than
|
||||||
|
on Unix; we use the _snwprintf() function instead. */
|
||||||
|
# define SNPRINTF _snwprintf
|
||||||
|
# else
|
||||||
|
/* Unix. */
|
||||||
|
# define SNPRINTF swprintf
|
||||||
|
# endif
|
||||||
|
#else
|
||||||
|
# define VASNPRINTF vasnprintf
|
||||||
|
# define CHAR_T char
|
||||||
|
# define DIRECTIVE char_directive
|
||||||
|
# define DIRECTIVES char_directives
|
||||||
|
# define PRINTF_PARSE printf_parse
|
||||||
|
# define USE_SNPRINTF (HAVE_DECL__SNPRINTF || HAVE_SNPRINTF)
|
||||||
|
# if HAVE_DECL__SNPRINTF
|
||||||
|
/* Windows. */
|
||||||
|
# define SNPRINTF _snprintf
|
||||||
|
# else
|
||||||
|
/* Unix. */
|
||||||
|
# define SNPRINTF snprintf
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
CHAR_T *
|
||||||
|
VASNPRINTF (CHAR_T *resultbuf, size_t *lengthp, const CHAR_T *format, va_list args)
|
||||||
|
{
|
||||||
|
DIRECTIVES d;
|
||||||
|
arguments a;
|
||||||
|
|
||||||
|
if (PRINTF_PARSE (format, &d, &a) < 0)
|
||||||
|
{
|
||||||
|
errno = EINVAL;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define CLEANUP() \
|
||||||
|
free (d.dir); \
|
||||||
|
if (a.arg) \
|
||||||
|
free (a.arg);
|
||||||
|
|
||||||
|
if (printf_fetchargs (args, &a) < 0)
|
||||||
|
{
|
||||||
|
CLEANUP ();
|
||||||
|
errno = EINVAL;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
size_t buf_neededlength;
|
||||||
|
CHAR_T *buf;
|
||||||
|
CHAR_T *buf_malloced;
|
||||||
|
const CHAR_T *cp;
|
||||||
|
size_t i;
|
||||||
|
DIRECTIVE *dp;
|
||||||
|
/* Output string accumulator. */
|
||||||
|
CHAR_T *result;
|
||||||
|
size_t allocated;
|
||||||
|
size_t length;
|
||||||
|
|
||||||
|
/* Allocate a small buffer that will hold a directive passed to
|
||||||
|
sprintf or snprintf. */
|
||||||
|
buf_neededlength =
|
||||||
|
xsum4 (7, d.max_width_length, d.max_precision_length, 6);
|
||||||
|
#if HAVE_ALLOCA
|
||||||
|
if (buf_neededlength < 4000 / sizeof (CHAR_T))
|
||||||
|
{
|
||||||
|
buf = (CHAR_T *) alloca (buf_neededlength * sizeof (CHAR_T));
|
||||||
|
buf_malloced = NULL;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
size_t buf_memsize = xtimes (buf_neededlength, sizeof (CHAR_T));
|
||||||
|
if (size_overflow_p (buf_memsize))
|
||||||
|
goto out_of_memory_1;
|
||||||
|
buf = (CHAR_T *) malloc (buf_memsize);
|
||||||
|
if (buf == NULL)
|
||||||
|
goto out_of_memory_1;
|
||||||
|
buf_malloced = buf;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (resultbuf != NULL)
|
||||||
|
{
|
||||||
|
result = resultbuf;
|
||||||
|
allocated = *lengthp;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result = NULL;
|
||||||
|
allocated = 0;
|
||||||
|
}
|
||||||
|
length = 0;
|
||||||
|
/* Invariants:
|
||||||
|
result is either == resultbuf or == NULL or malloc-allocated.
|
||||||
|
If length > 0, then result != NULL. */
|
||||||
|
|
||||||
|
/* Ensures that allocated >= needed. Aborts through a jump to
|
||||||
|
out_of_memory if needed is SIZE_MAX or otherwise too big. */
|
||||||
|
#define ENSURE_ALLOCATION(needed) \
|
||||||
|
if ((needed) > allocated) \
|
||||||
|
{ \
|
||||||
|
size_t memory_size; \
|
||||||
|
CHAR_T *memory; \
|
||||||
|
\
|
||||||
|
allocated = (allocated > 0 ? xtimes (allocated, 2) : 12); \
|
||||||
|
if ((needed) > allocated) \
|
||||||
|
allocated = (needed); \
|
||||||
|
memory_size = xtimes (allocated, sizeof (CHAR_T)); \
|
||||||
|
if (size_overflow_p (memory_size)) \
|
||||||
|
goto out_of_memory; \
|
||||||
|
if (result == resultbuf || result == NULL) \
|
||||||
|
memory = (CHAR_T *) malloc (memory_size); \
|
||||||
|
else \
|
||||||
|
memory = (CHAR_T *) realloc (result, memory_size); \
|
||||||
|
if (memory == NULL) \
|
||||||
|
goto out_of_memory; \
|
||||||
|
if (result == resultbuf && length > 0) \
|
||||||
|
memcpy (memory, result, length * sizeof (CHAR_T)); \
|
||||||
|
result = memory; \
|
||||||
|
}
|
||||||
|
|
||||||
|
for (cp = format, i = 0, dp = &d.dir[0]; ; cp = dp->dir_end, i++, dp++)
|
||||||
|
{
|
||||||
|
if (cp != dp->dir_start)
|
||||||
|
{
|
||||||
|
size_t n = dp->dir_start - cp;
|
||||||
|
size_t augmented_length = xsum (length, n);
|
||||||
|
|
||||||
|
ENSURE_ALLOCATION (augmented_length);
|
||||||
|
memcpy (result + length, cp, n * sizeof (CHAR_T));
|
||||||
|
length = augmented_length;
|
||||||
|
}
|
||||||
|
if (i == d.count)
|
||||||
|
break;
|
||||||
|
|
||||||
|
/* Execute a single directive. */
|
||||||
|
if (dp->conversion == '%')
|
||||||
|
{
|
||||||
|
size_t augmented_length;
|
||||||
|
|
||||||
|
if (!(dp->arg_index == ARG_NONE))
|
||||||
|
abort ();
|
||||||
|
augmented_length = xsum (length, 1);
|
||||||
|
ENSURE_ALLOCATION (augmented_length);
|
||||||
|
result[length] = '%';
|
||||||
|
length = augmented_length;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!(dp->arg_index != ARG_NONE))
|
||||||
|
abort ();
|
||||||
|
|
||||||
|
if (dp->conversion == 'n')
|
||||||
|
{
|
||||||
|
switch (a.arg[dp->arg_index].type)
|
||||||
|
{
|
||||||
|
case TYPE_COUNT_SCHAR_POINTER:
|
||||||
|
*a.arg[dp->arg_index].a.a_count_schar_pointer = length;
|
||||||
|
break;
|
||||||
|
case TYPE_COUNT_SHORT_POINTER:
|
||||||
|
*a.arg[dp->arg_index].a.a_count_short_pointer = length;
|
||||||
|
break;
|
||||||
|
case TYPE_COUNT_INT_POINTER:
|
||||||
|
*a.arg[dp->arg_index].a.a_count_int_pointer = length;
|
||||||
|
break;
|
||||||
|
case TYPE_COUNT_LONGINT_POINTER:
|
||||||
|
*a.arg[dp->arg_index].a.a_count_longint_pointer = length;
|
||||||
|
break;
|
||||||
|
#ifdef HAVE_LONG_LONG
|
||||||
|
case TYPE_COUNT_LONGLONGINT_POINTER:
|
||||||
|
*a.arg[dp->arg_index].a.a_count_longlongint_pointer = length;
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
default:
|
||||||
|
abort ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
arg_type type = a.arg[dp->arg_index].type;
|
||||||
|
CHAR_T *p;
|
||||||
|
unsigned int prefix_count;
|
||||||
|
int prefixes[2];
|
||||||
|
#if !USE_SNPRINTF
|
||||||
|
size_t tmp_length;
|
||||||
|
CHAR_T tmpbuf[700];
|
||||||
|
CHAR_T *tmp;
|
||||||
|
|
||||||
|
/* Allocate a temporary buffer of sufficient size for calling
|
||||||
|
sprintf. */
|
||||||
|
{
|
||||||
|
size_t width;
|
||||||
|
size_t precision;
|
||||||
|
|
||||||
|
width = 0;
|
||||||
|
if (dp->width_start != dp->width_end)
|
||||||
|
{
|
||||||
|
if (dp->width_arg_index != ARG_NONE)
|
||||||
|
{
|
||||||
|
int arg;
|
||||||
|
|
||||||
|
if (!(a.arg[dp->width_arg_index].type == TYPE_INT))
|
||||||
|
abort ();
|
||||||
|
arg = a.arg[dp->width_arg_index].a.a_int;
|
||||||
|
width = (arg < 0 ? (unsigned int) (-arg) : arg);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
const CHAR_T *digitp = dp->width_start;
|
||||||
|
|
||||||
|
do
|
||||||
|
width = xsum (xtimes (width, 10), *digitp++ - '0');
|
||||||
|
while (digitp != dp->width_end);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
precision = 6;
|
||||||
|
if (dp->precision_start != dp->precision_end)
|
||||||
|
{
|
||||||
|
if (dp->precision_arg_index != ARG_NONE)
|
||||||
|
{
|
||||||
|
int arg;
|
||||||
|
|
||||||
|
if (!(a.arg[dp->precision_arg_index].type == TYPE_INT))
|
||||||
|
abort ();
|
||||||
|
arg = a.arg[dp->precision_arg_index].a.a_int;
|
||||||
|
precision = (arg < 0 ? 0 : arg);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
const CHAR_T *digitp = dp->precision_start + 1;
|
||||||
|
|
||||||
|
precision = 0;
|
||||||
|
do
|
||||||
|
precision = xsum (xtimes (precision, 10), *digitp++ - '0');
|
||||||
|
while (digitp != dp->precision_end);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (dp->conversion)
|
||||||
|
{
|
||||||
|
|
||||||
|
case 'd': case 'i': case 'u':
|
||||||
|
# ifdef HAVE_LONG_LONG
|
||||||
|
if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT)
|
||||||
|
tmp_length =
|
||||||
|
(unsigned int) (sizeof (unsigned long long) * CHAR_BIT
|
||||||
|
* 0.30103 /* binary -> decimal */
|
||||||
|
* 2 /* estimate for FLAG_GROUP */
|
||||||
|
)
|
||||||
|
+ 1 /* turn floor into ceil */
|
||||||
|
+ 1; /* account for leading sign */
|
||||||
|
else
|
||||||
|
# endif
|
||||||
|
if (type == TYPE_LONGINT || type == TYPE_ULONGINT)
|
||||||
|
tmp_length =
|
||||||
|
(unsigned int) (sizeof (unsigned long) * CHAR_BIT
|
||||||
|
* 0.30103 /* binary -> decimal */
|
||||||
|
* 2 /* estimate for FLAG_GROUP */
|
||||||
|
)
|
||||||
|
+ 1 /* turn floor into ceil */
|
||||||
|
+ 1; /* account for leading sign */
|
||||||
|
else
|
||||||
|
tmp_length =
|
||||||
|
(unsigned int) (sizeof (unsigned int) * CHAR_BIT
|
||||||
|
* 0.30103 /* binary -> decimal */
|
||||||
|
* 2 /* estimate for FLAG_GROUP */
|
||||||
|
)
|
||||||
|
+ 1 /* turn floor into ceil */
|
||||||
|
+ 1; /* account for leading sign */
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'o':
|
||||||
|
# ifdef HAVE_LONG_LONG
|
||||||
|
if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT)
|
||||||
|
tmp_length =
|
||||||
|
(unsigned int) (sizeof (unsigned long long) * CHAR_BIT
|
||||||
|
* 0.333334 /* binary -> octal */
|
||||||
|
)
|
||||||
|
+ 1 /* turn floor into ceil */
|
||||||
|
+ 1; /* account for leading sign */
|
||||||
|
else
|
||||||
|
# endif
|
||||||
|
if (type == TYPE_LONGINT || type == TYPE_ULONGINT)
|
||||||
|
tmp_length =
|
||||||
|
(unsigned int) (sizeof (unsigned long) * CHAR_BIT
|
||||||
|
* 0.333334 /* binary -> octal */
|
||||||
|
)
|
||||||
|
+ 1 /* turn floor into ceil */
|
||||||
|
+ 1; /* account for leading sign */
|
||||||
|
else
|
||||||
|
tmp_length =
|
||||||
|
(unsigned int) (sizeof (unsigned int) * CHAR_BIT
|
||||||
|
* 0.333334 /* binary -> octal */
|
||||||
|
)
|
||||||
|
+ 1 /* turn floor into ceil */
|
||||||
|
+ 1; /* account for leading sign */
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'x': case 'X':
|
||||||
|
# ifdef HAVE_LONG_LONG
|
||||||
|
if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT)
|
||||||
|
tmp_length =
|
||||||
|
(unsigned int) (sizeof (unsigned long long) * CHAR_BIT
|
||||||
|
* 0.25 /* binary -> hexadecimal */
|
||||||
|
)
|
||||||
|
+ 1 /* turn floor into ceil */
|
||||||
|
+ 2; /* account for leading sign or alternate form */
|
||||||
|
else
|
||||||
|
# endif
|
||||||
|
if (type == TYPE_LONGINT || type == TYPE_ULONGINT)
|
||||||
|
tmp_length =
|
||||||
|
(unsigned int) (sizeof (unsigned long) * CHAR_BIT
|
||||||
|
* 0.25 /* binary -> hexadecimal */
|
||||||
|
)
|
||||||
|
+ 1 /* turn floor into ceil */
|
||||||
|
+ 2; /* account for leading sign or alternate form */
|
||||||
|
else
|
||||||
|
tmp_length =
|
||||||
|
(unsigned int) (sizeof (unsigned int) * CHAR_BIT
|
||||||
|
* 0.25 /* binary -> hexadecimal */
|
||||||
|
)
|
||||||
|
+ 1 /* turn floor into ceil */
|
||||||
|
+ 2; /* account for leading sign or alternate form */
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'f': case 'F':
|
||||||
|
# ifdef HAVE_LONG_DOUBLE
|
||||||
|
if (type == TYPE_LONGDOUBLE)
|
||||||
|
tmp_length =
|
||||||
|
(unsigned int) (LDBL_MAX_EXP
|
||||||
|
* 0.30103 /* binary -> decimal */
|
||||||
|
* 2 /* estimate for FLAG_GROUP */
|
||||||
|
)
|
||||||
|
+ 1 /* turn floor into ceil */
|
||||||
|
+ 10; /* sign, decimal point etc. */
|
||||||
|
else
|
||||||
|
# endif
|
||||||
|
tmp_length =
|
||||||
|
(unsigned int) (DBL_MAX_EXP
|
||||||
|
* 0.30103 /* binary -> decimal */
|
||||||
|
* 2 /* estimate for FLAG_GROUP */
|
||||||
|
)
|
||||||
|
+ 1 /* turn floor into ceil */
|
||||||
|
+ 10; /* sign, decimal point etc. */
|
||||||
|
tmp_length = xsum (tmp_length, precision);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'e': case 'E': case 'g': case 'G':
|
||||||
|
case 'a': case 'A':
|
||||||
|
tmp_length =
|
||||||
|
12; /* sign, decimal point, exponent etc. */
|
||||||
|
tmp_length = xsum (tmp_length, precision);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'c':
|
||||||
|
# if defined HAVE_WINT_T && !WIDE_CHAR_VERSION
|
||||||
|
if (type == TYPE_WIDE_CHAR)
|
||||||
|
tmp_length = MB_CUR_MAX;
|
||||||
|
else
|
||||||
|
# endif
|
||||||
|
tmp_length = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 's':
|
||||||
|
# ifdef HAVE_WCHAR_T
|
||||||
|
if (type == TYPE_WIDE_STRING)
|
||||||
|
{
|
||||||
|
tmp_length =
|
||||||
|
local_wcslen (a.arg[dp->arg_index].a.a_wide_string);
|
||||||
|
|
||||||
|
# if !WIDE_CHAR_VERSION
|
||||||
|
tmp_length = xtimes (tmp_length, MB_CUR_MAX);
|
||||||
|
# endif
|
||||||
|
}
|
||||||
|
else
|
||||||
|
# endif
|
||||||
|
tmp_length = strlen (a.arg[dp->arg_index].a.a_string);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'p':
|
||||||
|
tmp_length =
|
||||||
|
(unsigned int) (sizeof (void *) * CHAR_BIT
|
||||||
|
* 0.25 /* binary -> hexadecimal */
|
||||||
|
)
|
||||||
|
+ 1 /* turn floor into ceil */
|
||||||
|
+ 2; /* account for leading 0x */
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
abort ();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tmp_length < width)
|
||||||
|
tmp_length = width;
|
||||||
|
|
||||||
|
tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tmp_length <= sizeof (tmpbuf) / sizeof (CHAR_T))
|
||||||
|
tmp = tmpbuf;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
size_t tmp_memsize = xtimes (tmp_length, sizeof (CHAR_T));
|
||||||
|
|
||||||
|
if (size_overflow_p (tmp_memsize))
|
||||||
|
/* Overflow, would lead to out of memory. */
|
||||||
|
goto out_of_memory;
|
||||||
|
tmp = (CHAR_T *) malloc (tmp_memsize);
|
||||||
|
if (tmp == NULL)
|
||||||
|
/* Out of memory. */
|
||||||
|
goto out_of_memory;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Construct the format string for calling snprintf or
|
||||||
|
sprintf. */
|
||||||
|
p = buf;
|
||||||
|
*p++ = '%';
|
||||||
|
if (dp->flags & FLAG_GROUP)
|
||||||
|
*p++ = '\'';
|
||||||
|
if (dp->flags & FLAG_LEFT)
|
||||||
|
*p++ = '-';
|
||||||
|
if (dp->flags & FLAG_SHOWSIGN)
|
||||||
|
*p++ = '+';
|
||||||
|
if (dp->flags & FLAG_SPACE)
|
||||||
|
*p++ = ' ';
|
||||||
|
if (dp->flags & FLAG_ALT)
|
||||||
|
*p++ = '#';
|
||||||
|
if (dp->flags & FLAG_ZERO)
|
||||||
|
*p++ = '0';
|
||||||
|
if (dp->width_start != dp->width_end)
|
||||||
|
{
|
||||||
|
size_t n = dp->width_end - dp->width_start;
|
||||||
|
memcpy (p, dp->width_start, n * sizeof (CHAR_T));
|
||||||
|
p += n;
|
||||||
|
}
|
||||||
|
if (dp->precision_start != dp->precision_end)
|
||||||
|
{
|
||||||
|
size_t n = dp->precision_end - dp->precision_start;
|
||||||
|
memcpy (p, dp->precision_start, n * sizeof (CHAR_T));
|
||||||
|
p += n;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (type)
|
||||||
|
{
|
||||||
|
#ifdef HAVE_LONG_LONG
|
||||||
|
case TYPE_LONGLONGINT:
|
||||||
|
case TYPE_ULONGLONGINT:
|
||||||
|
*p++ = 'l';
|
||||||
|
/*FALLTHROUGH*/
|
||||||
|
#endif
|
||||||
|
case TYPE_LONGINT:
|
||||||
|
case TYPE_ULONGINT:
|
||||||
|
#ifdef HAVE_WINT_T
|
||||||
|
case TYPE_WIDE_CHAR:
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_WCHAR_T
|
||||||
|
case TYPE_WIDE_STRING:
|
||||||
|
#endif
|
||||||
|
*p++ = 'l';
|
||||||
|
break;
|
||||||
|
#ifdef HAVE_LONG_DOUBLE
|
||||||
|
case TYPE_LONGDOUBLE:
|
||||||
|
*p++ = 'L';
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
*p = dp->conversion;
|
||||||
|
#if USE_SNPRINTF
|
||||||
|
p[1] = '%';
|
||||||
|
p[2] = 'n';
|
||||||
|
p[3] = '\0';
|
||||||
|
#else
|
||||||
|
p[1] = '\0';
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Construct the arguments for calling snprintf or sprintf. */
|
||||||
|
prefix_count = 0;
|
||||||
|
if (dp->width_arg_index != ARG_NONE)
|
||||||
|
{
|
||||||
|
if (!(a.arg[dp->width_arg_index].type == TYPE_INT))
|
||||||
|
abort ();
|
||||||
|
prefixes[prefix_count++] = a.arg[dp->width_arg_index].a.a_int;
|
||||||
|
}
|
||||||
|
if (dp->precision_arg_index != ARG_NONE)
|
||||||
|
{
|
||||||
|
if (!(a.arg[dp->precision_arg_index].type == TYPE_INT))
|
||||||
|
abort ();
|
||||||
|
prefixes[prefix_count++] = a.arg[dp->precision_arg_index].a.a_int;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if USE_SNPRINTF
|
||||||
|
/* Prepare checking whether snprintf returns the count
|
||||||
|
via %n. */
|
||||||
|
ENSURE_ALLOCATION (xsum (length, 1));
|
||||||
|
result[length] = '\0';
|
||||||
|
#endif
|
||||||
|
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
size_t maxlen;
|
||||||
|
int count;
|
||||||
|
int retcount;
|
||||||
|
|
||||||
|
maxlen = allocated - length;
|
||||||
|
count = -1;
|
||||||
|
retcount = 0;
|
||||||
|
|
||||||
|
#if USE_SNPRINTF
|
||||||
|
# define SNPRINTF_BUF(arg) \
|
||||||
|
switch (prefix_count) \
|
||||||
|
{ \
|
||||||
|
case 0: \
|
||||||
|
retcount = SNPRINTF (result + length, maxlen, buf, \
|
||||||
|
arg, &count); \
|
||||||
|
break; \
|
||||||
|
case 1: \
|
||||||
|
retcount = SNPRINTF (result + length, maxlen, buf, \
|
||||||
|
prefixes[0], arg, &count); \
|
||||||
|
break; \
|
||||||
|
case 2: \
|
||||||
|
retcount = SNPRINTF (result + length, maxlen, buf, \
|
||||||
|
prefixes[0], prefixes[1], arg, \
|
||||||
|
&count); \
|
||||||
|
break; \
|
||||||
|
default: \
|
||||||
|
abort (); \
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
# define SNPRINTF_BUF(arg) \
|
||||||
|
switch (prefix_count) \
|
||||||
|
{ \
|
||||||
|
case 0: \
|
||||||
|
count = sprintf (tmp, buf, arg); \
|
||||||
|
break; \
|
||||||
|
case 1: \
|
||||||
|
count = sprintf (tmp, buf, prefixes[0], arg); \
|
||||||
|
break; \
|
||||||
|
case 2: \
|
||||||
|
count = sprintf (tmp, buf, prefixes[0], prefixes[1],\
|
||||||
|
arg); \
|
||||||
|
break; \
|
||||||
|
default: \
|
||||||
|
abort (); \
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
switch (type)
|
||||||
|
{
|
||||||
|
case TYPE_SCHAR:
|
||||||
|
{
|
||||||
|
int arg = a.arg[dp->arg_index].a.a_schar;
|
||||||
|
SNPRINTF_BUF (arg);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case TYPE_UCHAR:
|
||||||
|
{
|
||||||
|
unsigned int arg = a.arg[dp->arg_index].a.a_uchar;
|
||||||
|
SNPRINTF_BUF (arg);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case TYPE_SHORT:
|
||||||
|
{
|
||||||
|
int arg = a.arg[dp->arg_index].a.a_short;
|
||||||
|
SNPRINTF_BUF (arg);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case TYPE_USHORT:
|
||||||
|
{
|
||||||
|
unsigned int arg = a.arg[dp->arg_index].a.a_ushort;
|
||||||
|
SNPRINTF_BUF (arg);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case TYPE_INT:
|
||||||
|
{
|
||||||
|
int arg = a.arg[dp->arg_index].a.a_int;
|
||||||
|
SNPRINTF_BUF (arg);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case TYPE_UINT:
|
||||||
|
{
|
||||||
|
unsigned int arg = a.arg[dp->arg_index].a.a_uint;
|
||||||
|
SNPRINTF_BUF (arg);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case TYPE_LONGINT:
|
||||||
|
{
|
||||||
|
long int arg = a.arg[dp->arg_index].a.a_longint;
|
||||||
|
SNPRINTF_BUF (arg);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case TYPE_ULONGINT:
|
||||||
|
{
|
||||||
|
unsigned long int arg = a.arg[dp->arg_index].a.a_ulongint;
|
||||||
|
SNPRINTF_BUF (arg);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
#ifdef HAVE_LONG_LONG
|
||||||
|
case TYPE_LONGLONGINT:
|
||||||
|
{
|
||||||
|
long long int arg = a.arg[dp->arg_index].a.a_longlongint;
|
||||||
|
SNPRINTF_BUF (arg);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case TYPE_ULONGLONGINT:
|
||||||
|
{
|
||||||
|
unsigned long long int arg = a.arg[dp->arg_index].a.a_ulonglongint;
|
||||||
|
SNPRINTF_BUF (arg);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
case TYPE_DOUBLE:
|
||||||
|
{
|
||||||
|
double arg = a.arg[dp->arg_index].a.a_double;
|
||||||
|
SNPRINTF_BUF (arg);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
#ifdef HAVE_LONG_DOUBLE
|
||||||
|
case TYPE_LONGDOUBLE:
|
||||||
|
{
|
||||||
|
long double arg = a.arg[dp->arg_index].a.a_longdouble;
|
||||||
|
SNPRINTF_BUF (arg);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
case TYPE_CHAR:
|
||||||
|
{
|
||||||
|
int arg = a.arg[dp->arg_index].a.a_char;
|
||||||
|
SNPRINTF_BUF (arg);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
#ifdef HAVE_WINT_T
|
||||||
|
case TYPE_WIDE_CHAR:
|
||||||
|
{
|
||||||
|
wint_t arg = a.arg[dp->arg_index].a.a_wide_char;
|
||||||
|
SNPRINTF_BUF (arg);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
case TYPE_STRING:
|
||||||
|
{
|
||||||
|
const char *arg = a.arg[dp->arg_index].a.a_string;
|
||||||
|
SNPRINTF_BUF (arg);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
#ifdef HAVE_WCHAR_T
|
||||||
|
case TYPE_WIDE_STRING:
|
||||||
|
{
|
||||||
|
const wchar_t *arg = a.arg[dp->arg_index].a.a_wide_string;
|
||||||
|
SNPRINTF_BUF (arg);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
case TYPE_POINTER:
|
||||||
|
{
|
||||||
|
void *arg = a.arg[dp->arg_index].a.a_pointer;
|
||||||
|
SNPRINTF_BUF (arg);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
abort ();
|
||||||
|
}
|
||||||
|
|
||||||
|
#if USE_SNPRINTF
|
||||||
|
/* Portability: Not all implementations of snprintf()
|
||||||
|
are ISO C 99 compliant. Determine the number of
|
||||||
|
bytes that snprintf() has produced or would have
|
||||||
|
produced. */
|
||||||
|
if (count >= 0)
|
||||||
|
{
|
||||||
|
/* Verify that snprintf() has NUL-terminated its
|
||||||
|
result. */
|
||||||
|
if (count < maxlen && result[length + count] != '\0')
|
||||||
|
abort ();
|
||||||
|
/* Portability hack. */
|
||||||
|
if (retcount > count)
|
||||||
|
count = retcount;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* snprintf() doesn't understand the '%n'
|
||||||
|
directive. */
|
||||||
|
if (p[1] != '\0')
|
||||||
|
{
|
||||||
|
/* Don't use the '%n' directive; instead, look
|
||||||
|
at the snprintf() return value. */
|
||||||
|
p[1] = '\0';
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Look at the snprintf() return value. */
|
||||||
|
if (retcount < 0)
|
||||||
|
{
|
||||||
|
/* HP-UX 10.20 snprintf() is doubly deficient:
|
||||||
|
It doesn't understand the '%n' directive,
|
||||||
|
*and* it returns -1 (rather than the length
|
||||||
|
that would have been required) when the
|
||||||
|
buffer is too small. */
|
||||||
|
size_t bigger_need =
|
||||||
|
xsum (xtimes (allocated, 2), 12);
|
||||||
|
ENSURE_ALLOCATION (bigger_need);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
count = retcount;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Attempt to handle failure. */
|
||||||
|
if (count < 0)
|
||||||
|
{
|
||||||
|
if (!(result == resultbuf || result == NULL))
|
||||||
|
free (result);
|
||||||
|
if (buf_malloced != NULL)
|
||||||
|
free (buf_malloced);
|
||||||
|
CLEANUP ();
|
||||||
|
errno = EINVAL;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if !USE_SNPRINTF
|
||||||
|
if (count >= tmp_length)
|
||||||
|
/* tmp_length was incorrectly calculated - fix the
|
||||||
|
code above! */
|
||||||
|
abort ();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Make room for the result. */
|
||||||
|
if (count >= maxlen)
|
||||||
|
{
|
||||||
|
/* Need at least count bytes. But allocate
|
||||||
|
proportionally, to avoid looping eternally if
|
||||||
|
snprintf() reports a too small count. */
|
||||||
|
size_t n =
|
||||||
|
xmax (xsum (length, count), xtimes (allocated, 2));
|
||||||
|
|
||||||
|
ENSURE_ALLOCATION (n);
|
||||||
|
#if USE_SNPRINTF
|
||||||
|
continue;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#if USE_SNPRINTF
|
||||||
|
/* The snprintf() result did fit. */
|
||||||
|
#else
|
||||||
|
/* Append the sprintf() result. */
|
||||||
|
memcpy (result + length, tmp, count * sizeof (CHAR_T));
|
||||||
|
if (tmp != tmpbuf)
|
||||||
|
free (tmp);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
length += count;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Add the final NUL. */
|
||||||
|
ENSURE_ALLOCATION (xsum (length, 1));
|
||||||
|
result[length] = '\0';
|
||||||
|
|
||||||
|
if (result != resultbuf && length + 1 < allocated)
|
||||||
|
{
|
||||||
|
/* Shrink the allocated memory if possible. */
|
||||||
|
CHAR_T *memory;
|
||||||
|
|
||||||
|
memory = (CHAR_T *) realloc (result, (length + 1) * sizeof (CHAR_T));
|
||||||
|
if (memory != NULL)
|
||||||
|
result = memory;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (buf_malloced != NULL)
|
||||||
|
free (buf_malloced);
|
||||||
|
CLEANUP ();
|
||||||
|
*lengthp = length;
|
||||||
|
return result;
|
||||||
|
|
||||||
|
out_of_memory:
|
||||||
|
if (!(result == resultbuf || result == NULL))
|
||||||
|
free (result);
|
||||||
|
if (buf_malloced != NULL)
|
||||||
|
free (buf_malloced);
|
||||||
|
out_of_memory_1:
|
||||||
|
CLEANUP ();
|
||||||
|
errno = ENOMEM;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#undef SNPRINTF
|
||||||
|
#undef USE_SNPRINTF
|
||||||
|
#undef PRINTF_PARSE
|
||||||
|
#undef DIRECTIVES
|
||||||
|
#undef DIRECTIVE
|
||||||
|
#undef CHAR_T
|
||||||
|
#undef VASNPRINTF
|
61
intl/vasnprintf.h
Normal file
61
intl/vasnprintf.h
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
/* vsprintf with automatic memory allocation.
|
||||||
|
Copyright (C) 2002-2003 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU Library General Public License as published
|
||||||
|
by the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
USA. */
|
||||||
|
|
||||||
|
#ifndef _VASNPRINTF_H
|
||||||
|
#define _VASNPRINTF_H
|
||||||
|
|
||||||
|
/* Get va_list. */
|
||||||
|
#include <stdarg.h>
|
||||||
|
|
||||||
|
/* Get size_t. */
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
|
#ifndef __attribute__
|
||||||
|
/* This feature is available in gcc versions 2.5 and later. */
|
||||||
|
# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || __STRICT_ANSI__
|
||||||
|
# define __attribute__(Spec) /* empty */
|
||||||
|
# endif
|
||||||
|
/* The __-protected variants of `format' and `printf' attributes
|
||||||
|
are accepted by gcc versions 2.6.4 (effectively 2.7) and later. */
|
||||||
|
# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7)
|
||||||
|
# define __format__ format
|
||||||
|
# define __printf__ printf
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Write formatted output to a string dynamically allocated with malloc().
|
||||||
|
You can pass a preallocated buffer for the result in RESULTBUF and its
|
||||||
|
size in *LENGTHP; otherwise you pass RESULTBUF = NULL.
|
||||||
|
If successful, return the address of the string (this may be = RESULTBUF
|
||||||
|
if no dynamic memory allocation was necessary) and set *LENGTHP to the
|
||||||
|
number of resulting bytes, excluding the trailing NUL. Upon error, set
|
||||||
|
errno and return NULL. */
|
||||||
|
extern char * asnprintf (char *resultbuf, size_t *lengthp, const char *format, ...)
|
||||||
|
__attribute__ ((__format__ (__printf__, 3, 4)));
|
||||||
|
extern char * vasnprintf (char *resultbuf, size_t *lengthp, const char *format, va_list args)
|
||||||
|
__attribute__ ((__format__ (__printf__, 3, 0)));
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* _VASNPRINTF_H */
|
46
intl/vasnwprintf.h
Normal file
46
intl/vasnwprintf.h
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
/* vswprintf with automatic memory allocation.
|
||||||
|
Copyright (C) 2002-2003 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU Library General Public License as published
|
||||||
|
by the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
USA. */
|
||||||
|
|
||||||
|
#ifndef _VASNWPRINTF_H
|
||||||
|
#define _VASNWPRINTF_H
|
||||||
|
|
||||||
|
/* Get va_list. */
|
||||||
|
#include <stdarg.h>
|
||||||
|
|
||||||
|
/* Get wchar_t, size_t. */
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Write formatted output to a string dynamically allocated with malloc().
|
||||||
|
You can pass a preallocated buffer for the result in RESULTBUF and its
|
||||||
|
size in *LENGTHP; otherwise you pass RESULTBUF = NULL.
|
||||||
|
If successful, return the address of the string (this may be = RESULTBUF
|
||||||
|
if no dynamic memory allocation was necessary) and set *LENGTHP to the
|
||||||
|
number of resulting bytes, excluding the trailing NUL. Upon error, set
|
||||||
|
errno and return NULL. */
|
||||||
|
extern wchar_t * asnwprintf (wchar_t *resultbuf, size_t *lengthp, const wchar_t *format, ...);
|
||||||
|
extern wchar_t * vasnwprintf (wchar_t *resultbuf, size_t *lengthp, const wchar_t *format, va_list args);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* _VASNWPRINTF_H */
|
75
intl/wprintf-parse.h
Normal file
75
intl/wprintf-parse.h
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
/* Parse printf format string.
|
||||||
|
Copyright (C) 1999, 2002-2003 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU Library General Public License as published
|
||||||
|
by the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
USA. */
|
||||||
|
|
||||||
|
#ifndef _WPRINTF_PARSE_H
|
||||||
|
#define _WPRINTF_PARSE_H
|
||||||
|
|
||||||
|
#include "printf-args.h"
|
||||||
|
|
||||||
|
|
||||||
|
/* Flags */
|
||||||
|
#define FLAG_GROUP 1 /* ' flag */
|
||||||
|
#define FLAG_LEFT 2 /* - flag */
|
||||||
|
#define FLAG_SHOWSIGN 4 /* + flag */
|
||||||
|
#define FLAG_SPACE 8 /* space flag */
|
||||||
|
#define FLAG_ALT 16 /* # flag */
|
||||||
|
#define FLAG_ZERO 32
|
||||||
|
|
||||||
|
/* arg_index value indicating that no argument is consumed. */
|
||||||
|
#define ARG_NONE (~(size_t)0)
|
||||||
|
|
||||||
|
/* A parsed directive. */
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
const wchar_t* dir_start;
|
||||||
|
const wchar_t* dir_end;
|
||||||
|
int flags;
|
||||||
|
const wchar_t* width_start;
|
||||||
|
const wchar_t* width_end;
|
||||||
|
size_t width_arg_index;
|
||||||
|
const wchar_t* precision_start;
|
||||||
|
const wchar_t* precision_end;
|
||||||
|
size_t precision_arg_index;
|
||||||
|
wchar_t conversion; /* d i o u x X f e E g G c s p n U % but not C S */
|
||||||
|
size_t arg_index;
|
||||||
|
}
|
||||||
|
wchar_t_directive;
|
||||||
|
|
||||||
|
/* A parsed format string. */
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
size_t count;
|
||||||
|
wchar_t_directive *dir;
|
||||||
|
size_t max_width_length;
|
||||||
|
size_t max_precision_length;
|
||||||
|
}
|
||||||
|
wchar_t_directives;
|
||||||
|
|
||||||
|
|
||||||
|
/* Parses the format string. Fills in the number N of directives, and fills
|
||||||
|
in directives[0], ..., directives[N-1], and sets directives[N].dir_start
|
||||||
|
to the end of the format string. Also fills in the arg_type fields of the
|
||||||
|
arguments and the needed count of arguments. */
|
||||||
|
#ifdef STATIC
|
||||||
|
STATIC
|
||||||
|
#else
|
||||||
|
extern
|
||||||
|
#endif
|
||||||
|
int wprintf_parse (const wchar_t *format, wchar_t_directives *d, arguments *a);
|
||||||
|
|
||||||
|
#endif /* _WPRINTF_PARSE_H */
|
109
intl/xsize.h
Normal file
109
intl/xsize.h
Normal file
@ -0,0 +1,109 @@
|
|||||||
|
/* xsize.h -- Checked size_t computations.
|
||||||
|
|
||||||
|
Copyright (C) 2003 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU Library General Public License as published
|
||||||
|
by the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
USA. */
|
||||||
|
|
||||||
|
#ifndef _XSIZE_H
|
||||||
|
#define _XSIZE_H
|
||||||
|
|
||||||
|
/* Get size_t. */
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
|
/* Get SIZE_MAX. */
|
||||||
|
#include <limits.h>
|
||||||
|
#if HAVE_STDINT_H
|
||||||
|
# include <stdint.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* The size of memory objects is often computed through expressions of
|
||||||
|
type size_t. Example:
|
||||||
|
void* p = malloc (header_size + n * element_size).
|
||||||
|
These computations can lead to overflow. When this happens, malloc()
|
||||||
|
returns a piece of memory that is way too small, and the program then
|
||||||
|
crashes while attempting to fill the memory.
|
||||||
|
To avoid this, the functions and macros in this file check for overflow.
|
||||||
|
The convention is that SIZE_MAX represents overflow.
|
||||||
|
malloc (SIZE_MAX) is not guaranteed to fail -- think of a malloc
|
||||||
|
implementation that uses mmap --, it's recommended to use size_overflow_p()
|
||||||
|
or size_in_bounds_p() before invoking malloc().
|
||||||
|
The example thus becomes:
|
||||||
|
size_t size = xsum (header_size, xtimes (n, element_size));
|
||||||
|
void *p = (size_in_bounds_p (size) ? malloc (size) : NULL);
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Convert an arbitrary value >= 0 to type size_t. */
|
||||||
|
#define xcast_size_t(N) \
|
||||||
|
((N) <= SIZE_MAX ? (size_t) (N) : SIZE_MAX)
|
||||||
|
|
||||||
|
/* Sum of two sizes, with overflow check. */
|
||||||
|
static inline size_t
|
||||||
|
#if __GNUC__ >= 3
|
||||||
|
__attribute__ ((__pure__))
|
||||||
|
#endif
|
||||||
|
xsum (size_t size1, size_t size2)
|
||||||
|
{
|
||||||
|
size_t sum = size1 + size2;
|
||||||
|
return (sum >= size1 ? sum : SIZE_MAX);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Sum of three sizes, with overflow check. */
|
||||||
|
static inline size_t
|
||||||
|
#if __GNUC__ >= 3
|
||||||
|
__attribute__ ((__pure__))
|
||||||
|
#endif
|
||||||
|
xsum3 (size_t size1, size_t size2, size_t size3)
|
||||||
|
{
|
||||||
|
return xsum (xsum (size1, size2), size3);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Sum of four sizes, with overflow check. */
|
||||||
|
static inline size_t
|
||||||
|
#if __GNUC__ >= 3
|
||||||
|
__attribute__ ((__pure__))
|
||||||
|
#endif
|
||||||
|
xsum4 (size_t size1, size_t size2, size_t size3, size_t size4)
|
||||||
|
{
|
||||||
|
return xsum (xsum (xsum (size1, size2), size3), size4);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Maximum of two sizes, with overflow check. */
|
||||||
|
static inline size_t
|
||||||
|
#if __GNUC__ >= 3
|
||||||
|
__attribute__ ((__pure__))
|
||||||
|
#endif
|
||||||
|
xmax (size_t size1, size_t size2)
|
||||||
|
{
|
||||||
|
/* No explicit check is needed here, because for any n:
|
||||||
|
max (SIZE_MAX, n) == SIZE_MAX and max (n, SIZE_MAX) == SIZE_MAX. */
|
||||||
|
return (size1 >= size2 ? size1 : size2);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Multiplication of a count with an element size, with overflow check.
|
||||||
|
The count must be >= 0 and the element size must be > 0.
|
||||||
|
This is a macro, not an inline function, so that it works correctly even
|
||||||
|
when N is of a wider tupe and N > SIZE_MAX. */
|
||||||
|
#define xtimes(N, ELSIZE) \
|
||||||
|
((N) <= SIZE_MAX / (ELSIZE) ? (size_t) (N) * (ELSIZE) : SIZE_MAX)
|
||||||
|
|
||||||
|
/* Check for overflow. */
|
||||||
|
#define size_overflow_p(SIZE) \
|
||||||
|
((SIZE) == SIZE_MAX)
|
||||||
|
/* Check against overflow. */
|
||||||
|
#define size_in_bounds_p(SIZE) \
|
||||||
|
((SIZE) != SIZE_MAX)
|
||||||
|
|
||||||
|
#endif /* _XSIZE_H */
|
@ -1,3 +1,8 @@
|
|||||||
|
2004-07-20 Werner Koch <wk@gnupg.org>
|
||||||
|
|
||||||
|
* gpgkeys_ldap.c [_WIN32]: Include Windows specific header files.
|
||||||
|
Suggested by Brian Gladman.
|
||||||
|
|
||||||
2004-05-26 David Shaw <dshaw@jabberwocky.com>
|
2004-05-26 David Shaw <dshaw@jabberwocky.com>
|
||||||
|
|
||||||
* gpgkeys_http.c: General polish and removal of leftover stuff
|
* gpgkeys_http.c: General polish and removal of leftover stuff
|
||||||
|
@ -28,7 +28,14 @@
|
|||||||
#endif
|
#endif
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
#include <winsock2.h>
|
||||||
|
#include <winldap.h>
|
||||||
|
#else
|
||||||
#include <ldap.h>
|
#include <ldap.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "keyserver.h"
|
#include "keyserver.h"
|
||||||
|
|
||||||
|
18
m4/ChangeLog
18
m4/ChangeLog
@ -1,3 +1,21 @@
|
|||||||
|
2004-07-27 gettextize <bug-gnu-gettext@gnu.org>
|
||||||
|
|
||||||
|
* gettext.m4: Upgrade to gettext-0.14.1.
|
||||||
|
* intmax.m4: New file, from gettext-0.14.1.
|
||||||
|
* lib-ld.m4: Upgrade to gettext-0.14.1.
|
||||||
|
* lib-prefix.m4: Upgrade to gettext-0.14.1.
|
||||||
|
* longdouble.m4: New file, from gettext-0.14.1.
|
||||||
|
* longlong.m4: New file, from gettext-0.14.1.
|
||||||
|
* po.m4: Upgrade to gettext-0.14.1.
|
||||||
|
* printf-posix.m4: New file, from gettext-0.14.1.
|
||||||
|
* signed.m4: New file, from gettext-0.14.1.
|
||||||
|
* size_max.m4: New file, from gettext-0.14.1.
|
||||||
|
* ulonglong.m4: Upgrade to gettext-0.14.1.
|
||||||
|
* wchar_t.m4: New file, from gettext-0.14.1.
|
||||||
|
* wint_t.m4: New file, from gettext-0.14.1.
|
||||||
|
* xsize.m4: New file, from gettext-0.14.1.
|
||||||
|
* Makefile.am (EXTRA_DIST): Add the new files.
|
||||||
|
|
||||||
2003-10-25 gettextize <bug-gnu-gettext@gnu.org>
|
2003-10-25 gettextize <bug-gnu-gettext@gnu.org>
|
||||||
|
|
||||||
* codeset.m4: New file, from gettext-0.12.1.
|
* codeset.m4: New file, from gettext-0.12.1.
|
||||||
|
@ -1 +1 @@
|
|||||||
EXTRA_DIST = codeset.m4 gettext.m4 glibc21.m4 iconv.m4 intdiv0.m4 inttypes.m4 inttypes_h.m4 inttypes-pri.m4 isc-posix.m4 lcmessage.m4 lib-ld.m4 lib-link.m4 lib-prefix.m4 nls.m4 po.m4 progtest.m4 stdint_h.m4 uintmax_t.m4 ulonglong.m4
|
EXTRA_DIST = intmax.m4 longdouble.m4 longlong.m4 printf-posix.m4 signed.m4 size_max.m4 wchar_t.m4 wint_t.m4 xsize.m4 codeset.m4 gettext.m4 glibc21.m4 iconv.m4 intdiv0.m4 inttypes.m4 inttypes_h.m4 inttypes-pri.m4 isc-posix.m4 lcmessage.m4 lib-ld.m4 lib-link.m4 lib-prefix.m4 nls.m4 po.m4 progtest.m4 stdint_h.m4 uintmax_t.m4 ulonglong.m4
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# gettext.m4 serial 20 (gettext-0.12)
|
# gettext.m4 serial 28 (gettext-0.13)
|
||||||
dnl Copyright (C) 1995-2003 Free Software Foundation, Inc.
|
dnl Copyright (C) 1995-2003 Free Software Foundation, Inc.
|
||||||
dnl This file is free software, distributed under the terms of the GNU
|
dnl This file is free software, distributed under the terms of the GNU
|
||||||
dnl General Public License. As a special exception to the GNU General
|
dnl General Public License. As a special exception to the GNU General
|
||||||
@ -354,9 +354,18 @@ AC_DEFUN([AM_INTL_SUBDIR],
|
|||||||
AC_REQUIRE([AC_ISC_POSIX])dnl
|
AC_REQUIRE([AC_ISC_POSIX])dnl
|
||||||
AC_REQUIRE([AC_HEADER_STDC])dnl
|
AC_REQUIRE([AC_HEADER_STDC])dnl
|
||||||
AC_REQUIRE([AC_C_CONST])dnl
|
AC_REQUIRE([AC_C_CONST])dnl
|
||||||
|
AC_REQUIRE([bh_C_SIGNED])dnl
|
||||||
AC_REQUIRE([AC_C_INLINE])dnl
|
AC_REQUIRE([AC_C_INLINE])dnl
|
||||||
AC_REQUIRE([AC_TYPE_OFF_T])dnl
|
AC_REQUIRE([AC_TYPE_OFF_T])dnl
|
||||||
AC_REQUIRE([AC_TYPE_SIZE_T])dnl
|
AC_REQUIRE([AC_TYPE_SIZE_T])dnl
|
||||||
|
AC_REQUIRE([jm_AC_TYPE_LONG_LONG])dnl
|
||||||
|
AC_REQUIRE([gt_TYPE_LONGDOUBLE])dnl
|
||||||
|
AC_REQUIRE([gt_TYPE_WCHAR_T])dnl
|
||||||
|
AC_REQUIRE([gt_TYPE_WINT_T])dnl
|
||||||
|
AC_REQUIRE([jm_AC_HEADER_INTTYPES_H])
|
||||||
|
AC_REQUIRE([jm_AC_HEADER_STDINT_H])
|
||||||
|
AC_REQUIRE([gt_TYPE_INTMAX_T])
|
||||||
|
AC_REQUIRE([gt_PRINTF_POSIX])
|
||||||
AC_REQUIRE([AC_FUNC_ALLOCA])dnl
|
AC_REQUIRE([AC_FUNC_ALLOCA])dnl
|
||||||
AC_REQUIRE([AC_FUNC_MMAP])dnl
|
AC_REQUIRE([AC_FUNC_MMAP])dnl
|
||||||
AC_REQUIRE([jm_GLIBC21])dnl
|
AC_REQUIRE([jm_GLIBC21])dnl
|
||||||
@ -364,14 +373,57 @@ AC_DEFUN([AM_INTL_SUBDIR],
|
|||||||
AC_REQUIRE([jm_AC_TYPE_UINTMAX_T])dnl
|
AC_REQUIRE([jm_AC_TYPE_UINTMAX_T])dnl
|
||||||
AC_REQUIRE([gt_HEADER_INTTYPES_H])dnl
|
AC_REQUIRE([gt_HEADER_INTTYPES_H])dnl
|
||||||
AC_REQUIRE([gt_INTTYPES_PRI])dnl
|
AC_REQUIRE([gt_INTTYPES_PRI])dnl
|
||||||
|
AC_REQUIRE([gl_XSIZE])dnl
|
||||||
|
|
||||||
|
AC_CHECK_TYPE([ptrdiff_t], ,
|
||||||
|
[AC_DEFINE([ptrdiff_t], [long],
|
||||||
|
[Define as the type of the result of subtracting two pointers, if the system doesn't define it.])
|
||||||
|
])
|
||||||
AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h stddef.h \
|
AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h stddef.h \
|
||||||
stdlib.h string.h unistd.h sys/param.h])
|
stdlib.h string.h unistd.h sys/param.h])
|
||||||
AC_CHECK_FUNCS([feof_unlocked fgets_unlocked getc_unlocked getcwd getegid \
|
AC_CHECK_FUNCS([asprintf fwprintf getcwd getegid geteuid getgid getuid \
|
||||||
geteuid getgid getuid mempcpy munmap putenv setenv setlocale stpcpy \
|
mempcpy munmap putenv setenv setlocale snprintf stpcpy strcasecmp strdup \
|
||||||
strcasecmp strdup strtoul tsearch __argz_count __argz_stringify __argz_next \
|
strtoul tsearch wcslen __argz_count __argz_stringify __argz_next \
|
||||||
__fsetlocking])
|
__fsetlocking])
|
||||||
|
|
||||||
|
dnl Use the _snprintf function only if it is declared (because on NetBSD it
|
||||||
|
dnl is defined as a weak alias of snprintf; we prefer to use the latter).
|
||||||
|
gt_CHECK_DECL(_snprintf, [#include <stdio.h>])
|
||||||
|
gt_CHECK_DECL(_snwprintf, [#include <stdio.h>])
|
||||||
|
|
||||||
|
dnl Use the *_unlocked functions only if they are declared.
|
||||||
|
dnl (because some of them were defined without being declared in Solaris
|
||||||
|
dnl 2.5.1 but were removed in Solaris 2.6, whereas we want binaries built
|
||||||
|
dnl on Solaris 2.5.1 to run on Solaris 2.6).
|
||||||
|
dnl Don't use AC_CHECK_DECLS because it isn't supported in autoconf-2.13.
|
||||||
|
gt_CHECK_DECL(feof_unlocked, [#include <stdio.h>])
|
||||||
|
gt_CHECK_DECL(fgets_unlocked, [#include <stdio.h>])
|
||||||
|
gt_CHECK_DECL(getc_unlocked, [#include <stdio.h>])
|
||||||
|
|
||||||
|
case $gt_cv_func_printf_posix in
|
||||||
|
*yes) HAVE_POSIX_PRINTF=1 ;;
|
||||||
|
*) HAVE_POSIX_PRINTF=0 ;;
|
||||||
|
esac
|
||||||
|
AC_SUBST([HAVE_POSIX_PRINTF])
|
||||||
|
if test "$ac_cv_func_asprintf" = yes; then
|
||||||
|
HAVE_ASPRINTF=1
|
||||||
|
else
|
||||||
|
HAVE_ASPRINTF=0
|
||||||
|
fi
|
||||||
|
AC_SUBST([HAVE_ASPRINTF])
|
||||||
|
if test "$ac_cv_func_snprintf" = yes; then
|
||||||
|
HAVE_SNPRINTF=1
|
||||||
|
else
|
||||||
|
HAVE_SNPRINTF=0
|
||||||
|
fi
|
||||||
|
AC_SUBST([HAVE_SNPRINTF])
|
||||||
|
if test "$ac_cv_func_wprintf" = yes; then
|
||||||
|
HAVE_WPRINTF=1
|
||||||
|
else
|
||||||
|
HAVE_WPRINTF=0
|
||||||
|
fi
|
||||||
|
AC_SUBST([HAVE_WPRINTF])
|
||||||
|
|
||||||
AM_ICONV
|
AM_ICONV
|
||||||
AM_LANGINFO_CODESET
|
AM_LANGINFO_CODESET
|
||||||
if test $ac_cv_header_locale_h = yes; then
|
if test $ac_cv_header_locale_h = yes; then
|
||||||
@ -411,5 +463,25 @@ changequote([,])dnl
|
|||||||
])
|
])
|
||||||
|
|
||||||
|
|
||||||
|
dnl gt_CHECK_DECL(FUNC, INCLUDES)
|
||||||
|
dnl Check whether a function is declared.
|
||||||
|
AC_DEFUN([gt_CHECK_DECL],
|
||||||
|
[
|
||||||
|
AC_CACHE_CHECK([whether $1 is declared], ac_cv_have_decl_$1,
|
||||||
|
[AC_TRY_COMPILE([$2], [
|
||||||
|
#ifndef $1
|
||||||
|
char *p = (char *) $1;
|
||||||
|
#endif
|
||||||
|
], ac_cv_have_decl_$1=yes, ac_cv_have_decl_$1=no)])
|
||||||
|
if test $ac_cv_have_decl_$1 = yes; then
|
||||||
|
gt_value=1
|
||||||
|
else
|
||||||
|
gt_value=0
|
||||||
|
fi
|
||||||
|
AC_DEFINE_UNQUOTED([HAVE_DECL_]translit($1, [a-z], [A-Z]), [$gt_value],
|
||||||
|
[Define to 1 if you have the declaration of `$1', and to 0 if you don't.])
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version])
|
dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version])
|
||||||
AC_DEFUN([AM_GNU_GETTEXT_VERSION], [])
|
AC_DEFUN([AM_GNU_GETTEXT_VERSION], [])
|
||||||
|
32
m4/intmax.m4
Normal file
32
m4/intmax.m4
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
# intmax.m4 serial 1 (gettext-0.12)
|
||||||
|
dnl Copyright (C) 2002-2003 Free Software Foundation, Inc.
|
||||||
|
dnl This file is free software, distributed under the terms of the GNU
|
||||||
|
dnl General Public License. As a special exception to the GNU General
|
||||||
|
dnl Public License, this file may be distributed as part of a program
|
||||||
|
dnl that contains a configuration script generated by Autoconf, under
|
||||||
|
dnl the same distribution terms as the rest of that program.
|
||||||
|
|
||||||
|
dnl From Bruno Haible.
|
||||||
|
dnl Test whether the system has the 'intmax_t' type, but don't attempt to
|
||||||
|
dnl find a replacement if it is lacking.
|
||||||
|
|
||||||
|
AC_DEFUN([gt_TYPE_INTMAX_T],
|
||||||
|
[
|
||||||
|
AC_REQUIRE([jm_AC_HEADER_INTTYPES_H])
|
||||||
|
AC_REQUIRE([jm_AC_HEADER_STDINT_H])
|
||||||
|
AC_CACHE_CHECK(for intmax_t, gt_cv_c_intmax_t,
|
||||||
|
[AC_TRY_COMPILE([
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#if HAVE_STDINT_H_WITH_UINTMAX
|
||||||
|
#include <stdint.h>
|
||||||
|
#endif
|
||||||
|
#if HAVE_INTTYPES_H_WITH_UINTMAX
|
||||||
|
#include <inttypes.h>
|
||||||
|
#endif
|
||||||
|
], [intmax_t x = -1;], gt_cv_c_intmax_t=yes, gt_cv_c_intmax_t=no)])
|
||||||
|
if test $gt_cv_c_intmax_t = yes; then
|
||||||
|
AC_DEFINE(HAVE_INTMAX_T, 1,
|
||||||
|
[Define if you have the 'intmax_t' type in <stdint.h> or <inttypes.h>.])
|
||||||
|
fi
|
||||||
|
])
|
24
m4/lib-ld.m4
24
m4/lib-ld.m4
@ -1,4 +1,4 @@
|
|||||||
# lib-ld.m4 serial 2 (gettext-0.12)
|
# lib-ld.m4 serial 3 (gettext-0.13)
|
||||||
dnl Copyright (C) 1996-2003 Free Software Foundation, Inc.
|
dnl Copyright (C) 1996-2003 Free Software Foundation, Inc.
|
||||||
dnl This file is free software, distributed under the terms of the GNU
|
dnl This file is free software, distributed under the terms of the GNU
|
||||||
dnl General Public License. As a special exception to the GNU General
|
dnl General Public License. As a special exception to the GNU General
|
||||||
@ -14,11 +14,12 @@ dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no.
|
|||||||
AC_DEFUN([AC_LIB_PROG_LD_GNU],
|
AC_DEFUN([AC_LIB_PROG_LD_GNU],
|
||||||
[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], acl_cv_prog_gnu_ld,
|
[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], acl_cv_prog_gnu_ld,
|
||||||
[# I'd rather use --version here, but apparently some GNU ld's only accept -v.
|
[# I'd rather use --version here, but apparently some GNU ld's only accept -v.
|
||||||
if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then
|
case `$LD -v 2>&1 </dev/null` in
|
||||||
acl_cv_prog_gnu_ld=yes
|
*GNU* | *'with BFD'*)
|
||||||
else
|
acl_cv_prog_gnu_ld=yes ;;
|
||||||
acl_cv_prog_gnu_ld=no
|
*)
|
||||||
fi])
|
acl_cv_prog_gnu_ld=no ;;
|
||||||
|
esac])
|
||||||
with_gnu_ld=$acl_cv_prog_gnu_ld
|
with_gnu_ld=$acl_cv_prog_gnu_ld
|
||||||
])
|
])
|
||||||
|
|
||||||
@ -88,11 +89,12 @@ AC_CACHE_VAL(acl_cv_path_LD,
|
|||||||
# Check to see if the program is GNU ld. I'd rather use --version,
|
# Check to see if the program is GNU ld. I'd rather use --version,
|
||||||
# but apparently some GNU ld's only accept -v.
|
# but apparently some GNU ld's only accept -v.
|
||||||
# Break only if it was the GNU/non-GNU ld that we prefer.
|
# Break only if it was the GNU/non-GNU ld that we prefer.
|
||||||
if "$acl_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then
|
case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in
|
||||||
test "$with_gnu_ld" != no && break
|
*GNU* | *'with BFD'*)
|
||||||
else
|
test "$with_gnu_ld" != no && break ;;
|
||||||
test "$with_gnu_ld" != yes && break
|
*)
|
||||||
fi
|
test "$with_gnu_ld" != yes && break ;;
|
||||||
|
esac
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
IFS="$ac_save_ifs"
|
IFS="$ac_save_ifs"
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# lib-prefix.m4 serial 3 (gettext-0.12.2)
|
# lib-prefix.m4 serial 3 (gettext-0.13)
|
||||||
dnl Copyright (C) 2001-2003 Free Software Foundation, Inc.
|
dnl Copyright (C) 2001-2003 Free Software Foundation, Inc.
|
||||||
dnl This file is free software, distributed under the terms of the GNU
|
dnl This file is free software, distributed under the terms of the GNU
|
||||||
dnl General Public License. As a special exception to the GNU General
|
dnl General Public License. As a special exception to the GNU General
|
||||||
|
30
m4/longdouble.m4
Normal file
30
m4/longdouble.m4
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
# longdouble.m4 serial 1 (gettext-0.12)
|
||||||
|
dnl Copyright (C) 2002-2003 Free Software Foundation, Inc.
|
||||||
|
dnl This file is free software, distributed under the terms of the GNU
|
||||||
|
dnl General Public License. As a special exception to the GNU General
|
||||||
|
dnl Public License, this file may be distributed as part of a program
|
||||||
|
dnl that contains a configuration script generated by Autoconf, under
|
||||||
|
dnl the same distribution terms as the rest of that program.
|
||||||
|
|
||||||
|
dnl From Bruno Haible.
|
||||||
|
dnl Test whether the compiler supports the 'long double' type.
|
||||||
|
dnl Prerequisite: AC_PROG_CC
|
||||||
|
|
||||||
|
AC_DEFUN([gt_TYPE_LONGDOUBLE],
|
||||||
|
[
|
||||||
|
AC_CACHE_CHECK([for long double], gt_cv_c_long_double,
|
||||||
|
[if test "$GCC" = yes; then
|
||||||
|
gt_cv_c_long_double=yes
|
||||||
|
else
|
||||||
|
AC_TRY_COMPILE([
|
||||||
|
/* The Stardent Vistra knows sizeof(long double), but does not support it. */
|
||||||
|
long double foo = 0.0;
|
||||||
|
/* On Ultrix 4.3 cc, long double is 4 and double is 8. */
|
||||||
|
int array [2*(sizeof(long double) >= sizeof(double)) - 1];
|
||||||
|
], ,
|
||||||
|
gt_cv_c_long_double=yes, gt_cv_c_long_double=no)
|
||||||
|
fi])
|
||||||
|
if test $gt_cv_c_long_double = yes; then
|
||||||
|
AC_DEFINE(HAVE_LONG_DOUBLE, 1, [Define if you have the 'long double' type.])
|
||||||
|
fi
|
||||||
|
])
|
25
m4/longlong.m4
Normal file
25
m4/longlong.m4
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
# longlong.m4 serial 4
|
||||||
|
dnl Copyright (C) 1999-2003 Free Software Foundation, Inc.
|
||||||
|
dnl This file is free software, distributed under the terms of the GNU
|
||||||
|
dnl General Public License. As a special exception to the GNU General
|
||||||
|
dnl Public License, this file may be distributed as part of a program
|
||||||
|
dnl that contains a configuration script generated by Autoconf, under
|
||||||
|
dnl the same distribution terms as the rest of that program.
|
||||||
|
|
||||||
|
dnl From Paul Eggert.
|
||||||
|
|
||||||
|
# Define HAVE_LONG_LONG if 'long long' works.
|
||||||
|
|
||||||
|
AC_DEFUN([jm_AC_TYPE_LONG_LONG],
|
||||||
|
[
|
||||||
|
AC_CACHE_CHECK([for long long], ac_cv_type_long_long,
|
||||||
|
[AC_TRY_LINK([long long ll = 1LL; int i = 63;],
|
||||||
|
[long long llmax = (long long) -1;
|
||||||
|
return ll << i | ll >> i | llmax / ll | llmax % ll;],
|
||||||
|
ac_cv_type_long_long=yes,
|
||||||
|
ac_cv_type_long_long=no)])
|
||||||
|
if test $ac_cv_type_long_long = yes; then
|
||||||
|
AC_DEFINE(HAVE_LONG_LONG, 1,
|
||||||
|
[Define if you have the 'long long' type.])
|
||||||
|
fi
|
||||||
|
])
|
241
m4/po.m4
241
m4/po.m4
@ -1,4 +1,4 @@
|
|||||||
# po.m4 serial 1 (gettext-0.12)
|
# po.m4 serial 3 (gettext-0.14)
|
||||||
dnl Copyright (C) 1995-2003 Free Software Foundation, Inc.
|
dnl Copyright (C) 1995-2003 Free Software Foundation, Inc.
|
||||||
dnl This file is free software, distributed under the terms of the GNU
|
dnl This file is free software, distributed under the terms of the GNU
|
||||||
dnl General Public License. As a special exception to the GNU General
|
dnl General Public License. As a special exception to the GNU General
|
||||||
@ -111,7 +111,7 @@ AC_DEFUN([AM_PO_SUBDIRS],
|
|||||||
test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
|
test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
|
||||||
cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES"
|
cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES"
|
||||||
POMAKEFILEDEPS="POTFILES.in"
|
POMAKEFILEDEPS="POTFILES.in"
|
||||||
# ALL_LINGUAS, POFILES, GMOFILES, UPDATEPOFILES, DUMMYPOFILES depend
|
# ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend
|
||||||
# on $ac_dir but don't depend on user-specified configuration
|
# on $ac_dir but don't depend on user-specified configuration
|
||||||
# parameters.
|
# parameters.
|
||||||
if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
|
if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
|
||||||
@ -127,19 +127,27 @@ AC_DEFUN([AM_PO_SUBDIRS],
|
|||||||
# The set of available languages was given in configure.in.
|
# The set of available languages was given in configure.in.
|
||||||
eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS'
|
eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS'
|
||||||
fi
|
fi
|
||||||
|
# Compute POFILES
|
||||||
|
# as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)
|
||||||
|
# Compute UPDATEPOFILES
|
||||||
|
# as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update)
|
||||||
|
# Compute DUMMYPOFILES
|
||||||
|
# as $(foreach lang, $(ALL_LINGUAS), $(lang).nop)
|
||||||
|
# Compute GMOFILES
|
||||||
|
# as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo)
|
||||||
case "$ac_given_srcdir" in
|
case "$ac_given_srcdir" in
|
||||||
.) srcdirpre= ;;
|
.) srcdirpre= ;;
|
||||||
*) srcdirpre='$(srcdir)/' ;;
|
*) srcdirpre='$(srcdir)/' ;;
|
||||||
esac
|
esac
|
||||||
POFILES=
|
POFILES=
|
||||||
GMOFILES=
|
|
||||||
UPDATEPOFILES=
|
UPDATEPOFILES=
|
||||||
DUMMYPOFILES=
|
DUMMYPOFILES=
|
||||||
|
GMOFILES=
|
||||||
for lang in $ALL_LINGUAS; do
|
for lang in $ALL_LINGUAS; do
|
||||||
POFILES="$POFILES $srcdirpre$lang.po"
|
POFILES="$POFILES $srcdirpre$lang.po"
|
||||||
GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
|
|
||||||
UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
|
UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
|
||||||
DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
|
DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
|
||||||
|
GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
|
||||||
done
|
done
|
||||||
# CATALOGS depends on both $ac_dir and the user's LINGUAS
|
# CATALOGS depends on both $ac_dir and the user's LINGUAS
|
||||||
# environment variable.
|
# environment variable.
|
||||||
@ -174,7 +182,7 @@ AC_DEFUN([AM_PO_SUBDIRS],
|
|||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile"
|
test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile"
|
||||||
sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile"
|
sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile"
|
||||||
for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do
|
for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do
|
||||||
if test -f "$f"; then
|
if test -f "$f"; then
|
||||||
case "$f" in
|
case "$f" in
|
||||||
@ -188,10 +196,231 @@ AC_DEFUN([AM_PO_SUBDIRS],
|
|||||||
esac
|
esac
|
||||||
done],
|
done],
|
||||||
[# Capture the value of obsolete ALL_LINGUAS because we need it to compute
|
[# Capture the value of obsolete ALL_LINGUAS because we need it to compute
|
||||||
# POFILES, GMOFILES, UPDATEPOFILES, DUMMYPOFILES, CATALOGS. But hide it
|
# POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it
|
||||||
# from automake.
|
# from automake.
|
||||||
eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"'
|
eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"'
|
||||||
# Capture the value of LINGUAS because we need it to compute CATALOGS.
|
# Capture the value of LINGUAS because we need it to compute CATALOGS.
|
||||||
LINGUAS="${LINGUAS-%UNSET%}"
|
LINGUAS="${LINGUAS-%UNSET%}"
|
||||||
])
|
])
|
||||||
])
|
])
|
||||||
|
|
||||||
|
dnl Postprocesses a Makefile in a directory containing PO files.
|
||||||
|
AC_DEFUN([AM_POSTPROCESS_PO_MAKEFILE],
|
||||||
|
[
|
||||||
|
# When this code is run, in config.status, two variables have already been
|
||||||
|
# set:
|
||||||
|
# - OBSOLETE_ALL_LINGUAS is the value of LINGUAS set in configure.in,
|
||||||
|
# - LINGUAS is the value of the environment variable LINGUAS at configure
|
||||||
|
# time.
|
||||||
|
|
||||||
|
changequote(,)dnl
|
||||||
|
# Adjust a relative srcdir.
|
||||||
|
ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
|
||||||
|
ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
|
||||||
|
ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
|
||||||
|
# In autoconf-2.13 it is called $ac_given_srcdir.
|
||||||
|
# In autoconf-2.50 it is called $srcdir.
|
||||||
|
test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
|
||||||
|
case "$ac_given_srcdir" in
|
||||||
|
.) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
|
||||||
|
/*) top_srcdir="$ac_given_srcdir" ;;
|
||||||
|
*) top_srcdir="$ac_dots$ac_given_srcdir" ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Find a way to echo strings without interpreting backslash.
|
||||||
|
if test "X`(echo '\t') 2>/dev/null`" = 'X\t'; then
|
||||||
|
gt_echo='echo'
|
||||||
|
else
|
||||||
|
if test "X`(printf '%s\n' '\t') 2>/dev/null`" = 'X\t'; then
|
||||||
|
gt_echo='printf %s\n'
|
||||||
|
else
|
||||||
|
echo_func () {
|
||||||
|
cat <<EOT
|
||||||
|
$*
|
||||||
|
EOT
|
||||||
|
}
|
||||||
|
gt_echo='echo_func'
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# A sed script that extracts the value of VARIABLE from a Makefile.
|
||||||
|
sed_x_variable='
|
||||||
|
# Test if the hold space is empty.
|
||||||
|
x
|
||||||
|
s/P/P/
|
||||||
|
x
|
||||||
|
ta
|
||||||
|
# Yes it was empty. Look if we have the expected variable definition.
|
||||||
|
/^[ ]*VARIABLE[ ]*=/{
|
||||||
|
# Seen the first line of the variable definition.
|
||||||
|
s/^[ ]*VARIABLE[ ]*=//
|
||||||
|
ba
|
||||||
|
}
|
||||||
|
bd
|
||||||
|
:a
|
||||||
|
# Here we are processing a line from the variable definition.
|
||||||
|
# Remove comment, more precisely replace it with a space.
|
||||||
|
s/#.*$/ /
|
||||||
|
# See if the line ends in a backslash.
|
||||||
|
tb
|
||||||
|
:b
|
||||||
|
s/\\$//
|
||||||
|
# Print the line, without the trailing backslash.
|
||||||
|
p
|
||||||
|
tc
|
||||||
|
# There was no trailing backslash. The end of the variable definition is
|
||||||
|
# reached. Clear the hold space.
|
||||||
|
s/^.*$//
|
||||||
|
x
|
||||||
|
bd
|
||||||
|
:c
|
||||||
|
# A trailing backslash means that the variable definition continues in the
|
||||||
|
# next line. Put a nonempty string into the hold space to indicate this.
|
||||||
|
s/^.*$/P/
|
||||||
|
x
|
||||||
|
:d
|
||||||
|
'
|
||||||
|
changequote([,])dnl
|
||||||
|
|
||||||
|
# Set POTFILES to the value of the Makefile variable POTFILES.
|
||||||
|
sed_x_POTFILES="`$gt_echo \"$sed_x_variable\" | sed -e '/^ *#/d' -e 's/VARIABLE/POTFILES/g'`"
|
||||||
|
POTFILES=`sed -n -e "$sed_x_POTFILES" < "$ac_file"`
|
||||||
|
# Compute POTFILES_DEPS as
|
||||||
|
# $(foreach file, $(POTFILES), $(top_srcdir)/$(file))
|
||||||
|
POTFILES_DEPS=
|
||||||
|
for file in $POTFILES; do
|
||||||
|
POTFILES_DEPS="$POTFILES_DEPS "'$(top_srcdir)/'"$file"
|
||||||
|
done
|
||||||
|
POMAKEFILEDEPS=""
|
||||||
|
|
||||||
|
if test -n "$OBSOLETE_ALL_LINGUAS"; then
|
||||||
|
test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
|
||||||
|
fi
|
||||||
|
if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
|
||||||
|
# The LINGUAS file contains the set of available languages.
|
||||||
|
ALL_LINGUAS_=`sed -e "/^#/d" "$ac_given_srcdir/$ac_dir/LINGUAS"`
|
||||||
|
POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
|
||||||
|
else
|
||||||
|
# Set ALL_LINGUAS to the value of the Makefile variable LINGUAS.
|
||||||
|
sed_x_LINGUAS="`$gt_echo \"$sed_x_variable\" | sed -e '/^ *#/d' -e 's/VARIABLE/LINGUAS/g'`"
|
||||||
|
ALL_LINGUAS_=`sed -n -e "$sed_x_LINGUAS" < "$ac_file"`
|
||||||
|
fi
|
||||||
|
# Hide the ALL_LINGUAS assigment from automake.
|
||||||
|
eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
|
||||||
|
# Compute POFILES
|
||||||
|
# as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)
|
||||||
|
# Compute UPDATEPOFILES
|
||||||
|
# as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update)
|
||||||
|
# Compute DUMMYPOFILES
|
||||||
|
# as $(foreach lang, $(ALL_LINGUAS), $(lang).nop)
|
||||||
|
# Compute GMOFILES
|
||||||
|
# as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo)
|
||||||
|
# Compute PROPERTIESFILES
|
||||||
|
# as $(foreach lang, $(ALL_LINGUAS), $(top_srcdir)/$(DOMAIN)_$(lang).properties)
|
||||||
|
# Compute CLASSFILES
|
||||||
|
# as $(foreach lang, $(ALL_LINGUAS), $(top_srcdir)/$(DOMAIN)_$(lang).class)
|
||||||
|
# Compute QMFILES
|
||||||
|
# as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).qm)
|
||||||
|
# Compute MSGFILES
|
||||||
|
# as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang)).msg)
|
||||||
|
# Compute RESOURCESDLLFILES
|
||||||
|
# as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang))/$(DOMAIN).resources.dll)
|
||||||
|
case "$ac_given_srcdir" in
|
||||||
|
.) srcdirpre= ;;
|
||||||
|
*) srcdirpre='$(srcdir)/' ;;
|
||||||
|
esac
|
||||||
|
POFILES=
|
||||||
|
UPDATEPOFILES=
|
||||||
|
DUMMYPOFILES=
|
||||||
|
GMOFILES=
|
||||||
|
PROPERTIESFILES=
|
||||||
|
CLASSFILES=
|
||||||
|
QMFILES=
|
||||||
|
MSGFILES=
|
||||||
|
RESOURCESDLLFILES=
|
||||||
|
for lang in $ALL_LINGUAS; do
|
||||||
|
POFILES="$POFILES $srcdirpre$lang.po"
|
||||||
|
UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
|
||||||
|
DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
|
||||||
|
GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
|
||||||
|
PROPERTIESFILES="$PROPERTIESFILES \$(top_srcdir)/\$(DOMAIN)_$lang.properties"
|
||||||
|
CLASSFILES="$CLASSFILES \$(top_srcdir)/\$(DOMAIN)_$lang.class"
|
||||||
|
QMFILES="$QMFILES $srcdirpre$lang.qm"
|
||||||
|
frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
|
||||||
|
MSGFILES="$MSGFILES $srcdirpre$frobbedlang.msg"
|
||||||
|
frobbedlang=`echo $lang | sed -e 's/_/-/g'`
|
||||||
|
RESOURCESDLLFILES="$RESOURCESDLLFILES $srcdirpre$frobbedlang/\$(DOMAIN).resources.dll"
|
||||||
|
done
|
||||||
|
# CATALOGS depends on both $ac_dir and the user's LINGUAS
|
||||||
|
# environment variable.
|
||||||
|
INST_LINGUAS=
|
||||||
|
if test -n "$ALL_LINGUAS"; then
|
||||||
|
for presentlang in $ALL_LINGUAS; do
|
||||||
|
useit=no
|
||||||
|
if test "%UNSET%" != "$LINGUAS"; then
|
||||||
|
desiredlanguages="$LINGUAS"
|
||||||
|
else
|
||||||
|
desiredlanguages="$ALL_LINGUAS"
|
||||||
|
fi
|
||||||
|
for desiredlang in $desiredlanguages; do
|
||||||
|
# Use the presentlang catalog if desiredlang is
|
||||||
|
# a. equal to presentlang, or
|
||||||
|
# b. a variant of presentlang (because in this case,
|
||||||
|
# presentlang can be used as a fallback for messages
|
||||||
|
# which are not translated in the desiredlang catalog).
|
||||||
|
case "$desiredlang" in
|
||||||
|
"$presentlang"*) useit=yes;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
if test $useit = yes; then
|
||||||
|
INST_LINGUAS="$INST_LINGUAS $presentlang"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
CATALOGS=
|
||||||
|
JAVACATALOGS=
|
||||||
|
QTCATALOGS=
|
||||||
|
TCLCATALOGS=
|
||||||
|
CSHARPCATALOGS=
|
||||||
|
if test -n "$INST_LINGUAS"; then
|
||||||
|
for lang in $INST_LINGUAS; do
|
||||||
|
CATALOGS="$CATALOGS $lang.gmo"
|
||||||
|
JAVACATALOGS="$JAVACATALOGS \$(DOMAIN)_$lang.properties"
|
||||||
|
QTCATALOGS="$QTCATALOGS $lang.qm"
|
||||||
|
frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
|
||||||
|
TCLCATALOGS="$TCLCATALOGS $frobbedlang.msg"
|
||||||
|
frobbedlang=`echo $lang | sed -e 's/_/-/g'`
|
||||||
|
CSHARPCATALOGS="$CSHARPCATALOGS $frobbedlang/\$(DOMAIN).resources.dll"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
sed -e "s|@POTFILES_DEPS@|$POTFILES_DEPS|g" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@PROPERTIESFILES@|$PROPERTIESFILES|g" -e "s|@CLASSFILES@|$CLASSFILES|g" -e "s|@QMFILES@|$QMFILES|g" -e "s|@MSGFILES@|$MSGFILES|g" -e "s|@RESOURCESDLLFILES@|$RESOURCESDLLFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@JAVACATALOGS@|$JAVACATALOGS|g" -e "s|@QTCATALOGS@|$QTCATALOGS|g" -e "s|@TCLCATALOGS@|$TCLCATALOGS|g" -e "s|@CSHARPCATALOGS@|$CSHARPCATALOGS|g" -e 's,^#distdir:,distdir:,' < "$ac_file" > "$ac_file.tmp"
|
||||||
|
if grep -l '@TCLCATALOGS@' "$ac_file" > /dev/null; then
|
||||||
|
# Add dependencies that cannot be formulated as a simple suffix rule.
|
||||||
|
for lang in $ALL_LINGUAS; do
|
||||||
|
frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
|
||||||
|
cat >> "$ac_file.tmp" <<EOF
|
||||||
|
$frobbedlang.msg: $lang.po
|
||||||
|
@echo "\$(MSGFMT) -c --tcl -d \$(srcdir) -l $lang $srcdirpre$lang.po"; \
|
||||||
|
\$(MSGFMT) -c --tcl -d "\$(srcdir)" -l $lang $srcdirpre$lang.po || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; }
|
||||||
|
EOF
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
if grep -l '@CSHARPCATALOGS@' "$ac_file" > /dev/null; then
|
||||||
|
# Add dependencies that cannot be formulated as a simple suffix rule.
|
||||||
|
for lang in $ALL_LINGUAS; do
|
||||||
|
frobbedlang=`echo $lang | sed -e 's/_/-/g'`
|
||||||
|
cat >> "$ac_file.tmp" <<EOF
|
||||||
|
$frobbedlang/\$(DOMAIN).resources.dll: $lang.po
|
||||||
|
@echo "\$(MSGFMT) -c --csharp -d \$(srcdir) -l $lang $srcdirpre$lang.po -r \$(DOMAIN)"; \
|
||||||
|
\$(MSGFMT) -c --csharp -d "\$(srcdir)" -l $lang $srcdirpre$lang.po -r "\$(DOMAIN)" || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; }
|
||||||
|
EOF
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
if test -n "$POMAKEFILEDEPS"; then
|
||||||
|
cat >> "$ac_file.tmp" <<EOF
|
||||||
|
Makefile: $POMAKEFILEDEPS
|
||||||
|
EOF
|
||||||
|
fi
|
||||||
|
mv "$ac_file.tmp" "$ac_file"
|
||||||
|
])
|
||||||
|
46
m4/printf-posix.m4
Normal file
46
m4/printf-posix.m4
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
# printf-posix.m4 serial 2 (gettext-0.13.1)
|
||||||
|
dnl Copyright (C) 2003 Free Software Foundation, Inc.
|
||||||
|
dnl This file is free software, distributed under the terms of the GNU
|
||||||
|
dnl General Public License. As a special exception to the GNU General
|
||||||
|
dnl Public License, this file may be distributed as part of a program
|
||||||
|
dnl that contains a configuration script generated by Autoconf, under
|
||||||
|
dnl the same distribution terms as the rest of that program.
|
||||||
|
|
||||||
|
dnl From Bruno Haible.
|
||||||
|
dnl Test whether the printf() function supports POSIX/XSI format strings with
|
||||||
|
dnl positions.
|
||||||
|
|
||||||
|
AC_DEFUN([gt_PRINTF_POSIX],
|
||||||
|
[
|
||||||
|
AC_REQUIRE([AC_PROG_CC])
|
||||||
|
AC_CACHE_CHECK([whether printf() supports POSIX/XSI format strings],
|
||||||
|
gt_cv_func_printf_posix,
|
||||||
|
[
|
||||||
|
AC_TRY_RUN([
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
/* The string "%2$d %1$d", with dollar characters protected from the shell's
|
||||||
|
dollar expansion (possibly an autoconf bug). */
|
||||||
|
static char format[] = { '%', '2', '$', 'd', ' ', '%', '1', '$', 'd', '\0' };
|
||||||
|
static char buf[100];
|
||||||
|
int main ()
|
||||||
|
{
|
||||||
|
sprintf (buf, format, 33, 55);
|
||||||
|
return (strcmp (buf, "55 33") != 0);
|
||||||
|
}], gt_cv_func_printf_posix=yes, gt_cv_func_printf_posix=no,
|
||||||
|
[
|
||||||
|
AC_EGREP_CPP(notposix, [
|
||||||
|
#if defined __NetBSD__ || defined _MSC_VER || defined __MINGW32__ || defined __CYGWIN__
|
||||||
|
notposix
|
||||||
|
#endif
|
||||||
|
], gt_cv_func_printf_posix="guessing no",
|
||||||
|
gt_cv_func_printf_posix="guessing yes")
|
||||||
|
])
|
||||||
|
])
|
||||||
|
case $gt_cv_func_printf_posix in
|
||||||
|
*yes)
|
||||||
|
AC_DEFINE(HAVE_POSIX_PRINTF, 1,
|
||||||
|
[Define if your printf() function supports format strings with positions.])
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
])
|
19
m4/signed.m4
Normal file
19
m4/signed.m4
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
# signed.m4 serial 1 (gettext-0.10.40)
|
||||||
|
dnl Copyright (C) 2001-2002 Free Software Foundation, Inc.
|
||||||
|
dnl This file is free software, distributed under the terms of the GNU
|
||||||
|
dnl General Public License. As a special exception to the GNU General
|
||||||
|
dnl Public License, this file may be distributed as part of a program
|
||||||
|
dnl that contains a configuration script generated by Autoconf, under
|
||||||
|
dnl the same distribution terms as the rest of that program.
|
||||||
|
|
||||||
|
dnl From Bruno Haible.
|
||||||
|
|
||||||
|
AC_DEFUN([bh_C_SIGNED],
|
||||||
|
[
|
||||||
|
AC_CACHE_CHECK([for signed], bh_cv_c_signed,
|
||||||
|
[AC_TRY_COMPILE(, [signed char x;], bh_cv_c_signed=yes, bh_cv_c_signed=no)])
|
||||||
|
if test $bh_cv_c_signed = no; then
|
||||||
|
AC_DEFINE(signed, ,
|
||||||
|
[Define to empty if the C compiler doesn't support this keyword.])
|
||||||
|
fi
|
||||||
|
])
|
61
m4/size_max.m4
Normal file
61
m4/size_max.m4
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
# size_max.m4 serial 2
|
||||||
|
dnl Copyright (C) 2003 Free Software Foundation, Inc.
|
||||||
|
dnl This file is free software, distributed under the terms of the GNU
|
||||||
|
dnl General Public License. As a special exception to the GNU General
|
||||||
|
dnl Public License, this file may be distributed as part of a program
|
||||||
|
dnl that contains a configuration script generated by Autoconf, under
|
||||||
|
dnl the same distribution terms as the rest of that program.
|
||||||
|
|
||||||
|
dnl From Bruno Haible.
|
||||||
|
|
||||||
|
AC_DEFUN([gl_SIZE_MAX],
|
||||||
|
[
|
||||||
|
AC_CHECK_HEADERS(stdint.h)
|
||||||
|
dnl First test whether the system already has SIZE_MAX.
|
||||||
|
AC_MSG_CHECKING([for SIZE_MAX])
|
||||||
|
result=
|
||||||
|
AC_EGREP_CPP([Found it], [
|
||||||
|
#include <limits.h>
|
||||||
|
#if HAVE_STDINT_H
|
||||||
|
#include <stdint.h>
|
||||||
|
#endif
|
||||||
|
#ifdef SIZE_MAX
|
||||||
|
Found it
|
||||||
|
#endif
|
||||||
|
], result=yes)
|
||||||
|
if test -z "$result"; then
|
||||||
|
dnl Define it ourselves. Here we assume that the type 'size_t' is not wider
|
||||||
|
dnl than the type 'unsigned long'.
|
||||||
|
dnl The _AC_COMPUTE_INT macro works up to LONG_MAX, since it uses 'expr',
|
||||||
|
dnl which is guaranteed to work from LONG_MIN to LONG_MAX.
|
||||||
|
_AC_COMPUTE_INT([~(size_t)0 / 10], res_hi,
|
||||||
|
[#include <stddef.h>], result=?)
|
||||||
|
_AC_COMPUTE_INT([~(size_t)0 % 10], res_lo,
|
||||||
|
[#include <stddef.h>], result=?)
|
||||||
|
_AC_COMPUTE_INT([sizeof (size_t) <= sizeof (unsigned int)], fits_in_uint,
|
||||||
|
[#include <stddef.h>], result=?)
|
||||||
|
if test "$fits_in_uint" = 1; then
|
||||||
|
dnl Even though SIZE_MAX fits in an unsigned int, it must be of type
|
||||||
|
dnl 'unsigned long' if the type 'size_t' is the same as 'unsigned long'.
|
||||||
|
AC_TRY_COMPILE([#include <stddef.h>
|
||||||
|
extern size_t foo;
|
||||||
|
extern unsigned long foo;
|
||||||
|
], [], fits_in_uint=0)
|
||||||
|
fi
|
||||||
|
if test -z "$result"; then
|
||||||
|
if test "$fits_in_uint" = 1; then
|
||||||
|
result="$res_hi$res_lo"U
|
||||||
|
else
|
||||||
|
result="$res_hi$res_lo"UL
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
dnl Shouldn't happen, but who knows...
|
||||||
|
result='~(size_t)0'
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
AC_MSG_RESULT([$result])
|
||||||
|
if test "$result" != yes; then
|
||||||
|
AC_DEFINE_UNQUOTED([SIZE_MAX], [$result],
|
||||||
|
[Define as the maximum value of type 'size_t', if the system doesn't define it.])
|
||||||
|
fi
|
||||||
|
])
|
@ -1,5 +1,5 @@
|
|||||||
# ulonglong.m4 serial 2 (fileutils-4.0.32, gettext-0.10.40)
|
# ulonglong.m4 serial 3
|
||||||
dnl Copyright (C) 1999-2002 Free Software Foundation, Inc.
|
dnl Copyright (C) 1999-2003 Free Software Foundation, Inc.
|
||||||
dnl This file is free software, distributed under the terms of the GNU
|
dnl This file is free software, distributed under the terms of the GNU
|
||||||
dnl General Public License. As a special exception to the GNU General
|
dnl General Public License. As a special exception to the GNU General
|
||||||
dnl Public License, this file may be distributed as part of a program
|
dnl Public License, this file may be distributed as part of a program
|
||||||
@ -8,16 +8,18 @@ dnl the same distribution terms as the rest of that program.
|
|||||||
|
|
||||||
dnl From Paul Eggert.
|
dnl From Paul Eggert.
|
||||||
|
|
||||||
|
# Define HAVE_UNSIGNED_LONG_LONG if 'unsigned long long' works.
|
||||||
|
|
||||||
AC_DEFUN([jm_AC_TYPE_UNSIGNED_LONG_LONG],
|
AC_DEFUN([jm_AC_TYPE_UNSIGNED_LONG_LONG],
|
||||||
[
|
[
|
||||||
AC_CACHE_CHECK([for unsigned long long], ac_cv_type_unsigned_long_long,
|
AC_CACHE_CHECK([for unsigned long long], ac_cv_type_unsigned_long_long,
|
||||||
[AC_TRY_LINK([unsigned long long ull = 1; int i = 63;],
|
[AC_TRY_LINK([unsigned long long ull = 1ULL; int i = 63;],
|
||||||
[unsigned long long ullmax = (unsigned long long) -1;
|
[unsigned long long ullmax = (unsigned long long) -1;
|
||||||
return ull << i | ull >> i | ullmax / ull | ullmax % ull;],
|
return ull << i | ull >> i | ullmax / ull | ullmax % ull;],
|
||||||
ac_cv_type_unsigned_long_long=yes,
|
ac_cv_type_unsigned_long_long=yes,
|
||||||
ac_cv_type_unsigned_long_long=no)])
|
ac_cv_type_unsigned_long_long=no)])
|
||||||
if test $ac_cv_type_unsigned_long_long = yes; then
|
if test $ac_cv_type_unsigned_long_long = yes; then
|
||||||
AC_DEFINE(HAVE_UNSIGNED_LONG_LONG, 1,
|
AC_DEFINE(HAVE_UNSIGNED_LONG_LONG, 1,
|
||||||
[Define if you have the unsigned long long type.])
|
[Define if you have the 'unsigned long long' type.])
|
||||||
fi
|
fi
|
||||||
])
|
])
|
||||||
|
22
m4/wchar_t.m4
Normal file
22
m4/wchar_t.m4
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
# wchar_t.m4 serial 1 (gettext-0.12)
|
||||||
|
dnl Copyright (C) 2002-2003 Free Software Foundation, Inc.
|
||||||
|
dnl This file is free software, distributed under the terms of the GNU
|
||||||
|
dnl General Public License. As a special exception to the GNU General
|
||||||
|
dnl Public License, this file may be distributed as part of a program
|
||||||
|
dnl that contains a configuration script generated by Autoconf, under
|
||||||
|
dnl the same distribution terms as the rest of that program.
|
||||||
|
|
||||||
|
dnl From Bruno Haible.
|
||||||
|
dnl Test whether <stddef.h> has the 'wchar_t' type.
|
||||||
|
dnl Prerequisite: AC_PROG_CC
|
||||||
|
|
||||||
|
AC_DEFUN([gt_TYPE_WCHAR_T],
|
||||||
|
[
|
||||||
|
AC_CACHE_CHECK([for wchar_t], gt_cv_c_wchar_t,
|
||||||
|
[AC_TRY_COMPILE([#include <stddef.h>
|
||||||
|
wchar_t foo = (wchar_t)'\0';], ,
|
||||||
|
gt_cv_c_wchar_t=yes, gt_cv_c_wchar_t=no)])
|
||||||
|
if test $gt_cv_c_wchar_t = yes; then
|
||||||
|
AC_DEFINE(HAVE_WCHAR_T, 1, [Define if you have the 'wchar_t' type.])
|
||||||
|
fi
|
||||||
|
])
|
22
m4/wint_t.m4
Normal file
22
m4/wint_t.m4
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
# wint_t.m4 serial 1 (gettext-0.12)
|
||||||
|
dnl Copyright (C) 2003 Free Software Foundation, Inc.
|
||||||
|
dnl This file is free software, distributed under the terms of the GNU
|
||||||
|
dnl General Public License. As a special exception to the GNU General
|
||||||
|
dnl Public License, this file may be distributed as part of a program
|
||||||
|
dnl that contains a configuration script generated by Autoconf, under
|
||||||
|
dnl the same distribution terms as the rest of that program.
|
||||||
|
|
||||||
|
dnl From Bruno Haible.
|
||||||
|
dnl Test whether <wchar.h> has the 'wint_t' type.
|
||||||
|
dnl Prerequisite: AC_PROG_CC
|
||||||
|
|
||||||
|
AC_DEFUN([gt_TYPE_WINT_T],
|
||||||
|
[
|
||||||
|
AC_CACHE_CHECK([for wint_t], gt_cv_c_wint_t,
|
||||||
|
[AC_TRY_COMPILE([#include <wchar.h>
|
||||||
|
wint_t foo = (wchar_t)'\0';], ,
|
||||||
|
gt_cv_c_wint_t=yes, gt_cv_c_wint_t=no)])
|
||||||
|
if test $gt_cv_c_wint_t = yes; then
|
||||||
|
AC_DEFINE(HAVE_WINT_T, 1, [Define if you have the 'wint_t' type.])
|
||||||
|
fi
|
||||||
|
])
|
14
m4/xsize.m4
Normal file
14
m4/xsize.m4
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
# xsize.m4 serial 2
|
||||||
|
dnl Copyright (C) 2003 Free Software Foundation, Inc.
|
||||||
|
dnl This file is free software, distributed under the terms of the GNU
|
||||||
|
dnl General Public License. As a special exception to the GNU General
|
||||||
|
dnl Public License, this file may be distributed as part of a program
|
||||||
|
dnl that contains a configuration script generated by Autoconf, under
|
||||||
|
dnl the same distribution terms as the rest of that program.
|
||||||
|
|
||||||
|
AC_DEFUN([gl_XSIZE],
|
||||||
|
[
|
||||||
|
dnl Prerequisites of lib/xsize.h.
|
||||||
|
AC_REQUIRE([gl_SIZE_MAX])
|
||||||
|
AC_CHECK_HEADERS(stdint.h)
|
||||||
|
])
|
10
po/ChangeLog
10
po/ChangeLog
@ -1,3 +1,13 @@
|
|||||||
|
2004-07-27 Werner Koch <wk@g10code.de>
|
||||||
|
|
||||||
|
* LINGUAS: Added all languages we supported in 1.2.5.
|
||||||
|
Copied all po files from 1.2.5.
|
||||||
|
|
||||||
|
2004-07-27 gettextize <bug-gnu-gettext@gnu.org>
|
||||||
|
|
||||||
|
* Makefile.in.in: Upgrade to gettext-0.14.1.
|
||||||
|
* Rules-quot: Upgrade to gettext-0.14.1.
|
||||||
|
|
||||||
2003-11-27 Werner Koch <wk@gnupg.org>
|
2003-11-27 Werner Koch <wk@gnupg.org>
|
||||||
|
|
||||||
* de.po: Updated some fuzzys.
|
* de.po: Updated some fuzzys.
|
||||||
|
31
po/LINGUAS
31
po/LINGUAS
@ -1,18 +1,17 @@
|
|||||||
# Set of available languages.
|
# Set of available languages.
|
||||||
# we have disabled most of them for now.
|
|
||||||
en@quot en@boldquot
|
en@quot en@boldquot
|
||||||
#ca cs
|
be
|
||||||
#da
|
ca cs
|
||||||
de
|
da de
|
||||||
#eo el es et
|
eo el es et
|
||||||
#fi fr
|
fi fr
|
||||||
#gl
|
gl
|
||||||
#hu
|
hu
|
||||||
#id it
|
id it
|
||||||
#ja
|
ja
|
||||||
#nl
|
nl
|
||||||
#pl
|
pl pt_BR pt
|
||||||
#pt_BR pt
|
ro ru
|
||||||
#sk sv
|
sk sv
|
||||||
#tr
|
tr
|
||||||
#zh_TW"
|
zh_TW zh_CN
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
# Makefile for PO directory in any package using GNU gettext.
|
# Makefile for PO directory in any package using GNU gettext.
|
||||||
# Copyright (C) 1995-1997, 2000-2003 by Ulrich Drepper <drepper@gnu.ai.mit.edu>
|
# Copyright (C) 1995-1997, 2000-2004 by Ulrich Drepper <drepper@gnu.ai.mit.edu>
|
||||||
#
|
#
|
||||||
# This file can be copied and used freely without restrictions. It can
|
# This file can be copied and used freely without restrictions. It can
|
||||||
# be used in projects which are not available under the GNU General Public
|
# be used in projects which are not available under the GNU General Public
|
||||||
@ -7,6 +7,8 @@
|
|||||||
# functionality.
|
# functionality.
|
||||||
# Please note that the actual code of GNU gettext is covered by the GNU
|
# Please note that the actual code of GNU gettext is covered by the GNU
|
||||||
# General Public License and is *not* in the public domain.
|
# General Public License and is *not* in the public domain.
|
||||||
|
#
|
||||||
|
# Origin: gettext-0.14
|
||||||
|
|
||||||
PACKAGE = @PACKAGE@
|
PACKAGE = @PACKAGE@
|
||||||
VERSION = @VERSION@
|
VERSION = @VERSION@
|
||||||
@ -55,7 +57,7 @@ CATALOGS = @CATALOGS@
|
|||||||
# Makevars gets inserted here. (Don't remove this line!)
|
# Makevars gets inserted here. (Don't remove this line!)
|
||||||
|
|
||||||
.SUFFIXES:
|
.SUFFIXES:
|
||||||
.SUFFIXES: .po .gmo .mo .sed .sin .nop .po-update
|
.SUFFIXES: .po .gmo .mo .sed .sin .nop .po-create .po-update
|
||||||
|
|
||||||
.po.mo:
|
.po.mo:
|
||||||
@echo "$(MSGFMT) -c -o $@ $<"; \
|
@echo "$(MSGFMT) -c -o $@ $<"; \
|
||||||
@ -86,7 +88,7 @@ all-no:
|
|||||||
# $(POFILES) has been designed to not touch files that don't need to be
|
# $(POFILES) has been designed to not touch files that don't need to be
|
||||||
# changed.
|
# changed.
|
||||||
stamp-po: $(srcdir)/$(DOMAIN).pot
|
stamp-po: $(srcdir)/$(DOMAIN).pot
|
||||||
test -z "$(CATALOGS)" || $(MAKE) $(CATALOGS)
|
test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES)
|
||||||
@echo "touch stamp-po"
|
@echo "touch stamp-po"
|
||||||
@echo timestamp > stamp-poT
|
@echo timestamp > stamp-poT
|
||||||
@mv stamp-poT stamp-po
|
@mv stamp-poT stamp-po
|
||||||
@ -128,9 +130,13 @@ $(srcdir)/$(DOMAIN).pot:
|
|||||||
# Note that a PO file is not touched if it doesn't need to be changed.
|
# Note that a PO file is not touched if it doesn't need to be changed.
|
||||||
$(POFILES): $(srcdir)/$(DOMAIN).pot
|
$(POFILES): $(srcdir)/$(DOMAIN).pot
|
||||||
@lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \
|
@lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \
|
||||||
test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
|
if test -f "$(srcdir)/$${lang}.po"; then \
|
||||||
echo "$${cdcmd}$(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot"; \
|
test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
|
||||||
cd $(srcdir) && $(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot
|
echo "$${cdcmd}$(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot"; \
|
||||||
|
cd $(srcdir) && $(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot; \
|
||||||
|
else \
|
||||||
|
$(MAKE) $${lang}.po-create; \
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
install: install-exec install-data
|
install: install-exec install-data
|
||||||
@ -310,6 +316,13 @@ update-po: Makefile
|
|||||||
test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES)
|
test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES)
|
||||||
$(MAKE) update-gmo
|
$(MAKE) update-gmo
|
||||||
|
|
||||||
|
# General rule for creating PO files.
|
||||||
|
|
||||||
|
.nop.po-create:
|
||||||
|
@lang=`echo $@ | sed -e 's/\.po-create$$//'`; \
|
||||||
|
echo "File $$lang.po does not exist. If you are a translator, you can create it through 'msginit'." 1>&2; \
|
||||||
|
exit 1
|
||||||
|
|
||||||
# General rule for updating PO files.
|
# General rule for updating PO files.
|
||||||
|
|
||||||
.nop.po-update:
|
.nop.po-update:
|
||||||
|
@ -4,6 +4,11 @@ DISTFILES.common.extra1 = quot.sed boldquot.sed en@quot.header en@boldquot.heade
|
|||||||
|
|
||||||
.SUFFIXES: .insert-header .po-update-en
|
.SUFFIXES: .insert-header .po-update-en
|
||||||
|
|
||||||
|
en@quot.po-create:
|
||||||
|
$(MAKE) en@quot.po-update
|
||||||
|
en@boldquot.po-create:
|
||||||
|
$(MAKE) en@boldquot.po-update
|
||||||
|
|
||||||
en@quot.po-update: en@quot.po-update-en
|
en@quot.po-update: en@quot.po-update-en
|
||||||
en@boldquot.po-update: en@boldquot.po-update-en
|
en@boldquot.po-update: en@boldquot.po-update-en
|
||||||
|
|
||||||
|
@ -1,3 +1,8 @@
|
|||||||
|
2004-07-27 Werner Koch <wk@g10code.de>
|
||||||
|
|
||||||
|
* autogen.sh: Updated to the moder version, grepping the required
|
||||||
|
tool versions from configure.ac.
|
||||||
|
|
||||||
2004-06-14 Werner Koch <wk@gnupg.org>
|
2004-06-14 Werner Koch <wk@gnupg.org>
|
||||||
|
|
||||||
* mk-w32-dist: Do not include the en@* po files.
|
* mk-w32-dist: Do not include the en@* po files.
|
||||||
|
@ -11,17 +11,32 @@
|
|||||||
# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
|
# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
|
||||||
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
|
||||||
PGM=GnuPG
|
configure_ac="configure.ac"
|
||||||
lib_config_files=""
|
|
||||||
autoconf_vers=2.57
|
|
||||||
automake_vers=1.7
|
|
||||||
aclocal_vers=1.7
|
|
||||||
|
|
||||||
ACLOCAL=${ACLOCAL:-aclocal}
|
cvtver () {
|
||||||
AUTOCONF=${AUTOCONF:-autoconf}
|
awk 'NR==1 {split($NF,A,".");X=1000000*A[1]+1000*A[2]+A[3];print X;exit 0}'
|
||||||
AUTOMAKE=${AUTOMAKE:-automake}
|
}
|
||||||
AUTOHEADER=${AUTOHEADER:-autoheader}
|
|
||||||
DIE=no
|
check_version () {
|
||||||
|
if [ `("$1" --version || echo "0") | cvtver` -ge "$2" ]; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
echo "**Error**: "\`$1\'" not installed or too old." >&2
|
||||||
|
echo ' Version '$3' or newer is required.' >&2
|
||||||
|
[ -n "$4" ] && echo ' Note that this is part of '\`$4\''.' >&2
|
||||||
|
DIE="yes"
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Allow to override the default tool names
|
||||||
|
AUTOCONF=${AUTOCONF_PREFIX}${AUTOCONF:-autoconf}${AUTOCONF_SUFFIX}
|
||||||
|
AUTOHEADER=${AUTOCONF_PREFIX}${AUTOHEADER:-autoheader}${AUTOCONF_SUFFIX}
|
||||||
|
|
||||||
|
AUTOMAKE=${AUTOMAKE_PREFIX}${AUTOMAKE:-automake}${AUTOMAKE_SUFFIX}
|
||||||
|
ACLOCAL=${AUTOMAKE_PREFIX}${ACLOCAL:-aclocal}${AUTOMAKE_SUFFIX}
|
||||||
|
|
||||||
|
GETTEXT=${GETTEXT_PREFIX}${GETTEXT:-gettext}${GETTEXT_SUFFIX}
|
||||||
|
MSGMERGE=${GETTEXT_PREFIX}${MSGMERGE:-msgmerge}${GETTEXT_SUFFIX}
|
||||||
|
|
||||||
# Used to cross-compile GnuPG for Windows.
|
# Used to cross-compile GnuPG for Windows.
|
||||||
if test "$1" = "--build-w32"; then
|
if test "$1" = "--build-w32"; then
|
||||||
@ -194,67 +209,54 @@ if test "$1" = "--build-uclinux"; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
# Grep the required versions from configure.ac
|
||||||
|
autoconf_vers=`sed -n '/^AC_PREREQ(/ {
|
||||||
|
s/^.*(\(.*\))/\1/p
|
||||||
|
q
|
||||||
|
}' ${configure_ac}`
|
||||||
|
autoconf_vers_num=`echo "$autoconf_vers" | cvtver`
|
||||||
|
|
||||||
if ($AUTOCONF --version) < /dev/null > /dev/null 2>&1 ; then
|
automake_vers=`sed -n '/^min_automake_version=/ {
|
||||||
if ($AUTOCONF --version | awk 'NR==1 { if( $3 >= '$autoconf_vers') \
|
s/^.*="\(.*\)"/\1/p
|
||||||
exit 1; exit 0; }');
|
q
|
||||||
then
|
}' ${configure_ac}`
|
||||||
echo "**Error**: "\`autoconf\'" is too old."
|
automake_vers_num=`echo "$automake_vers" | cvtver`
|
||||||
echo ' (version ' $autoconf_vers ' or newer is required)'
|
|
||||||
DIE="yes"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo
|
|
||||||
echo "**Error**: You must have "\`autoconf\'" installed to compile $PGM."
|
|
||||||
echo ' (version ' $autoconf_vers ' or newer is required)'
|
|
||||||
DIE="yes"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ($AUTOMAKE --version) < /dev/null > /dev/null 2>&1 ; then
|
gettext_vers=`sed -n '/^AM_GNU_GETTEXT_VERSION(/ {
|
||||||
if ($AUTOMAKE --version | awk 'NR==1 { if( $4 >= '$automake_vers') \
|
s/^.*(\(.*\))/\1/p
|
||||||
exit 1; exit 0; }');
|
q
|
||||||
then
|
}' ${configure_ac}`
|
||||||
echo "**Error**: "\`automake\'" is too old."
|
gettext_vers_num=`echo "$gettext_vers" | cvtver`
|
||||||
echo ' (version ' $automake_vers ' or newer is required)'
|
|
||||||
DIE="yes"
|
|
||||||
fi
|
if [ -z "$autoconf_vers" -o -z "$automake_vers" -o -z "$gettext_vers" ]
|
||||||
if ($ACLOCAL --version) < /dev/null > /dev/null 2>&1; then
|
then
|
||||||
if ($ACLOCAL --version | awk 'NR==1 { if( $4 >= '$aclocal_vers' ) \
|
echo "**Error**: version information not found in "\`${configure_ac}\'"." >&2
|
||||||
exit 1; exit 0; }' );
|
exit 1
|
||||||
then
|
|
||||||
echo "**Error**: "\`aclocal\'" is too old."
|
|
||||||
echo ' (version ' $aclocal_vers ' or newer is required)'
|
|
||||||
DIE="yes"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo
|
|
||||||
echo "**Error**: Missing "\`aclocal\'". The version of "\`automake\'
|
|
||||||
echo " installed doesn't appear recent enough."
|
|
||||||
DIE="yes"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo
|
|
||||||
echo "**Error**: You must have "\`automake\'" installed to compile $PGM."
|
|
||||||
echo ' (version ' $automake_vers ' or newer is required)'
|
|
||||||
DIE="yes"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
if (gettext --version </dev/null 2>/dev/null | awk 'NR==1 { split($4,A,"."); \
|
if check_version $AUTOCONF $autoconf_vers_num $autoconf_vers ; then
|
||||||
X=10000*A[1]+100*A[2]+A[3]; echo X; if( X >= 1201 ) exit 1; exit 0}')
|
check_version $AUTOHEADER $autoconf_vers_num $autoconf_vers autoconf
|
||||||
then
|
fi
|
||||||
echo "**Error**: You must have "\`gettext\'" installed to compile $PGM."
|
if check_version $AUTOMAKE $automake_vers_num $automake_vers; then
|
||||||
echo ' (version 0.12.1 or newer is required; get'
|
check_version $ACLOCAL $automake_vers_num $autoconf_vers automake
|
||||||
echo ' ftp://alpha.gnu.org/gnu/gettext/gettext-0.12.1.tar.gz'
|
fi
|
||||||
echo ' or install the latest Debian package)'
|
if check_version $GETTEXT $gettext_vers_num $gettext_vers; then
|
||||||
DIE="yes"
|
check_version $MSGMERGE $gettext_vers_num $gettext_vers gettext
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
if test "$DIE" = "yes"; then
|
if test "$DIE" = "yes"; then
|
||||||
|
cat <<EOF
|
||||||
|
|
||||||
|
Note that you may use alternative versions of the tools by setting
|
||||||
|
the corresponding environment variables; see README.CVS for details.
|
||||||
|
|
||||||
|
EOF
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
echo "Running aclocal -I m4 ${ACLOCAL_FLAGS:+$ACLOCAL_FLAGS }..."
|
echo "Running aclocal -I m4 ${ACLOCAL_FLAGS:+$ACLOCAL_FLAGS }..."
|
||||||
$ACLOCAL -I m4 $ACLOCAL_FLAGS
|
$ACLOCAL -I m4 $ACLOCAL_FLAGS
|
||||||
echo "Running autoheader..."
|
echo "Running autoheader..."
|
||||||
@ -264,5 +266,4 @@ $AUTOMAKE --gnu;
|
|||||||
echo "Running autoconf..."
|
echo "Running autoconf..."
|
||||||
$AUTOCONF
|
$AUTOCONF
|
||||||
|
|
||||||
echo "You can now run \"./configure --enable-maintainer-mode\" and then \"make\"."
|
echo "You may now run \"./configure --enable-maintainer-mode && make\"."
|
||||||
|
|
||||||
|
@ -143,7 +143,7 @@ if test "$with_gnu_ld" = yes; then
|
|||||||
ld_shlibs=no
|
ld_shlibs=no
|
||||||
;;
|
;;
|
||||||
beos*)
|
beos*)
|
||||||
if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
|
if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
|
||||||
:
|
:
|
||||||
else
|
else
|
||||||
ld_shlibs=no
|
ld_shlibs=no
|
||||||
@ -162,9 +162,9 @@ if test "$with_gnu_ld" = yes; then
|
|||||||
netbsd*)
|
netbsd*)
|
||||||
;;
|
;;
|
||||||
solaris* | sysv5*)
|
solaris* | sysv5*)
|
||||||
if $LD -v 2>&1 | egrep 'BFD 2\.8' > /dev/null; then
|
if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
|
||||||
ld_shlibs=no
|
ld_shlibs=no
|
||||||
elif $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
|
elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
|
||||||
:
|
:
|
||||||
else
|
else
|
||||||
ld_shlibs=no
|
ld_shlibs=no
|
||||||
@ -174,7 +174,7 @@ if test "$with_gnu_ld" = yes; then
|
|||||||
hardcode_direct=yes
|
hardcode_direct=yes
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
|
if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
|
||||||
:
|
:
|
||||||
else
|
else
|
||||||
ld_shlibs=no
|
ld_shlibs=no
|
||||||
|
Loading…
x
Reference in New Issue
Block a user