Commit 9a748609 authored by Chris Allegretta's avatar Chris Allegretta
Browse files

Nano 1.1.0 release

git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@728 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
parent 355fbe57
Showing with 720 additions and 1941 deletions
+720 -1941
Cvs code -
nano-1.1.0 - 07/15/2001
- General
- New global variables currshortcut and currslen to support using
the mouse with the shortcuts. Also supports clicking on files
......@@ -61,6 +61,8 @@ Cvs code -
(David Lawrence Ramsey).
- Using --enable-extra automatically defines --enable-multibuffer
changes to version() and configure.in.
- Moved to gettext 0.10.38 at the last second, sure to break
something, but at least I can run make distcheck!
- Makefile.am:
- Include ABOUT-NLS and the new THANKS files to the distributed list.
- THANKS:
......@@ -92,6 +94,7 @@ Cvs code -
- Reset cutbuffer even if we're uncutting marked or cut to end text!
- faq.html:
- Brought the FAQ up to date, many little changes (Jordi).
- Added sections 3.7 and 3.8 for the multibuffer and nanorc support.
- files.c:
do_browser()
- Minor fixes to the processing of SELECT function (Rocco)
......
# Makefile.in generated automatically by automake 1.4-p4 from Makefile.am
# Makefile.in generated automatically by automake 1.4 from Makefile.am
# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
......@@ -158,7 +158,7 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
$(ACLOCAL_M4): configure.in
cd $(srcdir) && $(ACLOCAL)
config.status: $(srcdir)/configure.in $(CONFIG_STATUS_DEPENDENCIES)
config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
$(SHELL) ./config.status --recheck
$(srcdir)/configure: $(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES)
cd $(srcdir) && $(AUTOCONF)
......@@ -318,7 +318,7 @@ uninstall-info:
else ii=; fi; \
list='$(INFO_DEPS)'; \
for file in $$list; do \
test -z "$$ii" \
test -z "$ii" \
|| install-info --info-dir=$(DESTDIR)$(infodir) --remove $$file; \
done
@$(NORMAL_UNINSTALL)
......@@ -524,7 +524,7 @@ distdir: $(DISTFILES)
@for file in $(DISTFILES); do \
d=$(srcdir); \
if test -d $$d/$$file; then \
cp -pr $$d/$$file $(distdir)/$$file; \
cp -pr $$/$$file $(distdir)/$$file; \
else \
test -f $(distdir)/$$file \
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
......
07/15/2001 - GNU nano 1.1.0 is released. This is the first release
in the 1.1.x unstable series of GNU nano. It
incorporates all changes up to the 1.0.3 release,
and also includes many many new features, including
appending to as well as overwriting files, writing
marked text to a separate file, dynamic wrap length,
lots more compatibility with Pico, and new optional
features like .nanorc file support and multiple file
buffers! All in all, plenty of new stuff that's sure
to introduce lots of bugs ;-) Have fun with it, but
be careful, unstable means unstable.
04/06/2001 - GNU nano 1.0.1 is out there. The only new feature is a
configure option for those who want to disable all
word wrapping from nano, --disable-wrapping. Bug fixes
......
dnl aclocal.m4 generated automatically by aclocal 1.4-p4
dnl aclocal.m4 generated automatically by aclocal 1.4
dnl Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
......
......@@ -732,7 +732,7 @@ fi
PACKAGE=nano
VERSION=1.1-cvs
VERSION=1.1.0
if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
{ echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; }
......
# $Id$
dnl Process this file with autoconf to produce a configure script.
AC_INIT(nano.c)
AM_INIT_AUTOMAKE(nano, 1.1-cvs)
AM_INIT_AUTOMAKE(nano, 1.1.0)
AM_CONFIG_HEADER(config.h:config.h.in)
ALL_LINGUAS="es de fr it id fi hu ca cs gl uk ru sv no"
......
......@@ -52,7 +52,11 @@ THE HECK DO I DO NOW?</a></font>
<br><font color="#330000"><a href="#3.5">3.5. Nano should automatically
run strip on the binary when installing it!</a></font>
<br><font color="#330000"><a href="#3.6">3.6. How can I make the
executable smaller? This is too bloated!</a></font></blockquote>
executable smaller? This is too bloated!</a></font>
<br><font color="#330000"><a href="#3.7">3.7. Tell me more about this
multibuffer stuff!</a></font>
<br><font color="#330000"><a href="#3.8">3.8. How do I make a .nanorc file
that nano will read when I start it?</a></font></blockquote>
<h2>
<font color="#330000"><a href="#4">4. Running</a></font></h2>
......@@ -199,7 +203,7 @@ nano was developed).</font></blockquote>
of nano?</font></h2>
<blockquote><font color="#330000">The current version of nano *should*
be 1.0.1.&nbsp; Of course you should always check the nano hompage to
be 1.1.0.&nbsp; Of course you should always check the nano hompage to
see what the latest and greatest version is.</font></blockquote>
<h2>
......@@ -383,8 +387,39 @@ try:
<b>--enable-extra</b> Enable extra functions, including easter eggs
<b>--enable-nanorc</b> Enable use of .nanorc file
<b>--enable-color</b> Enables color and syntax highlighting
</font></blockquote> <hr WIDTH="100%"> <h1>
<a NAME="4"></a><font color="#330000">4. Running</font></h1>
<b>--enable-multibuffer</b> Enables having multiple file buffers open
</font></blockquote>
<h2>
<a NAME="3.7"></a><font color="#330000">
3.7. Tell me more about this multibuffer stuff!</font></h2>
<blockquote><font color="#330000"> To use multiple file buffers, you must be using nano 1.1.0
or newer, and you must have configured nano with <b>--enable-multibuffer</b> or
<b>--enable-extra</b> (use nano -V to check). Then when you want to enable inserting a file
into its own buffer instead of into the current file, just hit <b>Meta-F</b>, then insert the
file as normal with <b>^R</b>. If you always want files to be loaded into their own buffers,
use the <b>--multibuffer</b> or <b>-F</b> flag when you invoke nano. <P>
You can move between the buffers you have open with the <b>Meta-&lt;</b> and <b>Meta-&gt;</b>
keys, or more easily with <b>Meta-,</b> and <b>Meta-.</b> (clear as mud, right? =-).
When you have more than one file buffer open, the ^X shortcut will say "Close", instead of the
normal "Exit" when only one buffer is open.
</font></blockquote>
<h2>
<a NAME="3.8"></a><font color="#330000">
3.8. How do I make a .nanorc file that nano will read when I start it?</font></h2>
<blockquote><font color="#330000"> It's not hard at all! But, your version of nano must have
beem compiled with <b>--enable-nanorc</b>, and again must be version 1.1.0 or newer (use nano
-V to check your version and compiled features). Then simply copy the <b>nanorc.sample</b>
that came with the nano source or your nano package (most likely in /usr/doc/nano) to .nanorc
in your home directory. If you didn't get one, the syntax is simple. Flags are turned on and
off by using the word <b>set</b> and the getopt_long flag for the feature, for example "set
pico" or "set nowrap". </font></blockquote> <hr WIDTH="100%">
<h1><a NAME="4"></a><font color="#330000">4. Running</font></h1>
<h2>
<a NAME="4.1"></a><font color="#330000">4.1. Ack!&nbsp; My backspace/delete/enter/double
......
1998-04-29 Ulrich Drepper <drepper@cygnus.com>
2001-05-23 GNU <bug-gnu-utils@gnu.org>
* intl/localealias.c (read_alias_file): Use unsigned char for
local variables. Remove unused variable tp.
* intl/l10nflist.c (_nl_normalize_codeset): Use unsigned char *
for type of codeset. For loosing Solaris systems.
* intl/loadinfo.h: Adapt prototype of _nl_normalize_codeset.
* intl/bindtextdom.c (BINDTEXTDOMAIN): Don't define local variable
len if not needed.
Patches by Jim Meyering.
* Version 0.10.38 released.
1998-04-28 Ulrich Drepper <drepper@cygnus.com>
* loadmsgcat.c (_nl_load_domain): Don't assign the element use_mmap if
mmap is not supported.
* hash-string.h: Don't include <values.h>.
1998-04-27 Ulrich Drepper <drepper@cygnus.com>
* textdomain.c: Use strdup is available.
* localealias.c: Define HAVE_MEMPCPY so that we can use this
function. Define and use semapahores to protect modfication of
global objects when compiling for glibc. Add code to allow
freeing alias table.
* l10nflist.c: Don't assume stpcpy not being a macro.
* gettextP.h: Define internal_function macri if not already done.
Use glibc byte-swap macros instead of defining SWAP when compiled
for glibc.
(struct loaded_domain): Add elements to allow unloading.
* Makefile.in (distclean): Don't remove libintl.h here.
* bindtextdomain.c: Carry over changes from glibc. Use strdup if
available.
* dcgettext.c: Don't assume stpcpy not being a macro. Mark internal
functions. Add memory freeing code for glibc.
* dgettext.c: Update copyright.
* explodename.c: Include stdlib.h and string.h only if they exist.
Use strings.h eventually.
* finddomain.c: Mark internal functions. Use strdup if available.
Add memory freeing code for glibc.
1997-10-10 20:00 Ulrich Drepper <drepper@cygnus.com>
* libgettext.h: Fix dummy textdomain and bindtextdomain macros.
They should return reasonable values.
Reported by Tom Tromey <tromey@cygnus.com>.
1997-09-16 03:33 Ulrich Drepper <drepper@cygnus.com>
* libgettext.h: Define PARAMS also to `args' if __cplusplus is defined.
* intlh.inst.in: Likewise.
Reported by Jean-Marc Lasgouttes <Jean-Marc.Lasgouttes@inria.fr>.
* libintl.glibc: Update from current glibc version.
1997-09-06 02:10 Ulrich Drepper <drepper@cygnus.com>
* intlh.inst.in: Reformat copyright.
1997-08-19 15:22 Ulrich Drepper <drepper@cygnus.com>
* dcgettext.c (DCGETTEXT): Remove wrong comment.
1997-08-16 00:13 Ulrich Drepper <drepper@cygnus.com>
* Makefile.in (install-data): Don't change directory to install.
1997-08-01 14:30 Ulrich Drepper <drepper@cygnus.com>
* cat-compat.c: Fix copyright.
* localealias.c: Don't define strchr unless !HAVE_STRCHR.
* loadmsgcat.c: Update copyright. Fix typos.
* l10nflist.c: Don't define strchr unless !HAVE_STRCHR.
(_nl_make_l10nflist): Handle sponsor and revision correctly.
* gettext.c: Update copyright.
* gettext.h: Likewise.
* hash-string.h: Likewise.
* finddomain.c: Remoave dead code. Define strchr only if
!HAVE_STRCHR.
* explodename.c: Include <sys/types.h>.
* explodename.c: Reformat copyright text.
(_nl_explode_name): Fix typo.
* dcgettext.c: Define and use __set_errno.
(guess_category_value): Don't use setlocale if HAVE_LC_MESSAGES is
not defined.
* bindtextdom.c: Pretty printing.
1997-05-01 02:25 Ulrich Drepper <drepper@cygnus.com>
* dcgettext.c (guess_category_value): Don't depend on
HAVE_LC_MESSAGES. We don't need the macro here.
Patch by Bruno Haible <haible@ilog.fr>.
* cat-compat.c (textdomain): DoN't refer to HAVE_SETLOCALE_NULL
macro. Instead use HAVE_LOCALE_NULL and define it when using
glibc, as in dcgettext.c.
Patch by Bruno Haible <haible@ilog.fr>.
* Makefile.in (CPPFLAGS): New variable. Reported by Franc,ois
Pinard.
Mon Mar 10 06:51:17 1997 Ulrich Drepper <drepper@cygnus.com>
* Makefile.in: Implement handling of libtool.
* gettextP.h: Change data structures for use of generic lowlevel
i18n file handling.
Wed Dec 4 20:21:18 1996 Ulrich Drepper <drepper@cygnus.com>
* textdomain.c: Put parentheses around arguments of memcpy macro
definition.
* localealias.c: Likewise.
* l10nflist.c: Likewise.
* finddomain.c: Likewise.
* bindtextdom.c: Likewise.
Reported by Thomas Esken.
Mon Nov 25 22:57:51 1996 Ulrich Drepper <drepper@cygnus.com>
* textdomain.c: Move definition of `memcpy` macro to right
position.
Fri Nov 22 04:01:58 1996 Ulrich Drepper <drepper@cygnus.com>
* finddomain.c [!HAVE_STRING_H && !_LIBC]: Define memcpy using
bcopy if not already defined. Reported by Thomas Esken.
* bindtextdom.c: Likewise.
* l10nflist.c: Likewise.
* localealias.c: Likewise.
* textdomain.c: Likewise.
Tue Oct 29 11:10:27 1996 Ulrich Drepper <drepper@cygnus.com>
* Makefile.in (libdir): Change to use exec_prefix instead of
prefix. Reported by Knut-HvardAksnes <etokna@eto.ericsson.se>.
Sat Aug 31 03:07:09 1996 Ulrich Drepper <drepper@cygnus.com>
* l10nflist.c (_nl_normalize_codeset): We convert to lower case,
so don't prepend uppercase `ISO' for only numeric arg.
Fri Jul 19 00:15:46 1996 Ulrich Drepper <drepper@cygnus.com>
* l10nflist.c: Move inclusion of argz.h, ctype.h, stdlib.h after
definition of _GNU_SOURCE. Patch by Roland McGrath.
* Makefile.in (uninstall): Fix another bug with `for' loop and
empty arguments. Patch by Jim Meyering. Correct name os
uninstalled files: no intl- prefix anymore.
* Makefile.in (install-data): Again work around shells which
cannot handle mpty for list. Reported by Jim Meyering.
Sat Jul 13 18:11:35 1996 Ulrich Drepper <drepper@cygnus.com>
* Makefile.in (install): Split goal. Now depend on install-exec
and install-data.
(install-exec, install-data): New goals. Created from former
install goal.
Reported by Karl Berry.
Sat Jun 22 04:58:14 1996 Ulrich Drepper <drepper@cygnus.com>
* Makefile.in (MKINSTALLDIRS): New variable. Path to
mkinstalldirs script.
(install): use MKINSTALLDIRS variable or if the script is not present
try to find it in the $top_scrdir).
Wed Jun 19 02:56:56 1996 Ulrich Drepper <drepper@cygnus.com>
* l10nflist.c: Linux libc *partly* includes the argz_* functions.
Grr. Work around by renaming the static version and use macros
for renaming.
Tue Jun 18 20:11:17 1996 Ulrich Drepper <drepper@cygnus.com>
* l10nflist.c: Correct presence test macros of __argz_* functions.
* l10nflist.c: Include <argz.h> based on test of it instead when
__argz_* functions are available.
Reported by Andreas Schwab.
Thu Jun 13 15:17:44 1996 Ulrich Drepper <drepper@cygnus.com>
* explodename.c, l10nflist.c: Define NULL for dumb systems.
Tue Jun 11 17:05:13 1996 Ulrich Drepper <drepper@cygnus.com>
* intlh.inst.in, libgettext.h (dcgettext): Rename local variable
result to __result to prevent name clash.
* l10nflist.c, localealias.c, dcgettext.c: Define _GNU_SOURCE to
get prototype for stpcpy and strcasecmp.
* intlh.inst.in, libgettext.h: Move declaration of
`_nl_msg_cat_cntr' outside __extension__ block to prevent warning
from gcc's -Wnested-extern option.
Fri Jun 7 01:58:00 1996 Ulrich Drepper <drepper@cygnus.com>
* Makefile.in (install): Remove comment.
Thu Jun 6 17:28:17 1996 Ulrich Drepper <drepper@cygnus.com>
* Makefile.in (install): Work around for another Buglix stupidity.
Always use an `else' close for `if's. Reported by Nelson Beebe.
* Makefile.in (intlh.inst): Correct typo in phony rule.
Reported by Nelson Beebe.
Thu Jun 6 01:49:52 1996 Ulrich Drepper <drepper@cygnus.com>
* dcgettext.c (read_alias_file): Rename variable alloca_list to
block_list as the macro calls assume.
Patch by Eric Backus.
* localealias.c [!HAVE_ALLOCA]: Define alloca as macro using
malloc.
(read_alias_file): Rename varriabe alloca_list to block_list as the
macro calls assume.
Patch by Eric Backus.
* l10nflist.c: Correct conditional for <argz.h> inclusion.
Reported by Roland McGrath.
* Makefile.in (all): Depend on all-@USE_INCLUDED_LIBINTL@, not
all-@USE_NLS@.
* Makefile.in (install): intlh.inst comes from local dir, not
$(srcdir).
* Makefile.in (intlh.inst): Special handling of this goal. If
used in gettext, this is really a rul to construct this file. If
used in any other package it is defined as a .PHONY rule with
empty body.
* finddomain.c: Extract locale file information handling into
l10nfile.c. Rename local stpcpy__ function to stpcpy.
* dcgettext.c (stpcpy): Add local definition.
* l10nflist.c: Solve some portability problems. Patches partly by
Thomas Esken. Add local definition of stpcpy.
Tue Jun 4 02:47:49 1996 Ulrich Drepper <drepper@cygnus.com>
* intlh.inst.in: Don't depend including <locale.h> on
HAVE_LOCALE_H. Instead configure must rewrite this fiile
depending on the result of the configure run.
* Makefile.in (install): libintl.inst is now called intlh.inst.
Add rules for updating intlh.inst from intlh.inst.in.
* libintl.inst: Renamed to intlh.inst.in.
* localealias.c, dcgettext.c [__GNUC__]: Define HAVE_ALLOCA to 1
because gcc has __buitlin_alloca.
Reported by Roland McGrath.
Mon Jun 3 00:32:16 1996 Ulrich Drepper <drepper@cygnus.com>
* Makefile.in (installcheck): New goal to fulfill needs of
automake's distcheck.
* Makefile.in (install): Reorder commands so that VERSION is
found.
* Makefile.in (gettextsrcdir): Now use subdirectory intl/ in
@datadir@/gettext.
(COMSRCS): Add l10nfile.c.
(OBJECTS): Add l10nfile.o.
(DISTFILES): Rename to DISTFILE.normal. Remove $(DISTFILES.common).
(DISTFILE.gettext): Remove $(DISTFILES.common).
(all-gettext): Remove goal.
(install): If $(PACKAGE) = gettext install, otherwose do nothing. No
package but gettext itself should install libintl.h + headers.
(dist): Extend goal to work for gettext, too.
(dist-gettext): Remove goal.
* dcgettext.c [!HAVE_ALLOCA]: Define macro alloca by using malloc.
Sun Jun 2 17:33:06 1996 Ulrich Drepper <drepper@cygnus.com>
* loadmsgcat.c (_nl_load_domain): Parameter is now comes from
find_l10nfile.
Sat Jun 1 02:23:03 1996 Ulrich Drepper <drepper@cygnus.com>
* l10nflist.c (__argz_next): Add definition.
* dcgettext.c [!HAVE_ALLOCA]: Add code for handling missing alloca
code. Use new l10nfile handling.
* localealias.c [!HAVE_ALLOCA]: Add code for handling missing
alloca code.
* l10nflist.c: Initial revision.
Tue Apr 2 18:51:18 1996 Ulrich Drepper <drepper@myware>
* Makefile.in (all-gettext): New goal. Same as all-yes.
Thu Mar 28 23:01:22 1996 Karl Eichwalder <ke@ke.central.de>
* Makefile.in (gettextsrcdir): Define using @datadir@.
Tue Mar 26 12:39:14 1996 Ulrich Drepper <drepper@myware>
* finddomain.c: Include <ctype.h>. Reported by Roland McGrath.
Sat Mar 23 02:00:35 1996 Ulrich Drepper <drepper@myware>
* finddomain.c (stpcpy): Rename to stpcpy__ to prevent clashing
with external declaration.
Sat Mar 2 00:47:09 1996 Ulrich Drepper <drepper@myware>
* Makefile.in (all-no): Rename from all_no.
Sat Feb 17 00:25:59 1996 Ulrich Drepper <drepper@myware>
* gettextP.h [loaded_domain]: Array `successor' must now contain up
to 63 elements (because of codeset name normalization).
* finddomain.c: Implement codeset name normalization.
Thu Feb 15 04:39:09 1996 Ulrich Drepper <drepper@myware>
* Makefile.in (all): Define to `all-@USE_NLS@'.
(all-yes, all_no): New goals. `all-no' is noop, `all-yes'
is former all.
Mon Jan 15 21:46:01 1996 Howard Gayle <howard@hal.com>
* localealias.c (alias_compare): Increment string pointers in loop
of strcasecmp replacement.
Fri Dec 29 21:16:34 1995 Ulrich Drepper <drepper@myware>
* Makefile.in (install-src): Who commented this goal out ? :-)
Fri Dec 29 15:08:16 1995 Ulrich Drepper <drepper@myware>
* dcgettext.c (DCGETTEXT): Save `errno'. Failing system calls
should not effect it because a missing catalog is no error.
Reported by Harald K<o:>nig <koenig@tat.physik.uni-tuebingen.de>.
Tue Dec 19 22:09:13 1995 Ulrich Drepper <drepper@myware>
* Makefile.in (Makefile): Explicitly use $(SHELL) for running
shell scripts.
Fri Dec 15 17:34:59 1995 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* Makefile.in (install-src): Only install library and header when
we use the own implementation. Don't do it when using the
system's gettext or catgets functions.
* dcgettext.c (find_msg): Must not swap domain->hash_size here.
Sat Dec 9 16:24:37 1995 Ulrich Drepper <drepper@myware>
* localealias.c, libintl.inst, libgettext.h, hash-string.h,
gettextP.h, finddomain.c, dcgettext.c, cat-compat.c:
Use PARAMS instead of __P. Suggested by Roland McGrath.
Tue Dec 5 11:39:14 1995 Larry Schwimmer <rosebud@cyclone.stanford.edu>
* libgettext.h: Use `#if !defined (_LIBINTL_H)' instead of `#if
!_LIBINTL_H' because Solaris defines _LIBINTL_H as empty.
Mon Dec 4 15:42:07 1995 Ulrich Drepper <drepper@myware>
* Makefile.in (install-src):
Install libintl.inst instead of libintl.h.install.
Sat Dec 2 22:51:38 1995 Marcus Daniels <marcus@sysc.pdx.edu>
* cat-compat.c (textdomain):
Reverse order in which files are tried you load. First
try local file, when this failed absolute path.
Wed Nov 29 02:03:53 1995 Nelson H. F. Beebe <beebe@math.utah.edu>
* cat-compat.c (bindtextdomain): Add missing { }.
Sun Nov 26 18:21:41 1995 Ulrich Drepper <drepper@myware>
* libintl.inst: Add missing __P definition. Reported by Nelson Beebe.
* Makefile.in:
Add dummy `all' and `dvi' goals. Reported by Tom Tromey.
Sat Nov 25 16:12:01 1995 Franc,ois Pinard <pinard@iro.umontreal.ca>
* hash-string.h: Capitalize arguments of macros.
Sat Nov 25 12:01:36 1995 Ulrich Drepper <drepper@myware>
* Makefile.in (DISTFILES): Prevent files names longer than 13
characters. libintl.h.glibc->libintl.glibc,
libintl.h.install->libintl.inst. Reported by Joshua R. Poulson.
Sat Nov 25 11:31:12 1995 Eric Backus <ericb@lsid.hp.com>
* dcgettext.c: Fix bug in preprocessor conditionals.
Sat Nov 25 02:35:27 1995 Nelson H. F. Beebe <beebe@math.utah.edu>
* libgettext.h: Solaris cc does not understand
#if !SYMBOL1 && !SYMBOL2. Sad but true.
Thu Nov 23 16:22:14 1995 Ulrich Drepper <drepper@myware>
* hash-string.h (hash_string):
Fix for machine with >32 bit `unsigned long's.
* dcgettext.c (DCGETTEXT):
Fix horrible bug in loop for alternative translation.
Thu Nov 23 01:45:29 1995 Ulrich Drepper <drepper@myware>
* po2tbl.sed.in, linux-msg.sed, xopen-msg.sed:
Some further simplifications in message number generation.
Mon Nov 20 21:08:43 1995 Ulrich Drepper <drepper@myware>
* libintl.h.glibc: Use __const instead of const in prototypes.
* Makefile.in (install-src):
Install libintl.h.install instead of libintl.h. This
is a stripped-down version. Suggested by Peter Miller.
* libintl.h.install, libintl.h.glibc: Initial revision.
* localealias.c (_nl_expand_alias, read_alias_file):
Protect prototypes in type casts by __P.
Tue Nov 14 16:43:58 1995 Ulrich Drepper <drepper@myware>
* hash-string.h: Correct prototype for hash_string.
Sun Nov 12 12:42:30 1995 Ulrich Drepper <drepper@myware>
* hash-string.h (hash_string): Add prototype.
* gettextP.h: Fix copyright.
(SWAP): Add prototype.
Wed Nov 8 22:56:33 1995 Ulrich Drepper <drepper@myware>
* localealias.c (read_alias_file): Forgot sizeof.
Avoid calling *printf function. This introduces a big overhead.
Patch by Roland McGrath.
Tue Nov 7 14:21:08 1995 Ulrich Drepper <drepper@myware>
* finddomain.c, cat-compat.c: Wrong indentation in #if for stpcpy.
* finddomain.c (stpcpy):
Define substitution function local. The macro was to flaky.
* cat-compat.c: Fix typo.
* xopen-msg.sed, linux-msg.sed:
While bringing message number to right place only accept digits.
* linux-msg.sed, xopen-msg.sed: Now that the counter does not have
leading 0s we don't need to remove them. Reported by Marcus
Daniels.
* Makefile.in (../po/cat-id-tbl.o): Use $(top_srdir) in
dependency. Reported by Marcus Daniels.
* cat-compat.c: (stpcpy) [!_LIBC && !HAVE_STPCPY]: Define replacement.
Generally cleanup using #if instead of #ifndef.
* Makefile.in: Correct typos in comment. By Franc,ois Pinard.
Mon Nov 6 00:27:02 1995 Ulrich Drepper <drepper@myware>
* Makefile.in (install-src): Don't install libintl.h and libintl.a
if we use an available gettext implementation.
Sun Nov 5 22:02:08 1995 Ulrich Drepper <drepper@myware>
* libgettext.h: Fix typo: HAVE_CATGETTS -> HAVE_CATGETS. Reported
by Franc,ois Pinard.
* libgettext.h: Use #if instead of #ifdef/#ifndef.
* finddomain.c:
Comments describing what has to be done should start with FIXME.
Sun Nov 5 19:38:01 1995 Ulrich Drepper <drepper@myware>
* Makefile.in (DISTFILES): Split. Use DISTFILES with normal meaning.
DISTFILES.common names the files common to both dist goals.
DISTFILES.gettext are the files only distributed in GNU gettext.
Sun Nov 5 17:32:54 1995 Ulrich Drepper <drepper@myware>
* dcgettext.c (DCGETTEXT): Correct searching in derived locales.
This was necessary since a change in _nl_find_msg several weeks
ago. I really don't know this is still not fixed.
Sun Nov 5 12:43:12 1995 Ulrich Drepper <drepper@myware>
* loadmsgcat.c (_nl_load_domain): Test for FILENAME == NULL. This
might mark a special condition.
* finddomain.c (make_entry_rec): Don't make illegal entry as decided.
* Makefile.in (dist): Suppress error message when ln failed.
Get files from $(srcdir) explicitly.
* libgettext.h (gettext_const): Rename to gettext_noop.
Fri Nov 3 07:36:50 1995 Ulrich Drepper <drepper@myware>
* finddomain.c (make_entry_rec):
Protect against wrong locale names by testing mask.
* libgettext.h (gettext_const): Add macro definition.
Capitalize macro arguments.
Thu Nov 2 23:15:51 1995 Ulrich Drepper <drepper@myware>
* finddomain.c (_nl_find_domain):
Test for pointer != NULL before accessing value.
Reported by Tom Tromey.
* gettext.c (NULL):
Define as (void*)0 instad of 0. Reported by Franc,ois Pinard.
Mon Oct 30 21:28:52 1995 Ulrich Drepper <drepper@myware>
* po2tbl.sed.in: Serious typo bug fixed by Jim Meyering.
Sat Oct 28 23:20:47 1995 Ulrich Drepper <drepper@myware>
* libgettext.h: Disable dcgettext optimization for Solaris 2.3.
* localealias.c (alias_compare):
Peter Miller reported that tolower in some systems is
even dumber than I thought. Protect call by `isupper'.
Fri Oct 27 22:22:51 1995 Ulrich Drepper <drepper@myware>
* Makefile.in (libdir, includedir): New variables.
(install-src): Install libintl.a and libintl.h in correct dirs.
Fri Oct 27 22:07:29 1995 Ulrich Drepper <drepper@myware>
* Makefile.in (SOURCES): Fix typo: intrl.compat.c -> intl-compat.c.
* po2tbl.sed.in: Patch for buggy SEDs by Christian von Roques.
* localealias.c:
Fix typo and superflous test. Reported by Christian von Roques.
Fri Oct 6 11:52:05 1995 Ulrich Drepper <drepper@myware>
* finddomain.c (_nl_find_domain):
Correct some remainder from the pre-CEN syntax. Now
we don't have a constant number of successors anymore.
Wed Sep 27 21:41:13 1995 Ulrich Drepper <drepper@myware>
* Makefile.in (DISTFILES): Add libintl.h.glibc.
* Makefile.in (dist-libc): Add goal for packing sources for glibc.
(COMSRCS, COMHDRS): Splitted to separate sources shared with glibc.
* loadmsgcat.c: Forget to continue #if line.
* localealias.c:
[_LIBC]: Rename strcasecmp to __strcasecmp to keep ANSI C name
space clean.
* dcgettext.c, finddomain.c: Better comment to last change.
* loadmsgcat.c:
[_LIBC]: Rename fstat, open, close, read, mmap, and munmap to
__fstat, __open, __close, __read, __mmap, and __munmap resp
to keep ANSI C name space clean.
* finddomain.c:
[_LIBC]: Rename stpcpy to __stpcpy to keep ANSI C name space clean.
* dcgettext.c:
[_LIBC]: Rename getced and stpcpy to __getcwd and __stpcpy resp to
keep ANSI C name space clean.
* libgettext.h:
Include sys/types.h for those old SysV systems out there.
Reported by Francesco Potorti`.
* loadmsgcat.c (use_mmap): Define if compiled for glibc.
* bindtextdom.c: Include all those standard headers
unconditionally if _LIBC is defined.
* finddomain.c: Fix 2 times defiend -> defined.
* textdomain.c: Include libintl.h instead of libgettext.h when
compiling for glibc. Include all those standard headers
unconditionally if _LIBC is defined.
* localealias.c, loadmsgcat.c: Prepare to be compiled in glibc.
* gettext.c:
Include libintl.h instead of libgettext.h when compiling for glibc.
Get NULL from stddef.h if we compile for glibc.
* finddomain.c: Include libintl.h instead of libgettext.h when
compiling for glibc. Include all those standard headers
unconditionally if _LIBC is defined.
* dcgettext.c: Include all those standard headers unconditionally
if _LIBC is defined.
* dgettext.c: If compiled in glibc include libintl.h instead of
libgettext.h.
(locale.h): Don't rely on HAVE_LOCALE_H when compiling for glibc.
* dcgettext.c: If compiled in glibc include libintl.h instead of
libgettext.h.
(getcwd): Don't rely on HAVE_GETCWD when compiling for glibc.
* bindtextdom.c:
If compiled in glibc include libintl.h instead of libgettext.h.
Mon Sep 25 22:23:06 1995 Ulrich Drepper <drepper@myware>
* localealias.c (_nl_expand_alias): Don't call bsearch if NMAP <= 0.
Reported by Marcus Daniels.
* cat-compat.c (bindtextdomain):
String used in putenv must not be recycled.
Reported by Marcus Daniels.
* libgettext.h (__USE_GNU_GETTEXT):
Additional symbol to signal that we use GNU gettext
library.
* cat-compat.c (bindtextdomain):
Fix bug with the strange stpcpy replacement.
Reported by Nelson Beebe.
Sat Sep 23 08:23:51 1995 Ulrich Drepper <drepper@myware>
* cat-compat.c: Include <string.h> for stpcpy prototype.
* localealias.c (read_alias_file):
While expand strdup code temporary variable `cp' hided
higher level variable with same name. Rename to `tp'.
* textdomain.c (textdomain):
Avoid warning by using temporary variable in strdup code.
* finddomain.c (_nl_find_domain): Remove unused variable `application'.
Thu Sep 21 15:51:44 1995 Ulrich Drepper <drepper@myware>
* localealias.c (alias_compare):
Use strcasecmp() only if available. Else use
implementation in place.
* intl-compat.c:
Wrapper functions now call *__ functions instead of __*.
* libgettext.h: Declare prototypes for *__ functions instead for __*.
* cat-compat.c, loadmsgcat.c:
Don't use xmalloc, xstrdup, and stpcpy. These functions are not part
of the standard libc and so prevent libintl.a from being used
standalone.
* bindtextdom.c:
Don't use xmalloc, xstrdup, and stpcpy. These functions are not part
of the standard libc and so prevent libintl.a from being used
standalone.
Rename to bindtextdomain__ if not used in GNU C Library.
* dgettext.c:
Rename function to dgettext__ if not used in GNU C Library.
* gettext.c:
Don't use xmalloc, xstrdup, and stpcpy. These functions are not part
of the standard libc and so prevent libintl.a from being used
standalone.
Functions now called gettext__ if not used in GNU C Library.
* dcgettext.c, localealias.c, textdomain.c, finddomain.c:
Don't use xmalloc, xstrdup, and stpcpy. These functions are not part
of the standard libc and so prevent libintl.a from being used
standalone.
Sun Sep 17 23:14:49 1995 Ulrich Drepper <drepper@myware>
* finddomain.c: Correct some bugs in handling of CEN standard
locale definitions.
Thu Sep 7 01:49:28 1995 Ulrich Drepper <drepper@myware>
* finddomain.c: Implement CEN syntax.
* gettextP.h (loaded_domain): Extend number of successors to 31.
Sat Aug 19 19:25:29 1995 Ulrich Drepper <drepper@myware>
* Makefile.in (aliaspath): Remove path to X11 locale dir.
* Makefile.in: Make install-src depend on install. This helps
gettext to install the sources and other packages can use the
install goal.
Sat Aug 19 15:19:33 1995 Ulrich Drepper <drepper@myware>
* Makefile.in (uninstall): Remove stuff installed by install-src.
Tue Aug 15 13:13:53 1995 Ulrich Drepper <drepper@myware>
* VERSION.in: Initial revision.
* Makefile.in (DISTFILES):
Add VERSION file. This is not necessary for gettext, but
for other packages using this library.
Tue Aug 15 06:16:44 1995 Ulrich Drepper <drepper@myware>
* gettextP.h (_nl_find_domain):
New prototype after changing search strategy.
* finddomain.c (_nl_find_domain):
We now try only to find a specified catalog. Fall back to other
catalogs listed in the locale list is now done in __dcgettext.
* dcgettext.c (__dcgettext):
Now we provide message fall back even to different languages.
I.e. if a message is not available in one language all the other
in the locale list a tried. Formerly fall back was only possible
within one language. Implemented by moving one loop from
_nl_find_domain to here.
Mon Aug 14 23:45:50 1995 Ulrich Drepper <drepper@myware>
* Makefile.in (gettextsrcdir):
Directory where source of GNU gettext library are made
available.
(INSTALL, INSTALL_DATA): Programs used for installing sources.
(gettext-src): New. Rule to install GNU gettext sources for use in
gettextize shell script.
Sun Aug 13 14:40:48 1995 Ulrich Drepper <drepper@myware>
* loadmsgcat.c (_nl_load_domain):
Use mmap for loading only when munmap function is
also available.
* Makefile.in (install): Depend on `all' goal.
Wed Aug 9 11:04:33 1995 Ulrich Drepper <drepper@myware>
* localealias.c (read_alias_file):
Do not overwrite '\n' when terminating alias value string.
* localealias.c (read_alias_file):
Handle long lines. Ignore the rest not fitting in
the buffer after the initial `fgets' call.
Wed Aug 9 00:54:29 1995 Ulrich Drepper <drepper@myware>
* gettextP.h (_nl_load_domain):
Add prototype, replacing prototype for _nl_load_msg_cat.
* finddomain.c (_nl_find_domain):
Remove unneeded variable filename and filename_len.
(expand_alias): Remove prototype because functions does not
exist anymore.
* localealias.c (read_alias_file):
Change type of fname_len parameter to int.
(xmalloc): Add prototype.
* loadmsgcat.c: Better prototypes for xmalloc.
Tue Aug 8 22:30:39 1995 Ulrich Drepper <drepper@myware>
* finddomain.c (_nl_find_domain):
Allow alias name to be constructed from the four components.
* Makefile.in (aliaspath): New variable. Set to preliminary value.
(SOURCES): Add localealias.c.
(OBJECTS): Add localealias.o.
* gettextP.h: Add prototype for _nl_expand_alias.
* finddomain.c: Aliasing handled in intl/localealias.c.
* localealias.c: Aliasing for locale names.
* bindtextdom.c: Better prototypes for xmalloc and xstrdup.
Mon Aug 7 23:47:42 1995 Ulrich Drepper <drepper@myware>
* Makefile.in (DISTFILES): gettext.perl is now found in misc/.
* cat-compat.c (bindtextdomain):
Correct implementation. dirname parameter was not used.
Reported by Marcus Daniels.
* gettextP.h (loaded_domain):
New fields `successor' and `decided' for oo, lazy
message handling implementation.
* dcgettext.c:
Adopt for oo, lazy message handliing.
Now we can inherit translations from less specific locales.
(find_msg): New function.
* loadmsgcat.c, finddomain.c:
Complete rewrite. Implement oo, lazy message handling :-).
We now have an additional environment variable `LANGUAGE' with
a higher priority than LC_ALL for the LC_MESSAGE locale.
Here we can set a colon separated list of specifications each
of the form `language[_territory[.codeset]][@modifier]'.
Sat Aug 5 09:55:42 1995 Ulrich Drepper <drepper@myware>
* finddomain.c (unistd.h):
Include to get _PC_PATH_MAX defined on system having it.
Fri Aug 4 22:42:00 1995 Ulrich Drepper <drepper@myware>
* finddomain.c (stpcpy): Include prototype.
* Makefile.in (dist): Remove `copying instead' message.
Wed Aug 2 18:52:03 1995 Ulrich Drepper <drepper@myware>
* Makefile.in (ID, TAGS): Do not use $^.
Tue Aug 1 20:07:11 1995 Ulrich Drepper <drepper@myware>
* Makefile.in (TAGS, ID): Use $^ as command argument.
(TAGS): Give etags -o option t write to current directory,
not $(srcdir).
(ID): Use $(srcdir) instead os $(top_srcdir)/src.
(distclean): Remove ID.
Sun Jul 30 11:51:46 1995 Ulrich Drepper <drepper@myware>
* Makefile.in (gnulocaledir):
New variable, always using share/ for data directory.
(DEFS): Add GNULOCALEDIR, used in finddomain.c.
* finddomain.c (_nl_default_dirname):
Set to GNULOCALEDIR, because it always has to point
to the directory where GNU gettext Library writes it to.
* intl-compat.c (textdomain, bindtextdomain):
Undefine macros before function definition.
Sat Jul 22 01:10:02 1995 Ulrich Drepper <drepper@myware>
* libgettext.h (_LIBINTL_H):
Protect definition in case where this file is included as
libgettext.h on Solaris machines. Add comment about this.
Wed Jul 19 02:36:42 1995 Ulrich Drepper <drepper@myware>
* intl-compat.c (textdomain): Correct typo.
Wed Jul 19 01:51:35 1995 Ulrich Drepper <drepper@myware>
* dcgettext.c (dcgettext): Function now called __dcgettext.
* dgettext.c (dgettext): Now called __dgettext and calls
__dcgettext.
* gettext.c (gettext):
Function now called __gettext and calls __dgettext.
* textdomain.c (textdomain): Function now called __textdomain.
* bindtextdom.c (bindtextdomain): Function now called
__bindtextdomain.
* intl-compat.c: Initial revision.
* Makefile.in (SOURCES): Add intl-compat.c.
(OBJECTS): We always compile the GNU gettext library functions.
OBJECTS contains all objects but cat-compat.o, ../po/cat-if-tbl.o,
and intl-compat.o.
(GETTOBJS): Contains now only intl-compat.o.
* libgettext.h:
Re-include protection matches dualistic character of libgettext.h.
For all functions in GNU gettext library define __ counter part.
* finddomain.c (strchr): Define as index if not found in C library.
(_nl_find_domain): For relative paths paste / in between.
Tue Jul 18 16:37:45 1995 Ulrich Drepper <drepper@myware>
* loadmsgcat.c, finddomain.c: Add inclusion of sys/types.h.
* xopen-msg.sed: Fix bug with `msgstr ""' lines.
A little bit better comments.
Tue Jul 18 01:18:27 1995 Ulrich Drepper <drepper@myware>
* Makefile.in:
po-mode.el, makelinks, combine-sh are now found in ../misc.
* po-mode.el, makelinks, combine-sh, elisp-comp:
Moved to ../misc/.
* libgettext.h, gettextP.h, gettext.h: Uniform test for __STDC__.
Sun Jul 16 22:33:02 1995 Ulrich Drepper <drepper@myware>
* Makefile.in (INSTALL, INSTALL_DATA): New variables.
(install-data, uninstall): Install/uninstall .elc file.
* po-mode.el (Installation comment):
Add .pox as possible extension of .po files.
Sun Jul 16 13:23:27 1995 Ulrich Drepper <drepper@myware>
* elisp-comp: Complete new version by Franc,ois: This does not
fail when not compiling in the source directory.
Sun Jul 16 00:12:17 1995 Ulrich Drepper <drepper@myware>
* Makefile.in (../po/cat-id-tbl.o):
Use $(MAKE) instead of make for recursive make.
* Makefile.in (.el.elc): Use $(SHELL) instead of /bin/sh.
(install-exec): Add missing dummy goal.
(install-data, uninstall): @ in multi-line shell command at
beginning, not in front of echo. Reported by Eric Backus.
Sat Jul 15 00:21:28 1995 Ulrich Drepper <drepper@myware>
* Makefile.in (DISTFILES):
Rename libgettext.perl to gettext.perl to fit in 14 chars
file systems.
* gettext.perl:
Rename to gettext.perl to fit in 14 chars file systems.
Thu Jul 13 23:17:20 1995 Ulrich Drepper <drepper@myware>
* cat-compat.c: If !STDC_HEADERS try to include malloc.h.
Thu Jul 13 20:55:02 1995 Ulrich Drepper <drepper@myware>
* po2tbl.sed.in: Pretty printing.
* linux-msg.sed, xopen-msg.sed:
Correct bugs with handling substitute flags in branches.
* hash-string.h (hash_string):
Old K&R compilers don't under stand `unsigned char'.
* gettext.h (nls_uint32):
Some old K&R compilers (eg HP) don't understand `unsigned int'.
* cat-compat.c (msg_to_cat_id): De-ANSI-fy prototypes.
Thu Jul 13 01:34:33 1995 Ulrich Drepper <drepper@myware>
* Makefile.in (ELCFILES): New variable.
(DISTFILES): Add elisp-comp.
Add implicit rule for .el -> .elc compilation.
(install-data): install $ELCFILES
(clean): renamed po-to-tbl and po-to-msg to po2tbl and po2msg resp.
* elisp-comp: Initial revision
Wed Jul 12 16:14:52 1995 Ulrich Drepper <drepper@myware>
* Makefile.in:
cat-id-tbl.c is now found in po/. This enables us to use an identical
intl/ directory in all packages.
* dcgettext.c (dcgettext): hashing does not work for table size <= 2.
* textdomain.c: fix typo (#if def -> #if defined)
Tue Jul 11 18:44:43 1995 Ulrich Drepper <drepper@myware>
* Makefile.in (stamp-cat-id): use top_srcdir to address source files
(DISTFILES,distclean): move tupdate.perl to src/
* po-to-tbl.sed.in:
add additional jump to clear change flag to recognize multiline strings
Tue Jul 11 01:32:50 1995 Ulrich Drepper <drepper@myware>
* textdomain.c: Protect inclusion of stdlib.h and string.h.
* loadmsgcat.c: Protect inclusion of stdlib.h.
* libgettext.h: Protect inclusion of locale.h.
Allow use in C++ programs.
Define NULL is not happened already.
* Makefile.in (DISTFILES): ship po-to-tbl.sed.in instead of
po-to-tbl.sed.
(distclean): remove po-to-tbl.sed and tupdate.perl.
* tupdate.perl.in: Substitute Perl path even in exec line.
Don't include entries without translation from old .po file.
Tue Jul 4 00:41:51 1995 Ulrich Drepper <drepper@myware>
* tupdate.perl.in: use "Updated: " in msgid "".
* cat-compat.c: Fix typo (LOCALDIR -> LOCALEDIR).
Define getenv if !__STDC__.
* bindtextdom.c: Protect stdlib.h and string.h inclusion.
Define free if !__STDC__.
* finddomain.c: Change DEF_MSG_DOM_DIR to LOCALEDIR.
Define free if !__STDC__.
* cat-compat.c: Change DEF_MSG_DOM_DIR to LOCALEDIR.
Mon Jul 3 23:56:30 1995 Ulrich Drepper <drepper@myware>
* Makefile.in: Use LOCALEDIR instead of DEF_MSG_DOM_DIR.
Remove unneeded $(srcdir) from Makefile.in dependency.
* makelinks: Add copyright and short description.
* po-mode.el: Last version for 0.7.
* tupdate.perl.in: Fix die message.
* dcgettext.c: Protect include of string.h.
* gettext.c: Protect include of stdlib.h and further tries to get NULL.
* finddomain.c: Some corrections in includes.
* Makefile.in (INCLUDES): Prune list correct path to Makefile.in.
* po-to-tbl.sed: Adopt for new .po file format.
* linux-msg.sed, xopen-msg.sed: Adopt for new .po file format.
Sun Jul 2 23:55:03 1995 Ulrich Drepper <drepper@myware>
* tupdate.perl.in: Complete rewrite for new .po file format.
Sun Jul 2 02:06:50 1995 Ulrich Drepper <drepper@myware>
* First official release. This directory contains all the code
needed to internationalize own packages. It provides functions
which allow to use the X/Open catgets function with an interface
like the Uniforum gettext function. For system which does not
have neither of those a complete implementation is provided.
# Makefile for directory with message catalog handling in GNU NLS Utilities.
# Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
# Copyright (C) 1995-1998, 2000, 2001 Free Software Foundation, Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
......@@ -28,75 +28,106 @@ VPATH = @srcdir@
prefix = @prefix@
exec_prefix = @exec_prefix@
transform = @program_transform_name@
libdir = $(exec_prefix)/lib
includedir = $(prefix)/include
datadir = $(prefix)/@DATADIRNAME@
libdir = @libdir@
includedir = @includedir@
datadir = @datadir@
localedir = $(datadir)/locale
gnulocaledir = $(prefix)/share/locale
gettextsrcdir = @datadir@/gettext/intl
aliaspath = $(localedir):.
gettextsrcdir = $(datadir)/gettext/intl
aliaspath = $(localedir)
subdir = intl
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
MKINSTALLDIRS = @MKINSTALLDIRS@
mkinstalldirs = $(SHELL) `case "$(MKINSTALLDIRS)" in /*) echo "$(MKINSTALLDIRS)" ;; *) echo "$(top_builddir)/$(MKINSTALLDIRS)" ;; esac`
l = @l@
l = @INTL_LIBTOOL_SUFFIX_PREFIX@
AR = ar
CC = @CC@
LIBTOOL = @LIBTOOL@
RANLIB = @RANLIB@
YACC = @INTLBISON@ -y -d
YFLAGS = --name-prefix=__gettext
DEFS = -DLOCALEDIR=\"$(localedir)\" -DGNULOCALEDIR=\"$(gnulocaledir)\" \
-DLOCALE_ALIAS_PATH=\"$(aliaspath)\" @DEFS@
DEFS = -DLOCALEDIR=\"$(localedir)\" -DLOCALE_ALIAS_PATH=\"$(aliaspath)\" \
-DLIBDIR=\"$(libdir)\" @DEFS@
CPPFLAGS = @CPPFLAGS@
CFLAGS = @CFLAGS@
LDFLAGS = @LDFLAGS@
COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS)
HEADERS = $(COMHDRS) libgettext.h loadinfo.h
HEADERS = $(COMHDRS) libgnuintl.h libgettext.h loadinfo.h
COMHDRS = gettext.h gettextP.h hash-string.h
SOURCES = $(COMSRCS) intl-compat.c cat-compat.c
SOURCES = $(COMSRCS) intl-compat.c
COMSRCS = bindtextdom.c dcgettext.c dgettext.c gettext.c \
finddomain.c loadmsgcat.c localealias.c textdomain.c l10nflist.c \
explodename.c
explodename.c dcigettext.c dcngettext.c dngettext.c ngettext.c plural.y \
localcharset.c
OBJECTS = @INTLOBJS@ bindtextdom.$lo dcgettext.$lo dgettext.$lo gettext.$lo \
finddomain.$lo loadmsgcat.$lo localealias.$lo textdomain.$lo l10nflist.$lo \
explodename.$lo
CATOBJS = cat-compat.$lo ../po/cat-id-tbl.$lo
explodename.$lo dcigettext.$lo dcngettext.$lo dngettext.$lo ngettext.$lo \
plural.$lo localcharset.$lo
GETTOBJS = intl-compat.$lo
DISTFILES.common = ChangeLog Makefile.in linux-msg.sed po2tbl.sed.in \
xopen-msg.sed $(HEADERS) $(SOURCES)
DISTFILES.common = Makefile.in \
config.charset locale.alias ref-add.sin ref-del.sin $(HEADERS) $(SOURCES)
DISTFILES.generated = plural.c
DISTFILES.normal = VERSION
DISTFILES.gettext = libintl.glibc intlh.inst.in
DISTFILES.gettext = libintl.glibc
DISTFILES.obsolete = xopen-msg.sed linux-msg.sed po2tbl.sed.in cat-compat.c
# Libtool's library version information for libintl.
# Before making a gettext release, the gettext maintainer must change this
# according to the libtool documentation, section "Library interface versions".
# Maintainers of other packages that include the intl directory must *not*
# change these values.
LTV_CURRENT=1
LTV_REVISION=1
LTV_AGE=0
.SUFFIXES:
.SUFFIXES: .c .o .lo
.SUFFIXES: .c .y .o .lo .sin .sed
.c.o:
$(COMPILE) $<
.c.lo:
$(LIBTOOL) --mode=compile $(COMPILE) $<
INCLUDES = -I.. -I. -I$(top_srcdir)/intl -I$(top_srcdir)/lib
.y.c:
$(YACC) $(YFLAGS) --output $@ $<
rm -f $*.h
all: all-@USE_INCLUDED_LIBINTL@
.sin.sed:
sed -e '/^#/d' -e 's/@''PACKAGE''@/@PACKAGE@/g' $< > t-$@
mv t-$@ $@
INCLUDES = -I.. -I. -I$(top_srcdir)/intl
all-yes: libintl.$la intlh.inst
all-no:
all: all-@USE_INCLUDED_LIBINTL@
all-yes: libintl.$la libintl.h charset.alias ref-add.sed ref-del.sed
all-no: all-no-@BUILD_INCLUDED_LIBINTL@
all-no-yes: libgnuintl.$la
all-no-no:
libintl.a: $(OBJECTS)
libintl.a libgnuintl.a: $(OBJECTS)
rm -f $@
$(AR) cru $@ $(OBJECTS)
$(RANLIB) $@
libintl.la: $(OBJECTS)
$(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $@ $(OBJECTS) \
-version-info 1:0 -rpath $(libdir)
libintl.la libgnuintl.la: $(OBJECTS)
$(LIBTOOL) --mode=link \
$(CC) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) $(LDFLAGS) -o $@ \
$(OBJECTS) @LIBICONV@ \
-version-info $(LTV_CURRENT):$(LTV_REVISION):$(LTV_AGE) \
-rpath $(libdir) \
-no-undefined
../po/cat-id-tbl.$lo: ../po/cat-id-tbl.c $(top_srcdir)/po/$(PACKAGE).pot
cd ../po && $(MAKE) cat-id-tbl.$lo
libintl.h: libgnuintl.h
cp $(srcdir)/libgnuintl.h libintl.h
charset.alias: config.charset
$(SHELL) $(srcdir)/config.charset '@host@' > t-$@
mv t-$@ $@
check: all
......@@ -104,36 +135,70 @@ check: all
# only use the library should use install instead.
# We must not install the libintl.h/libintl.a files if we are on a
# system which has the gettext() function in its C library or in a
# separate library or use the catgets interface. A special case is
# where configure found a previously installed GNU gettext library.
# system which has the GNU gettext() function in its C library or in a
# separate library.
# If you want to use the one which comes with this version of the
# package, you have to use `configure --with-included-gettext'.
install: install-exec install-data
install-exec: all
if test "$(PACKAGE)" = "gettext" \
&& test '@INTLOBJS@' = '$(GETTOBJS)'; then \
if test -r $(MKINSTALLDIRS); then \
$(MKINSTALLDIRS) $(libdir) $(includedir); \
$(mkinstalldirs) $(DESTDIR)$(libdir) $(DESTDIR)$(includedir); \
$(INSTALL_DATA) libintl.h $(DESTDIR)$(includedir)/libintl.h; \
$(LIBTOOL) --mode=install \
$(INSTALL_DATA) libintl.$la $(DESTDIR)$(libdir)/libintl.$la; \
else \
: ; \
fi
if test '@USE_INCLUDED_LIBINTL@' = yes; then \
$(mkinstalldirs) $(DESTDIR)$(libdir); \
temp=$(DESTDIR)$(libdir)/t-charset.alias; \
dest=$(DESTDIR)$(libdir)/charset.alias; \
if test -f $(DESTDIR)$(libdir)/charset.alias; then \
orig=$(DESTDIR)$(libdir)/charset.alias; \
sed -f ref-add.sed $$orig > $$temp; \
$(INSTALL_DATA) $$temp $$dest; \
rm -f $$temp; \
else \
$(top_srcdir)/mkinstalldirs $(libdir) $(includedir); \
if test @GLIBC21@ = no; then \
orig=charset.alias; \
sed -f ref-add.sed $$orig > $$temp; \
$(INSTALL_DATA) $$temp $$dest; \
rm -f $$temp; \
fi; \
fi; \
$(INSTALL_DATA) intlh.inst $(includedir)/libintl.h; \
$(INSTALL_DATA) libintl.a $(libdir)/libintl.a; \
$(mkinstalldirs) $(DESTDIR)$(localedir); \
test -f $(DESTDIR)$(localedir)/locale.alias \
&& orig=$(DESTDIR)$(localedir)/locale.alias \
|| orig=$(srcdir)/locale.alias; \
temp=$(DESTDIR)$(localedir)/t-locale.alias; \
dest=$(DESTDIR)$(localedir)/locale.alias; \
sed -f ref-add.sed $$orig > $$temp; \
$(INSTALL_DATA) $$temp $$dest; \
rm -f $$temp; \
else \
: ; \
fi
install-data: all
if test "$(PACKAGE)" = "gettext"; then \
if test -r $(MKINSTALLDIRS); then \
$(MKINSTALLDIRS) $(gettextsrcdir); \
else \
$(top_srcdir)/mkinstalldirs $(gettextsrcdir); \
fi; \
$(INSTALL_DATA) VERSION $(gettextsrcdir)/VERSION; \
$(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \
$(INSTALL_DATA) VERSION $(DESTDIR)$(gettextsrcdir)/VERSION; \
$(INSTALL_DATA) ChangeLog.inst $(DESTDIR)$(gettextsrcdir)/ChangeLog; \
dists="$(DISTFILES.common)"; \
for file in $$dists; do \
$(INSTALL_DATA) $(srcdir)/$$file $(gettextsrcdir)/$$file; \
$(INSTALL_DATA) $(srcdir)/$$file \
$(DESTDIR)$(gettextsrcdir)/$$file; \
done; \
chmod a+x $(DESTDIR)$(gettextsrcdir)/config.charset; \
dists="$(DISTFILES.generated)"; \
for file in $$dists; do \
if test -f $$file; then dir=.; else dir=$(srcdir); fi; \
$(INSTALL_DATA) $$dir/$$file \
$(DESTDIR)$(gettextsrcdir)/$$file; \
done; \
dists="$(DISTFILES.obsolete)"; \
for file in $$dists; do \
rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
done; \
else \
: ; \
......@@ -143,14 +208,51 @@ install-data: all
installcheck:
uninstall:
dists="$(DISTFILES.common)"; \
for file in $$dists; do \
rm -f $(gettextsrcdir)/$$file; \
done
if test "$(PACKAGE)" = "gettext" \
&& test '@INTLOBJS@' = '$(GETTOBJS)'; then \
rm -f $(DESTDIR)$(includedir)/libintl.h; \
$(LIBTOOL) --mode=uninstall \
rm -f $(DESTDIR)$(libdir)/libintl.$la; \
else \
: ; \
fi
if test '@USE_INCLUDED_LIBINTL@' = yes; then \
if test -f $(DESTDIR)$(libdir)/charset.alias; then \
temp=$(DESTDIR)$(libdir)/t-charset.alias; \
dest=$(DESTDIR)$(libdir)/charset.alias; \
sed -f ref-del.sed $$dest > $$temp; \
if grep '^# Packages using this file: $$' $$temp > /dev/null; then \
rm -f $$dest; \
else \
$(INSTALL_DATA) $$temp $$dest; \
fi; \
rm -f $$temp; \
fi; \
if test -f $(DESTDIR)$(localedir)/locale.alias; then \
temp=$(DESTDIR)$(localedir)/t-locale.alias; \
dest=$(DESTDIR)$(localedir)/locale.alias; \
sed -f ref-del.sed $$dest > $$temp; \
if grep '^# Packages using this file: $$' $$temp > /dev/null; then \
rm -f $$dest; \
else \
$(INSTALL_DATA) $$temp $$dest; \
fi; \
rm -f $$temp; \
fi; \
else \
: ; \
fi
if test "$(PACKAGE)" = "gettext"; then \
for file in VERSION ChangeLog $(DISTFILES.common) $(DISTFILES.generated); do \
rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
done; \
else \
: ; \
fi
info dvi:
$(OBJECTS): ../config.h libgettext.h
$(OBJECTS): ../config.h libgnuintl.h
bindtextdom.$lo finddomain.$lo loadmsgcat.$lo: gettextP.h gettext.h loadinfo.h
dcgettext.$lo: gettextP.h gettext.h hash-string.h loadinfo.h
......@@ -166,12 +268,19 @@ ID: $(HEADERS) $(SOURCES)
mostlyclean:
rm -f *.a *.o *.lo core core.*
rm -f *.a *.la *.o *.lo core core.*
rm -f libintl.h charset.alias ref-add.sed ref-del.sed
rm -f -r .libs _libs
clean: mostlyclean
distclean: clean
rm -f Makefile ID TAGS po2msg.sed po2tbl.sed libintl.h
rm -f Makefile ID TAGS
if test "$(PACKAGE)" = gettext; then \
rm -f ChangeLog.inst $(DISTFILES.normal); \
else \
: ; \
fi
maintainer-clean: distclean
@echo "This command is intended for maintainers to use;"
......@@ -181,34 +290,23 @@ maintainer-clean: distclean
# GNU gettext needs not contain the file `VERSION' but contains some
# other files which should not be distributed in other packages.
distdir = ../$(PACKAGE)-$(VERSION)/$(subdir)
dist distdir: Makefile $(DISTFILES)
dist distdir: Makefile
if test "$(PACKAGE)" = gettext; then \
additional="$(DISTFILES.gettext)"; \
else \
additional="$(DISTFILES.normal)"; \
fi; \
for file in $(DISTFILES.common) $$additional; do \
ln $(srcdir)/$$file $(distdir) 2> /dev/null \
|| cp -p $(srcdir)/$$file $(distdir); \
$(MAKE) $(DISTFILES.common) $(DISTFILES.generated) $$additional; \
for file in ChangeLog $(DISTFILES.common) $(DISTFILES.generated) $$additional; do \
if test -f $$file; then dir=.; else dir=$(srcdir); fi; \
ln $$dir/$$file $(distdir) 2> /dev/null \
|| cp -p $$dir/$$file $(distdir); \
done
dist-libc:
tar zcvf intl-glibc.tar.gz $(COMSRCS) $(COMHDRS) libintl.h.glibc
Makefile: Makefile.in ../config.status
cd .. \
&& CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
# The dependency for intlh.inst is different in gettext and all other
# packages. Because we cannot you GNU make features we have to solve
# the problem while rewriting Makefile.in.
@GT_YES@intlh.inst: intlh.inst.in ../config.status
@GT_YES@ cd .. \
@GT_YES@ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= \
@GT_YES@ $(SHELL) ./config.status
@GT_NO@.PHONY: intlh.inst
@GT_NO@intlh.inst:
# Tell versions [3.59,3.63) of GNU make not to export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
GNU gettext library from gettext-0.10.35
GNU gettext library from gettext-0.10.38
/* Implementation of the bindtextdomain(3) function
Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
Copyright (C) 1995-1998, 2000, 2001 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
......@@ -19,32 +19,39 @@
# include <config.h>
#endif
#if defined STDC_HEADERS || defined _LIBC
# include <stdlib.h>
#else
# ifdef HAVE_MALLOC_H
# include <malloc.h>
# else
void free ();
# endif
#endif
#include <stddef.h>
#include <stdlib.h>
#include <string.h>
#if defined HAVE_STRING_H || defined _LIBC
# include <string.h>
#ifdef _LIBC
# include <libintl.h>
#else
# include <strings.h>
# ifndef memcpy
# define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num)
# endif
# include "libgnuintl.h"
#endif
#include "gettextP.h"
#ifdef _LIBC
# include <libintl.h>
/* We have to handle multi-threaded applications. */
# include <bits/libc-lock.h>
#else
# include "libgettext.h"
/* Provide dummy implementation if this is outside glibc. */
# define __libc_rwlock_define(CLASS, NAME)
# define __libc_rwlock_wrlock(NAME)
# define __libc_rwlock_unlock(NAME)
#endif
/* The internal variables in the standalone libintl.a must have different
names than the internal variables in GNU libc, otherwise programs
using libintl.a cannot be linked statically. */
#if !defined _LIBC
# define _nl_default_dirname _nl_default_dirname__
# define _nl_domain_bindings _nl_domain_bindings__
#endif
/* Some compilers, like SunOS4 cc, don't have offsetof in <stddef.h>. */
#ifndef offsetof
# define offsetof(type,ident) ((size_t)&(((type*)0)->ident))
#endif
#include "gettext.h"
#include "gettextP.h"
/* @@ end of prolog @@ */
......@@ -54,6 +61,9 @@ extern const char _nl_default_dirname[];
/* List with bindings of specific domains. */
extern struct binding *_nl_domain_bindings;
/* Lock variable to protect the global data in the gettext implementation. */
__libc_rwlock_define (extern, _nl_state_lock)
/* Names for the libintl functions are a problem. They must not clash
with existing names and they should follow ANSI C. But this source
......@@ -61,25 +71,48 @@ extern struct binding *_nl_domain_bindings;
prefix. So we have to make a difference here. */
#ifdef _LIBC
# define BINDTEXTDOMAIN __bindtextdomain
# define BIND_TEXTDOMAIN_CODESET __bind_textdomain_codeset
# ifndef strdup
# define strdup(str) __strdup (str)
# endif
#else
# define BINDTEXTDOMAIN bindtextdomain__
# define BIND_TEXTDOMAIN_CODESET bind_textdomain_codeset__
#endif
/* Specify that the DOMAINNAME message catalog will be found
in DIRNAME rather than in the system locale data base. */
char *
BINDTEXTDOMAIN (domainname, dirname)
/* 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
to be used for the DOMAINNAME message catalog.
If *DIRNAMEP or *CODESETP is NULL, the corresponding attribute is not
modified, only the current value is returned.
If DIRNAMEP or CODESETP is NULL, the corresponding attribute is neither
modified nor returned. */
static void
set_binding_values (domainname, dirnamep, codesetp)
const char *domainname;
const char *dirname;
const char **dirnamep;
const char **codesetp;
{
struct binding *binding;
int modified;
/* Some sanity checks. */
if (domainname == NULL || domainname[0] == '\0')
return NULL;
{
if (dirnamep)
*dirnamep = NULL;
if (codesetp)
*codesetp = NULL;
return;
}
__libc_rwlock_wrlock (_nl_state_lock);
modified = 0;
for (binding = _nl_domain_bindings; binding != NULL; binding = binding->next)
{
......@@ -95,83 +128,173 @@ BINDTEXTDOMAIN (domainname, dirname)
}
}
if (dirname == NULL)
/* The current binding has be to returned. */
return binding == NULL ? (char *) _nl_default_dirname : binding->dirname;
if (binding != NULL)
{
/* The domain is already bound. If the new value and the old
one are equal we simply do nothing. Otherwise replace the
old binding. */
if (strcmp (dirname, binding->dirname) != 0)
if (dirnamep)
{
char *new_dirname;
const char *dirname = *dirnamep;
if (strcmp (dirname, _nl_default_dirname) == 0)
new_dirname = (char *) _nl_default_dirname;
if (dirname == NULL)
/* The current binding has be to returned. */
*dirnamep = binding->dirname;
else
{
/* The domain is already bound. If the new value and the old
one are equal we simply do nothing. Otherwise replace the
old binding. */
char *result = binding->dirname;
if (strcmp (dirname, result) != 0)
{
if (strcmp (dirname, _nl_default_dirname) == 0)
result = (char *) _nl_default_dirname;
else
{
#if defined _LIBC || defined HAVE_STRDUP
new_dirname = strdup (dirname);
if (new_dirname == NULL)
return NULL;
result = strdup (dirname);
#else
size_t len = strlen (dirname) + 1;
new_dirname = (char *) malloc (len);
if (new_dirname == NULL)
return NULL;
memcpy (new_dirname, dirname, len);
size_t len = strlen (dirname) + 1;
result = (char *) malloc (len);
if (__builtin_expect (result != NULL, 1))
memcpy (result, dirname, len);
#endif
}
if (__builtin_expect (result != NULL, 1))
{
if (binding->dirname != _nl_default_dirname)
free (binding->dirname);
binding->dirname = result;
modified = 1;
}
}
*dirnamep = result;
}
}
if (binding->dirname != _nl_default_dirname)
free (binding->dirname);
if (codesetp)
{
const char *codeset = *codesetp;
binding->dirname = new_dirname;
if (codeset == NULL)
/* The current binding has be to returned. */
*codesetp = binding->codeset;
else
{
/* The domain is already bound. If the new value and the old
one are equal we simply do nothing. Otherwise replace the
old binding. */
char *result = binding->codeset;
if (result == NULL || strcmp (codeset, result) != 0)
{
#if defined _LIBC || defined HAVE_STRDUP
result = strdup (codeset);
#else
size_t len = strlen (codeset) + 1;
result = (char *) malloc (len);
if (__builtin_expect (result != NULL, 1))
memcpy (result, codeset, len);
#endif
if (__builtin_expect (result != NULL, 1))
{
if (binding->codeset != NULL)
free (binding->codeset);
binding->codeset = result;
binding->codeset_cntr++;
modified = 1;
}
}
*codesetp = result;
}
}
}
else if ((dirnamep == NULL || *dirnamep == NULL)
&& (codesetp == NULL || *codesetp == NULL))
{
/* Simply return the default values. */
if (dirnamep)
*dirnamep = _nl_default_dirname;
if (codesetp)
*codesetp = NULL;
}
else
{
/* We have to create a new binding. */
#if !defined _LIBC && !defined HAVE_STRDUP
size_t len;
#endif
size_t len = strlen (domainname) + 1;
struct binding *new_binding =
(struct binding *) malloc (sizeof (*new_binding));
(struct binding *) malloc (offsetof (struct binding, domainname) + len);
if (__builtin_expect (new_binding == NULL, 0))
goto failed;
if (new_binding == NULL)
return NULL;
memcpy (new_binding->domainname, domainname, len);
if (dirnamep)
{
const char *dirname = *dirnamep;
if (dirname == NULL)
/* The default value. */
dirname = _nl_default_dirname;
else
{
if (strcmp (dirname, _nl_default_dirname) == 0)
dirname = _nl_default_dirname;
else
{
char *result;
#if defined _LIBC || defined HAVE_STRDUP
new_binding->domainname = strdup (domainname);
if (new_binding->domainname == NULL)
return NULL;
result = strdup (dirname);
if (__builtin_expect (result == NULL, 0))
goto failed_dirname;
#else
len = strlen (domainname) + 1;
new_binding->domainname = (char *) malloc (len);
if (new_binding->domainname == NULL)
return NULL;
memcpy (new_binding->domainname, domainname, len);
size_t len = strlen (dirname) + 1;
result = (char *) malloc (len);
if (__builtin_expect (result == NULL, 0))
goto failed_dirname;
memcpy (result, dirname, len);
#endif
if (strcmp (dirname, _nl_default_dirname) == 0)
new_binding->dirname = (char *) _nl_default_dirname;
dirname = result;
}
}
*dirnamep = dirname;
new_binding->dirname = (char *) dirname;
}
else
/* The default value. */
new_binding->dirname = (char *) _nl_default_dirname;
new_binding->codeset_cntr = 0;
if (codesetp)
{
const char *codeset = *codesetp;
if (codeset != NULL)
{
char *result;
#if defined _LIBC || defined HAVE_STRDUP
new_binding->dirname = strdup (dirname);
if (new_binding->dirname == NULL)
return NULL;
result = strdup (codeset);
if (__builtin_expect (result == NULL, 0))
goto failed_codeset;
#else
len = strlen (dirname) + 1;
new_binding->dirname = (char *) malloc (len);
if (new_binding->dirname == NULL)
return NULL;
memcpy (new_binding->dirname, dirname, len);
size_t len = strlen (codeset) + 1;
result = (char *) malloc (len);
if (__builtin_expect (result == NULL, 0))
goto failed_codeset;
memcpy (result, codeset, len);
#endif
codeset = result;
new_binding->codeset_cntr++;
}
*codesetp = codeset;
new_binding->codeset = (char *) codeset;
}
else
new_binding->codeset = NULL;
/* Now enqueue it. */
if (_nl_domain_bindings == NULL
......@@ -191,13 +314,55 @@ BINDTEXTDOMAIN (domainname, dirname)
binding->next = new_binding;
}
binding = new_binding;
modified = 1;
/* Here we deal with memory allocation failures. */
if (0)
{
failed_codeset:
if (new_binding->dirname != _nl_default_dirname)
free (new_binding->dirname);
failed_dirname:
free (new_binding);
failed:
if (dirnamep)
*dirnamep = NULL;
if (codesetp)
*codesetp = NULL;
}
}
return binding->dirname;
/* If we modified any binding, we flush the caches. */
if (modified)
++_nl_msg_cat_cntr;
__libc_rwlock_unlock (_nl_state_lock);
}
/* Specify that the DOMAINNAME message catalog will be found
in DIRNAME rather than in the system locale data base. */
char *
BINDTEXTDOMAIN (domainname, dirname)
const char *domainname;
const char *dirname;
{
set_binding_values (domainname, &dirname, NULL);
return (char *) dirname;
}
/* Specify the character encoding in which the messages from the
DOMAINNAME message catalog will be returned. */
char *
BIND_TEXTDOMAIN_CODESET (domainname, codeset)
const char *domainname;
const char *codeset;
{
set_binding_values (domainname, NULL, &codeset);
return (char *) codeset;
}
#ifdef _LIBC
/* Alias for function name in GNU C Library. */
/* Aliases for function names in GNU C Library. */
weak_alias (__bindtextdomain, bindtextdomain);
weak_alias (__bind_textdomain_codeset, bind_textdomain_codeset);
#endif
/* Implementation of the dcgettext(3) function.
Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
......@@ -19,220 +19,25 @@
# include <config.h>
#endif
#include <sys/types.h>
#if defined __GNUC__ && !defined C_ALLOCA
# define alloca __builtin_alloca
# define HAVE_ALLOCA 1
#else
# if (defined HAVE_ALLOCA_H || defined _LIBC) && !defined C_ALLOCA
# include <alloca.h>
# else
# ifdef _AIX
#pragma alloca
# else
# ifndef alloca
char *alloca ();
# endif
# endif
# endif
#endif
#include <errno.h>
#ifndef errno
extern int errno;
#endif
#ifndef __set_errno
# define __set_errno(val) errno = (val)
#endif
#if defined STDC_HEADERS || defined _LIBC
# include <stdlib.h>
#else
char *getenv ();
# ifdef HAVE_MALLOC_H
# include <malloc.h>
# else
void free ();
# endif
#endif
#if defined HAVE_STRING_H || defined _LIBC
# ifndef _GNU_SOURCE
# define _GNU_SOURCE 1
# endif
# include <string.h>
#else
# include <strings.h>
#endif
#if !HAVE_STRCHR && !defined _LIBC
# ifndef strchr
# define strchr index
# endif
#endif
#if defined HAVE_UNISTD_H || defined _LIBC
# include <unistd.h>
#endif
#include "gettext.h"
#include "gettextP.h"
#ifdef _LIBC
# include <libintl.h>
#else
# include "libgettext.h"
# include "libgnuintl.h"
#endif
#include "hash-string.h"
/* @@ end of prolog @@ */
#ifdef _LIBC
/* Rename the non ANSI C functions. This is required by the standard
because some ANSI C functions will require linking with this object
file and the name space must not be polluted. */
# define getcwd __getcwd
# ifndef stpcpy
# define stpcpy __stpcpy
# endif
#else
# if !defined HAVE_GETCWD
char *getwd ();
# define getcwd(buf, max) getwd (buf)
# else
char *getcwd ();
# endif
# ifndef HAVE_STPCPY
static char *stpcpy PARAMS ((char *dest, const char *src));
# endif
#endif
/* Amount to increase buffer size by in each try. */
#define PATH_INCR 32
/* The following is from pathmax.h. */
/* Non-POSIX BSD systems might have gcc's limits.h, which doesn't define
PATH_MAX but might cause redefinition warnings when sys/param.h is
later included (as on MORE/BSD 4.3). */
#if defined(_POSIX_VERSION) || (defined(HAVE_LIMITS_H) && !defined(__GNUC__))
# include <limits.h>
#endif
#ifndef _POSIX_PATH_MAX
# define _POSIX_PATH_MAX 255
#endif
#if !defined(PATH_MAX) && defined(_PC_PATH_MAX)
# define PATH_MAX (pathconf ("/", _PC_PATH_MAX) < 1 ? 1024 : pathconf ("/", _PC_PATH_MAX))
#endif
/* Don't include sys/param.h if it already has been. */
#if defined(HAVE_SYS_PARAM_H) && !defined(PATH_MAX) && !defined(MAXPATHLEN)
# include <sys/param.h>
#endif
#if !defined(PATH_MAX) && defined(MAXPATHLEN)
# define PATH_MAX MAXPATHLEN
#endif
#ifndef PATH_MAX
# define PATH_MAX _POSIX_PATH_MAX
#endif
/* XPG3 defines the result of `setlocale (category, NULL)' as:
``Directs `setlocale()' to query `category' and return the current
setting of `local'.''
However it does not specify the exact format. And even worse: POSIX
defines this not at all. So we can use this feature only on selected
system (e.g. those using GNU C Library). */
#ifdef _LIBC
# define HAVE_LOCALE_NULL
#endif
/* Name of the default domain used for gettext(3) prior any call to
textdomain(3). The default value for this is "messages". */
const char _nl_default_default_domain[] = "messages";
/* Value used as the default domain for gettext(3). */
const char *_nl_current_default_domain = _nl_default_default_domain;
/* Contains the default location of the message catalogs. */
const char _nl_default_dirname[] = GNULOCALEDIR;
/* List with bindings of specific domains created by bindtextdomain()
calls. */
struct binding *_nl_domain_bindings;
/* Prototypes for local functions. */
static char *find_msg PARAMS ((struct loaded_l10nfile *domain_file,
const char *msgid)) internal_function;
static const char *category_to_name PARAMS ((int category)) internal_function;
static const char *guess_category_value PARAMS ((int category,
const char *categoryname))
internal_function;
/* For those loosing systems which don't have `alloca' we have to add
some additional code emulating it. */
#ifdef HAVE_ALLOCA
/* Nothing has to be done. */
# define ADD_BLOCK(list, address) /* nothing */
# define FREE_BLOCKS(list) /* nothing */
#else
struct block_list
{
void *address;
struct block_list *next;
};
# define ADD_BLOCK(list, addr) \
do { \
struct block_list *newp = (struct block_list *) malloc (sizeof (*newp)); \
/* If we cannot get a free block we cannot add the new element to \
the list. */ \
if (newp != NULL) { \
newp->address = (addr); \
newp->next = (list); \
(list) = newp; \
} \
} while (0)
# define FREE_BLOCKS(list) \
do { \
while (list != NULL) { \
struct block_list *old = list; \
list = list->next; \
free (old); \
} \
} while (0)
# undef alloca
# define alloca(size) (malloc (size))
#endif /* have alloca */
/* Names for the libintl functions are a problem. They must not clash
with existing names and they should follow ANSI C. But this source
code is also used in GNU C Library where the names have a __
prefix. So we have to make a difference here. */
#ifdef _LIBC
# define DCGETTEXT __dcgettext
# define DCIGETTEXT __dcigettext
#else
# define DCGETTEXT dcgettext__
#endif
/* Checking whether the binaries runs SUID must be done and glibc provides
easier methods therefore we make a difference here. */
#ifdef _LIBC
# define ENABLE_SECURE __libc_enable_secure
# define DETERMINE_SECURE
#else
static int enable_secure;
# define ENABLE_SECURE (enable_secure == 1)
# define DETERMINE_SECURE \
if (enable_secure == 0) \
{ \
if (getuid () != geteuid () || getgid () != getegid ()) \
enable_secure = 1; \
else \
enable_secure = -1; \
}
# define DCIGETTEXT dcigettext__
#endif
/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
......@@ -243,413 +48,10 @@ DCGETTEXT (domainname, msgid, category)
const char *msgid;
int category;
{
#ifndef HAVE_ALLOCA
struct block_list *block_list = NULL;
#endif
struct loaded_l10nfile *domain;
struct binding *binding;
const char *categoryname;
const char *categoryvalue;
char *dirname, *xdomainname;
char *single_locale;
char *retval;
int saved_errno = errno;
/* If no real MSGID is given return NULL. */
if (msgid == NULL)
return NULL;
/* See whether this is a SUID binary or not. */
DETERMINE_SECURE;
/* If DOMAINNAME is NULL, we are interested in the default domain. If
CATEGORY is not LC_MESSAGES this might not make much sense but the
definition left this undefined. */
if (domainname == NULL)
domainname = _nl_current_default_domain;
/* First find matching binding. */
for (binding = _nl_domain_bindings; binding != NULL; binding = binding->next)
{
int compare = strcmp (domainname, binding->domainname);
if (compare == 0)
/* We found it! */
break;
if (compare < 0)
{
/* It is not in the list. */
binding = NULL;
break;
}
}
if (binding == NULL)
dirname = (char *) _nl_default_dirname;
else if (binding->dirname[0] == '/')
dirname = binding->dirname;
else
{
/* We have a relative path. Make it absolute now. */
size_t dirname_len = strlen (binding->dirname) + 1;
size_t path_max;
char *ret;
path_max = (unsigned int) PATH_MAX;
path_max += 2; /* The getcwd docs say to do this. */
dirname = (char *) alloca (path_max + dirname_len);
ADD_BLOCK (block_list, dirname);
__set_errno (0);
while ((ret = getcwd (dirname, path_max)) == NULL && errno == ERANGE)
{
path_max += PATH_INCR;
dirname = (char *) alloca (path_max + dirname_len);
ADD_BLOCK (block_list, dirname);
__set_errno (0);
}
if (ret == NULL)
{
/* We cannot get the current working directory. Don't signal an
error but simply return the default string. */
FREE_BLOCKS (block_list);
__set_errno (saved_errno);
return (char *) msgid;
}
stpcpy (stpcpy (strchr (dirname, '\0'), "/"), binding->dirname);
}
/* Now determine the symbolic name of CATEGORY and its value. */
categoryname = category_to_name (category);
categoryvalue = guess_category_value (category, categoryname);
xdomainname = (char *) alloca (strlen (categoryname)
+ strlen (domainname) + 5);
ADD_BLOCK (block_list, xdomainname);
stpcpy (stpcpy (stpcpy (stpcpy (xdomainname, categoryname), "/"),
domainname),
".mo");
/* Creating working area. */
single_locale = (char *) alloca (strlen (categoryvalue) + 1);
ADD_BLOCK (block_list, single_locale);
/* Search for the given string. This is a loop because we perhaps
got an ordered list of languages to consider for the translation. */
while (1)
{
/* Make CATEGORYVALUE point to the next element of the list. */
while (categoryvalue[0] != '\0' && categoryvalue[0] == ':')
++categoryvalue;
if (categoryvalue[0] == '\0')
{
/* The whole contents of CATEGORYVALUE has been searched but
no valid entry has been found. We solve this situation
by implicitly appending a "C" entry, i.e. no translation
will take place. */
single_locale[0] = 'C';
single_locale[1] = '\0';
}
else
{
char *cp = single_locale;
while (categoryvalue[0] != '\0' && categoryvalue[0] != ':')
*cp++ = *categoryvalue++;
*cp = '\0';
/* When this is a SUID binary we must not allow accessing files
outside the dedicated directories. */
if (ENABLE_SECURE
&& (memchr (single_locale, '/',
_nl_find_language (single_locale) - single_locale)
!= NULL))
/* Ingore this entry. */
continue;
}
/* If the current locale value is C (or POSIX) we don't load a
domain. Return the MSGID. */
if (strcmp (single_locale, "C") == 0
|| strcmp (single_locale, "POSIX") == 0)
{
FREE_BLOCKS (block_list);
__set_errno (saved_errno);
return (char *) msgid;
}
/* Find structure describing the message catalog matching the
DOMAINNAME and CATEGORY. */
domain = _nl_find_domain (dirname, single_locale, xdomainname);
if (domain != NULL)
{
retval = find_msg (domain, msgid);
if (retval == NULL)
{
int cnt;
for (cnt = 0; domain->successor[cnt] != NULL; ++cnt)
{
retval = find_msg (domain->successor[cnt], msgid);
if (retval != NULL)
break;
}
}
if (retval != NULL)
{
FREE_BLOCKS (block_list);
__set_errno (saved_errno);
return retval;
}
}
}
/* NOTREACHED */
return DCIGETTEXT (domainname, msgid, NULL, 0, 0, category);
}
#ifdef _LIBC
/* Alias for function name in GNU C Library. */
weak_alias (__dcgettext, dcgettext);
#endif
static char *
internal_function
find_msg (domain_file, msgid)
struct loaded_l10nfile *domain_file;
const char *msgid;
{
size_t act = 0;
size_t top, bottom;
struct loaded_domain *domain;
if (domain_file->decided == 0)
_nl_load_domain (domain_file);
if (domain_file->data == NULL)
return NULL;
domain = (struct loaded_domain *) domain_file->data;
/* Locate the MSGID and its translation. */
if (domain->hash_size > 2 && domain->hash_tab != NULL)
{
/* Use the hashing table. */
nls_uint32 len = strlen (msgid);
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));
nls_uint32 nstr = W (domain->must_swap, domain->hash_tab[idx]);
if (nstr == 0)
/* Hash table entry is empty. */
return NULL;
if (W (domain->must_swap, domain->orig_tab[nstr - 1].length) == len
&& strcmp (msgid,
domain->data + W (domain->must_swap,
domain->orig_tab[nstr - 1].offset)) == 0)
return (char *) domain->data + W (domain->must_swap,
domain->trans_tab[nstr - 1].offset);
while (1)
{
if (idx >= domain->hash_size - incr)
idx -= domain->hash_size - incr;
else
idx += incr;
nstr = W (domain->must_swap, domain->hash_tab[idx]);
if (nstr == 0)
/* Hash table entry is empty. */
return NULL;
if (W (domain->must_swap, domain->orig_tab[nstr - 1].length) == len
&& strcmp (msgid,
domain->data + W (domain->must_swap,
domain->orig_tab[nstr - 1].offset))
== 0)
return (char *) domain->data
+ W (domain->must_swap, domain->trans_tab[nstr - 1].offset);
}
/* NOTREACHED */
}
/* Now we try the default method: binary search in the sorted
array of messages. */
bottom = 0;
top = domain->nstrings;
while (bottom < top)
{
int cmp_val;
act = (bottom + top) / 2;
cmp_val = strcmp (msgid, domain->data
+ W (domain->must_swap,
domain->orig_tab[act].offset));
if (cmp_val < 0)
top = act;
else if (cmp_val > 0)
bottom = act + 1;
else
break;
}
/* If an translation is found return this. */
return bottom >= top ? NULL : (char *) domain->data
+ W (domain->must_swap,
domain->trans_tab[act].offset);
}
/* Return string representation of locale CATEGORY. */
static const char *
internal_function
category_to_name (category)
int category;
{
const char *retval;
switch (category)
{
#ifdef LC_COLLATE
case LC_COLLATE:
retval = "LC_COLLATE";
break;
#endif
#ifdef LC_CTYPE
case LC_CTYPE:
retval = "LC_CTYPE";
break;
#endif
#ifdef LC_MONETARY
case LC_MONETARY:
retval = "LC_MONETARY";
break;
#endif
#ifdef LC_NUMERIC
case LC_NUMERIC:
retval = "LC_NUMERIC";
break;
#endif
#ifdef LC_TIME
case LC_TIME:
retval = "LC_TIME";
break;
#endif
#ifdef LC_MESSAGES
case LC_MESSAGES:
retval = "LC_MESSAGES";
break;
#endif
#ifdef LC_RESPONSE
case LC_RESPONSE:
retval = "LC_RESPONSE";
break;
#endif
#ifdef LC_ALL
case LC_ALL:
/* This might not make sense but is perhaps better than any other
value. */
retval = "LC_ALL";
break;
#endif
default:
/* If you have a better idea for a default value let me know. */
retval = "LC_XXX";
}
return retval;
}
/* Guess value of current locale from value of the environment variables. */
static const char *
internal_function
guess_category_value (category, categoryname)
int category;
const char *categoryname;
{
const char *retval;
/* The highest priority value is the `LANGUAGE' environment
variable. This is a GNU extension. */
retval = getenv ("LANGUAGE");
if (retval != NULL && retval[0] != '\0')
return retval;
/* `LANGUAGE' is not set. So we have to proceed with the POSIX
methods of looking to `LC_ALL', `LC_xxx', and `LANG'. On some
systems this can be done by the `setlocale' function itself. */
#if defined HAVE_SETLOCALE && defined HAVE_LC_MESSAGES && defined HAVE_LOCALE_NULL
return setlocale (category, NULL);
#else
/* Setting of LC_ALL overwrites all other. */
retval = getenv ("LC_ALL");
if (retval != NULL && retval[0] != '\0')
return retval;
/* Next comes the name of the desired category. */
retval = getenv (categoryname);
if (retval != NULL && retval[0] != '\0')
return retval;
/* Last possibility is the LANG environment variable. */
retval = getenv ("LANG");
if (retval != NULL && retval[0] != '\0')
return retval;
/* We use C as the default domain. POSIX says this is implementation
defined. */
return "C";
#endif
}
/* @@ begin of epilog @@ */
/* We don't want libintl.a to depend on any other library. So we
avoid the non-standard function stpcpy. In GNU C Library this
function is available, though. Also allow the symbol HAVE_STPCPY
to be defined. */
#if !_LIBC && !HAVE_STPCPY
static char *
stpcpy (dest, src)
char *dest;
const char *src;
{
while ((*dest++ = *src++) != '\0')
/* Do nothing. */ ;
return dest - 1;
}
#endif
#ifdef _LIBC
/* If we want to free all resources we have to do some work at
program's end. */
static void __attribute__ ((unused))
free_mem (void)
{
struct binding *runp;
for (runp = _nl_domain_bindings; runp != NULL; runp = runp->next)
{
free (runp->domainname);
if (runp->dirname != _nl_default_dirname)
/* Yes, this is a pointer comparison. */
free (runp->dirname);
}
if (_nl_current_default_domain != _nl_default_default_domain)
/* Yes, again a pointer comparison. */
free ((char *) _nl_current_default_domain);
}
text_set_element (__libc_subfreeres, free_mem);
#endif
......@@ -203,7 +203,7 @@ static void *mempcpy PARAMS ((void *dest, const void *src, size_t n));
However it does not specify the exact format. Neither do SUSV2 and
ISO C 99. So we can use this feature only on selected systems (e.g.
those using GNU C Library). */
#ifdef _LIBC
#if defined _LIBC || (defined __GNU_LIBRARY__ && __GNU_LIBRARY__ >= 2)
# define HAVE_LOCALE_NULL
#endif
......@@ -370,6 +370,18 @@ __libc_rwlock_define_initialized (, _nl_state_lock)
# define ENABLE_SECURE __libc_enable_secure
# define DETERMINE_SECURE
#else
# ifndef HAVE_GETUID
# define getuid() 0
# endif
# ifndef HAVE_GETGID
# define getgid() 0
# endif
# ifndef HAVE_GETEUID
# define geteuid() getuid()
# endif
# ifndef HAVE_GETEGID
# define getegid() getgid()
# endif
static int enable_secure;
# define ENABLE_SECURE (enable_secure == 1)
# define DETERMINE_SECURE \
......@@ -584,7 +596,7 @@ DCIGETTEXT (domainname, msgid1, msgid2, plural, n, category)
if (domain != NULL)
{
retval = _nl_find_msg (domain, msgid1, &retlen);
retval = _nl_find_msg (domain, binding, msgid1, &retlen);
if (retval == NULL)
{
......@@ -592,8 +604,8 @@ DCIGETTEXT (domainname, msgid1, msgid2, plural, n, category)
for (cnt = 0; domain->successor[cnt] != NULL; ++cnt)
{
retval = _nl_find_msg (domain->successor[cnt], msgid1,
&retlen);
retval = _nl_find_msg (domain->successor[cnt], binding,
msgid1, &retlen);
if (retval != NULL)
{
......@@ -662,8 +674,9 @@ DCIGETTEXT (domainname, msgid1, msgid2, plural, n, category)
char *
internal_function
_nl_find_msg (domain_file, msgid, lengthp)
_nl_find_msg (domain_file, domainbinding, msgid, lengthp)
struct loaded_l10nfile *domain_file;
struct binding *domainbinding;
const char *msgid;
size_t *lengthp;
{
......@@ -673,7 +686,7 @@ _nl_find_msg (domain_file, msgid, lengthp)
size_t resultlen;
if (domain_file->decided == 0)
_nl_load_domain (domain_file);
_nl_load_domain (domain_file, domainbinding);
if (domain_file->data == NULL)
return NULL;
......@@ -752,6 +765,16 @@ _nl_find_msg (domain_file, msgid, lengthp)
resultlen = W (domain->must_swap, domain->trans_tab[act].length) + 1;
#if defined _LIBC || HAVE_ICONV
if (domain->codeset_cntr
!= (domainbinding != NULL ? domainbinding->codeset_cntr : 0))
{
/* The domain's codeset has changed through bind_textdomain_codeset()
since the message catalog was initialized or last accessed. We
have to reinitialize the converter. */
_nl_free_domain_conv (domain);
_nl_init_domain_conv (domain_file, domain, domainbinding);
}
if (
# ifdef _LIBC
domain->conv != (__gconv_t) -1
......
/* Implementation of the dgettext(3) function
Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
/* Implementation of the dgettext(3) function.
Copyright (C) 1995-1997, 2000, 2001 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
......@@ -19,14 +19,13 @@
# include <config.h>
#endif
#if defined HAVE_LOCALE_H || defined _LIBC
# include <locale.h>
#endif
#include <locale.h>
#include "gettextP.h"
#ifdef _LIBC
# include <libintl.h>
#else
# include "libgettext.h"
# include "libgnuintl.h"
#endif
/* @@ end of prolog @@ */
......
/* Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
/* Copyright (C) 1995-1998, 2000, 2001 Free Software Foundation, Inc.
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
This program is free software; you can redistribute it and/or modify
......@@ -19,15 +19,8 @@
# include <config.h>
#endif
#if defined STDC_HEADERS || defined _LIBC
# include <stdlib.h>
#endif
#if defined HAVE_STRING_H || defined _LIBC
# include <string.h>
#else
# include <strings.h>
#endif
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include "loadinfo.h"
......
/* Handle list of needed message catalogs
Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
Written by Ulrich Drepper <drepper@gnu.org>, 1995.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
......@@ -20,45 +20,20 @@
# include <config.h>
#endif
#include <ctype.h>
#include <errno.h>
#include <stdio.h>
#include <sys/types.h>
#if defined STDC_HEADERS || defined _LIBC
# include <stdlib.h>
#else
# ifdef HAVE_MALLOC_H
# include <malloc.h>
# else
void free ();
# endif
#endif
#if defined HAVE_STRING_H || defined _LIBC
# include <string.h>
#else
# include <strings.h>
# ifndef memcpy
# define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num)
# endif
#endif
#if !HAVE_STRCHR && !defined _LIBC
# ifndef strchr
# define strchr index
# endif
#endif
#include <stdlib.h>
#include <string.h>
#if defined HAVE_UNISTD_H || defined _LIBC
# include <unistd.h>
#endif
#include "gettext.h"
#include "gettextP.h"
#ifdef _LIBC
# include <libintl.h>
#else
# include "libgettext.h"
# include "libgnuintl.h"
#endif
/* @@ end of prolog @@ */
......@@ -71,10 +46,11 @@ static struct loaded_l10nfile *_nl_loaded_domains;
established bindings. */
struct loaded_l10nfile *
internal_function
_nl_find_domain (dirname, locale, domainname)
_nl_find_domain (dirname, locale, domainname, domainbinding)
const char *dirname;
char *locale;
const char *domainname;
struct binding *domainbinding;
{
struct loaded_l10nfile *retval;
const char *language;
......@@ -120,7 +96,7 @@ _nl_find_domain (dirname, locale, domainname)
int cnt;
if (retval->decided == 0)
_nl_load_domain (retval);
_nl_load_domain (retval, domainbinding);
if (retval->data != NULL)
return retval;
......@@ -128,7 +104,7 @@ _nl_find_domain (dirname, locale, domainname)
for (cnt = 0; retval->successor[cnt] != NULL; ++cnt)
{
if (retval->successor[cnt]->decided == 0)
_nl_load_domain (retval->successor[cnt]);
_nl_load_domain (retval->successor[cnt], domainbinding);
if (retval->successor[cnt]->data != NULL)
break;
......@@ -175,14 +151,14 @@ _nl_find_domain (dirname, locale, domainname)
return NULL;
if (retval->decided == 0)
_nl_load_domain (retval);
_nl_load_domain (retval, domainbinding);
if (retval->data == NULL)
{
int cnt;
for (cnt = 0; retval->successor[cnt] != NULL; ++cnt)
{
if (retval->successor[cnt]->decided == 0)
_nl_load_domain (retval->successor[cnt]);
_nl_load_domain (retval->successor[cnt], domainbinding);
if (retval->successor[cnt]->data != NULL)
break;
}
......@@ -192,6 +168,10 @@ _nl_find_domain (dirname, locale, domainname)
if (alias_value != NULL)
free (locale);
/* The space for normalized_codeset is dynamically allocated. Free it. */
if (mask & XPG_NORM_CODESET)
free ((void *) normalized_codeset);
return retval;
}
......@@ -208,6 +188,7 @@ free_mem (void)
if (runp->data != NULL)
_nl_unload_domain ((struct loaded_domain *) runp->data);
runp = runp->next;
free ((char *) here->filename);
free (here);
}
}
......
/* Implementation of gettext(3) function.
Copyright (C) 1995, 1997 Free Software Foundation, Inc.
Copyright (C) 1995, 1997, 2000, 2001 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
......@@ -23,21 +23,14 @@
# define __need_NULL
# include <stddef.h>
#else
# ifdef STDC_HEADERS
# include <stdlib.h> /* Just for NULL. */
# else
# ifdef HAVE_STRING_H
# include <string.h>
# else
# define NULL ((void *) 0)
# endif
# endif
# include <stdlib.h> /* Just for NULL. */
#endif
#include "gettextP.h"
#ifdef _LIBC
# include <libintl.h>
#else
# include "libgettext.h"
# include "libgnuintl.h"
#endif
/* @@ end of prolog @@ */
......@@ -48,10 +41,10 @@
prefix. So we have to make a difference here. */
#ifdef _LIBC
# define GETTEXT __gettext
# define DGETTEXT __dgettext
# define DCGETTEXT __dcgettext
#else
# define GETTEXT gettext__
# define DGETTEXT dgettext__
# define DCGETTEXT dcgettext__
#endif
/* Look up MSGID in the current default message catalog for the current
......@@ -61,7 +54,7 @@ char *
GETTEXT (msgid)
const char *msgid;
{
return DGETTEXT (NULL, msgid);
return DCGETTEXT (NULL, msgid, LC_MESSAGES);
}
#ifdef _LIBC
......
/* Internal header for GNU gettext internationalization functions.
Copyright (C) 1995, 1997 Free Software Foundation, Inc.
/* Description of GNU message catalog format: general file layout.
Copyright (C) 1995, 1997, 2000, 2001 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
......@@ -11,16 +11,13 @@
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If not,
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
You should have received a copy of the GNU 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 _GETTEXT_H
#define _GETTEXT_H 1
#include <stdio.h>
#if HAVE_LIMITS_H || _LIBC
# include <limits.h>
#endif
......@@ -37,9 +34,8 @@
/* The following contortions are an attempt to use the C preprocessor
to determine an unsigned integral type that is 32 bits wide. An
alternative approach is to use autoconf's AC_CHECK_SIZEOF macro, but
doing that would require that the configure script compile and *run*
the resulting executable. Locally running cross-compiled executables
is usually not possible. */
as of version autoconf-2.13, the AC_CHECK_SIZEOF macro doesn't work
when cross-compiling. */
#if __STDC__
# define UINT_MAX_32_BITS 4294967295U
......
/* Header describing internals of gettext library
Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
/* Header describing internals of libintl library.
Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
Written by Ulrich Drepper <drepper@cygnus.com>, 1995.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
......@@ -19,8 +19,20 @@
#ifndef _GETTEXTP_H
#define _GETTEXTP_H
#include <stddef.h> /* Get size_t. */
#ifdef _LIBC
# include "../iconv/gconv_int.h"
#else
# if HAVE_ICONV
# include <iconv.h>
# endif
#endif
#include "loadinfo.h"
#include "gettext.h" /* Get nls_uint32. */
/* @@ end of prolog @@ */
#ifndef PARAMS
......@@ -35,6 +47,12 @@
# define internal_function
#endif
/* Tell the compiler when a conditional or integer expression is
almost always true or almost always false. */
#ifndef HAVE_BUILTIN_EXPECT
# define __builtin_expect(expr, val) (expr)
#endif
#ifndef W
# define W(flag, data) ((flag) ? SWAP (data) : (data))
#endif
......@@ -44,8 +62,6 @@
# include <byteswap.h>
# define SWAP(i) bswap_32 (i)
#else
static nls_uint32 SWAP PARAMS ((nls_uint32 i));
static inline nls_uint32
SWAP (i)
nls_uint32 i;
......@@ -55,6 +71,52 @@ SWAP (i)
#endif
/* This is the representation of the expressions to determine the
plural form. */
struct expression
{
int nargs; /* Number of arguments. */
enum operator
{
/* Without arguments: */
var, /* The variable "n". */
num, /* Decimal number. */
/* Unary operators: */
lnot, /* Logical NOT. */
/* Binary operators: */
mult, /* Multiplication. */
divide, /* Division. */
module, /* Module operation. */
plus, /* Addition. */
minus, /* Subtraction. */
less_than, /* Comparison. */
greater_than, /* Comparison. */
less_or_equal, /* Comparison. */
greater_or_equal, /* Comparison. */
equal, /* Comparision for equality. */
not_equal, /* Comparision for inequality. */
land, /* Logical AND. */
lor, /* Logical OR. */
/* Ternary operators: */
qmop /* Question mark operator. */
} operation;
union
{
unsigned long int num; /* Number value for `num'. */
struct expression *args[3]; /* Up to three arguments. */
} val;
};
/* This is the data structure to pass information to the parser and get
the result in a thread-safe way. */
struct parse_args
{
const char *cp;
struct expression *res;
};
/* The representation of an opened message catalog. */
struct loaded_domain
{
const char *data;
......@@ -66,23 +128,123 @@ struct loaded_domain
struct string_desc *trans_tab;
nls_uint32 hash_size;
nls_uint32 *hash_tab;
int codeset_cntr;
#ifdef _LIBC
__gconv_t conv;
#else
# if HAVE_ICONV
iconv_t conv;
# endif
#endif
char **conv_tab;
struct expression *plural;
unsigned long int nplurals;
};
/* We want to allocate a string at the end of the struct. But ISO C
doesn't allow zero sized arrays. */
#ifdef __GNUC__
# define ZERO 0
#else
# define ZERO 1
#endif
/* A set of settings bound to a message domain. Used to store settings
from bindtextdomain() and bind_textdomain_codeset(). */
struct binding
{
struct binding *next;
char *domainname;
char *dirname;
int codeset_cntr; /* Incremented each time codeset changes. */
char *codeset;
char domainname[ZERO];
};
/* A counter which is incremented each time some previous translations
become invalid.
This variable is part of the external ABI of the GNU libintl. */
extern int _nl_msg_cat_cntr;
struct loaded_l10nfile *_nl_find_domain PARAMS ((const char *__dirname,
char *__locale,
const char *__domainname))
const char *__domainname,
struct binding *__domainbinding))
internal_function;
void _nl_load_domain PARAMS ((struct loaded_l10nfile *__domain))
void _nl_load_domain PARAMS ((struct loaded_l10nfile *__domain,
struct binding *__domainbinding))
internal_function;
void _nl_unload_domain PARAMS ((struct loaded_domain *__domain))
internal_function;
const char *_nl_init_domain_conv PARAMS ((struct loaded_l10nfile *__domain_file,
struct loaded_domain *__domain,
struct binding *__domainbinding))
internal_function;
void _nl_free_domain_conv PARAMS ((struct loaded_domain *__domain))
internal_function;
char *_nl_find_msg PARAMS ((struct loaded_l10nfile *domain_file,
struct binding *domainbinding,
const char *msgid, size_t *lengthp))
internal_function;
#ifdef _LIBC
extern char *__gettext PARAMS ((const char *__msgid));
extern char *__dgettext PARAMS ((const char *__domainname,
const char *__msgid));
extern char *__dcgettext PARAMS ((const char *__domainname,
const char *__msgid, int __category));
extern char *__ngettext PARAMS ((const char *__msgid1, const char *__msgid2,
unsigned long int __n));
extern char *__dngettext PARAMS ((const char *__domainname,
const char *__msgid1, const char *__msgid2,
unsigned long int n));
extern char *__dcngettext PARAMS ((const char *__domainname,
const char *__msgid1, const char *__msgid2,
unsigned long int __n, int __category));
extern char *__dcigettext PARAMS ((const char *__domainname,
const char *__msgid1, const char *__msgid2,
int __plural, unsigned long int __n,
int __category));
extern char *__textdomain PARAMS ((const char *__domainname));
extern char *__bindtextdomain PARAMS ((const char *__domainname,
const char *__dirname));
extern char *__bind_textdomain_codeset PARAMS ((const char *__domainname,
const char *__codeset));
#else
extern char *gettext__ PARAMS ((const char *__msgid));
extern char *dgettext__ PARAMS ((const char *__domainname,
const char *__msgid));
extern char *dcgettext__ PARAMS ((const char *__domainname,
const char *__msgid, int __category));
extern char *ngettext__ PARAMS ((const char *__msgid1, const char *__msgid2,
unsigned long int __n));
extern char *dngettext__ PARAMS ((const char *__domainname,
const char *__msgid1, const char *__msgid2,
unsigned long int __n));
extern char *dcngettext__ PARAMS ((const char *__domainname,
const char *__msgid1, const char *__msgid2,
unsigned long int __n, int __category));
extern char *dcigettext__ PARAMS ((const char *__domainname,
const char *__msgid1, const char *__msgid2,
int __plural, unsigned long int __n,
int __category));
extern char *textdomain__ PARAMS ((const char *__domainname));
extern char *bindtextdomain__ PARAMS ((const char *__domainname,
const char *__dirname));
extern char *bind_textdomain_codeset__ PARAMS ((const char *__domainname,
const char *__codeset));
#endif
#ifdef _LIBC
extern void __gettext_free_exp PARAMS ((struct expression *exp))
internal_function;
extern int __gettextparse PARAMS ((void *arg));
#else
extern void gettext_free_exp__ PARAMS ((struct expression *exp))
internal_function;
extern int gettextparse__ PARAMS ((void *arg));
#endif
/* @@ begin of epilog @@ */
......
/* Implements a string hashing function.
Copyright (C) 1995, 1997 Free Software Foundation, Inc.
/* Description of GNU message catalog format: string hashing function.
Copyright (C) 1995, 1997, 1998, 2000, 2001 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
......@@ -11,10 +11,9 @@
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If not,
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
You should have received a copy of the GNU 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. */
/* @@ end of prolog @@ */
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment