[OE-core] [PATCH 02/16] Revert "lrzsz: remove the recipe"
akuster808
akuster808 at gmail.com
Wed Nov 27 20:24:45 UTC 2019
On 11/27/19 8:37 AM, Alexander Kanavin wrote:
> This reverts commit 2e9009978262776a8ff6913a9211eb734a0c17fb.
can we drop the previous?
- armin
> ---
> meta/conf/distro/include/maintainers.inc | 1 +
> .../lrzsz/lrzsz-0.12.20/acdefine.patch | 19 +
> .../lrzsz/lrzsz-0.12.20/autotools.patch | 39 +
> .../lrzsz/lrzsz-0.12.20/cve-2018-10195.patch | 28 +
> .../lrzsz/lrzsz-0.12.20/gettext.patch | 21884 ++++++++++++++++
> .../lrzsz/lrzsz-0.12.20/include.patch | 25 +
> .../lrzsz-0.12.20/lrzsz-check-locale.h.patch | 32 +
> .../lrzsz_fix_for_automake-1.12.patch | 49 +
> .../lrzsz/lrzsz-0.12.20/makefile.patch | 22 +
> meta/recipes-bsp/lrzsz/lrzsz_0.12.20.bb | 50 +
> .../packagegroups/packagegroup-base.bb | 2 +-
> .../recipes-extended/minicom/minicom_2.7.1.bb | 2 +
> 12 files changed, 22152 insertions(+), 1 deletion(-)
> create mode 100644 meta/recipes-bsp/lrzsz/lrzsz-0.12.20/acdefine.patch
> create mode 100644 meta/recipes-bsp/lrzsz/lrzsz-0.12.20/autotools.patch
> create mode 100644 meta/recipes-bsp/lrzsz/lrzsz-0.12.20/cve-2018-10195.patch
> create mode 100644 meta/recipes-bsp/lrzsz/lrzsz-0.12.20/gettext.patch
> create mode 100644 meta/recipes-bsp/lrzsz/lrzsz-0.12.20/include.patch
> create mode 100644 meta/recipes-bsp/lrzsz/lrzsz-0.12.20/lrzsz-check-locale.h.patch
> create mode 100644 meta/recipes-bsp/lrzsz/lrzsz-0.12.20/lrzsz_fix_for_automake-1.12.patch
> create mode 100644 meta/recipes-bsp/lrzsz/lrzsz-0.12.20/makefile.patch
> create mode 100644 meta/recipes-bsp/lrzsz/lrzsz_0.12.20.bb
>
> diff --git a/meta/conf/distro/include/maintainers.inc b/meta/conf/distro/include/maintainers.inc
> index 42e587663c7..79404dfbdb7 100644
> --- a/meta/conf/distro/include/maintainers.inc
> +++ b/meta/conf/distro/include/maintainers.inc
> @@ -450,6 +450,7 @@ RECIPE_MAINTAINER_pn-linux-yocto-rt = "Bruce Ashfield <bruce.ashfield at gmail.com>
> RECIPE_MAINTAINER_pn-linux-yocto-tiny = "Bruce Ashfield <bruce.ashfield at gmail.com>"
> RECIPE_MAINTAINER_pn-llvm = "Khem Raj <raj.khem at gmail.com>"
> RECIPE_MAINTAINER_pn-logrotate = "Yi Zhao <yi.zhao at windriver.com>"
> +RECIPE_MAINTAINER_pn-lrzsz = "Anuj Mittal <anuj.mittal at intel.com>"
> RECIPE_MAINTAINER_pn-lsb-release = "Hongxu Jia <hongxu.jia at windriver.com>"
> RECIPE_MAINTAINER_pn-lsof = "Ross Burton <ross.burton at intel.com>"
> RECIPE_MAINTAINER_pn-ltp = "Yi Zhao <yi.zhao at windriver.com>"
> diff --git a/meta/recipes-bsp/lrzsz/lrzsz-0.12.20/acdefine.patch b/meta/recipes-bsp/lrzsz/lrzsz-0.12.20/acdefine.patch
> new file mode 100644
> index 00000000000..682cf416e22
> --- /dev/null
> +++ b/meta/recipes-bsp/lrzsz/lrzsz-0.12.20/acdefine.patch
> @@ -0,0 +1,19 @@
> +Add a description to the AC_DEFINE for LOCALEDIR so that it appears in config.h
> +and silences a fatal warning.
> +
> +Upstream-Status:Pending
> +Signed-off-by: Ross Burton <ross.burton at intel.com>
> +
> +diff --git a/configure.in b/configure.in
> +index c10460c..aa20263 100644
> +--- a/configure.in
> ++++ b/configure.in
> +@@ -258,7 +258,7 @@ AC_SUBST(LIBS)
> +
> + AM_GNU_GETTEXT
> +
> +-AC_DEFINE_UNQUOTED(LOCALEDIR,"$prefix/$DATADIRNAME")
> ++AC_DEFINE_UNQUOTED(LOCALEDIR,"$prefix/$DATADIRNAME",[locale directory])
> +
> + AC_OUTPUT([Makefile intl/Makefile lib/Makefile testsuite/Makefile m4/Makefile \
> + man/Makefile po/Makefile.in src/Makefile debian/rules Specfile systype \
> diff --git a/meta/recipes-bsp/lrzsz/lrzsz-0.12.20/autotools.patch b/meta/recipes-bsp/lrzsz/lrzsz-0.12.20/autotools.patch
> new file mode 100644
> index 00000000000..394519855e1
> --- /dev/null
> +++ b/meta/recipes-bsp/lrzsz/lrzsz-0.12.20/autotools.patch
> @@ -0,0 +1,39 @@
> +Upstream-Status: Inappropriate [configuration]
> +
> +--- lrzsz-0.12.20/acinclude.m4~autotools 1998-12-27 17:08:59.000000000 -0500
> ++++ lrzsz-0.12.20/acinclude.m4 2004-05-09 22:26:19.000000000 -0400
> +@@ -1,12 +1,11 @@
> + dnl AC_REPLACE_GNU_GETOPT
> +-AC_DEFUN(AC_REPLACE_GNU_GETOPT,
> +-[AC_CHECK_FUNC(getopt_long, , [LIBOBJS="$LIBOBJS getopt1.o getopt.o"])
> +-AC_SUBST(LIBOBJS)dnl
> +-])
> ++AC_DEFUN([AC_REPLACE_GNU_GETOPT],
> ++[AC_CHECK_FUNC(getopt_long, , [AC_LIBOBJ([getopt1])
> ++AC_LIBOBJ([getopt])dnl])])
> +
> + dnl
> + dnl taken from taylor uucp
> +-AC_DEFUN(LRZSZ_ERRNO_DECL,[
> ++AC_DEFUN([LRZSZ_ERRNO_DECL],[
> + AC_MSG_CHECKING(for errno declaration)
> + AC_CACHE_VAL(lrzsz_cv_decl_errno,
> + [AC_TRY_COMPILE([#include <errno.h>], [int i = errno; errno = 1;],
> +@@ -23,7 +21,7 @@
> + ])
> +
> + dnl LRZSZ_TYPE_SPEED_T
> +-AC_DEFUN(LRZSZ_TYPE_SPEED_T,[
> ++AC_DEFUN([LRZSZ_TYPE_SPEED_T],[
> + AC_REQUIRE([AC_HEADER_STDC])dnl
> + AC_REQUIRE([LRZSZ_HEADERS_TERM_IO])dnl
> + AC_MSG_CHECKING(for speed_t)
> +@@ -61,7 +59,7 @@
> + fi
> + ])
> +
> +-AC_DEFUN(lrzsz_HEADER_SYS_SELECT,
> ++AC_DEFUN([lrzsz_HEADER_SYS_SELECT],
> + [AC_CACHE_CHECK([whether sys/time.h and sys/select.h may both be included],
> + lrzsz_cv_header_sys_select,
> + [AC_TRY_COMPILE([#include <sys/types.h>
> diff --git a/meta/recipes-bsp/lrzsz/lrzsz-0.12.20/cve-2018-10195.patch b/meta/recipes-bsp/lrzsz/lrzsz-0.12.20/cve-2018-10195.patch
> new file mode 100644
> index 00000000000..dea298634f0
> --- /dev/null
> +++ b/meta/recipes-bsp/lrzsz/lrzsz-0.12.20/cve-2018-10195.patch
> @@ -0,0 +1,28 @@
> +Integer overflow in src/zm.c:zsdata() causes crash in sz and can leak information to receiver.
> +
> +Patch taken from Fedora.
> +
> +CVE: CVE-2018-10195
> +Upstream-Status: Inappropriate (dead upstream)
> +Signed-off-by: Ross Burton <ross.burton at intel.com>
> +
> +diff -urN lrzsz-0.12.20/src/zm.c lrzsz-0.12.20.new/src/zm.c
> +--- lrzsz-0.12.20/src/zm.c Tue Dec 29 09:48:38 1998
> ++++ lrzsz-0.12.20.new/src/zm.c Tue Oct 8 12:46:58 2002
> +@@ -431,10 +431,12 @@
> + VPRINTF(3,("zsdata: %lu %s", (unsigned long) length,
> + Zendnames[(frameend-ZCRCE)&3]));
> + crc = 0;
> +- do {
> +- zsendline(*buf); crc = updcrc((0377 & *buf), crc);
> +- buf++;
> +- } while (--length>0);
> ++
> ++ for( ; length; length--) {
> ++ zsendline(*buf); crc = updcrc((0377 & *buf), crc);
> ++ buf++;
> ++ }
> ++
> + xsendline(ZDLE); xsendline(frameend);
> + crc = updcrc(frameend, crc);
> +
> \ No newline at end of file
> diff --git a/meta/recipes-bsp/lrzsz/lrzsz-0.12.20/gettext.patch b/meta/recipes-bsp/lrzsz/lrzsz-0.12.20/gettext.patch
> new file mode 100644
> index 00000000000..1a24a1f05e7
> --- /dev/null
> +++ b/meta/recipes-bsp/lrzsz/lrzsz-0.12.20/gettext.patch
> @@ -0,0 +1,21884 @@
> +Upstream-Status: Inappropriate [configuration]
> +
> +--- lrzsz-0.12.20.safe/ABOUT-NLS 1998-04-26 09:22:30.000000000 -0400
> ++++ lrzsz-0.12.20/ABOUT-NLS 2004-09-12 14:40:34.323752952 -0400
> +@@ -1,14 +1,14 @@
> + Notes on the Free Translation Project
> + *************************************
> +
> +- Free software is going international! The Free Translation Project
> +-is a way to get maintainers of free software, translators, and users all
> ++Free software is going international! The Free Translation Project is
> ++a way to get maintainers of free software, translators, and users all
> + together, so that will gradually become able to speak many languages.
> + A few packages already provide translations for their messages.
> +
> + If you found this `ABOUT-NLS' file inside a distribution, you may
> + assume that the distributed package does use GNU `gettext' internally,
> +-itself available at your nearest GNU archive site. But you do *not*
> ++itself available at your nearest GNU archive site. But you do _not_
> + need to install GNU `gettext' prior to configuring, installing or using
> + this package with messages translated.
> +
> +@@ -22,10 +22,10 @@
> + `gettext' which is used. The information can be found in the
> + `intl/VERSION' file, in internationalized packages.
> +
> +-One advise in advance
> +-=====================
> ++Quick configuration advice
> ++==========================
> +
> +- If you want to exploit the full power of internationalization, you
> ++If you want to exploit the full power of internationalization, you
> + should configure it using
> +
> + ./configure --with-included-gettext
> +@@ -34,42 +34,40 @@
> + package, despite the existence of internationalizing capabilities in the
> + operating system where this package is being installed. So far, only
> + the `gettext' implementation in the GNU C library version 2 provides as
> +-many features (such as locale alias or message inheritance) as the
> +-implementation here. It is also not possible to offer this additional
> +-functionality on top of a `catgets' implementation. Future versions of
> +-GNU `gettext' will very likely convey even more functionality. So it
> +-might be a good idea to change to GNU `gettext' as soon as possible.
> ++many features (such as locale alias, message inheritance, automatic
> ++charset conversion or plural form handling) as the implementation here.
> ++It is also not possible to offer this additional functionality on top
> ++of a `catgets' implementation. Future versions of GNU `gettext' will
> ++very likely convey even more functionality. So it might be a good idea
> ++to change to GNU `gettext' as soon as possible.
> +
> +- So you need not provide this option if you are using GNU libc 2 or
> ++ So you need _not_ provide this option if you are using GNU libc 2 or
> + you have installed a recent copy of the GNU gettext package with the
> + included `libintl'.
> +
> + INSTALL Matters
> + ===============
> +
> +- Some packages are "localizable" when properly installed; the
> +-programs they contain can be made to speak your own native language.
> +-Most such packages use GNU `gettext'. Other packages have their own
> +-ways to internationalization, predating GNU `gettext'.
> ++Some packages are "localizable" when properly installed; the programs
> ++they contain can be made to speak your own native language. Most such
> ++packages use GNU `gettext'. Other packages have their own ways to
> ++internationalization, predating GNU `gettext'.
> +
> + By default, this package will be installed to allow translation of
> +-messages. It will automatically detect whether the system provides
> +-usable `catgets' (if using this is selected by the installer) or
> +-`gettext' functions. If neither is available, the GNU `gettext' own
> ++messages. It will automatically detect whether the system already
> ++provides the GNU `gettext' functions. If not, the GNU `gettext' own
> + library will be used. This library is wholly contained within this
> + package, usually in the `intl/' subdirectory, so prior installation of
> +-the GNU `gettext' package is *not* required. Installers may use
> ++the GNU `gettext' package is _not_ required. Installers may use
> + special options at configuration time for changing the default
> + behaviour. The commands:
> +
> + ./configure --with-included-gettext
> +- ./configure --with-catgets
> + ./configure --disable-nls
> +
> +-will respectively bypass any pre-existing `catgets' or `gettext' to use
> +-the internationalizing routines provided within this package, enable
> +-the use of the `catgets' functions (if found on the locale system), or
> +-else, *totally* disable translation of messages.
> ++will respectively bypass any pre-existing `gettext' to use the
> ++internationalizing routines provided within this package, or else,
> ++_totally_ disable translation of messages.
> +
> + When you already have GNU `gettext' installed on your system and run
> + configure without an option for your new package, `configure' will
> +@@ -83,18 +81,10 @@
> +
> + to prevent auto-detection.
> +
> +- By default the configuration process will not test for the `catgets'
> +-function and therefore they will not be used. The reasons are already
> +-given above: the emulation on top of `catgets' cannot provide all the
> +-extensions provided by the GNU `gettext' library. If you nevertheless
> +-want to use the `catgets' functions use
> +-
> +- ./configure --with-catgets
> +-
> +-to enable the test for `catgets' (this causes no harm if `catgets' is
> +-not available on your system). If you really select this option we
> +-would like to hear about the reasons because we cannot think of any
> +-good one ourself.
> ++ The configuration process will not test for the `catgets' function
> ++and therefore it will not be used. The reason is that even an
> ++emulation of `gettext' on top of `catgets' could not provide all the
> ++extensions of the GNU `gettext' library.
> +
> + Internationalized packages have usually many `po/LL.po' files, where
> + LL gives an ISO 639 two-letter code identifying the language. Unless
> +@@ -108,57 +98,73 @@
> + Using This Package
> + ==================
> +
> +- As a user, if your language has been installed for this package, you
> ++As a user, if your language has been installed for this package, you
> + only have to set the `LANG' environment variable to the appropriate
> +-ISO 639 `LL' two-letter code prior to using the programs in the
> +-package. For example, let's suppose that you speak German. At the
> +-shell prompt, merely execute `setenv LANG de' (in `csh'),
> +-`export LANG; LANG=de' (in `sh') or `export LANG=de' (in `bash'). This
> +-can be done from your `.login' or `.profile' file, once and for all.
> ++`LL_CC' combination. Here `LL' is an ISO 639 two-letter language code,
> ++and `CC' is an ISO 3166 two-letter country code. For example, let's
> ++suppose that you speak German and live in Germany. At the shell
> ++prompt, merely execute `setenv LANG de_DE' (in `csh'),
> ++`export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash').
> ++This can be done from your `.login' or `.profile' file, once and for
> ++all.
> +
> +- An operating system might already offer message localization for
> +-many of its programs, while other programs have been installed locally
> +-with the full capabilities of GNU `gettext'. Just using `gettext'
> +-extended syntax for `LANG' would break proper localization of already
> +-available operating system programs. In this case, users should set
> +-both `LANGUAGE' and `LANG' variables in their environment, as programs
> +-using GNU `gettext' give preference to `LANGUAGE'. For example, some
> +-Swedish users would rather read translations in German than English for
> +-when Swedish is not available. This is easily accomplished by setting
> +-`LANGUAGE' to `sv:de' while leaving `LANG' to `sv'.
> ++ You might think that the country code specification is redundant.
> ++But in fact, some languages have dialects in different countries. For
> ++example, `de_AT' is used for Austria, and `pt_BR' for Brazil. The
> ++country code serves to distinguish the dialects.
> ++
> ++ The locale naming convention of `LL_CC', with `LL' denoting the
> ++language and `CC' denoting the country, is the one use on systems based
> ++on GNU libc. On other systems, some variations of this scheme are
> ++used, such as `LL' or `LL_CC.ENCODING'. You can get the list of
> ++locales supported by your system for your country by running the command
> ++`locale -a | grep '^LL''.
> ++
> ++ Not all programs have translations for all languages. By default, an
> ++English message is shown in place of a nonexistent translation. If you
> ++understand other languages, you can set up a priority list of languages.
> ++This is done through a different environment variable, called
> ++`LANGUAGE'. GNU `gettext' gives preference to `LANGUAGE' over `LANG'
> ++for the purpose of message handling, but you still need to have `LANG'
> ++set to the primary language; this is required by other parts of the
> ++system libraries. For example, some Swedish users who would rather
> ++read translations in German than English for when Swedish is not
> ++available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'.
> ++
> ++ Special advice for Norwegian users: The language code for Norwegian
> ++bokma*l changed from `no' to `nb' recently (in 2003). During the
> ++transition period, while some message catalogs for this language are
> ++installed under `nb' and some older ones under `no', it's recommended
> ++for Norwegian users to set `LANGUAGE' to `nb:no' so that both newer and
> ++older translations are used.
> ++
> ++ In the `LANGUAGE' environment variable, but not in the `LANG'
> ++environment variable, `LL_CC' combinations can be abbreviated as `LL'
> ++to denote the language's main dialect. For example, `de' is equivalent
> ++to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT'
> ++(Portuguese as spoken in Portugal) in this context.
> +
> + Translating Teams
> + =================
> +
> +- For the Free Translation Project to be a success, we need interested
> ++For the Free Translation Project to be a success, we need interested
> + people who like their own language and write it well, and who are also
> + able to synergize with other translators speaking the same language.
> +-Each translation team has its own mailing list, courtesy of Linux
> +-International. You may reach your translation team at the address
> +-`LL at li.org', replacing LL by the two-letter ISO 639 code for your
> +-language. Language codes are *not* the same as the country codes given
> +-in ISO 3166. The following translation teams exist, as of August 1997:
> +-
> +- Chinese `zh', Czech `cs', Danish `da', Dutch `nl', English `en',
> +- Esperanto `eo', Finnish `fi', French `fr', German `de', Hungarian
> +- `hu', Irish `ga', Italian `it', Indonesian `id', Japanese `ja',
> +- Korean `ko', Latin `la', Norwegian `no', Persian `fa', Polish
> +- `pl', Portuguese `pt', Russian `ru', Slovenian `sl', Spanish `es',
> +- Swedish `sv', and Turkish `tr'.
> +-
> +-For example, you may reach the Chinese translation team by writing to
> +-`zh at li.org'.
> ++Each translation team has its own mailing list. The up-to-date list of
> ++teams can be found at the Free Translation Project's homepage,
> ++`http://www.iro.umontreal.ca/contrib/po/HTML/', in the "National teams"
> ++area.
> +
> +- If you'd like to volunteer to *work* at translating messages, you
> ++ If you'd like to volunteer to _work_ at translating messages, you
> + should become a member of the translating team for your own language.
> +-The subscribing address is *not* the same as the list itself, it has
> ++The subscribing address is _not_ the same as the list itself, it has
> + `-request' appended. For example, speakers of Swedish can send a
> + message to `sv-request at li.org', having this message body:
> +
> + subscribe
> +
> + Keep in mind that team members are expected to participate
> +-*actively* in translations, or at solving translational difficulties,
> ++_actively_ in translations, or at solving translational difficulties,
> + rather than merely lurking around. If your team does not exist yet and
> + you want to start one, or if you are unsure about what to do or how to
> + get started, please write to `translation at iro.umontreal.ca' to reach the
> +@@ -171,43 +177,559 @@
> + Available Packages
> + ==================
> +
> +- Languages are not equally supported in all packages. The following
> +-matrix shows the current state of internationalization, as of August
> +-1997. The matrix shows, in regard of each package, for which languages
> +-PO files have been submitted to translation coordination.
> ++Languages are not equally supported in all packages. The following
> ++matrix shows the current state of internationalization, as of January
> ++2004. The matrix shows, in regard of each package, for which languages
> ++PO files have been submitted to translation coordination, with a
> ++translation percentage of at least 50%.
> +
> +- Ready PO files cs da de en es fi fr it ja ko nl no pl pt sl sv
> +- .-------------------------------------------------.
> +- bash | [] [] [] | 3
> +- bison | [] [] [] | 3
> +- clisp | [] [] [] [] | 4
> +- cpio | [] [] [] [] [] | 5
> +- diffutils | [] [] [] [] [] | 5
> +- enscript | [] [] [] [] [] [] | 6
> +- fileutils | [] [] [] [] [] [] [] [] [] [] | 10
> +- findutils | [] [] [] [] [] [] [] [] | 8
> +- flex | [] [] [] [] | 4
> +- gcal | [] [] [] [] [] | 5
> +- gettext | [] [] [] [] [] [] [] [] [] [] | 11
> +- grep | [] [] [] [] [] [] [] [] [] | 9
> +- hello | [] [] [] [] [] [] [] [] [] [] | 10
> +- id-utils | [] [] [] | 3
> +- indent | [] [] [] [] | 4
> +- libc | [] [] [] [] [] [] [] | 7
> +- m4 | [] [] [] [] [] | 5
> +- make | [] [] [] [] [] [] | 6
> +- music | [] [] | 2
> +- ptx | [] [] [] [] [] [] [] [] | 8
> +- recode | [] [] [] [] [] [] [] [] [] | 9
> +- sh-utils | [] [] [] [] [] [] [] | 7
> +- sharutils | [] [] [] [] [] | 5
> +- tar | [] [] [] [] [] [] [] [] [] [] | 10
> +- texinfo | [] | 1
> +- textutils | [] [] [] [] [] [] [] [] [] | 9
> +- wdiff | [] [] [] [] [] [] [] [] | 8
> +- `-------------------------------------------------'
> +- 16 languages cs da de en es fi fr it ja ko nl no pl pt sl sv
> +- 27 packages 3 2 24 1 17 1 26 2 1 11 20 9 19 7 7 17 167
> ++ Ready PO files af am ar az be bg bs ca cs da de el en en_GB eo es
> ++ +----------------------------------------------------+
> ++ a2ps | [] [] [] [] |
> ++ aegis | () |
> ++ ant-phone | () |
> ++ anubis | |
> ++ ap-utils | |
> ++ aspell | [] |
> ++ bash | [] [] [] [] |
> ++ batchelor | |
> ++ bfd | [] [] |
> ++ binutils | [] [] |
> ++ bison | [] [] [] |
> ++ bluez-pin | [] [] [] |
> ++ clisp | |
> ++ clisp | [] [] [] |
> ++ console-tools | [] [] |
> ++ coreutils | [] [] [] [] |
> ++ cpio | [] [] [] |
> ++ darkstat | [] () [] |
> ++ diffutils | [] [] [] [] [] [] [] |
> ++ e2fsprogs | [] [] [] |
> ++ enscript | [] [] [] [] |
> ++ error | [] [] [] [] [] |
> ++ fetchmail | [] () [] [] [] [] |
> ++ fileutils | [] [] [] |
> ++ findutils | [] [] [] [] [] [] [] |
> ++ flex | [] [] [] [] |
> ++ fslint | |
> ++ gas | [] |
> ++ gawk | [] [] [] [] |
> ++ gbiff | [] |
> ++ gcal | [] |
> ++ gcc | [] [] |
> ++ gettext | [] [] [] [] [] |
> ++ gettext-examples | [] [] [] [] |
> ++ gettext-runtime | [] [] [] [] [] |
> ++ gettext-tools | [] [] [] |
> ++ gimp-print | [] [] [] [] [] |
> ++ gliv | |
> ++ glunarclock | [] [] |
> ++ gnubiff | [] |
> ++ gnucash | [] () [] [] |
> ++ gnucash-glossary | [] () [] |
> ++ gnupg | [] () [] [] [] [] |
> ++ gpe-aerial | [] |
> ++ gpe-beam | [] [] |
> ++ gpe-calendar | [] [] |
> ++ gpe-clock | [] [] |
> ++ gpe-conf | [] [] |
> ++ gpe-contacts | [] [] |
> ++ gpe-edit | [] |
> ++ gpe-go | [] |
> ++ gpe-login | [] [] |
> ++ gpe-ownerinfo | [] [] |
> ++ gpe-sketchbook | [] [] |
> ++ gpe-su | [] [] |
> ++ gpe-taskmanager | [] [] |
> ++ gpe-timesheet | [] |
> ++ gpe-today | [] [] |
> ++ gpe-todo | [] [] |
> ++ gphoto2 | [] [] [] [] |
> ++ gprof | [] [] [] |
> ++ gpsdrive | () () () |
> ++ gramadoir | [] |
> ++ grep | [] [] [] [] [] [] |
> ++ gretl | [] |
> ++ gtick | [] () |
> ++ hello | [] [] [] [] [] [] |
> ++ id-utils | [] [] |
> ++ indent | [] [] [] [] |
> ++ iso_3166 | [] [] [] [] [] [] [] [] [] [] |
> ++ iso_3166_1 | [] [] [] [] [] [] |
> ++ iso_3166_2 | |
> ++ iso_3166_3 | [] |
> ++ iso_4217 | [] [] [] [] |
> ++ iso_639 | |
> ++ jpilot | [] [] [] |
> ++ jtag | |
> ++ jwhois | [] |
> ++ kbd | [] [] [] [] [] |
> ++ latrine | () |
> ++ ld | [] [] |
> ++ libc | [] [] [] [] [] [] |
> ++ libgpewidget | [] [] |
> ++ libiconv | [] [] [] [] [] |
> ++ lifelines | [] () |
> ++ lilypond | [] |
> ++ lingoteach | |
> ++ lingoteach_lessons | () () |
> ++ lynx | [] [] [] [] |
> ++ m4 | [] [] [] [] |
> ++ mailutils | [] [] |
> ++ make | [] [] [] |
> ++ man-db | [] () [] [] () |
> ++ minicom | [] [] [] |
> ++ mysecretdiary | [] [] [] |
> ++ nano | [] () [] [] [] |
> ++ nano_1_0 | [] () [] [] [] |
> ++ opcodes | [] |
> ++ parted | [] [] [] [] [] |
> ++ ptx | [] [] [] [] [] |
> ++ python | |
> ++ radius | [] |
> ++ recode | [] [] [] [] [] [] [] |
> ++ rpm | [] [] |
> ++ screem | |
> ++ scrollkeeper | [] [] [] [] [] [] |
> ++ sed | [] [] [] [] [] [] |
> ++ sh-utils | [] [] [] |
> ++ shared-mime-info | |
> ++ sharutils | [] [] [] [] [] [] |
> ++ silky | () |
> ++ skencil | [] () [] |
> ++ sketch | [] () [] |
> ++ soundtracker | [] [] [] |
> ++ sp | [] |
> ++ tar | [] [] [] [] |
> ++ texinfo | [] [] [] |
> ++ textutils | [] [] [] [] |
> ++ tin | () () |
> ++ tp-robot | |
> ++ tuxpaint | [] [] [] [] [] [] [] |
> ++ unicode-han-tra... | |
> ++ unicode-transla... | |
> ++ util-linux | [] [] [] [] [] |
> ++ vorbis-tools | [] [] [] [] |
> ++ wastesedge | () |
> ++ wdiff | [] [] [] [] |
> ++ wget | [] [] [] [] [] [] |
> ++ xchat | [] [] [] [] |
> ++ xfree86_xkb_xml | [] [] |
> ++ xpad | [] |
> ++ +----------------------------------------------------+
> ++ af am ar az be bg bs ca cs da de el en en_GB eo es
> ++ 4 0 0 1 9 4 1 40 41 60 78 17 1 5 13 68
> ++
> ++ et eu fa fi fr ga gl he hr hu id is it ja ko lg
> ++ +-------------------------------------------------+
> ++ a2ps | [] [] [] () () |
> ++ aegis | |
> ++ ant-phone | [] |
> ++ anubis | [] |
> ++ ap-utils | [] |
> ++ aspell | [] [] |
> ++ bash | [] [] |
> ++ batchelor | [] [] |
> ++ bfd | [] |
> ++ binutils | [] [] |
> ++ bison | [] [] [] [] |
> ++ bluez-pin | [] [] [] [] [] |
> ++ clisp | |
> ++ clisp | [] |
> ++ console-tools | |
> ++ coreutils | [] [] [] [] [] [] |
> ++ cpio | [] [] [] [] |
> ++ darkstat | () [] [] [] |
> ++ diffutils | [] [] [] [] [] [] [] |
> ++ e2fsprogs | |
> ++ enscript | [] [] |
> ++ error | [] [] [] [] |
> ++ fetchmail | [] |
> ++ fileutils | [] [] [] [] [] [] |
> ++ findutils | [] [] [] [] [] [] [] [] [] [] [] |
> ++ flex | [] [] [] |
> ++ fslint | [] |
> ++ gas | [] |
> ++ gawk | [] [] [] |
> ++ gbiff | [] |
> ++ gcal | [] |
> ++ gcc | [] |
> ++ gettext | [] [] [] |
> ++ gettext-examples | [] [] |
> ++ gettext-runtime | [] [] [] [] [] |
> ++ gettext-tools | [] [] [] |
> ++ gimp-print | [] [] |
> ++ gliv | () |
> ++ glunarclock | [] [] [] [] |
> ++ gnubiff | [] |
> ++ gnucash | () [] |
> ++ gnucash-glossary | [] |
> ++ gnupg | [] [] [] [] [] [] [] |
> ++ gpe-aerial | [] |
> ++ gpe-beam | [] |
> ++ gpe-calendar | [] [] [] |
> ++ gpe-clock | [] |
> ++ gpe-conf | [] |
> ++ gpe-contacts | [] [] |
> ++ gpe-edit | [] [] |
> ++ gpe-go | [] |
> ++ gpe-login | [] [] |
> ++ gpe-ownerinfo | [] [] [] |
> ++ gpe-sketchbook | [] |
> ++ gpe-su | [] |
> ++ gpe-taskmanager | [] |
> ++ gpe-timesheet | [] [] [] |
> ++ gpe-today | [] [] |
> ++ gpe-todo | [] [] |
> ++ gphoto2 | [] [] [] |
> ++ gprof | [] [] |
> ++ gpsdrive | () () () |
> ++ gramadoir | [] [] |
> ++ grep | [] [] [] [] [] [] [] [] [] [] [] |
> ++ gretl | [] [] |
> ++ gtick | [] [] [] |
> ++ hello | [] [] [] [] [] [] [] [] [] [] [] [] [] |
> ++ id-utils | [] [] [] [] |
> ++ indent | [] [] [] [] [] [] [] [] [] |
> ++ iso_3166 | [] [] [] [] [] [] [] |
> ++ iso_3166_1 | [] [] [] [] [] |
> ++ iso_3166_2 | |
> ++ iso_3166_3 | |
> ++ iso_4217 | [] [] [] [] [] [] |
> ++ iso_639 | |
> ++ jpilot | [] () |
> ++ jtag | [] |
> ++ jwhois | [] [] [] [] |
> ++ kbd | [] |
> ++ latrine | [] |
> ++ ld | [] |
> ++ libc | [] [] [] [] [] [] |
> ++ libgpewidget | [] [] [] [] |
> ++ libiconv | [] [] [] [] [] [] [] [] [] |
> ++ lifelines | () |
> ++ lilypond | [] |
> ++ lingoteach | [] [] |
> ++ lingoteach_lessons | |
> ++ lynx | [] [] [] [] |
> ++ m4 | [] [] [] [] |
> ++ mailutils | |
> ++ make | [] [] [] [] [] [] |
> ++ man-db | () () |
> ++ minicom | [] [] [] [] |
> ++ mysecretdiary | [] [] |
> ++ nano | [] [] [] [] |
> ++ nano_1_0 | [] [] [] [] |
> ++ opcodes | [] |
> ++ parted | [] [] [] |
> ++ ptx | [] [] [] [] [] [] [] |
> ++ python | |
> ++ radius | [] |
> ++ recode | [] [] [] [] [] [] |
> ++ rpm | [] [] |
> ++ screem | |
> ++ scrollkeeper | [] |
> ++ sed | [] [] [] [] [] [] [] [] [] |
> ++ sh-utils | [] [] [] [] [] [] [] |
> ++ shared-mime-info | [] [] [] |
> ++ sharutils | [] [] [] [] [] |
> ++ silky | () [] () () |
> ++ skencil | [] |
> ++ sketch | [] |
> ++ soundtracker | [] [] |
> ++ sp | [] () |
> ++ tar | [] [] [] [] [] [] [] [] [] |
> ++ texinfo | [] [] [] [] |
> ++ textutils | [] [] [] [] [] [] |
> ++ tin | [] () |
> ++ tp-robot | [] |
> ++ tuxpaint | [] [] [] [] [] [] [] [] [] |
> ++ unicode-han-tra... | |
> ++ unicode-transla... | [] [] |
> ++ util-linux | [] [] [] [] () [] |
> ++ vorbis-tools | [] |
> ++ wastesedge | () |
> ++ wdiff | [] [] [] [] [] [] |
> ++ wget | [] [] [] [] [] [] [] |
> ++ xchat | [] [] [] |
> ++ xfree86_xkb_xml | [] [] |
> ++ xpad | [] [] |
> ++ +-------------------------------------------------+
> ++ et eu fa fi fr ga gl he hr hu id is it ja ko lg
> ++ 22 2 1 26 106 28 24 8 10 41 33 1 26 33 12 0
> ++
> ++ lt lv mk mn ms mt nb nl nn no nso pl pt pt_BR ro ru
> ++ +-----------------------------------------------------+
> ++ a2ps | [] [] () () [] [] [] |
> ++ aegis | () () () |
> ++ ant-phone | [] [] |
> ++ anubis | [] [] [] [] [] [] |
> ++ ap-utils | [] () [] |
> ++ aspell | [] |
> ++ bash | [] [] [] |
> ++ batchelor | [] |
> ++ bfd | [] |
> ++ binutils | [] |
> ++ bison | [] [] [] [] [] |
> ++ bluez-pin | [] [] [] |
> ++ clisp | |
> ++ clisp | [] |
> ++ console-tools | [] |
> ++ coreutils | [] [] |
> ++ cpio | [] [] [] [] [] |
> ++ darkstat | [] [] [] [] |
> ++ diffutils | [] [] [] [] [] [] |
> ++ e2fsprogs | [] |
> ++ enscript | [] [] [] [] |
> ++ error | [] [] [] |
> ++ fetchmail | [] [] () [] |
> ++ fileutils | [] [] [] |
> ++ findutils | [] [] [] [] [] |
> ++ flex | [] [] [] [] |
> ++ fslint | [] [] |
> ++ gas | |
> ++ gawk | [] [] [] |
> ++ gbiff | [] [] |
> ++ gcal | |
> ++ gcc | |
> ++ gettext | [] [] [] |
> ++ gettext-examples | [] [] [] |
> ++ gettext-runtime | [] [] [] [] |
> ++ gettext-tools | [] [] |
> ++ gimp-print | [] |
> ++ gliv | [] [] [] |
> ++ glunarclock | [] [] [] [] |
> ++ gnubiff | [] |
> ++ gnucash | [] [] () [] |
> ++ gnucash-glossary | [] [] |
> ++ gnupg | [] |
> ++ gpe-aerial | [] [] [] [] |
> ++ gpe-beam | [] [] [] [] |
> ++ gpe-calendar | [] [] [] [] |
> ++ gpe-clock | [] [] [] [] |
> ++ gpe-conf | [] [] [] [] |
> ++ gpe-contacts | [] [] [] [] |
> ++ gpe-edit | [] [] [] [] |
> ++ gpe-go | [] [] [] |
> ++ gpe-login | [] [] [] [] |
> ++ gpe-ownerinfo | [] [] [] [] |
> ++ gpe-sketchbook | [] [] [] [] |
> ++ gpe-su | [] [] [] [] |
> ++ gpe-taskmanager | [] [] [] [] |
> ++ gpe-timesheet | [] [] [] [] |
> ++ gpe-today | [] [] [] [] |
> ++ gpe-todo | [] [] [] [] |
> ++ gphoto2 | [] |
> ++ gprof | [] [] |
> ++ gpsdrive | () () [] |
> ++ gramadoir | () [] |
> ++ grep | [] [] [] [] [] |
> ++ gretl | |
> ++ gtick | [] [] [] |
> ++ hello | [] [] [] [] [] [] [] [] [] [] |
> ++ id-utils | [] [] [] [] |
> ++ indent | [] [] [] [] |
> ++ iso_3166 | [] [] [] |
> ++ iso_3166_1 | [] [] |
> ++ iso_3166_2 | |
> ++ iso_3166_3 | [] |
> ++ iso_4217 | [] [] [] [] [] [] [] [] |
> ++ iso_639 | [] |
> ++ jpilot | () () |
> ++ jtag | |
> ++ jwhois | [] [] [] [] () |
> ++ kbd | [] [] [] |
> ++ latrine | [] |
> ++ ld | |
> ++ libc | [] [] [] [] |
> ++ libgpewidget | [] [] [] |
> ++ libiconv | [] [] [] [] [] |
> ++ lifelines | |
> ++ lilypond | |
> ++ lingoteach | |
> ++ lingoteach_lessons | |
> ++ lynx | [] [] [] |
> ++ m4 | [] [] [] [] [] |
> ++ mailutils | [] [] [] |
> ++ make | [] [] [] [] |
> ++ man-db | [] |
> ++ minicom | [] [] [] [] |
> ++ mysecretdiary | [] [] [] |
> ++ nano | [] [] [] [] [] |
> ++ nano_1_0 | [] [] [] [] [] [] |
> ++ opcodes | [] [] |
> ++ parted | [] [] [] [] |
> ++ ptx | [] [] [] [] [] [] [] [] |
> ++ python | |
> ++ radius | [] [] |
> ++ recode | [] [] [] [] |
> ++ rpm | [] [] [] |
> ++ screem | |
> ++ scrollkeeper | [] [] [] [] [] |
> ++ sed | [] [] [] |
> ++ sh-utils | [] [] |
> ++ shared-mime-info | [] [] |
> ++ sharutils | [] [] |
> ++ silky | () |
> ++ skencil | [] [] |
> ++ sketch | [] [] |
> ++ soundtracker | |
> ++ sp | |
> ++ tar | [] [] [] [] [] [] |
> ++ texinfo | [] [] [] [] |
> ++ textutils | [] [] |
> ++ tin | |
> ++ tp-robot | [] |
> ++ tuxpaint | [] [] [] [] [] [] [] [] |
> ++ unicode-han-tra... | |
> ++ unicode-transla... | |
> ++ util-linux | [] [] [] |
> ++ vorbis-tools | [] [] [] |
> ++ wastesedge | |
> ++ wdiff | [] [] [] [] [] |
> ++ wget | [] [] [] |
> ++ xchat | [] [] [] |
> ++ xfree86_xkb_xml | [] [] |
> ++ xpad | [] [] |
> ++ +-----------------------------------------------------+
> ++ lt lv mk mn ms mt nb nl nn no nso pl pt pt_BR ro ru
> ++ 1 2 0 3 12 0 10 69 6 7 1 40 26 36 76 63
> ++
> ++ sk sl sr sv ta th tr uk ven vi wa xh zh_CN zh_TW zu
> ++ +-----------------------------------------------------+
> ++ a2ps | [] [] [] [] | 16
> ++ aegis | | 0
> ++ ant-phone | | 3
> ++ anubis | [] [] | 9
> ++ ap-utils | () | 3
> ++ aspell | | 4
> ++ bash | | 9
> ++ batchelor | | 3
> ++ bfd | [] [] | 6
> ++ binutils | [] [] [] | 8
> ++ bison | [] [] | 14
> ++ bluez-pin | [] [] [] | 14
> ++ clisp | | 0
> ++ clisp | | 5
> ++ console-tools | | 3
> ++ coreutils | [] [] [] [] | 16
> ++ cpio | [] [] | 14
> ++ darkstat | [] [] [] () () | 12
> ++ diffutils | [] [] [] | 23
> ++ e2fsprogs | [] [] | 6
> ++ enscript | [] [] | 12
> ++ error | [] [] [] | 15
> ++ fetchmail | [] [] | 11
> ++ fileutils | [] [] [] [] [] | 17
> ++ findutils | [] [] [] [] [] [] | 29
> ++ flex | [] [] | 13
> ++ fslint | | 3
> ++ gas | [] | 3
> ++ gawk | [] [] | 12
> ++ gbiff | | 4
> ++ gcal | [] [] | 4
> ++ gcc | [] | 4
> ++ gettext | [] [] [] [] [] | 16
> ++ gettext-examples | [] [] [] [] [] | 14
> ++ gettext-runtime | [] [] [] [] [] [] [] [] | 22
> ++ gettext-tools | [] [] [] [] [] [] | 14
> ++ gimp-print | [] [] | 10
> ++ gliv | | 3
> ++ glunarclock | [] [] [] | 13
> ++ gnubiff | | 3
> ++ gnucash | [] [] | 9
> ++ gnucash-glossary | [] [] [] | 8
> ++ gnupg | [] [] [] [] | 17
> ++ gpe-aerial | [] | 7
> ++ gpe-beam | [] | 8
> ++ gpe-calendar | [] [] [] [] | 13
> ++ gpe-clock | [] [] [] | 10
> ++ gpe-conf | [] [] | 9
> ++ gpe-contacts | [] [] [] | 11
> ++ gpe-edit | [] [] [] [] [] | 12
> ++ gpe-go | | 5
> ++ gpe-login | [] [] [] [] [] | 13
> ++ gpe-ownerinfo | [] [] [] [] | 13
> ++ gpe-sketchbook | [] [] | 9
> ++ gpe-su | [] [] [] | 10
> ++ gpe-taskmanager | [] [] [] | 10
> ++ gpe-timesheet | [] [] [] [] | 12
> ++ gpe-today | [] [] [] [] [] | 13
> ++ gpe-todo | [] [] [] [] | 12
> ++ gphoto2 | [] [] [] | 11
> ++ gprof | [] [] | 9
> ++ gpsdrive | [] [] | 3
> ++ gramadoir | [] | 5
> ++ grep | [] [] [] [] | 26
> ++ gretl | | 3
> ++ gtick | | 7
> ++ hello | [] [] [] [] [] | 34
> ++ id-utils | [] [] | 12
> ++ indent | [] [] [] [] | 21
> ++ iso_3166 | [] [] [] [] [] [] [] | 27
> ++ iso_3166_1 | [] [] [] | 16
> ++ iso_3166_2 | | 0
> ++ iso_3166_3 | | 2
> ++ iso_4217 | [] [] [] [] [] [] | 24
> ++ iso_639 | | 1
> ++ jpilot | [] [] [] [] [] | 9
> ++ jtag | [] | 2
> ++ jwhois | () [] [] | 11
> ++ kbd | [] [] | 11
> ++ latrine | | 2
> ++ ld | [] [] | 5
> ++ libc | [] [] [] [] | 20
> ++ libgpewidget | [] [] [] [] | 13
> ++ libiconv | [] [] [] [] [] [] [] [] | 27
> ++ lifelines | [] | 2
> ++ lilypond | [] | 3
> ++ lingoteach | | 2
> ++ lingoteach_lessons | () | 0
> ++ lynx | [] [] [] | 14
> ++ m4 | [] [] | 15
> ++ mailutils | | 5
> ++ make | [] [] [] | 16
> ++ man-db | [] | 5
> ++ minicom | | 11
> ++ mysecretdiary | [] [] | 10
> ++ nano | [] [] [] [] | 17
> ++ nano_1_0 | [] [] [] | 17
> ++ opcodes | [] [] | 6
> ++ parted | [] [] [] | 15
> ++ ptx | [] [] | 22
> ++ python | | 0
> ++ radius | | 4
> ++ recode | [] [] [] | 20
> ++ rpm | [] [] | 9
> ++ screem | [] [] | 2
> ++ scrollkeeper | [] [] [] | 15
> ++ sed | [] [] [] [] [] [] | 24
> ++ sh-utils | [] [] | 14
> ++ shared-mime-info | [] [] | 7
> ++ sharutils | [] [] [] [] | 17
> ++ silky | () | 3
> ++ skencil | [] | 6
> ++ sketch | [] | 6
> ++ soundtracker | [] [] | 7
> ++ sp | [] | 3
> ++ tar | [] [] [] [] [] | 24
> ++ texinfo | [] [] [] | 14
> ++ textutils | [] [] [] [] | 16
> ++ tin | | 1
> ++ tp-robot | | 2
> ++ tuxpaint | [] [] [] [] [] | 29
> ++ unicode-han-tra... | | 0
> ++ unicode-transla... | | 2
> ++ util-linux | [] [] | 15
> ++ vorbis-tools | | 8
> ++ wastesedge | | 0
> ++ wdiff | [] [] [] | 18
> ++ wget | [] [] [] [] [] [] [] [] | 24
> ++ xchat | [] [] [] [] [] | 15
> ++ xfree86_xkb_xml | [] [] [] [] [] | 11
> ++ xpad | | 5
> ++ +-----------------------------------------------------+
> ++ 63 teams sk sl sr sv ta th tr uk ven vi wa xh zh_CN zh_TW zu
> ++ 131 domains 47 19 28 83 0 0 59 13 1 1 11 0 22 22 0 1373
> +
> + Some counters in the preceding matrix are higher than the number of
> + visible blocks let us expect. This is because a few extra PO files are
> +@@ -220,6 +742,27 @@
> + lag between the mere existence a PO file and its wide availability in a
> + distribution.
> +
> +- If August 1997 seems to be old, you may fetch a more recent copy of
> +-this `ABOUT-NLS' file on most GNU archive sites.
> ++ If January 2004 seems to be old, you may fetch a more recent copy of
> ++this `ABOUT-NLS' file on most GNU archive sites. The most up-to-date
> ++matrix with full percentage details can be found at
> ++`http://www.iro.umontreal.ca/contrib/po/HTML/matrix.html'.
> ++
> ++Using `gettext' in new packages
> ++===============================
> ++
> ++If you are writing a freely available program and want to
> ++internationalize it you are welcome to use GNU `gettext' in your
> ++package. Of course you have to respect the GNU Library General Public
> ++License which covers the use of the GNU `gettext' library. This means
> ++in particular that even non-free programs can use `libintl' as a shared
> ++library, whereas only free software can use `libintl' as a static
> ++library or use modified versions of `libintl'.
> ++
> ++ Once the sources are changed appropriately and the setup can handle
> ++the use of `gettext' the only thing missing are the translations. The
> ++Free Translation Project is also available for packages which are not
> ++developed inside the GNU project. Therefore the information given above
> ++applies also for every other Free Software Project. Contact
> ++`translation at iro.umontreal.ca' to make the `.pot' files available to
> ++the translation teams.
> +
> +--- lrzsz-0.12.20.safe/ChangeLog 1998-12-29 17:49:56.000000000 -0500
> ++++ lrzsz-0.12.20/ChangeLog 2004-09-12 14:40:35.846521456 -0400
> +@@ -1,3 +1,11 @@
> ++2004-09-12 gettextize <bug-gnu-gettext at gnu.org>
> ++
> ++ * Makefile.am (ACLOCAL_AMFLAGS): New variable.
> ++ (EXTRA_DIST): Add config.rpath.
> ++ * configure.in (AC_OUTPUT): Add m4/Makefile.
> ++ (AC_OUTPUT): Remove command that created po/Makefile.
> ++ (AC_LINK_FILES): Remove invocation.
> ++
> + 1998-12-29 Uwe Ohse <uwe at ohse.de>
> +
> + * src/lrz.c: removed stpcpy call.
> +--- lrzsz-0.12.20.safe/config.rpath 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/config.rpath 2004-09-12 14:40:34.329752040 -0400
> +@@ -0,0 +1,548 @@
> ++#! /bin/sh
> ++# Output a system dependent set of variables, describing how to set the
> ++# run time search path of shared libraries in an executable.
> ++#
> ++# Copyright 1996-2003 Free Software Foundation, Inc.
> ++# Taken from GNU libtool, 2001
> ++# Originally by Gordon Matzigkeit <gord at gnu.ai.mit.edu>, 1996
> ++#
> ++# 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
> ++# the Free Software Foundation; either version 2 of the License, or
> ++# (at your option) any later version.
> ++#
> ++# This program is distributed in the hope that it will be useful, but
> ++# WITHOUT ANY WARRANTY; without even the implied warranty of
> ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> ++# General Public License for more details.
> ++#
> ++# 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.
> ++#
> ++# As a special exception to the GNU General Public License, if you
> ++# distribute this file as part of a program that contains a
> ++# configuration script generated by Autoconf, you may include it under
> ++# the same distribution terms that you use for the rest of that program.
> ++#
> ++# The first argument passed to this file is the canonical host specification,
> ++# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
> ++# or
> ++# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
> ++# The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld
> ++# should be set by the caller.
> ++#
> ++# The set of defined variables is at the end of this script.
> ++
> ++# Known limitations:
> ++# - On IRIX 6.5 with CC="cc", the run time search patch must not be longer
> ++# than 256 bytes, otherwise the compiler driver will dump core. The only
> ++# known workaround is to choose shorter directory names for the build
> ++# directory and/or the installation directory.
> ++
> ++# All known linkers require a `.a' archive for static linking (except M$VC,
> ++# which needs '.lib').
> ++libext=a
> ++shrext=.so
> ++
> ++host="$1"
> ++host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
> ++host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
> ++host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
> ++
> ++# Code taken from libtool.m4's AC_LIBTOOL_PROG_COMPILER_PIC.
> ++
> ++wl=
> ++if test "$GCC" = yes; then
> ++ wl='-Wl,'
> ++else
> ++ case "$host_os" in
> ++ aix*)
> ++ wl='-Wl,'
> ++ ;;
> ++ mingw* | pw32* | os2*)
> ++ ;;
> ++ hpux9* | hpux10* | hpux11*)
> ++ wl='-Wl,'
> ++ ;;
> ++ irix5* | irix6* | nonstopux*)
> ++ wl='-Wl,'
> ++ ;;
> ++ newsos6)
> ++ ;;
> ++ linux*)
> ++ case $CC in
> ++ icc|ecc)
> ++ wl='-Wl,'
> ++ ;;
> ++ ccc)
> ++ wl='-Wl,'
> ++ ;;
> ++ esac
> ++ ;;
> ++ osf3* | osf4* | osf5*)
> ++ wl='-Wl,'
> ++ ;;
> ++ sco3.2v5*)
> ++ ;;
> ++ solaris*)
> ++ wl='-Wl,'
> ++ ;;
> ++ sunos4*)
> ++ wl='-Qoption ld '
> ++ ;;
> ++ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
> ++ wl='-Wl,'
> ++ ;;
> ++ sysv4*MP*)
> ++ ;;
> ++ uts4*)
> ++ ;;
> ++ esac
> ++fi
> ++
> ++# Code taken from libtool.m4's AC_LIBTOOL_PROG_LD_SHLIBS.
> ++
> ++hardcode_libdir_flag_spec=
> ++hardcode_libdir_separator=
> ++hardcode_direct=no
> ++hardcode_minus_L=no
> ++
> ++case "$host_os" in
> ++ cygwin* | mingw* | pw32*)
> ++ # FIXME: the MSVC++ port hasn't been tested in a loooong time
> ++ # When not using gcc, we currently assume that we are using
> ++ # Microsoft Visual C++.
> ++ if test "$GCC" != yes; then
> ++ with_gnu_ld=no
> ++ fi
> ++ ;;
> ++ openbsd*)
> ++ with_gnu_ld=no
> ++ ;;
> ++esac
> ++
> ++ld_shlibs=yes
> ++if test "$with_gnu_ld" = yes; then
> ++ case "$host_os" in
> ++ aix3* | aix4* | aix5*)
> ++ # On AIX/PPC, the GNU linker is very broken
> ++ if test "$host_cpu" != ia64; then
> ++ ld_shlibs=no
> ++ fi
> ++ ;;
> ++ amigaos*)
> ++ hardcode_libdir_flag_spec='-L$libdir'
> ++ hardcode_minus_L=yes
> ++ # Samuel A. Falvo II <kc5tja at dolphin.openprojects.net> reports
> ++ # that the semantics of dynamic libraries on AmigaOS, at least up
> ++ # to version 4, is to share data among multiple programs linked
> ++ # with the same dynamic library. Since this doesn't match the
> ++ # behavior of shared libraries on other platforms, we can use
> ++ # them.
> ++ ld_shlibs=no
> ++ ;;
> ++ beos*)
> ++ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
> ++ :
> ++ else
> ++ ld_shlibs=no
> ++ fi
> ++ ;;
> ++ cygwin* | mingw* | pw32*)
> ++ # hardcode_libdir_flag_spec is actually meaningless, as there is
> ++ # no search path for DLLs.
> ++ hardcode_libdir_flag_spec='-L$libdir'
> ++ if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
> ++ :
> ++ else
> ++ ld_shlibs=no
> ++ fi
> ++ ;;
> ++ netbsd*)
> ++ ;;
> ++ solaris* | sysv5*)
> ++ if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
> ++ ld_shlibs=no
> ++ elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
> ++ :
> ++ else
> ++ ld_shlibs=no
> ++ fi
> ++ ;;
> ++ sunos4*)
> ++ hardcode_direct=yes
> ++ ;;
> ++ *)
> ++ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
> ++ :
> ++ else
> ++ ld_shlibs=no
> ++ fi
> ++ ;;
> ++ esac
> ++ if test "$ld_shlibs" = yes; then
> ++ # Unlike libtool, we use -rpath here, not --rpath, since the documented
> ++ # option of GNU ld is called -rpath, not --rpath.
> ++ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
> ++ fi
> ++else
> ++ case "$host_os" in
> ++ aix3*)
> ++ # Note: this linker hardcodes the directories in LIBPATH if there
> ++ # are no directories specified by -L.
> ++ hardcode_minus_L=yes
> ++ if test "$GCC" = yes; then
> ++ # Neither direct hardcoding nor static linking is supported with a
> ++ # broken collect2.
> ++ hardcode_direct=unsupported
> ++ fi
> ++ ;;
> ++ aix4* | aix5*)
> ++ if test "$host_cpu" = ia64; then
> ++ # On IA64, the linker does run time linking by default, so we don't
> ++ # have to do anything special.
> ++ aix_use_runtimelinking=no
> ++ else
> ++ aix_use_runtimelinking=no
> ++ # Test if we are trying to use run time linking or normal
> ++ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
> ++ # need to do runtime linking.
> ++ case $host_os in aix4.[23]|aix4.[23].*|aix5*)
> ++ for ld_flag in $LDFLAGS; do
> ++ if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
> ++ aix_use_runtimelinking=yes
> ++ break
> ++ fi
> ++ done
> ++ esac
> ++ fi
> ++ hardcode_direct=yes
> ++ hardcode_libdir_separator=':'
> ++ if test "$GCC" = yes; then
> ++ case $host_os in aix4.[012]|aix4.[012].*)
> ++ collect2name=`${CC} -print-prog-name=collect2`
> ++ if test -f "$collect2name" && \
> ++ strings "$collect2name" | grep resolve_lib_name >/dev/null
> ++ then
> ++ # We have reworked collect2
> ++ hardcode_direct=yes
> ++ else
> ++ # We have old collect2
> ++ hardcode_direct=unsupported
> ++ hardcode_minus_L=yes
> ++ hardcode_libdir_flag_spec='-L$libdir'
> ++ hardcode_libdir_separator=
> ++ fi
> ++ esac
> ++ fi
> ++ # Begin _LT_AC_SYS_LIBPATH_AIX.
> ++ echo 'int main () { return 0; }' > conftest.c
> ++ ${CC} ${LDFLAGS} conftest.c -o conftest
> ++ aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
> ++}'`
> ++ if test -z "$aix_libpath"; then
> ++ aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
> ++}'`
> ++ fi
> ++ if test -z "$aix_libpath"; then
> ++ aix_libpath="/usr/lib:/lib"
> ++ fi
> ++ rm -f conftest.c conftest
> ++ # End _LT_AC_SYS_LIBPATH_AIX.
> ++ if test "$aix_use_runtimelinking" = yes; then
> ++ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
> ++ else
> ++ if test "$host_cpu" = ia64; then
> ++ hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
> ++ else
> ++ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
> ++ fi
> ++ fi
> ++ ;;
> ++ amigaos*)
> ++ hardcode_libdir_flag_spec='-L$libdir'
> ++ hardcode_minus_L=yes
> ++ # see comment about different semantics on the GNU ld section
> ++ ld_shlibs=no
> ++ ;;
> ++ bsdi4*)
> ++ ;;
> ++ cygwin* | mingw* | pw32*)
> ++ # When not using gcc, we currently assume that we are using
> ++ # Microsoft Visual C++.
> ++ # hardcode_libdir_flag_spec is actually meaningless, as there is
> ++ # no search path for DLLs.
> ++ hardcode_libdir_flag_spec=' '
> ++ libext=lib
> ++ ;;
> ++ darwin* | rhapsody*)
> ++ if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then
> ++ hardcode_direct=no
> ++ fi
> ++ ;;
> ++ dgux*)
> ++ hardcode_libdir_flag_spec='-L$libdir'
> ++ ;;
> ++ freebsd1*)
> ++ ld_shlibs=no
> ++ ;;
> ++ freebsd2.2*)
> ++ hardcode_libdir_flag_spec='-R$libdir'
> ++ hardcode_direct=yes
> ++ ;;
> ++ freebsd2*)
> ++ hardcode_direct=yes
> ++ hardcode_minus_L=yes
> ++ ;;
> ++ freebsd*)
> ++ hardcode_libdir_flag_spec='-R$libdir'
> ++ hardcode_direct=yes
> ++ ;;
> ++ hpux9*)
> ++ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
> ++ hardcode_libdir_separator=:
> ++ hardcode_direct=yes
> ++ # hardcode_minus_L: Not really in the search PATH,
> ++ # but as the default location of the library.
> ++ hardcode_minus_L=yes
> ++ ;;
> ++ hpux10* | hpux11*)
> ++ if test "$with_gnu_ld" = no; then
> ++ case "$host_cpu" in
> ++ hppa*64*)
> ++ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
> ++ hardcode_libdir_separator=:
> ++ hardcode_direct=no
> ++ ;;
> ++ ia64*)
> ++ hardcode_libdir_flag_spec='-L$libdir'
> ++ hardcode_direct=no
> ++ # hardcode_minus_L: Not really in the search PATH,
> ++ # but as the default location of the library.
> ++ hardcode_minus_L=yes
> ++ ;;
> ++ *)
> ++ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
> ++ hardcode_libdir_separator=:
> ++ hardcode_direct=yes
> ++ # hardcode_minus_L: Not really in the search PATH,
> ++ # but as the default location of the library.
> ++ hardcode_minus_L=yes
> ++ ;;
> ++ esac
> ++ fi
> ++ ;;
> ++ irix5* | irix6* | nonstopux*)
> ++ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
> ++ hardcode_libdir_separator=:
> ++ ;;
> ++ netbsd*)
> ++ hardcode_libdir_flag_spec='-R$libdir'
> ++ hardcode_direct=yes
> ++ ;;
> ++ newsos6)
> ++ hardcode_direct=yes
> ++ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
> ++ hardcode_libdir_separator=:
> ++ ;;
> ++ openbsd*)
> ++ hardcode_direct=yes
> ++ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
> ++ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
> ++ else
> ++ case "$host_os" in
> ++ openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
> ++ hardcode_libdir_flag_spec='-R$libdir'
> ++ ;;
> ++ *)
> ++ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
> ++ ;;
> ++ esac
> ++ fi
> ++ ;;
> ++ os2*)
> ++ hardcode_libdir_flag_spec='-L$libdir'
> ++ hardcode_minus_L=yes
> ++ ;;
> ++ osf3*)
> ++ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
> ++ hardcode_libdir_separator=:
> ++ ;;
> ++ osf4* | osf5*)
> ++ if test "$GCC" = yes; then
> ++ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
> ++ else
> ++ # Both cc and cxx compiler support -rpath directly
> ++ hardcode_libdir_flag_spec='-rpath $libdir'
> ++ fi
> ++ hardcode_libdir_separator=:
> ++ ;;
> ++ sco3.2v5*)
> ++ ;;
> ++ solaris*)
> ++ hardcode_libdir_flag_spec='-R$libdir'
> ++ ;;
> ++ sunos4*)
> ++ hardcode_libdir_flag_spec='-L$libdir'
> ++ hardcode_direct=yes
> ++ hardcode_minus_L=yes
> ++ ;;
> ++ sysv4)
> ++ case $host_vendor in
> ++ sni)
> ++ hardcode_direct=yes # is this really true???
> ++ ;;
> ++ siemens)
> ++ hardcode_direct=no
> ++ ;;
> ++ motorola)
> ++ hardcode_direct=no #Motorola manual says yes, but my tests say they lie
> ++ ;;
> ++ esac
> ++ ;;
> ++ sysv4.3*)
> ++ ;;
> ++ sysv4*MP*)
> ++ if test -d /usr/nec; then
> ++ ld_shlibs=yes
> ++ fi
> ++ ;;
> ++ sysv4.2uw2*)
> ++ hardcode_direct=yes
> ++ hardcode_minus_L=no
> ++ ;;
> ++ sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*)
> ++ ;;
> ++ sysv5*)
> ++ hardcode_libdir_flag_spec=
> ++ ;;
> ++ uts4*)
> ++ hardcode_libdir_flag_spec='-L$libdir'
> ++ ;;
> ++ *)
> ++ ld_shlibs=no
> ++ ;;
> ++ esac
> ++fi
> ++
> ++# Check dynamic linker characteristics
> ++# Code taken from libtool.m4's AC_LIBTOOL_SYS_DYNAMIC_LINKER.
> ++libname_spec='lib$name'
> ++case "$host_os" in
> ++ aix3*)
> ++ ;;
> ++ aix4* | aix5*)
> ++ ;;
> ++ amigaos*)
> ++ ;;
> ++ beos*)
> ++ ;;
> ++ bsdi4*)
> ++ ;;
> ++ cygwin* | mingw* | pw32*)
> ++ shrext=.dll
> ++ ;;
> ++ darwin* | rhapsody*)
> ++ shrext=.dylib
> ++ ;;
> ++ dgux*)
> ++ ;;
> ++ freebsd1*)
> ++ ;;
> ++ freebsd*)
> ++ ;;
> ++ gnu*)
> ++ ;;
> ++ hpux9* | hpux10* | hpux11*)
> ++ case "$host_cpu" in
> ++ ia64*)
> ++ shrext=.so
> ++ ;;
> ++ hppa*64*)
> ++ shrext=.sl
> ++ ;;
> ++ *)
> ++ shrext=.sl
> ++ ;;
> ++ esac
> ++ ;;
> ++ irix5* | irix6* | nonstopux*)
> ++ case "$host_os" in
> ++ irix5* | nonstopux*)
> ++ libsuff= shlibsuff=
> ++ ;;
> ++ *)
> ++ case $LD in
> ++ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;;
> ++ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;;
> ++ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;;
> ++ *) libsuff= shlibsuff= ;;
> ++ esac
> ++ ;;
> ++ esac
> ++ ;;
> ++ linux*oldld* | linux*aout* | linux*coff*)
> ++ ;;
> ++ linux*)
> ++ ;;
> ++ netbsd*)
> ++ ;;
> ++ newsos6)
> ++ ;;
> ++ nto-qnx)
> ++ ;;
> ++ openbsd*)
> ++ ;;
> ++ os2*)
> ++ libname_spec='$name'
> ++ shrext=.dll
> ++ ;;
> ++ osf3* | osf4* | osf5*)
> ++ ;;
> ++ sco3.2v5*)
> ++ ;;
> ++ solaris*)
> ++ ;;
> ++ sunos4*)
> ++ ;;
> ++ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
> ++ ;;
> ++ sysv4*MP*)
> ++ ;;
> ++ uts4*)
> ++ ;;
> ++esac
> ++
> ++sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
> ++escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"`
> ++shlibext=`echo "$shrext" | sed -e 's,^\.,,'`
> ++escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
> ++
> ++sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <<EOF
> ++
> ++# How to pass a linker flag through the compiler.
> ++wl="$escaped_wl"
> ++
> ++# Static library suffix (normally "a").
> ++libext="$libext"
> ++
> ++# Shared library suffix (normally "so").
> ++shlibext="$shlibext"
> ++
> ++# Flag to hardcode \$libdir into a binary during linking.
> ++# This must work even if \$libdir does not exist.
> ++hardcode_libdir_flag_spec="$escaped_hardcode_libdir_flag_spec"
> ++
> ++# Whether we need a single -rpath flag with a separated argument.
> ++hardcode_libdir_separator="$hardcode_libdir_separator"
> ++
> ++# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
> ++# resulting binary.
> ++hardcode_direct="$hardcode_direct"
> ++
> ++# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
> ++# resulting binary.
> ++hardcode_minus_L="$hardcode_minus_L"
> ++
> ++EOF
> +--- lrzsz-0.12.20.safe/configure.in 2004-09-12 14:39:55.161706488 -0400
> ++++ lrzsz-0.12.20/configure.in 2004-09-12 14:40:35.816526016 -0400
> +@@ -260,11 +260,10 @@
> + AM_GNU_GETTEXT
> +
> + AC_DEFINE_UNQUOTED(LOCALEDIR,"$prefix/$DATADIRNAME")
> +-AC_LINK_FILES($nls_cv_header_libgt, $nls_cv_header_intl)
> +
> +-AC_OUTPUT([Makefile intl/Makefile lib/Makefile testsuite/Makefile \
> ++AC_OUTPUT([Makefile intl/Makefile lib/Makefile testsuite/Makefile m4/Makefile \
> + man/Makefile po/Makefile.in src/Makefile debian/rules Specfile systype \
> + src/lrzszbug],
> +-[sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile;
> ++[
> + chmod +x debian/rules;
> + test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h])
> +--- lrzsz-0.12.20.safe/intl/bindtextdom.c 1998-04-26 09:22:36.000000000 -0400
> ++++ lrzsz-0.12.20/intl/bindtextdom.c 2004-09-12 14:40:34.343749912 -0400
> +@@ -1,59 +1,75 @@
> + /* Implementation of the bindtextdomain(3) function
> +- Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
> ++ Copyright (C) 1995-1998, 2000-2003 Free Software Foundation, Inc.
> +
> +- This program is free software; you can redistribute it and/or modify
> +- it under the terms of the GNU General Public License as published by
> +- the Free Software Foundation; either version 2, or (at your option)
> ++ This program is free software; you can redistribute it and/or modify it
> ++ under the terms of the GNU Library General Public License as published
> ++ by the Free Software Foundation; either version 2, or (at your option)
> + any later version.
> +
> + This program is distributed in the hope that it will be useful,
> + but WITHOUT ANY WARRANTY; without even the implied warranty of
> +- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> +- GNU General Public License for more details.
> ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> ++ Library General Public License for more details.
> +
> +- You should have received a copy of the GNU 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. */
> ++ You should have received a copy of the GNU Library General Public
> ++ License along with this program; if not, write to the Free Software
> ++ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
> ++ USA. */
> +
> + #ifdef HAVE_CONFIG_H
> + # include <config.h>
> + #endif
> +
> +-#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 libintl_nl_default_dirname
> ++# define _nl_domain_bindings libintl_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 @@ */
> +
> + /* Contains the default location of the message catalogs. */
> + extern const char _nl_default_dirname[];
> ++#ifdef _LIBC
> ++extern const char _nl_default_dirname_internal[] attribute_hidden;
> ++#else
> ++# define INTUSE(name) name
> ++#endif
> +
> + /* List with bindings of specific domains. */
> + extern struct binding *_nl_domain_bindings;
> +
> ++/* Lock variable to protect the global data in the gettext implementation. */
> ++__libc_rwlock_define (extern, _nl_state_lock attribute_hidden)
> ++
> +
> + /* 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,23 +77,41 @@
> + prefix. So we have to make a difference here. */
> + #ifdef _LIBC
> + # define BINDTEXTDOMAIN __bindtextdomain
> +-# define strdup(str) __strdup (str)
> ++# define BIND_TEXTDOMAIN_CODESET __bind_textdomain_codeset
> ++# ifndef strdup
> ++# define strdup(str) __strdup (str)
> ++# endif
> + #else
> +-# define BINDTEXTDOMAIN bindtextdomain__
> ++# define BINDTEXTDOMAIN libintl_bindtextdomain
> ++# define BIND_TEXTDOMAIN_CODESET libintl_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)
> +- const char *domainname;
> +- const char *dirname;
> ++/* 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 (const char *domainname,
> ++ 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)
> + {
> +@@ -93,81 +127,173 @@
> + }
> + }
> +
> +- 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, INTUSE(_nl_default_dirname)) == 0)
> ++ result = (char *) INTUSE(_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 != INTUSE(_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 = INTUSE(_nl_default_dirname);
> ++ if (codesetp)
> ++ *codesetp = NULL;
> ++ }
> + else
> + {
> + /* We have to create a new binding. */
> +- size_t len;
> ++ 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 (new_binding == NULL)
> +- return NULL;
> ++ if (__builtin_expect (new_binding == NULL, 0))
> ++ goto failed;
> +
> ++ memcpy (new_binding->domainname, domainname, len);
> ++
> ++ if (dirnamep)
> ++ {
> ++ const char *dirname = *dirnamep;
> ++
> ++ if (dirname == NULL)
> ++ /* The default value. */
> ++ dirname = INTUSE(_nl_default_dirname);
> ++ else
> ++ {
> ++ if (strcmp (dirname, INTUSE(_nl_default_dirname)) == 0)
> ++ dirname = INTUSE(_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 *) INTUSE(_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
> +@@ -187,13 +313,51 @@
> + binding->next = new_binding;
> + }
> +
> +- binding = new_binding;
> ++ modified = 1;
> ++
> ++ /* Here we deal with memory allocation failures. */
> ++ if (0)
> ++ {
> ++ failed_codeset:
> ++ if (new_binding->dirname != INTUSE(_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 (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 (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
> +--- lrzsz-0.12.20.safe/intl/cat-compat.c 1998-04-26 09:22:37.000000000 -0400
> ++++ lrzsz-0.12.20/intl/cat-compat.c 1969-12-31 19:00:00.000000000 -0500
> +@@ -1,262 +0,0 @@
> +-/* Compatibility code for gettext-using-catgets interface.
> +- Copyright (C) 1995, 1997 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
> +- the Free Software Foundation; either version 2, or (at your option)
> +- any later version.
> +-
> +- This program is distributed in the hope that it will be useful,
> +- but WITHOUT ANY WARRANTY; without even the implied warranty of
> +- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> +- GNU General Public License for more details.
> +-
> +- 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. */
> +-
> +-#ifdef HAVE_CONFIG_H
> +-# include <config.h>
> +-#endif
> +-
> +-#include <stdio.h>
> +-
> +-#ifdef STDC_HEADERS
> +-# include <stdlib.h>
> +-# include <string.h>
> +-#else
> +-char *getenv ();
> +-# ifdef HAVE_MALLOC_H
> +-# include <malloc.h>
> +-# endif
> +-#endif
> +-
> +-#ifdef HAVE_NL_TYPES_H
> +-# include <nl_types.h>
> +-#endif
> +-
> +-#include "libgettext.h"
> +-
> +-/* @@ end of prolog @@ */
> +-
> +-/* 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
> +-
> +-/* The catalog descriptor. */
> +-static nl_catd catalog = (nl_catd) -1;
> +-
> +-/* Name of the default catalog. */
> +-static const char default_catalog_name[] = "messages";
> +-
> +-/* Name of currently used catalog. */
> +-static const char *catalog_name = default_catalog_name;
> +-
> +-/* Get ID for given string. If not found return -1. */
> +-static int msg_to_cat_id PARAMS ((const char *msg));
> +-
> +-/* Substitution for systems lacking this function in their C library. */
> +-#if !_LIBC && !HAVE_STPCPY
> +-static char *stpcpy PARAMS ((char *dest, const char *src));
> +-#endif
> +-
> +-
> +-/* Set currently used domain/catalog. */
> +-char *
> +-textdomain (domainname)
> +- const char *domainname;
> +-{
> +- nl_catd new_catalog;
> +- char *new_name;
> +- size_t new_name_len;
> +- char *lang;
> +-
> +-#if defined HAVE_SETLOCALE && defined HAVE_LC_MESSAGES \
> +- && defined HAVE_LOCALE_NULL
> +- lang = setlocale (LC_MESSAGES, NULL);
> +-#else
> +- lang = getenv ("LC_ALL");
> +- if (lang == NULL || lang[0] == '\0')
> +- {
> +- lang = getenv ("LC_MESSAGES");
> +- if (lang == NULL || lang[0] == '\0')
> +- lang = getenv ("LANG");
> +- }
> +-#endif
> +- if (lang == NULL || lang[0] == '\0')
> +- lang = "C";
> +-
> +- /* See whether name of currently used domain is asked. */
> +- if (domainname == NULL)
> +- return (char *) catalog_name;
> +-
> +- if (domainname[0] == '\0')
> +- domainname = default_catalog_name;
> +-
> +- /* Compute length of added path element. */
> +- new_name_len = sizeof (LOCALEDIR) - 1 + 1 + strlen (lang)
> +- + sizeof ("/LC_MESSAGES/") - 1 + sizeof (PACKAGE) - 1
> +- + sizeof (".cat");
> +-
> +- new_name = (char *) malloc (new_name_len);
> +- if (new_name == NULL)
> +- return NULL;
> +-
> +- strcpy (new_name, PACKAGE);
> +- new_catalog = catopen (new_name, 0);
> +-
> +- if (new_catalog == (nl_catd) -1)
> +- {
> +- /* NLSPATH search didn't work, try absolute path */
> +- sprintf (new_name, "%s/%s/LC_MESSAGES/%s.cat", LOCALEDIR, lang,
> +- PACKAGE);
> +- new_catalog = catopen (new_name, 0);
> +-
> +- if (new_catalog == (nl_catd) -1)
> +- {
> +- free (new_name);
> +- return (char *) catalog_name;
> +- }
> +- }
> +-
> +- /* Close old catalog. */
> +- if (catalog != (nl_catd) -1)
> +- catclose (catalog);
> +- if (catalog_name != default_catalog_name)
> +- free ((char *) catalog_name);
> +-
> +- catalog = new_catalog;
> +- catalog_name = new_name;
> +-
> +- return (char *) catalog_name;
> +-}
> +-
> +-char *
> +-bindtextdomain (domainname, dirname)
> +- const char *domainname;
> +- const char *dirname;
> +-{
> +-#if HAVE_SETENV || HAVE_PUTENV
> +- char *old_val, *new_val, *cp;
> +- size_t new_val_len;
> +-
> +- /* This does not make much sense here but to be compatible do it. */
> +- if (domainname == NULL)
> +- return NULL;
> +-
> +- /* Compute length of added path element. If we use setenv we don't need
> +- the first byts for NLSPATH=, but why complicate the code for this
> +- peanuts. */
> +- new_val_len = sizeof ("NLSPATH=") - 1 + strlen (dirname)
> +- + sizeof ("/%L/LC_MESSAGES/%N.cat");
> +-
> +- old_val = getenv ("NLSPATH");
> +- if (old_val == NULL || old_val[0] == '\0')
> +- {
> +- old_val = NULL;
> +- new_val_len += 1 + sizeof (LOCALEDIR) - 1
> +- + sizeof ("/%L/LC_MESSAGES/%N.cat");
> +- }
> +- else
> +- new_val_len += strlen (old_val);
> +-
> +- new_val = (char *) malloc (new_val_len);
> +- if (new_val == NULL)
> +- return NULL;
> +-
> +-# if HAVE_SETENV
> +- cp = new_val;
> +-# else
> +- cp = stpcpy (new_val, "NLSPATH=");
> +-# endif
> +-
> +- cp = stpcpy (cp, dirname);
> +- cp = stpcpy (cp, "/%L/LC_MESSAGES/%N.cat:");
> +-
> +- if (old_val == NULL)
> +- {
> +-# if __STDC__
> +- stpcpy (cp, LOCALEDIR "/%L/LC_MESSAGES/%N.cat");
> +-# else
> +-
> +- cp = stpcpy (cp, LOCALEDIR);
> +- stpcpy (cp, "/%L/LC_MESSAGES/%N.cat");
> +-# endif
> +- }
> +- else
> +- stpcpy (cp, old_val);
> +-
> +-# if HAVE_SETENV
> +- setenv ("NLSPATH", new_val, 1);
> +- free (new_val);
> +-# else
> +- putenv (new_val);
> +- /* Do *not* free the environment entry we just entered. It is used
> +- from now on. */
> +-# endif
> +-
> +-#endif
> +-
> +- return (char *) domainname;
> +-}
> +-
> +-#undef gettext
> +-char *
> +-gettext (msg)
> +- const char *msg;
> +-{
> +- int msgid;
> +-
> +- if (msg == NULL || catalog == (nl_catd) -1)
> +- return (char *) msg;
> +-
> +- /* Get the message from the catalog. We always use set number 1.
> +- The message ID is computed by the function `msg_to_cat_id'
> +- which works on the table generated by `po-to-tbl'. */
> +- msgid = msg_to_cat_id (msg);
> +- if (msgid == -1)
> +- return (char *) msg;
> +-
> +- return catgets (catalog, 1, msgid, (char *) msg);
> +-}
> +-
> +-/* Look through the table `_msg_tbl' which has `_msg_tbl_length' entries
> +- for the one equal to msg. If it is found return the ID. In case when
> +- the string is not found return -1. */
> +-static int
> +-msg_to_cat_id (msg)
> +- const char *msg;
> +-{
> +- int cnt;
> +-
> +- for (cnt = 0; cnt < _msg_tbl_length; ++cnt)
> +- if (strcmp (msg, _msg_tbl[cnt]._msg) == 0)
> +- return _msg_tbl[cnt]._msg_number;
> +-
> +- return -1;
> +-}
> +-
> +-
> +-/* @@ 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
> +--- lrzsz-0.12.20.safe/intl/ChangeLog 1998-04-26 09:22:35.000000000 -0400
> ++++ lrzsz-0.12.20/intl/ChangeLog 2004-09-12 14:40:34.349749000 -0400
> +@@ -1,1022 +1,4 @@
> +-1997-09-06 02:10 Ulrich Drepper <drepper at cygnus.com>
> +-
> +- * intlh.inst.in: Reformat copyright.
> +-
> +-1997-08-19 15:22 Ulrich Drepper <drepper at cygnus.com>
> +-
> +- * dcgettext.c (DCGETTEXT): Remove wrong comment.
> +-
> +-1997-08-16 00:13 Ulrich Drepper <drepper at cygnus.com>
> +-
> +- * Makefile.in (install-data): Don't change directory to install.
> +-
> +-1997-08-01 14:30 Ulrich Drepper <drepper at 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 at 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 at 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 at ilog.fr>.
> +-
> +- * Makefile.in (CPPFLAGS): New variable. Reported by Franc,ois
> +- Pinard.
> +-
> +-Mon Mar 10 06:51:17 1997 Ulrich Drepper <drepper at 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 at 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 at cygnus.com>
> +-
> +- * textdomain.c: Move definition of `memcpy` macro to right
> +- position.
> +-
> +-Fri Nov 22 04:01:58 1996 Ulrich Drepper <drepper at 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 at cygnus.com>
> +-
> +- * Makefile.in (libdir): Change to use exec_prefix instead of
> +- prefix. Reported by Knut-H�vardAksnes <etokna at eto.ericsson.se>.
> +-
> +-Sat Aug 31 03:07:09 1996 Ulrich Drepper <drepper at 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 at 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 at 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 at 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 at 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 at 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 at cygnus.com>
> +-
> +- * explodename.c, l10nflist.c: Define NULL for dumb systems.
> +-
> +-Tue Jun 11 17:05:13 1996 Ulrich Drepper <drepper at 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 at cygnus.com>
> +-
> +- * Makefile.in (install): Remove comment.
> +-
> +-Thu Jun 6 17:28:17 1996 Ulrich Drepper <drepper at 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 at 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- at USE_INCLUDED_LIBINTL@, not
> +- all- at 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 at 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 at 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 at cygnus.com>
> +-
> +- * loadmsgcat.c (_nl_load_domain): Parameter is now comes from
> +- find_l10nfile.
> +-
> +-Sat Jun 1 02:23:03 1996 Ulrich Drepper <drepper at 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 at myware>
> +-
> +- * Makefile.in (all-gettext): New goal. Same as all-yes.
> +-
> +-Thu Mar 28 23:01:22 1996 Karl Eichwalder <ke at ke.central.de>
> +-
> +- * Makefile.in (gettextsrcdir): Define using @datadir at .
> +-
> +-Tue Mar 26 12:39:14 1996 Ulrich Drepper <drepper at myware>
> +-
> +- * finddomain.c: Include <ctype.h>. Reported by Roland McGrath.
> +-
> +-Sat Mar 23 02:00:35 1996 Ulrich Drepper <drepper at myware>
> +-
> +- * finddomain.c (stpcpy): Rename to stpcpy__ to prevent clashing
> +- with external declaration.
> +-
> +-Sat Mar 2 00:47:09 1996 Ulrich Drepper <drepper at myware>
> +-
> +- * Makefile.in (all-no): Rename from all_no.
> +-
> +-Sat Feb 17 00:25:59 1996 Ulrich Drepper <drepper at 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 at myware>
> +-
> +- * Makefile.in (all): Define to `all- at 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 at hal.com>
> +-
> +- * localealias.c (alias_compare): Increment string pointers in loop
> +- of strcasecmp replacement.
> +-
> +-Fri Dec 29 21:16:34 1995 Ulrich Drepper <drepper at myware>
> +-
> +- * Makefile.in (install-src): Who commented this goal out ? :-)
> +-
> +-Fri Dec 29 15:08:16 1995 Ulrich Drepper <drepper at 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 at tat.physik.uni-tuebingen.de>.
> +-
> +-Tue Dec 19 22:09:13 1995 Ulrich Drepper <drepper at myware>
> +-
> +- * Makefile.in (Makefile): Explicitly use $(SHELL) for running
> +- shell scripts.
> +-
> +-Fri Dec 15 17:34:59 1995 Andreas Schwab <schwab at 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 at 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 at 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 at myware>
> +-
> +- * Makefile.in (install-src):
> +- Install libintl.inst instead of libintl.h.install.
> +-
> +-Sat Dec 2 22:51:38 1995 Marcus Daniels <marcus at 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 at math.utah.edu>
> +-
> +- * cat-compat.c (bindtextdomain): Add missing { }.
> +-
> +-Sun Nov 26 18:21:41 1995 Ulrich Drepper <drepper at 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 at iro.umontreal.ca>
> +-
> +- * hash-string.h: Capitalize arguments of macros.
> +-
> +-Sat Nov 25 12:01:36 1995 Ulrich Drepper <drepper at 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 at lsid.hp.com>
> +-
> +- * dcgettext.c: Fix bug in preprocessor conditionals.
> +-
> +-Sat Nov 25 02:35:27 1995 Nelson H. F. Beebe <beebe at 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 at 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 at 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 at 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 at myware>
> +-
> +- * hash-string.h: Correct prototype for hash_string.
> +-
> +-Sun Nov 12 12:42:30 1995 Ulrich Drepper <drepper at 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 at 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 at 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 at 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 at 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 at 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 at 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 at 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 at 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 at 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 at myware>
> +-
> +- * po2tbl.sed.in: Serious typo bug fixed by Jim Meyering.
> +-
> +-Sat Oct 28 23:20:47 1995 Ulrich Drepper <drepper at 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 at 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 at 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 at 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 at 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 at 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 at 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 at 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 at myware>
> +-
> +- * finddomain.c: Correct some bugs in handling of CEN standard
> +- locale definitions.
> +-
> +-Thu Sep 7 01:49:28 1995 Ulrich Drepper <drepper at 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 at 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 at myware>
> +-
> +- * Makefile.in (uninstall): Remove stuff installed by install-src.
> +-
> +-Tue Aug 15 13:13:53 1995 Ulrich Drepper <drepper at 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 at 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 at 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 at 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 at 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 at 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 at 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 at 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 at 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 at myware>
> +-
> +- * finddomain.c (stpcpy): Include prototype.
> +-
> +- * Makefile.in (dist): Remove `copying instead' message.
> +-
> +-Wed Aug 2 18:52:03 1995 Ulrich Drepper <drepper at myware>
> +-
> +- * Makefile.in (ID, TAGS): Do not use $^.
> +-
> +-Tue Aug 1 20:07:11 1995 Ulrich Drepper <drepper at 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 at 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 at 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 at myware>
> +-
> +- * intl-compat.c (textdomain): Correct typo.
> +-
> +-Wed Jul 19 01:51:35 1995 Ulrich Drepper <drepper at 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 at 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 at 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 at 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 at 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 at 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 at 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 at myware>
> +-
> +- * cat-compat.c: If !STDC_HEADERS try to include malloc.h.
> +-
> +-Thu Jul 13 20:55:02 1995 Ulrich Drepper <drepper at 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 at 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 at 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 at 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 at 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 at 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 at 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 at myware>
> +-
> +- * tupdate.perl.in: Complete rewrite for new .po file format.
> ++2004-01-29 GNU <bug-gnu-gettext at gnu.org>
> +
> +-Sun Jul 2 02:06:50 1995 Ulrich Drepper <drepper at myware>
> ++ * Version 0.14.1 released.
> +
> +- * 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.
> +--- lrzsz-0.12.20.safe/intl/config.charset 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/intl/config.charset 2004-09-12 14:40:34.354748240 -0400
> +@@ -0,0 +1,608 @@
> ++#! /bin/sh
> ++# Output a system dependent table of character encoding aliases.
> ++#
> ++# Copyright (C) 2000-2004 Free Software Foundation, Inc.
> ++#
> ++# This program is free software; you can redistribute it and/or modify it
> ++# under the terms of the GNU Library General Public License as published
> ++# by the Free Software Foundation; either version 2, or (at your option)
> ++# any later version.
> ++#
> ++# This program is distributed in the hope that it will be useful,
> ++# but WITHOUT ANY WARRANTY; without even the implied warranty of
> ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> ++# Library General Public License for more details.
> ++#
> ++# You should have received a copy of the GNU Library General Public
> ++# License along with this program; if not, write to the Free Software
> ++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
> ++# USA.
> ++#
> ++# The table consists of lines of the form
> ++# ALIAS CANONICAL
> ++#
> ++# ALIAS is the (system dependent) result of "nl_langinfo (CODESET)".
> ++# ALIAS is compared in a case sensitive way.
> ++#
> ++# CANONICAL is the GNU canonical name for this character encoding.
> ++# It must be an encoding supported by libiconv. Support by GNU libc is
> ++# also desirable. CANONICAL is case insensitive. Usually an upper case
> ++# MIME charset name is preferred.
> ++# The current list of GNU canonical charset names is as follows.
> ++#
> ++# name MIME? used by which systems
> ++# ASCII, ANSI_X3.4-1968 glibc solaris freebsd darwin
> ++# ISO-8859-1 Y glibc aix hpux irix osf solaris freebsd darwin
> ++# ISO-8859-2 Y glibc aix hpux irix osf solaris freebsd darwin
> ++# ISO-8859-3 Y glibc solaris
> ++# ISO-8859-4 Y osf solaris freebsd darwin
> ++# ISO-8859-5 Y glibc aix hpux irix osf solaris freebsd darwin
> ++# ISO-8859-6 Y glibc aix hpux solaris
> ++# ISO-8859-7 Y glibc aix hpux irix osf solaris
> ++# ISO-8859-8 Y glibc aix hpux osf solaris
> ++# ISO-8859-9 Y glibc aix hpux irix osf solaris
> ++# ISO-8859-13 glibc
> ++# ISO-8859-14 glibc
> ++# ISO-8859-15 glibc aix osf solaris freebsd
> ++# KOI8-R Y glibc solaris freebsd darwin
> ++# KOI8-U Y glibc freebsd darwin
> ++# KOI8-T glibc
> ++# CP437 dos
> ++# CP775 dos
> ++# CP850 aix osf dos
> ++# CP852 dos
> ++# CP855 dos
> ++# CP856 aix
> ++# CP857 dos
> ++# CP861 dos
> ++# CP862 dos
> ++# CP864 dos
> ++# CP865 dos
> ++# CP866 freebsd darwin dos
> ++# CP869 dos
> ++# CP874 woe32 dos
> ++# CP922 aix
> ++# CP932 aix woe32 dos
> ++# CP943 aix
> ++# CP949 osf woe32 dos
> ++# CP950 woe32 dos
> ++# CP1046 aix
> ++# CP1124 aix
> ++# CP1125 dos
> ++# CP1129 aix
> ++# CP1250 woe32
> ++# CP1251 glibc solaris darwin woe32
> ++# CP1252 aix woe32
> ++# CP1253 woe32
> ++# CP1254 woe32
> ++# CP1255 glibc woe32
> ++# CP1256 woe32
> ++# CP1257 woe32
> ++# GB2312 Y glibc aix hpux irix solaris freebsd darwin
> ++# EUC-JP Y glibc aix hpux irix osf solaris freebsd darwin
> ++# EUC-KR Y glibc aix hpux irix osf solaris freebsd darwin
> ++# EUC-TW glibc aix hpux irix osf solaris
> ++# BIG5 Y glibc aix hpux osf solaris freebsd darwin
> ++# BIG5-HKSCS glibc solaris
> ++# GBK glibc aix osf solaris woe32 dos
> ++# GB18030 glibc solaris
> ++# SHIFT_JIS Y hpux osf solaris freebsd darwin
> ++# JOHAB glibc solaris woe32
> ++# TIS-620 glibc aix hpux osf solaris
> ++# VISCII Y glibc
> ++# TCVN5712-1 glibc
> ++# GEORGIAN-PS glibc
> ++# HP-ROMAN8 hpux
> ++# HP-ARABIC8 hpux
> ++# HP-GREEK8 hpux
> ++# HP-HEBREW8 hpux
> ++# HP-TURKISH8 hpux
> ++# HP-KANA8 hpux
> ++# DEC-KANJI osf
> ++# DEC-HANYU osf
> ++# UTF-8 Y glibc aix hpux osf solaris
> ++#
> ++# Note: Names which are not marked as being a MIME name should not be used in
> ++# Internet protocols for information interchange (mail, news, etc.).
> ++#
> ++# Note: ASCII and ANSI_X3.4-1968 are synonymous canonical names. Applications
> ++# must understand both names and treat them as equivalent.
> ++#
> ++# The first argument passed to this file is the canonical host specification,
> ++# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
> ++# or
> ++# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
> ++
> ++host="$1"
> ++os=`echo "$host" | sed -e 's/^[^-]*-[^-]*-\(.*\)$/\1/'`
> ++echo "# This file contains a table of character encoding aliases,"
> ++echo "# suitable for operating system '${os}'."
> ++echo "# It was automatically generated from config.charset."
> ++# List of references, updated during installation:
> ++echo "# Packages using this file: "
> ++case "$os" in
> ++ linux-gnulibc1*)
> ++ # Linux libc5 doesn't have nl_langinfo(CODESET); therefore
> ++ # localcharset.c falls back to using the full locale name
> ++ # from the environment variables.
> ++ echo "C ASCII"
> ++ echo "POSIX ASCII"
> ++ for l in af af_ZA ca ca_ES da da_DK de de_AT de_BE de_CH de_DE de_LU \
> ++ en en_AU en_BW en_CA en_DK en_GB en_IE en_NZ en_US en_ZA \
> ++ en_ZW es es_AR es_BO es_CL es_CO es_DO es_EC es_ES es_GT \
> ++ es_HN es_MX es_PA es_PE es_PY es_SV es_US es_UY es_VE et \
> ++ et_EE eu eu_ES fi fi_FI fo fo_FO fr fr_BE fr_CA fr_CH fr_FR \
> ++ fr_LU ga ga_IE gl gl_ES id id_ID in in_ID is is_IS it it_CH \
> ++ it_IT kl kl_GL nl nl_BE nl_NL no no_NO pt pt_BR pt_PT sv \
> ++ sv_FI sv_SE; do
> ++ echo "$l ISO-8859-1"
> ++ echo "$l.iso-8859-1 ISO-8859-1"
> ++ echo "$l.iso-8859-15 ISO-8859-15"
> ++ echo "$l.iso-8859-15 at euro ISO-8859-15"
> ++ echo "$l at euro ISO-8859-15"
> ++ echo "$l.cp-437 CP437"
> ++ echo "$l.cp-850 CP850"
> ++ echo "$l.cp-1252 CP1252"
> ++ echo "$l.cp-1252 at euro CP1252"
> ++ #echo "$l.atari-st ATARI-ST" # not a commonly used encoding
> ++ echo "$l.utf-8 UTF-8"
> ++ echo "$l.utf-8 at euro UTF-8"
> ++ done
> ++ for l in cs cs_CZ hr hr_HR hu hu_HU pl pl_PL ro ro_RO sk sk_SK sl \
> ++ sl_SI sr sr_CS sr_YU; do
> ++ echo "$l ISO-8859-2"
> ++ echo "$l.iso-8859-2 ISO-8859-2"
> ++ echo "$l.cp-852 CP852"
> ++ echo "$l.cp-1250 CP1250"
> ++ echo "$l.utf-8 UTF-8"
> ++ done
> ++ for l in mk mk_MK ru ru_RU; do
> ++ echo "$l ISO-8859-5"
> ++ echo "$l.iso-8859-5 ISO-8859-5"
> ++ echo "$l.koi8-r KOI8-R"
> ++ echo "$l.cp-866 CP866"
> ++ echo "$l.cp-1251 CP1251"
> ++ echo "$l.utf-8 UTF-8"
> ++ done
> ++ for l in ar ar_SA; do
> ++ echo "$l ISO-8859-6"
> ++ echo "$l.iso-8859-6 ISO-8859-6"
> ++ echo "$l.cp-864 CP864"
> ++ #echo "$l.cp-868 CP868" # not a commonly used encoding
> ++ echo "$l.cp-1256 CP1256"
> ++ echo "$l.utf-8 UTF-8"
> ++ done
> ++ for l in el el_GR gr gr_GR; do
> ++ echo "$l ISO-8859-7"
> ++ echo "$l.iso-8859-7 ISO-8859-7"
> ++ echo "$l.cp-869 CP869"
> ++ echo "$l.cp-1253 CP1253"
> ++ echo "$l.cp-1253 at euro CP1253"
> ++ echo "$l.utf-8 UTF-8"
> ++ echo "$l.utf-8 at euro UTF-8"
> ++ done
> ++ for l in he he_IL iw iw_IL; do
> ++ echo "$l ISO-8859-8"
> ++ echo "$l.iso-8859-8 ISO-8859-8"
> ++ echo "$l.cp-862 CP862"
> ++ echo "$l.cp-1255 CP1255"
> ++ echo "$l.utf-8 UTF-8"
> ++ done
> ++ for l in tr tr_TR; do
> ++ echo "$l ISO-8859-9"
> ++ echo "$l.iso-8859-9 ISO-8859-9"
> ++ echo "$l.cp-857 CP857"
> ++ echo "$l.cp-1254 CP1254"
> ++ echo "$l.utf-8 UTF-8"
> ++ done
> ++ for l in lt lt_LT lv lv_LV; do
> ++ #echo "$l BALTIC" # not a commonly used encoding, wrong encoding name
> ++ echo "$l ISO-8859-13"
> ++ done
> ++ for l in ru_UA uk uk_UA; do
> ++ echo "$l KOI8-U"
> ++ done
> ++ for l in zh zh_CN; do
> ++ #echo "$l GB_2312-80" # not a commonly used encoding, wrong encoding name
> ++ echo "$l GB2312"
> ++ done
> ++ for l in ja ja_JP ja_JP.EUC; do
> ++ echo "$l EUC-JP"
> ++ done
> ++ for l in ko ko_KR; do
> ++ echo "$l EUC-KR"
> ++ done
> ++ for l in th th_TH; do
> ++ echo "$l TIS-620"
> ++ done
> ++ for l in fa fa_IR; do
> ++ #echo "$l ISIRI-3342" # a broken encoding
> ++ echo "$l.utf-8 UTF-8"
> ++ done
> ++ ;;
> ++ linux* | *-gnu*)
> ++ # With glibc-2.1 or newer, we don't need any canonicalization,
> ++ # because glibc has iconv and both glibc and libiconv support all
> ++ # GNU canonical names directly. Therefore, the Makefile does not
> ++ # need to install the alias file at all.
> ++ # The following applies only to glibc-2.0.x and older libcs.
> ++ echo "ISO_646.IRV:1983 ASCII"
> ++ ;;
> ++ aix*)
> ++ echo "ISO8859-1 ISO-8859-1"
> ++ echo "ISO8859-2 ISO-8859-2"
> ++ echo "ISO8859-5 ISO-8859-5"
> ++ echo "ISO8859-6 ISO-8859-6"
> ++ echo "ISO8859-7 ISO-8859-7"
> ++ echo "ISO8859-8 ISO-8859-8"
> ++ echo "ISO8859-9 ISO-8859-9"
> ++ echo "ISO8859-15 ISO-8859-15"
> ++ echo "IBM-850 CP850"
> ++ echo "IBM-856 CP856"
> ++ echo "IBM-921 ISO-8859-13"
> ++ echo "IBM-922 CP922"
> ++ echo "IBM-932 CP932"
> ++ echo "IBM-943 CP943"
> ++ echo "IBM-1046 CP1046"
> ++ echo "IBM-1124 CP1124"
> ++ echo "IBM-1129 CP1129"
> ++ echo "IBM-1252 CP1252"
> ++ echo "IBM-eucCN GB2312"
> ++ echo "IBM-eucJP EUC-JP"
> ++ echo "IBM-eucKR EUC-KR"
> ++ echo "IBM-eucTW EUC-TW"
> ++ echo "big5 BIG5"
> ++ echo "GBK GBK"
> ++ echo "TIS-620 TIS-620"
> ++ echo "UTF-8 UTF-8"
> ++ ;;
> ++ hpux*)
> ++ echo "iso88591 ISO-8859-1"
> ++ echo "iso88592 ISO-8859-2"
> ++ echo "iso88595 ISO-8859-5"
> ++ echo "iso88596 ISO-8859-6"
> ++ echo "iso88597 ISO-8859-7"
> ++ echo "iso88598 ISO-8859-8"
> ++ echo "iso88599 ISO-8859-9"
> ++ echo "iso885915 ISO-8859-15"
> ++ echo "roman8 HP-ROMAN8"
> ++ echo "arabic8 HP-ARABIC8"
> ++ echo "greek8 HP-GREEK8"
> ++ echo "hebrew8 HP-HEBREW8"
> ++ echo "turkish8 HP-TURKISH8"
> ++ echo "kana8 HP-KANA8"
> ++ echo "tis620 TIS-620"
> ++ echo "big5 BIG5"
> ++ echo "eucJP EUC-JP"
> ++ echo "eucKR EUC-KR"
> ++ echo "eucTW EUC-TW"
> ++ echo "hp15CN GB2312"
> ++ #echo "ccdc ?" # what is this?
> ++ echo "SJIS SHIFT_JIS"
> ++ echo "utf8 UTF-8"
> ++ ;;
> ++ irix*)
> ++ echo "ISO8859-1 ISO-8859-1"
> ++ echo "ISO8859-2 ISO-8859-2"
> ++ echo "ISO8859-5 ISO-8859-5"
> ++ echo "ISO8859-7 ISO-8859-7"
> ++ echo "ISO8859-9 ISO-8859-9"
> ++ echo "eucCN GB2312"
> ++ echo "eucJP EUC-JP"
> ++ echo "eucKR EUC-KR"
> ++ echo "eucTW EUC-TW"
> ++ ;;
> ++ osf*)
> ++ echo "ISO8859-1 ISO-8859-1"
> ++ echo "ISO8859-2 ISO-8859-2"
> ++ echo "ISO8859-4 ISO-8859-4"
> ++ echo "ISO8859-5 ISO-8859-5"
> ++ echo "ISO8859-7 ISO-8859-7"
> ++ echo "ISO8859-8 ISO-8859-8"
> ++ echo "ISO8859-9 ISO-8859-9"
> ++ echo "ISO8859-15 ISO-8859-15"
> ++ echo "cp850 CP850"
> ++ echo "big5 BIG5"
> ++ echo "dechanyu DEC-HANYU"
> ++ echo "dechanzi GB2312"
> ++ echo "deckanji DEC-KANJI"
> ++ echo "deckorean EUC-KR"
> ++ echo "eucJP EUC-JP"
> ++ echo "eucKR EUC-KR"
> ++ echo "eucTW EUC-TW"
> ++ echo "GBK GBK"
> ++ echo "KSC5601 CP949"
> ++ echo "sdeckanji EUC-JP"
> ++ echo "SJIS SHIFT_JIS"
> ++ echo "TACTIS TIS-620"
> ++ echo "UTF-8 UTF-8"
> ++ ;;
> ++ solaris*)
> ++ echo "646 ASCII"
> ++ echo "ISO8859-1 ISO-8859-1"
> ++ echo "ISO8859-2 ISO-8859-2"
> ++ echo "ISO8859-3 ISO-8859-3"
> ++ echo "ISO8859-4 ISO-8859-4"
> ++ echo "ISO8859-5 ISO-8859-5"
> ++ echo "ISO8859-6 ISO-8859-6"
> ++ echo "ISO8859-7 ISO-8859-7"
> ++ echo "ISO8859-8 ISO-8859-8"
> ++ echo "ISO8859-9 ISO-8859-9"
> ++ echo "ISO8859-15 ISO-8859-15"
> ++ echo "koi8-r KOI8-R"
> ++ echo "ansi-1251 CP1251"
> ++ echo "BIG5 BIG5"
> ++ echo "Big5-HKSCS BIG5-HKSCS"
> ++ echo "gb2312 GB2312"
> ++ echo "GBK GBK"
> ++ echo "GB18030 GB18030"
> ++ echo "cns11643 EUC-TW"
> ++ echo "5601 EUC-KR"
> ++ echo "ko_KR.johap92 JOHAB"
> ++ echo "eucJP EUC-JP"
> ++ echo "PCK SHIFT_JIS"
> ++ echo "TIS620.2533 TIS-620"
> ++ #echo "sun_eu_greek ?" # what is this?
> ++ echo "UTF-8 UTF-8"
> ++ ;;
> ++ freebsd* | os2*)
> ++ # FreeBSD 4.2 doesn't have nl_langinfo(CODESET); therefore
> ++ # localcharset.c falls back to using the full locale name
> ++ # from the environment variables.
> ++ # Likewise for OS/2. OS/2 has XFree86 just like FreeBSD. Just
> ++ # reuse FreeBSD's locale data for OS/2.
> ++ echo "C ASCII"
> ++ echo "US-ASCII ASCII"
> ++ for l in la_LN lt_LN; do
> ++ echo "$l.ASCII ASCII"
> ++ done
> ++ for l in da_DK de_AT de_CH de_DE en_AU en_CA en_GB en_US es_ES \
> ++ fi_FI fr_BE fr_CA fr_CH fr_FR is_IS it_CH it_IT la_LN \
> ++ lt_LN nl_BE nl_NL no_NO pt_PT sv_SE; do
> ++ echo "$l.ISO_8859-1 ISO-8859-1"
> ++ echo "$l.DIS_8859-15 ISO-8859-15"
> ++ done
> ++ for l in cs_CZ hr_HR hu_HU la_LN lt_LN pl_PL sl_SI; do
> ++ echo "$l.ISO_8859-2 ISO-8859-2"
> ++ done
> ++ for l in la_LN lt_LT; do
> ++ echo "$l.ISO_8859-4 ISO-8859-4"
> ++ done
> ++ for l in ru_RU ru_SU; do
> ++ echo "$l.KOI8-R KOI8-R"
> ++ echo "$l.ISO_8859-5 ISO-8859-5"
> ++ echo "$l.CP866 CP866"
> ++ done
> ++ echo "uk_UA.KOI8-U KOI8-U"
> ++ echo "zh_TW.BIG5 BIG5"
> ++ echo "zh_TW.Big5 BIG5"
> ++ echo "zh_CN.EUC GB2312"
> ++ echo "ja_JP.EUC EUC-JP"
> ++ echo "ja_JP.SJIS SHIFT_JIS"
> ++ echo "ja_JP.Shift_JIS SHIFT_JIS"
> ++ echo "ko_KR.EUC EUC-KR"
> ++ ;;
> ++ netbsd*)
> ++ echo "646 ASCII"
> ++ echo "ISO8859-1 ISO-8859-1"
> ++ echo "ISO8859-2 ISO-8859-2"
> ++ echo "ISO8859-4 ISO-8859-4"
> ++ echo "ISO8859-5 ISO-8859-5"
> ++ echo "ISO8859-15 ISO-8859-15"
> ++ echo "eucCN GB2312"
> ++ echo "eucJP EUC-JP"
> ++ echo "eucKR EUC-KR"
> ++ echo "eucTW EUC-TW"
> ++ echo "BIG5 BIG5"
> ++ echo "SJIS SHIFT_JIS"
> ++ ;;
> ++ darwin*)
> ++ # Darwin 6.8 doesn't have nl_langinfo(CODESET); therefore
> ++ # localcharset.c falls back to using the full locale name
> ++ # from the environment variables.
> ++ echo "C ASCII"
> ++ for l in en_AU en_CA en_GB en_US la_LN; do
> ++ echo "$l.US-ASCII ASCII"
> ++ done
> ++ for l in da_DK de_AT de_CH de_DE en_AU en_CA en_GB en_US es_ES \
> ++ fi_FI fr_BE fr_CA fr_CH fr_FR is_IS it_CH it_IT nl_BE \
> ++ nl_NL no_NO pt_PT sv_SE; do
> ++ echo "$l ISO-8859-1"
> ++ echo "$l.ISO8859-1 ISO-8859-1"
> ++ echo "$l.ISO8859-15 ISO-8859-15"
> ++ done
> ++ for l in la_LN; do
> ++ echo "$l.ISO8859-1 ISO-8859-1"
> ++ echo "$l.ISO8859-15 ISO-8859-15"
> ++ done
> ++ for l in cs_CZ hr_HR hu_HU la_LN pl_PL sl_SI; do
> ++ echo "$l.ISO8859-2 ISO-8859-2"
> ++ done
> ++ for l in la_LN lt_LT; do
> ++ echo "$l.ISO8859-4 ISO-8859-4"
> ++ done
> ++ for l in ru_RU; do
> ++ echo "$l.KOI8-R KOI8-R"
> ++ echo "$l.ISO8859-5 ISO-8859-5"
> ++ echo "$l.CP866 CP866"
> ++ done
> ++ for l in bg_BG; do
> ++ echo "$l.CP1251 CP1251"
> ++ done
> ++ echo "uk_UA.KOI8-U KOI8-U"
> ++ echo "zh_TW.BIG5 BIG5"
> ++ echo "zh_TW.Big5 BIG5"
> ++ echo "zh_CN.EUC GB2312"
> ++ echo "ja_JP.EUC EUC-JP"
> ++ echo "ja_JP.SJIS SHIFT_JIS"
> ++ echo "ko_KR.EUC EUC-KR"
> ++ ;;
> ++ beos*)
> ++ # BeOS has a single locale, and it has UTF-8 encoding.
> ++ echo "* UTF-8"
> ++ ;;
> ++ msdosdjgpp*)
> ++ # DJGPP 2.03 doesn't have nl_langinfo(CODESET); therefore
> ++ # localcharset.c falls back to using the full locale name
> ++ # from the environment variables.
> ++ echo "#"
> ++ echo "# The encodings given here may not all be correct."
> ++ echo "# If you find that the encoding given for your language and"
> ++ echo "# country is not the one your DOS machine actually uses, just"
> ++ echo "# correct it in this file, and send a mail to"
> ++ echo "# Juan Manuel Guerrero <st001906 at hrz1.hrz.tu-darmstadt.de>"
> ++ echo "# and Bruno Haible <bruno at clisp.org>."
> ++ echo "#"
> ++ echo "C ASCII"
> ++ # ISO-8859-1 languages
> ++ echo "ca CP850"
> ++ echo "ca_ES CP850"
> ++ echo "da CP865" # not CP850 ??
> ++ echo "da_DK CP865" # not CP850 ??
> ++ echo "de CP850"
> ++ echo "de_AT CP850"
> ++ echo "de_CH CP850"
> ++ echo "de_DE CP850"
> ++ echo "en CP850"
> ++ echo "en_AU CP850" # not CP437 ??
> ++ echo "en_CA CP850"
> ++ echo "en_GB CP850"
> ++ echo "en_NZ CP437"
> ++ echo "en_US CP437"
> ++ echo "en_ZA CP850" # not CP437 ??
> ++ echo "es CP850"
> ++ echo "es_AR CP850"
> ++ echo "es_BO CP850"
> ++ echo "es_CL CP850"
> ++ echo "es_CO CP850"
> ++ echo "es_CR CP850"
> ++ echo "es_CU CP850"
> ++ echo "es_DO CP850"
> ++ echo "es_EC CP850"
> ++ echo "es_ES CP850"
> ++ echo "es_GT CP850"
> ++ echo "es_HN CP850"
> ++ echo "es_MX CP850"
> ++ echo "es_NI CP850"
> ++ echo "es_PA CP850"
> ++ echo "es_PY CP850"
> ++ echo "es_PE CP850"
> ++ echo "es_SV CP850"
> ++ echo "es_UY CP850"
> ++ echo "es_VE CP850"
> ++ echo "et CP850"
> ++ echo "et_EE CP850"
> ++ echo "eu CP850"
> ++ echo "eu_ES CP850"
> ++ echo "fi CP850"
> ++ echo "fi_FI CP850"
> ++ echo "fr CP850"
> ++ echo "fr_BE CP850"
> ++ echo "fr_CA CP850"
> ++ echo "fr_CH CP850"
> ++ echo "fr_FR CP850"
> ++ echo "ga CP850"
> ++ echo "ga_IE CP850"
> ++ echo "gd CP850"
> ++ echo "gd_GB CP850"
> ++ echo "gl CP850"
> ++ echo "gl_ES CP850"
> ++ echo "id CP850" # not CP437 ??
> ++ echo "id_ID CP850" # not CP437 ??
> ++ echo "is CP861" # not CP850 ??
> ++ echo "is_IS CP861" # not CP850 ??
> ++ echo "it CP850"
> ++ echo "it_CH CP850"
> ++ echo "it_IT CP850"
> ++ echo "lt CP775"
> ++ echo "lt_LT CP775"
> ++ echo "lv CP775"
> ++ echo "lv_LV CP775"
> ++ echo "nb CP865" # not CP850 ??
> ++ echo "nb_NO CP865" # not CP850 ??
> ++ echo "nl CP850"
> ++ echo "nl_BE CP850"
> ++ echo "nl_NL CP850"
> ++ echo "nn CP865" # not CP850 ??
> ++ echo "nn_NO CP865" # not CP850 ??
> ++ echo "no CP865" # not CP850 ??
> ++ echo "no_NO CP865" # not CP850 ??
> ++ echo "pt CP850"
> ++ echo "pt_BR CP850"
> ++ echo "pt_PT CP850"
> ++ echo "sv CP850"
> ++ echo "sv_SE CP850"
> ++ # ISO-8859-2 languages
> ++ echo "cs CP852"
> ++ echo "cs_CZ CP852"
> ++ echo "hr CP852"
> ++ echo "hr_HR CP852"
> ++ echo "hu CP852"
> ++ echo "hu_HU CP852"
> ++ echo "pl CP852"
> ++ echo "pl_PL CP852"
> ++ echo "ro CP852"
> ++ echo "ro_RO CP852"
> ++ echo "sk CP852"
> ++ echo "sk_SK CP852"
> ++ echo "sl CP852"
> ++ echo "sl_SI CP852"
> ++ echo "sq CP852"
> ++ echo "sq_AL CP852"
> ++ echo "sr CP852" # CP852 or CP866 or CP855 ??
> ++ echo "sr_CS CP852" # CP852 or CP866 or CP855 ??
> ++ echo "sr_YU CP852" # CP852 or CP866 or CP855 ??
> ++ # ISO-8859-3 languages
> ++ echo "mt CP850"
> ++ echo "mt_MT CP850"
> ++ # ISO-8859-5 languages
> ++ echo "be CP866"
> ++ echo "be_BE CP866"
> ++ echo "bg CP866" # not CP855 ??
> ++ echo "bg_BG CP866" # not CP855 ??
> ++ echo "mk CP866" # not CP855 ??
> ++ echo "mk_MK CP866" # not CP855 ??
> ++ echo "ru CP866"
> ++ echo "ru_RU CP866"
> ++ echo "uk CP1125"
> ++ echo "uk_UA CP1125"
> ++ # ISO-8859-6 languages
> ++ echo "ar CP864"
> ++ echo "ar_AE CP864"
> ++ echo "ar_DZ CP864"
> ++ echo "ar_EG CP864"
> ++ echo "ar_IQ CP864"
> ++ echo "ar_IR CP864"
> ++ echo "ar_JO CP864"
> ++ echo "ar_KW CP864"
> ++ echo "ar_MA CP864"
> ++ echo "ar_OM CP864"
> ++ echo "ar_QA CP864"
> ++ echo "ar_SA CP864"
> ++ echo "ar_SY CP864"
> ++ # ISO-8859-7 languages
> ++ echo "el CP869"
> ++ echo "el_GR CP869"
> ++ # ISO-8859-8 languages
> ++ echo "he CP862"
> ++ echo "he_IL CP862"
> ++ # ISO-8859-9 languages
> ++ echo "tr CP857"
> ++ echo "tr_TR CP857"
> ++ # Japanese
> ++ echo "ja CP932"
> ++ echo "ja_JP CP932"
> ++ # Chinese
> ++ echo "zh_CN GBK"
> ++ echo "zh_TW CP950" # not CP938 ??
> ++ # Korean
> ++ echo "kr CP949" # not CP934 ??
> ++ echo "kr_KR CP949" # not CP934 ??
> ++ # Thai
> ++ echo "th CP874"
> ++ echo "th_TH CP874"
> ++ # Other
> ++ echo "eo CP850"
> ++ echo "eo_EO CP850"
> ++ ;;
> ++esac
> +--- lrzsz-0.12.20.safe/intl/dcgettext.c 1998-04-26 09:22:36.000000000 -0400
> ++++ lrzsz-0.12.20/intl/dcgettext.c 2004-09-12 14:40:34.359747480 -0400
> +@@ -1,593 +1,56 @@
> +-/* Implementation of the dcgettext(3) function
> +- Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
> ++/* Implementation of the dcgettext(3) function.
> ++ Copyright (C) 1995-1999, 2000-2003 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
> +- the Free Software Foundation; either version 2, or (at your option)
> ++ This program is free software; you can redistribute it and/or modify it
> ++ under the terms of the GNU Library General Public License as published
> ++ by the Free Software Foundation; either version 2, or (at your option)
> + any later version.
> +
> + This program is distributed in the hope that it will be useful,
> + but WITHOUT ANY WARRANTY; without even the implied warranty of
> +- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> +- GNU General Public License for more details.
> ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> ++ Library General Public License for more details.
> +
> +- You should have received a copy of the GNU 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. */
> ++ You should have received a copy of the GNU Library General Public
> ++ License along with this program; if not, write to the Free Software
> ++ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
> ++ USA. */
> +
> + #ifdef HAVE_CONFIG_H
> + # include <config.h>
> + #endif
> +
> +-#include <sys/types.h>
> +-
> +-#ifdef __GNUC__
> +-# define alloca __builtin_alloca
> +-# define HAVE_ALLOCA 1
> +-#else
> +-# if defined HAVE_ALLOCA_H || defined _LIBC
> +-# include <alloca.h>
> +-# else
> +-# ifdef _AIX
> +- #pragma alloca
> +-# else
> +-# ifndef alloca
> +-char *alloca ();
> +-# endif
> +-# endif
> +-# endif
> +-#endif
> +-
> +-#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
> +-# define stpcpy __stpcpy
> +-#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));
> +-static const char *category_to_name PARAMS ((int category));
> +-static const char *guess_category_value PARAMS ((int category,
> +- const char *categoryname));
> +-
> +-
> +-/* 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__
> ++# define DCGETTEXT libintl_dcgettext
> ++# define DCIGETTEXT libintl_dcigettext
> + #endif
> +
> + /* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
> + locale. */
> + char *
> +-DCGETTEXT (domainname, msgid, category)
> +- const char *domainname;
> +- const char *msgid;
> +- int category;
> ++DCGETTEXT (const char *domainname, 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;
> +-
> +- /* 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
> +- defintion 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) 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 th 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';
> +- }
> +-
> +- /* 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. */
> ++INTDEF(__dcgettext)
> + weak_alias (__dcgettext, dcgettext);
> + #endif
> +-
> +-
> +-static char *
> +-find_msg (domain_file, msgid)
> +- struct loaded_l10nfile *domain_file;
> +- const char *msgid;
> +-{
> +- size_t top, act, 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 *
> +-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 *
> +-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
> +--- lrzsz-0.12.20.safe/intl/dcigettext.c 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/intl/dcigettext.c 2004-09-12 14:40:34.369745960 -0400
> +@@ -0,0 +1,1219 @@
> ++/* Implementation of the internal dcigettext function.
> ++ Copyright (C) 1995-1999, 2000-2003 Free Software Foundation, Inc.
> ++
> ++ This program is free software; you can redistribute it and/or modify it
> ++ under the terms of the GNU Library General Public License as published
> ++ by the Free Software Foundation; either version 2, or (at your option)
> ++ any later version.
> ++
> ++ This program is distributed in the hope that it will be useful,
> ++ but WITHOUT ANY WARRANTY; without even the implied warranty of
> ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> ++ Library General Public License for more details.
> ++
> ++ You should have received a copy of the GNU Library General Public
> ++ License along with this program; if not, write to the Free Software
> ++ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
> ++ USA. */
> ++
> ++/* Tell glibc's <string.h> to provide a prototype for mempcpy().
> ++ This must come before <config.h> because <config.h> may include
> ++ <features.h>, and once <features.h> has been included, it's too late. */
> ++#ifndef _GNU_SOURCE
> ++# define _GNU_SOURCE 1
> ++#endif
> ++
> ++#ifdef HAVE_CONFIG_H
> ++# include <config.h>
> ++#endif
> ++
> ++#include <sys/types.h>
> ++
> ++#ifdef __GNUC__
> ++# define alloca __builtin_alloca
> ++# define HAVE_ALLOCA 1
> ++#else
> ++# ifdef _MSC_VER
> ++# include <malloc.h>
> ++# define alloca _alloca
> ++# else
> ++# if defined HAVE_ALLOCA_H || defined _LIBC
> ++# include <alloca.h>
> ++# else
> ++# ifdef _AIX
> ++ #pragma alloca
> ++# else
> ++# ifndef alloca
> ++char *alloca ();
> ++# endif
> ++# endif
> ++# endif
> ++# endif
> ++#endif
> ++
> ++#include <errno.h>
> ++#ifndef errno
> ++extern int errno;
> ++#endif
> ++#ifndef __set_errno
> ++# define __set_errno(val) errno = (val)
> ++#endif
> ++
> ++#include <stddef.h>
> ++#include <stdlib.h>
> ++#include <string.h>
> ++
> ++#if defined HAVE_UNISTD_H || defined _LIBC
> ++# include <unistd.h>
> ++#endif
> ++
> ++#include <locale.h>
> ++
> ++#ifdef _LIBC
> ++ /* Guess whether integer division by zero raises signal SIGFPE.
> ++ Set to 1 only if you know for sure. In case of doubt, set to 0. */
> ++# if defined __alpha__ || defined __arm__ || defined __i386__ \
> ++ || defined __m68k__ || defined __s390__
> ++# define INTDIV0_RAISES_SIGFPE 1
> ++# else
> ++# define INTDIV0_RAISES_SIGFPE 0
> ++# endif
> ++#endif
> ++#if !INTDIV0_RAISES_SIGFPE
> ++# include <signal.h>
> ++#endif
> ++
> ++#if defined HAVE_SYS_PARAM_H || defined _LIBC
> ++# include <sys/param.h>
> ++#endif
> ++
> ++#include "gettextP.h"
> ++#include "plural-exp.h"
> ++#ifdef _LIBC
> ++# include <libintl.h>
> ++#else
> ++# include "libgnuintl.h"
> ++#endif
> ++#include "hash-string.h"
> ++
> ++/* Thread safetyness. */
> ++#ifdef _LIBC
> ++# include <bits/libc-lock.h>
> ++#else
> ++/* Provide dummy implementation if this is outside glibc. */
> ++# define __libc_lock_define_initialized(CLASS, NAME)
> ++# define __libc_lock_lock(NAME)
> ++# define __libc_lock_unlock(NAME)
> ++# define __libc_rwlock_define_initialized(CLASS, NAME)
> ++# define __libc_rwlock_rdlock(NAME)
> ++# define __libc_rwlock_unlock(NAME)
> ++#endif
> ++
> ++/* Alignment of types. */
> ++#if defined __GNUC__ && __GNUC__ >= 2
> ++# define alignof(TYPE) __alignof__ (TYPE)
> ++#else
> ++# define alignof(TYPE) \
> ++ ((int) &((struct { char dummy1; TYPE dummy2; } *) 0)->dummy2)
> ++#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_default_domain libintl_nl_default_default_domain
> ++# define _nl_current_default_domain libintl_nl_current_default_domain
> ++# define _nl_default_dirname libintl_nl_default_dirname
> ++# define _nl_domain_bindings libintl_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
> ++
> ++/* @@ 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
> ++# define tfind __tfind
> ++#else
> ++# if !defined HAVE_GETCWD
> ++char *getwd ();
> ++# define getcwd(buf, max) getwd (buf)
> ++# else
> ++# if VMS
> ++# define getcwd(buf, max) (getcwd) (buf, max, 0)
> ++# else
> ++char *getcwd ();
> ++# endif
> ++# endif
> ++# ifndef HAVE_STPCPY
> ++static char *stpcpy (char *dest, const char *src);
> ++# endif
> ++# ifndef HAVE_MEMPCPY
> ++static void *mempcpy (void *dest, const void *src, size_t n);
> ++# 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
> ++
> ++/* Pathname support.
> ++ ISSLASH(C) tests whether C is a directory separator character.
> ++ IS_ABSOLUTE_PATH(P) tests whether P is an absolute path. If it is not,
> ++ it may be concatenated to a directory pathname.
> ++ IS_PATH_WITH_DIR(P) tests whether P contains a directory specification.
> ++ */
> ++#if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__
> ++ /* Win32, OS/2, DOS */
> ++# define ISSLASH(C) ((C) == '/' || (C) == '\\')
> ++# define HAS_DEVICE(P) \
> ++ ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \
> ++ && (P)[1] == ':')
> ++# define IS_ABSOLUTE_PATH(P) (ISSLASH ((P)[0]) || HAS_DEVICE (P))
> ++# define IS_PATH_WITH_DIR(P) \
> ++ (strchr (P, '/') != NULL || strchr (P, '\\') != NULL || HAS_DEVICE (P))
> ++#else
> ++ /* Unix */
> ++# define ISSLASH(C) ((C) == '/')
> ++# define IS_ABSOLUTE_PATH(P) ISSLASH ((P)[0])
> ++# define IS_PATH_WITH_DIR(P) (strchr (P, '/') != NULL)
> ++#endif
> ++
> ++/* This is the type used for the search tree where known translations
> ++ are stored. */
> ++struct known_translation_t
> ++{
> ++ /* Domain in which to search. */
> ++ char *domainname;
> ++
> ++ /* The category. */
> ++ int category;
> ++
> ++ /* State of the catalog counter at the point the string was found. */
> ++ int counter;
> ++
> ++ /* Catalog where the string was found. */
> ++ struct loaded_l10nfile *domain;
> ++
> ++ /* And finally the translation. */
> ++ const char *translation;
> ++ size_t translation_length;
> ++
> ++ /* Pointer to the string in question. */
> ++ char msgid[ZERO];
> ++};
> ++
> ++/* Root of the search tree with known translations. We can use this
> ++ only if the system provides the `tsearch' function family. */
> ++#if defined HAVE_TSEARCH || defined _LIBC
> ++# include <search.h>
> ++
> ++static void *root;
> ++
> ++# ifdef _LIBC
> ++# define tsearch __tsearch
> ++# endif
> ++
> ++/* Function to compare two entries in the table of known translations. */
> ++static int
> ++transcmp (const void *p1, const void *p2)
> ++{
> ++ const struct known_translation_t *s1;
> ++ const struct known_translation_t *s2;
> ++ int result;
> ++
> ++ s1 = (const struct known_translation_t *) p1;
> ++ s2 = (const struct known_translation_t *) p2;
> ++
> ++ result = strcmp (s1->msgid, s2->msgid);
> ++ if (result == 0)
> ++ {
> ++ result = strcmp (s1->domainname, s2->domainname);
> ++ if (result == 0)
> ++ /* We compare the category last (though this is the cheapest
> ++ operation) since it is hopefully always the same (namely
> ++ LC_MESSAGES). */
> ++ result = s1->category - s2->category;
> ++ }
> ++
> ++ return result;
> ++}
> ++#endif
> ++
> ++#ifndef INTVARDEF
> ++# define INTVARDEF(name)
> ++#endif
> ++#ifndef INTUSE
> ++# define INTUSE(name) name
> ++#endif
> ++
> ++/* Name of the default domain used for gettext(3) prior any call to
> ++ textdomain(3). The default value for this is "messages". */
> ++const char _nl_default_default_domain[] attribute_hidden = "messages";
> ++
> ++/* Value used as the default domain for gettext(3). */
> ++const char *_nl_current_default_domain attribute_hidden
> ++ = _nl_default_default_domain;
> ++
> ++/* Contains the default location of the message catalogs. */
> ++#if defined __EMX__
> ++extern const char _nl_default_dirname[];
> ++#else
> ++const char _nl_default_dirname[] = LOCALEDIR;
> ++INTVARDEF (_nl_default_dirname)
> ++#endif
> ++
> ++/* List with bindings of specific domains created by bindtextdomain()
> ++ calls. */
> ++struct binding *_nl_domain_bindings;
> ++
> ++/* Prototypes for local functions. */
> ++static char *plural_lookup (struct loaded_l10nfile *domain,
> ++ unsigned long int n,
> ++ const char *translation, size_t translation_len)
> ++ internal_function;
> ++static const char *guess_category_value (int category,
> ++ const char *categoryname)
> ++ internal_function;
> ++#ifdef _LIBC
> ++# include "../locale/localeinfo.h"
> ++# define category_to_name(category) _nl_category_names[category]
> ++#else
> ++static const char *category_to_name (int category) internal_function;
> ++#endif
> ++
> ++
> ++/* 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 freea(p) /* nothing */
> ++# 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->address); \
> ++ free (old); \
> ++ } \
> ++ } while (0)
> ++# undef alloca
> ++# define alloca(size) (malloc (size))
> ++# define freea(p) free (p)
> ++#endif /* have alloca */
> ++
> ++
> ++#ifdef _LIBC
> ++/* List of blocks allocated for translations. */
> ++typedef struct transmem_list
> ++{
> ++ struct transmem_list *next;
> ++ char data[ZERO];
> ++} transmem_block_t;
> ++static struct transmem_list *transmem_list;
> ++#else
> ++typedef unsigned char transmem_block_t;
> ++#endif
> ++
> ++
> ++/* 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 DCIGETTEXT __dcigettext
> ++#else
> ++# define DCIGETTEXT libintl_dcigettext
> ++#endif
> ++
> ++/* Lock variable to protect the global data in the gettext implementation. */
> ++#ifdef _LIBC
> ++__libc_rwlock_define_initialized (, _nl_state_lock attribute_hidden)
> ++#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
> ++# 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 \
> ++ if (enable_secure == 0) \
> ++ { \
> ++ if (getuid () != geteuid () || getgid () != getegid ()) \
> ++ enable_secure = 1; \
> ++ else \
> ++ enable_secure = -1; \
> ++ }
> ++#endif
> ++
> ++/* Get the function to evaluate the plural expression. */
> ++#include "eval-plural.h"
> ++
> ++/* Look up MSGID in the DOMAINNAME message catalog for the current
> ++ CATEGORY locale and, if PLURAL is nonzero, search over string
> ++ depending on the plural form determined by N. */
> ++char *
> ++DCIGETTEXT (const char *domainname, const char *msgid1, const char *msgid2,
> ++ int plural, unsigned long int n, 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;
> ++ size_t retlen;
> ++ int saved_errno;
> ++#if defined HAVE_TSEARCH || defined _LIBC
> ++ struct known_translation_t *search;
> ++ struct known_translation_t **foundp = NULL;
> ++ size_t msgid_len;
> ++#endif
> ++ size_t domainname_len;
> ++
> ++ /* If no real MSGID is given return NULL. */
> ++ if (msgid1 == NULL)
> ++ return NULL;
> ++
> ++#ifdef _LIBC
> ++ if (category < 0 || category >= __LC_LAST || category == LC_ALL)
> ++ /* Bogus. */
> ++ return (plural == 0
> ++ ? (char *) msgid1
> ++ /* Use the Germanic plural rule. */
> ++ : n == 1 ? (char *) msgid1 : (char *) msgid2);
> ++#endif
> ++
> ++ __libc_rwlock_rdlock (_nl_state_lock);
> ++
> ++ /* 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;
> ++
> ++ /* OS/2 specific: backward compatibility with older libintl versions */
> ++#ifdef LC_MESSAGES_COMPAT
> ++ if (category == LC_MESSAGES_COMPAT)
> ++ category = LC_MESSAGES;
> ++#endif
> ++
> ++#if defined HAVE_TSEARCH || defined _LIBC
> ++ msgid_len = strlen (msgid1) + 1;
> ++
> ++ /* Try to find the translation among those which we found at
> ++ some time. */
> ++ search = (struct known_translation_t *)
> ++ alloca (offsetof (struct known_translation_t, msgid) + msgid_len);
> ++ memcpy (search->msgid, msgid1, msgid_len);
> ++ search->domainname = (char *) domainname;
> ++ search->category = category;
> ++
> ++ foundp = (struct known_translation_t **) tfind (search, &root, transcmp);
> ++ freea (search);
> ++ if (foundp != NULL && (*foundp)->counter == _nl_msg_cat_cntr)
> ++ {
> ++ /* Now deal with plural. */
> ++ if (plural)
> ++ retval = plural_lookup ((*foundp)->domain, n, (*foundp)->translation,
> ++ (*foundp)->translation_length);
> ++ else
> ++ retval = (char *) (*foundp)->translation;
> ++
> ++ __libc_rwlock_unlock (_nl_state_lock);
> ++ return retval;
> ++ }
> ++#endif
> ++
> ++ /* Preserve the `errno' value. */
> ++ saved_errno = errno;
> ++
> ++ /* See whether this is a SUID binary or not. */
> ++ DETERMINE_SECURE;
> ++
> ++ /* 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 *) INTUSE(_nl_default_dirname);
> ++ else if (IS_ABSOLUTE_PATH (binding->dirname))
> ++ 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. */
> ++
> ++ for (;;)
> ++ {
> ++ dirname = (char *) alloca (path_max + dirname_len);
> ++ ADD_BLOCK (block_list, dirname);
> ++
> ++ __set_errno (0);
> ++ ret = getcwd (dirname, path_max);
> ++ if (ret != NULL || errno != ERANGE)
> ++ break;
> ++
> ++ path_max += path_max / 2;
> ++ path_max += PATH_INCR;
> ++ }
> ++
> ++ if (ret == NULL)
> ++ /* We cannot get the current working directory. Don't signal an
> ++ error but simply return the default string. */
> ++ goto return_untranslated;
> ++
> ++ 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);
> ++
> ++ domainname_len = strlen (domainname);
> ++ xdomainname = (char *) alloca (strlen (categoryname)
> ++ + domainname_len + 5);
> ++ ADD_BLOCK (block_list, xdomainname);
> ++
> ++ stpcpy (mempcpy (stpcpy (stpcpy (xdomainname, categoryname), "/"),
> ++ domainname, domainname_len),
> ++ ".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 && IS_PATH_WITH_DIR (single_locale))
> ++ /* 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)
> ++ break;
> ++
> ++ /* Find structure describing the message catalog matching the
> ++ DOMAINNAME and CATEGORY. */
> ++ domain = _nl_find_domain (dirname, single_locale, xdomainname, binding);
> ++
> ++ if (domain != NULL)
> ++ {
> ++ retval = _nl_find_msg (domain, binding, msgid1, &retlen);
> ++
> ++ if (retval == NULL)
> ++ {
> ++ int cnt;
> ++
> ++ for (cnt = 0; domain->successor[cnt] != NULL; ++cnt)
> ++ {
> ++ retval = _nl_find_msg (domain->successor[cnt], binding,
> ++ msgid1, &retlen);
> ++
> ++ if (retval != NULL)
> ++ {
> ++ domain = domain->successor[cnt];
> ++ break;
> ++ }
> ++ }
> ++ }
> ++
> ++ if (retval != NULL)
> ++ {
> ++ /* Found the translation of MSGID1 in domain DOMAIN:
> ++ starting at RETVAL, RETLEN bytes. */
> ++ FREE_BLOCKS (block_list);
> ++#if defined HAVE_TSEARCH || defined _LIBC
> ++ if (foundp == NULL)
> ++ {
> ++ /* Create a new entry and add it to the search tree. */
> ++ struct known_translation_t *newp;
> ++
> ++ newp = (struct known_translation_t *)
> ++ malloc (offsetof (struct known_translation_t, msgid)
> ++ + msgid_len + domainname_len + 1);
> ++ if (newp != NULL)
> ++ {
> ++ newp->domainname =
> ++ mempcpy (newp->msgid, msgid1, msgid_len);
> ++ memcpy (newp->domainname, domainname, domainname_len + 1);
> ++ newp->category = category;
> ++ newp->counter = _nl_msg_cat_cntr;
> ++ newp->domain = domain;
> ++ newp->translation = retval;
> ++ newp->translation_length = retlen;
> ++
> ++ /* Insert the entry in the search tree. */
> ++ foundp = (struct known_translation_t **)
> ++ tsearch (newp, &root, transcmp);
> ++ if (foundp == NULL
> ++ || __builtin_expect (*foundp != newp, 0))
> ++ /* The insert failed. */
> ++ free (newp);
> ++ }
> ++ }
> ++ else
> ++ {
> ++ /* We can update the existing entry. */
> ++ (*foundp)->counter = _nl_msg_cat_cntr;
> ++ (*foundp)->domain = domain;
> ++ (*foundp)->translation = retval;
> ++ (*foundp)->translation_length = retlen;
> ++ }
> ++#endif
> ++ __set_errno (saved_errno);
> ++
> ++ /* Now deal with plural. */
> ++ if (plural)
> ++ retval = plural_lookup (domain, n, retval, retlen);
> ++
> ++ __libc_rwlock_unlock (_nl_state_lock);
> ++ return retval;
> ++ }
> ++ }
> ++ }
> ++
> ++ return_untranslated:
> ++ /* Return the untranslated MSGID. */
> ++ FREE_BLOCKS (block_list);
> ++ __libc_rwlock_unlock (_nl_state_lock);
> ++#ifndef _LIBC
> ++ if (!ENABLE_SECURE)
> ++ {
> ++ extern void _nl_log_untranslated (const char *logfilename,
> ++ const char *domainname,
> ++ const char *msgid1, const char *msgid2,
> ++ int plural);
> ++ const char *logfilename = getenv ("GETTEXT_LOG_UNTRANSLATED");
> ++
> ++ if (logfilename != NULL && logfilename[0] != '\0')
> ++ _nl_log_untranslated (logfilename, domainname, msgid1, msgid2, plural);
> ++ }
> ++#endif
> ++ __set_errno (saved_errno);
> ++ return (plural == 0
> ++ ? (char *) msgid1
> ++ /* Use the Germanic plural rule. */
> ++ : n == 1 ? (char *) msgid1 : (char *) msgid2);
> ++}
> ++
> ++
> ++char *
> ++internal_function
> ++_nl_find_msg (struct loaded_l10nfile *domain_file,
> ++ struct binding *domainbinding, const char *msgid,
> ++ size_t *lengthp)
> ++{
> ++ struct loaded_domain *domain;
> ++ nls_uint32 nstrings;
> ++ size_t act;
> ++ char *result;
> ++ size_t resultlen;
> ++
> ++ if (domain_file->decided == 0)
> ++ _nl_load_domain (domain_file, domainbinding);
> ++
> ++ if (domain_file->data == NULL)
> ++ return NULL;
> ++
> ++ domain = (struct loaded_domain *) domain_file->data;
> ++
> ++ nstrings = domain->nstrings;
> ++
> ++ /* Locate the MSGID and its translation. */
> ++ if (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));
> ++
> ++ while (1)
> ++ {
> ++ nls_uint32 nstr =
> ++ W (domain->must_swap_hash_tab, domain->hash_tab[idx]);
> ++
> ++ if (nstr == 0)
> ++ /* Hash table entry is empty. */
> ++ return NULL;
> ++
> ++ nstr--;
> ++
> ++ /* Compare msgid with the original string at index nstr.
> ++ We compare the lengths with >=, not ==, because plural entries
> ++ are represented by strings with an embedded NUL. */
> ++ if (nstr < nstrings
> ++ ? W (domain->must_swap, domain->orig_tab[nstr].length) >= len
> ++ && (strcmp (msgid,
> ++ domain->data + W (domain->must_swap,
> ++ domain->orig_tab[nstr].offset))
> ++ == 0)
> ++ : domain->orig_sysdep_tab[nstr - nstrings].length > len
> ++ && (strcmp (msgid,
> ++ domain->orig_sysdep_tab[nstr - nstrings].pointer)
> ++ == 0))
> ++ {
> ++ act = nstr;
> ++ goto found;
> ++ }
> ++
> ++ if (idx >= domain->hash_size - incr)
> ++ idx -= domain->hash_size - incr;
> ++ else
> ++ idx += incr;
> ++ }
> ++ /* NOTREACHED */
> ++ }
> ++ else
> ++ {
> ++ /* Try the default method: binary search in the sorted array of
> ++ messages. */
> ++ size_t top, bottom;
> ++
> ++ bottom = 0;
> ++ top = 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
> ++ goto found;
> ++ }
> ++ /* No translation was found. */
> ++ return NULL;
> ++ }
> ++
> ++ found:
> ++ /* The translation was found at index ACT. If we have to convert the
> ++ string to use a different character set, this is the time. */
> ++ if (act < nstrings)
> ++ {
> ++ result = (char *)
> ++ (domain->data + W (domain->must_swap, domain->trans_tab[act].offset));
> ++ resultlen = W (domain->must_swap, domain->trans_tab[act].length) + 1;
> ++ }
> ++ else
> ++ {
> ++ result = (char *) domain->trans_sysdep_tab[act - nstrings].pointer;
> ++ resultlen = domain->trans_sysdep_tab[act - nstrings].length;
> ++ }
> ++
> ++#if defined _LIBC || HAVE_ICONV
> ++ if (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
> ++# else
> ++# if HAVE_ICONV
> ++ domain->conv != (iconv_t) -1
> ++# endif
> ++# endif
> ++ )
> ++ {
> ++ /* We are supposed to do a conversion. First allocate an
> ++ appropriate table with the same structure as the table
> ++ of translations in the file, where we can put the pointers
> ++ to the converted strings in.
> ++ There is a slight complication with plural entries. They
> ++ are represented by consecutive NUL terminated strings. We
> ++ handle this case by converting RESULTLEN bytes, including
> ++ NULs. */
> ++
> ++ if (domain->conv_tab == NULL
> ++ && ((domain->conv_tab =
> ++ (char **) calloc (nstrings + domain->n_sysdep_strings,
> ++ sizeof (char *)))
> ++ == NULL))
> ++ /* Mark that we didn't succeed allocating a table. */
> ++ domain->conv_tab = (char **) -1;
> ++
> ++ if (__builtin_expect (domain->conv_tab == (char **) -1, 0))
> ++ /* Nothing we can do, no more memory. */
> ++ goto converted;
> ++
> ++ if (domain->conv_tab[act] == NULL)
> ++ {
> ++ /* We haven't used this string so far, so it is not
> ++ translated yet. Do this now. */
> ++ /* We use a bit more efficient memory handling.
> ++ We allocate always larger blocks which get used over
> ++ time. This is faster than many small allocations. */
> ++ __libc_lock_define_initialized (static, lock)
> ++# define INITIAL_BLOCK_SIZE 4080
> ++ static unsigned char *freemem;
> ++ static size_t freemem_size;
> ++
> ++ const unsigned char *inbuf;
> ++ unsigned char *outbuf;
> ++ int malloc_count;
> ++# ifndef _LIBC
> ++ transmem_block_t *transmem_list = NULL;
> ++# endif
> ++
> ++ __libc_lock_lock (lock);
> ++
> ++ inbuf = (const unsigned char *) result;
> ++ outbuf = freemem + sizeof (size_t);
> ++
> ++ malloc_count = 0;
> ++ while (1)
> ++ {
> ++ transmem_block_t *newmem;
> ++# ifdef _LIBC
> ++ size_t non_reversible;
> ++ int res;
> ++
> ++ if (freemem_size < sizeof (size_t))
> ++ goto resize_freemem;
> ++
> ++ res = __gconv (domain->conv,
> ++ &inbuf, inbuf + resultlen,
> ++ &outbuf,
> ++ outbuf + freemem_size - sizeof (size_t),
> ++ &non_reversible);
> ++
> ++ if (res == __GCONV_OK || res == __GCONV_EMPTY_INPUT)
> ++ break;
> ++
> ++ if (res != __GCONV_FULL_OUTPUT)
> ++ {
> ++ __libc_lock_unlock (lock);
> ++ goto converted;
> ++ }
> ++
> ++ inbuf = result;
> ++# else
> ++# if HAVE_ICONV
> ++ const char *inptr = (const char *) inbuf;
> ++ size_t inleft = resultlen;
> ++ char *outptr = (char *) outbuf;
> ++ size_t outleft;
> ++
> ++ if (freemem_size < sizeof (size_t))
> ++ goto resize_freemem;
> ++
> ++ outleft = freemem_size - sizeof (size_t);
> ++ if (iconv (domain->conv,
> ++ (ICONV_CONST char **) &inptr, &inleft,
> ++ &outptr, &outleft)
> ++ != (size_t) (-1))
> ++ {
> ++ outbuf = (unsigned char *) outptr;
> ++ break;
> ++ }
> ++ if (errno != E2BIG)
> ++ {
> ++ __libc_lock_unlock (lock);
> ++ goto converted;
> ++ }
> ++# endif
> ++# endif
> ++
> ++ resize_freemem:
> ++ /* We must allocate a new buffer or resize the old one. */
> ++ if (malloc_count > 0)
> ++ {
> ++ ++malloc_count;
> ++ freemem_size = malloc_count * INITIAL_BLOCK_SIZE;
> ++ newmem = (transmem_block_t *) realloc (transmem_list,
> ++ freemem_size);
> ++# ifdef _LIBC
> ++ if (newmem != NULL)
> ++ transmem_list = transmem_list->next;
> ++ else
> ++ {
> ++ struct transmem_list *old = transmem_list;
> ++
> ++ transmem_list = transmem_list->next;
> ++ free (old);
> ++ }
> ++# endif
> ++ }
> ++ else
> ++ {
> ++ malloc_count = 1;
> ++ freemem_size = INITIAL_BLOCK_SIZE;
> ++ newmem = (transmem_block_t *) malloc (freemem_size);
> ++ }
> ++ if (__builtin_expect (newmem == NULL, 0))
> ++ {
> ++ freemem = NULL;
> ++ freemem_size = 0;
> ++ __libc_lock_unlock (lock);
> ++ goto converted;
> ++ }
> ++
> ++# ifdef _LIBC
> ++ /* Add the block to the list of blocks we have to free
> ++ at some point. */
> ++ newmem->next = transmem_list;
> ++ transmem_list = newmem;
> ++
> ++ freemem = newmem->data;
> ++ freemem_size -= offsetof (struct transmem_list, data);
> ++# else
> ++ transmem_list = newmem;
> ++ freemem = newmem;
> ++# endif
> ++
> ++ outbuf = freemem + sizeof (size_t);
> ++ }
> ++
> ++ /* We have now in our buffer a converted string. Put this
> ++ into the table of conversions. */
> ++ *(size_t *) freemem = outbuf - freemem - sizeof (size_t);
> ++ domain->conv_tab[act] = (char *) freemem;
> ++ /* Shrink freemem, but keep it aligned. */
> ++ freemem_size -= outbuf - freemem;
> ++ freemem = outbuf;
> ++ freemem += freemem_size & (alignof (size_t) - 1);
> ++ freemem_size = freemem_size & ~ (alignof (size_t) - 1);
> ++
> ++ __libc_lock_unlock (lock);
> ++ }
> ++
> ++ /* Now domain->conv_tab[act] contains the translation of all
> ++ the plural variants. */
> ++ result = domain->conv_tab[act] + sizeof (size_t);
> ++ resultlen = *(size_t *) domain->conv_tab[act];
> ++ }
> ++
> ++ converted:
> ++ /* The result string is converted. */
> ++
> ++#endif /* _LIBC || HAVE_ICONV */
> ++
> ++ *lengthp = resultlen;
> ++ return result;
> ++}
> ++
> ++
> ++/* Look up a plural variant. */
> ++static char *
> ++internal_function
> ++plural_lookup (struct loaded_l10nfile *domain, unsigned long int n,
> ++ const char *translation, size_t translation_len)
> ++{
> ++ struct loaded_domain *domaindata = (struct loaded_domain *) domain->data;
> ++ unsigned long int index;
> ++ const char *p;
> ++
> ++ index = plural_eval (domaindata->plural, n);
> ++ if (index >= domaindata->nplurals)
> ++ /* This should never happen. It means the plural expression and the
> ++ given maximum value do not match. */
> ++ index = 0;
> ++
> ++ /* Skip INDEX strings at TRANSLATION. */
> ++ p = translation;
> ++ while (index-- > 0)
> ++ {
> ++#ifdef _LIBC
> ++ p = __rawmemchr (p, '\0');
> ++#else
> ++ p = strchr (p, '\0');
> ++#endif
> ++ /* And skip over the NUL byte. */
> ++ p++;
> ++
> ++ if (p >= translation + translation_len)
> ++ /* This should never happen. It means the plural expression
> ++ evaluated to a value larger than the number of variants
> ++ available for MSGID1. */
> ++ return (char *) translation;
> ++ }
> ++ return (char *) p;
> ++}
> ++
> ++#ifndef _LIBC
> ++/* Return string representation of locale CATEGORY. */
> ++static const char *
> ++internal_function
> ++category_to_name (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;
> ++}
> ++#endif
> ++
> ++/* Guess value of current locale from value of the environment variables. */
> ++static const char *
> ++internal_function
> ++guess_category_value (int category, const char *categoryname)
> ++{
> ++ const char *language;
> ++ const char *retval;
> ++
> ++ /* The highest priority value is the `LANGUAGE' environment
> ++ variable. But we don't use the value if the currently selected
> ++ locale is the C locale. This is a GNU extension. */
> ++ language = getenv ("LANGUAGE");
> ++ if (language != NULL && language[0] == '\0')
> ++ language = NULL;
> ++
> ++ /* 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. */
> ++#ifdef _LIBC
> ++ retval = __current_locale_name (category);
> ++#else
> ++ retval = _nl_locale_name (category, categoryname);
> ++#endif
> ++
> ++ /* Ignore LANGUAGE if the locale is set to "C" because
> ++ 1. "C" locale usually uses the ASCII encoding, and most international
> ++ messages use non-ASCII characters. These characters get displayed
> ++ as question marks (if using glibc's iconv()) or as invalid 8-bit
> ++ characters (because other iconv()s refuse to convert most non-ASCII
> ++ characters to ASCII). In any case, the output is ugly.
> ++ 2. The precise output of some programs in the "C" locale is specified
> ++ by POSIX and should not depend on environment variables like
> ++ "LANGUAGE". We allow such programs to use gettext(). */
> ++ return language != NULL && strcmp (retval, "C") != 0 ? language : retval;
> ++}
> ++
> ++/* @@ 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 (char *dest, const char *src)
> ++{
> ++ while ((*dest++ = *src++) != '\0')
> ++ /* Do nothing. */ ;
> ++ return dest - 1;
> ++}
> ++#endif
> ++
> ++#if !_LIBC && !HAVE_MEMPCPY
> ++static void *
> ++mempcpy (void *dest, const void *src, size_t n)
> ++{
> ++ return (void *) ((char *) memcpy (dest, src, n) + n);
> ++}
> ++#endif
> ++
> ++
> ++#ifdef _LIBC
> ++/* If we want to free all resources we have to do some work at
> ++ program's end. */
> ++libc_freeres_fn (free_mem)
> ++{
> ++ void *old;
> ++
> ++ while (_nl_domain_bindings != NULL)
> ++ {
> ++ struct binding *oldp = _nl_domain_bindings;
> ++ _nl_domain_bindings = _nl_domain_bindings->next;
> ++ if (oldp->dirname != INTUSE(_nl_default_dirname))
> ++ /* Yes, this is a pointer comparison. */
> ++ free (oldp->dirname);
> ++ free (oldp->codeset);
> ++ free (oldp);
> ++ }
> ++
> ++ if (_nl_current_default_domain != _nl_default_default_domain)
> ++ /* Yes, again a pointer comparison. */
> ++ free ((char *) _nl_current_default_domain);
> ++
> ++ /* Remove the search tree with the known translations. */
> ++ __tdestroy (root, free);
> ++ root = NULL;
> ++
> ++ while (transmem_list != NULL)
> ++ {
> ++ old = transmem_list;
> ++ transmem_list = transmem_list->next;
> ++ free (old);
> ++ }
> ++}
> ++#endif
> +--- lrzsz-0.12.20.safe/intl/dcngettext.c 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/intl/dcngettext.c 2004-09-12 14:40:34.375745048 -0400
> +@@ -0,0 +1,57 @@
> ++/* Implementation of the dcngettext(3) function.
> ++ Copyright (C) 1995-1999, 2000-2003 Free Software Foundation, Inc.
> ++
> ++ This program is free software; you can redistribute it and/or modify it
> ++ under the terms of the GNU Library General Public License as published
> ++ by the Free Software Foundation; either version 2, or (at your option)
> ++ any later version.
> ++
> ++ This program is distributed in the hope that it will be useful,
> ++ but WITHOUT ANY WARRANTY; without even the implied warranty of
> ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> ++ Library General Public License for more details.
> ++
> ++ You should have received a copy of the GNU Library General Public
> ++ License along with this program; if not, write to the Free Software
> ++ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
> ++ USA. */
> ++
> ++#ifdef HAVE_CONFIG_H
> ++# include <config.h>
> ++#endif
> ++
> ++#include "gettextP.h"
> ++#ifdef _LIBC
> ++# include <libintl.h>
> ++#else
> ++# include "libgnuintl.h"
> ++#endif
> ++
> ++/* @@ end of prolog @@ */
> ++
> ++/* 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 DCNGETTEXT __dcngettext
> ++# define DCIGETTEXT __dcigettext
> ++#else
> ++# define DCNGETTEXT libintl_dcngettext
> ++# define DCIGETTEXT libintl_dcigettext
> ++#endif
> ++
> ++/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
> ++ locale. */
> ++char *
> ++DCNGETTEXT (const char *domainname,
> ++ const char *msgid1, const char *msgid2, unsigned long int n,
> ++ int category)
> ++{
> ++ return DCIGETTEXT (domainname, msgid1, msgid2, 1, n, category);
> ++}
> ++
> ++#ifdef _LIBC
> ++/* Alias for function name in GNU C Library. */
> ++weak_alias (__dcngettext, dcngettext);
> ++#endif
> +--- lrzsz-0.12.20.safe/intl/dgettext.c 1998-04-26 09:20:52.000000000 -0400
> ++++ lrzsz-0.12.20/intl/dgettext.c 2004-09-12 14:40:34.380744288 -0400
> +@@ -1,32 +1,33 @@
> +-/* dgettext.c -- implementation of the dgettext(3) function
> +- Copyright (C) 1995 Software Foundation, Inc.
> ++/* Implementation of the dgettext(3) function.
> ++ Copyright (C) 1995-1997, 2000-2003 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
> +-the Free Software Foundation; either version 2, or (at your option)
> +-any later version.
> ++ This program is free software; you can redistribute it and/or modify it
> ++ under the terms of the GNU Library General Public License as published
> ++ by the Free Software Foundation; either version 2, or (at your option)
> ++ any later version.
> +
> +-This program is distributed in the hope that it will be useful,
> +-but WITHOUT ANY WARRANTY; without even the implied warranty of
> +-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> +-GNU General Public License for more details.
> ++ This program is distributed in the hope that it will be useful,
> ++ but WITHOUT ANY WARRANTY; without even the implied warranty of
> ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> ++ Library General Public License for more details.
> +
> +-You should have received a copy of the GNU 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. */
> ++ You should have received a copy of the GNU Library General Public
> ++ License along with this program; if not, write to the Free Software
> ++ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
> ++ USA. */
> +
> + #ifdef HAVE_CONFIG_H
> + # include <config.h>
> + #endif
> +
> +-#if defined HAVE_LOCALE_H || defined _LIBC
> +-# include <locale.h>
> +-#endif
> ++#include "gettextP.h"
> ++
> ++#include <locale.h>
> +
> + #ifdef _LIBC
> + # include <libintl.h>
> + #else
> +-# include "libgettext.h"
> ++# include "libgnuintl.h"
> + #endif
> +
> + /* @@ end of prolog @@ */
> +@@ -37,18 +38,16 @@
> + prefix. So we have to make a difference here. */
> + #ifdef _LIBC
> + # define DGETTEXT __dgettext
> +-# define DCGETTEXT __dcgettext
> ++# define DCGETTEXT INTUSE(__dcgettext)
> + #else
> +-# define DGETTEXT dgettext__
> +-# define DCGETTEXT dcgettext__
> ++# define DGETTEXT libintl_dgettext
> ++# define DCGETTEXT libintl_dcgettext
> + #endif
> +
> + /* Look up MSGID in the DOMAINNAME message catalog of the current
> + LC_MESSAGES locale. */
> + char *
> +-DGETTEXT (domainname, msgid)
> +- const char *domainname;
> +- const char *msgid;
> ++DGETTEXT (const char *domainname, const char *msgid)
> + {
> + return DCGETTEXT (domainname, msgid, LC_MESSAGES);
> + }
> +--- lrzsz-0.12.20.safe/intl/dngettext.c 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/intl/dngettext.c 2004-09-12 14:40:34.385743528 -0400
> +@@ -0,0 +1,59 @@
> ++/* Implementation of the dngettext(3) function.
> ++ Copyright (C) 1995-1997, 2000-2003 Free Software Foundation, Inc.
> ++
> ++ This program is free software; you can redistribute it and/or modify it
> ++ under the terms of the GNU Library General Public License as published
> ++ by the Free Software Foundation; either version 2, or (at your option)
> ++ any later version.
> ++
> ++ This program is distributed in the hope that it will be useful,
> ++ but WITHOUT ANY WARRANTY; without even the implied warranty of
> ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> ++ Library General Public License for more details.
> ++
> ++ You should have received a copy of the GNU Library General Public
> ++ License along with this program; if not, write to the Free Software
> ++ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
> ++ USA. */
> ++
> ++#ifdef HAVE_CONFIG_H
> ++# include <config.h>
> ++#endif
> ++
> ++#include "gettextP.h"
> ++
> ++#include <locale.h>
> ++
> ++#ifdef _LIBC
> ++# include <libintl.h>
> ++#else
> ++# include "libgnuintl.h"
> ++#endif
> ++
> ++/* @@ end of prolog @@ */
> ++
> ++/* 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 DNGETTEXT __dngettext
> ++# define DCNGETTEXT __dcngettext
> ++#else
> ++# define DNGETTEXT libintl_dngettext
> ++# define DCNGETTEXT libintl_dcngettext
> ++#endif
> ++
> ++/* Look up MSGID in the DOMAINNAME message catalog of the current
> ++ LC_MESSAGES locale and skip message according to the plural form. */
> ++char *
> ++DNGETTEXT (const char *domainname,
> ++ const char *msgid1, const char *msgid2, unsigned long int n)
> ++{
> ++ return DCNGETTEXT (domainname, msgid1, msgid2, n, LC_MESSAGES);
> ++}
> ++
> ++#ifdef _LIBC
> ++/* Alias for function name in GNU C Library. */
> ++weak_alias (__dngettext, dngettext);
> ++#endif
> +--- lrzsz-0.12.20.safe/intl/eval-plural.h 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/intl/eval-plural.h 2004-09-12 14:40:34.390742768 -0400
> +@@ -0,0 +1,108 @@
> ++/* Plural expression evaluation.
> ++ Copyright (C) 2000-2003 Free Software Foundation, Inc.
> ++
> ++ This program is free software; you can redistribute it and/or modify it
> ++ under the terms of the GNU Library General Public License as published
> ++ by the Free Software Foundation; either version 2, or (at your option)
> ++ any later version.
> ++
> ++ This program is distributed in the hope that it will be useful,
> ++ but WITHOUT ANY WARRANTY; without even the implied warranty of
> ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> ++ Library General Public License for more details.
> ++
> ++ You should have received a copy of the GNU Library General Public
> ++ License along with this program; if not, write to the Free Software
> ++ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
> ++ USA. */
> ++
> ++#ifndef STATIC
> ++#define STATIC static
> ++#endif
> ++
> ++/* Evaluate the plural expression and return an index value. */
> ++STATIC
> ++unsigned long int
> ++internal_function
> ++plural_eval (struct expression *pexp, unsigned long int n)
> ++{
> ++ switch (pexp->nargs)
> ++ {
> ++ case 0:
> ++ switch (pexp->operation)
> ++ {
> ++ case var:
> ++ return n;
> ++ case num:
> ++ return pexp->val.num;
> ++ default:
> ++ break;
> ++ }
> ++ /* NOTREACHED */
> ++ break;
> ++ case 1:
> ++ {
> ++ /* pexp->operation must be lnot. */
> ++ unsigned long int arg = plural_eval (pexp->val.args[0], n);
> ++ return ! arg;
> ++ }
> ++ case 2:
> ++ {
> ++ unsigned long int leftarg = plural_eval (pexp->val.args[0], n);
> ++ if (pexp->operation == lor)
> ++ return leftarg || plural_eval (pexp->val.args[1], n);
> ++ else if (pexp->operation == land)
> ++ return leftarg && plural_eval (pexp->val.args[1], n);
> ++ else
> ++ {
> ++ unsigned long int rightarg = plural_eval (pexp->val.args[1], n);
> ++
> ++ switch (pexp->operation)
> ++ {
> ++ case mult:
> ++ return leftarg * rightarg;
> ++ case divide:
> ++#if !INTDIV0_RAISES_SIGFPE
> ++ if (rightarg == 0)
> ++ raise (SIGFPE);
> ++#endif
> ++ return leftarg / rightarg;
> ++ case module:
> ++#if !INTDIV0_RAISES_SIGFPE
> ++ if (rightarg == 0)
> ++ raise (SIGFPE);
> ++#endif
> ++ return leftarg % rightarg;
> ++ case plus:
> ++ return leftarg + rightarg;
> ++ case minus:
> ++ return leftarg - rightarg;
> ++ case less_than:
> ++ return leftarg < rightarg;
> ++ case greater_than:
> ++ return leftarg > rightarg;
> ++ case less_or_equal:
> ++ return leftarg <= rightarg;
> ++ case greater_or_equal:
> ++ return leftarg >= rightarg;
> ++ case equal:
> ++ return leftarg == rightarg;
> ++ case not_equal:
> ++ return leftarg != rightarg;
> ++ default:
> ++ break;
> ++ }
> ++ }
> ++ /* NOTREACHED */
> ++ break;
> ++ }
> ++ case 3:
> ++ {
> ++ /* pexp->operation must be qmop. */
> ++ unsigned long int boolarg = plural_eval (pexp->val.args[0], n);
> ++ return plural_eval (pexp->val.args[boolarg ? 1 : 2], n);
> ++ }
> ++ }
> ++ /* NOTREACHED */
> ++ return 0;
> ++}
> +--- lrzsz-0.12.20.safe/intl/explodename.c 1998-04-26 09:22:37.000000000 -0400
> ++++ lrzsz-0.12.20/intl/explodename.c 2004-09-12 14:40:34.395742008 -0400
> +@@ -1,19 +1,20 @@
> +-/* Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
> ++/* Copyright (C) 1995-1998, 2000-2001, 2003 Free Software Foundation, Inc.
> + Contributed by Ulrich Drepper <drepper at gnu.ai.mit.edu>, 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
> +- the Free Software Foundation; either version 2, or (at your option)
> ++ This program is free software; you can redistribute it and/or modify it
> ++ under the terms of the GNU Library General Public License as published
> ++ by the Free Software Foundation; either version 2, or (at your option)
> + any later version.
> +
> + This program is distributed in the hope that it will be useful,
> + but WITHOUT ANY WARRANTY; without even the implied warranty of
> +- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> +- GNU General Public License for more details.
> ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> ++ Library General Public License for more details.
> +
> +- You should have received a copy of the GNU 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. */
> ++ You should have received a copy of the GNU Library General Public
> ++ License along with this program; if not, write to the Free Software
> ++ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
> ++ USA. */
> +
> + #ifdef HAVE_CONFIG_H
> + # include <config.h>
> +@@ -36,18 +37,23 @@
> +
> + /* @@ end of prolog @@ */
> +
> ++char *
> ++_nl_find_language (const char *name)
> ++{
> ++ while (name[0] != '\0' && name[0] != '_' && name[0] != '@'
> ++ && name[0] != '+' && name[0] != ',')
> ++ ++name;
> ++
> ++ return (char *) name;
> ++}
> ++
> ++
> + int
> +-_nl_explode_name (name, language, modifier, territory, codeset,
> +- normalized_codeset, special, sponsor, revision)
> +- char *name;
> +- const char **language;
> +- const char **modifier;
> +- const char **territory;
> +- const char **codeset;
> +- const char **normalized_codeset;
> +- const char **special;
> +- const char **sponsor;
> +- const char **revision;
> ++_nl_explode_name (char *name,
> ++ const char **language, const char **modifier,
> ++ const char **territory, const char **codeset,
> ++ const char **normalized_codeset, const char **special,
> ++ const char **sponsor, const char **revision)
> + {
> + enum { undecided, xpg, cen } syntax;
> + char *cp;
> +@@ -67,9 +73,7 @@
> + mask = 0;
> + syntax = undecided;
> + *language = cp = name;
> +- while (cp[0] != '\0' && cp[0] != '_' && cp[0] != '@'
> +- && cp[0] != '+' && cp[0] != ',')
> +- ++cp;
> ++ cp = _nl_find_language (*language);
> +
> + if (*language == cp)
> + /* This does not make sense: language has to be specified. Use
> +--- lrzsz-0.12.20.safe/intl/finddomain.c 1998-04-26 09:22:36.000000000 -0400
> ++++ lrzsz-0.12.20/intl/finddomain.c 2004-09-12 14:40:34.415738968 -0400
> +@@ -1,64 +1,40 @@
> + /* Handle list of needed message catalogs
> +- Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
> +- Written by Ulrich Drepper <drepper at gnu.ai.mit.edu>, 1995.
> ++ Copyright (C) 1995-1999, 2000-2001, 2003 Free Software Foundation, Inc.
> ++ Written by Ulrich Drepper <drepper at 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
> +- the Free Software Foundation; either version 2, or (at your option)
> ++ This program is free software; you can redistribute it and/or modify it
> ++ under the terms of the GNU Library General Public License as published
> ++ by the Free Software Foundation; either version 2, or (at your option)
> + any later version.
> +
> + This program is distributed in the hope that it will be useful,
> + but WITHOUT ANY WARRANTY; without even the implied warranty of
> +- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> +- GNU General Public License for more details.
> ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> ++ Library General Public License for more details.
> +
> +- You should have received a copy of the GNU 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. */
> ++ You should have received a copy of the GNU Library General Public
> ++ License along with this program; if not, write to the Free Software
> ++ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
> ++ USA. */
> +
> + #ifdef HAVE_CONFIG_H
> + # include <config.h>
> + #endif
> +
> +-#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 @@ */
> +@@ -70,10 +46,9 @@
> + the DOMAINNAME and CATEGORY parameters with respect to the currently
> + established bindings. */
> + struct loaded_l10nfile *
> +-_nl_find_domain (dirname, locale, domainname)
> +- const char *dirname;
> +- char *locale;
> +- const char *domainname;
> ++internal_function
> ++_nl_find_domain (const char *dirname, char *locale,
> ++ const char *domainname, struct binding *domainbinding)
> + {
> + struct loaded_l10nfile *retval;
> + const char *language;
> +@@ -95,9 +70,9 @@
> +
> + language[_territory][+audience][+special][,[sponsor][_revision]]
> +
> +- Beside the first all of them are allowed to be missing. If the
> +- full specified locale is not found, the less specific one are
> +- looked for. The various part will be stripped of according to
> ++ Beside the first part all of them are allowed to be missing. If
> ++ the full specified locale is not found, the less specific one are
> ++ looked for. The various parts will be stripped off according to
> + the following order:
> + (1) revision
> + (2) sponsor
> +@@ -119,7 +94,7 @@
> + int cnt;
> +
> + if (retval->decided == 0)
> +- _nl_load_domain (retval);
> ++ _nl_load_domain (retval, domainbinding);
> +
> + if (retval->data != NULL)
> + return retval;
> +@@ -127,7 +102,7 @@
> + 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;
> +@@ -142,12 +117,18 @@
> + alias_value = _nl_expand_alias (locale);
> + if (alias_value != NULL)
> + {
> ++#if defined _LIBC || defined HAVE_STRDUP
> ++ locale = strdup (alias_value);
> ++ if (locale == NULL)
> ++ return NULL;
> ++#else
> + size_t len = strlen (alias_value) + 1;
> + locale = (char *) malloc (len);
> + if (locale == NULL)
> + return NULL;
> +
> + memcpy (locale, alias_value, len);
> ++#endif
> + }
> +
> + /* Now we determine the single parts of the locale name. First
> +@@ -168,14 +149,14 @@
> + 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;
> + }
> +@@ -185,5 +166,27 @@
> + 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;
> + }
> ++
> ++
> ++#ifdef _LIBC
> ++libc_freeres_fn (free_mem)
> ++{
> ++ struct loaded_l10nfile *runp = _nl_loaded_domains;
> ++
> ++ while (runp != NULL)
> ++ {
> ++ struct loaded_l10nfile *here = runp;
> ++ if (runp->data != NULL)
> ++ _nl_unload_domain ((struct loaded_domain *) runp->data);
> ++ runp = runp->next;
> ++ free ((char *) here->filename);
> ++ free (here);
> ++ }
> ++}
> ++#endif
> +--- lrzsz-0.12.20.safe/intl/gettext.c 1998-04-26 09:22:36.000000000 -0400
> ++++ lrzsz-0.12.20/intl/gettext.c 2004-09-12 14:40:34.420738208 -0400
> +@@ -1,19 +1,20 @@
> +-/* Implementation of gettext(3) function
> +- Copyright (C) 1995, 1997 Free Software Foundation, Inc.
> ++/* Implementation of gettext(3) function.
> ++ Copyright (C) 1995, 1997, 2000-2003 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
> +- the Free Software Foundation; either version 2, or (at your option)
> ++ This program is free software; you can redistribute it and/or modify it
> ++ under the terms of the GNU Library General Public License as published
> ++ by the Free Software Foundation; either version 2, or (at your option)
> + any later version.
> +
> + This program is distributed in the hope that it will be useful,
> + but WITHOUT ANY WARRANTY; without even the implied warranty of
> +- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> +- GNU General Public License for more details.
> ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> ++ Library General Public License for more details.
> +
> +- You should have received a copy of the GNU 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. */
> ++ You should have received a copy of the GNU Library General Public
> ++ License along with this program; if not, write to the Free Software
> ++ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
> ++ USA. */
> +
> + #ifdef HAVE_CONFIG_H
> + # include <config.h>
> +@@ -23,21 +24,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,20 +42,19 @@
> + prefix. So we have to make a difference here. */
> + #ifdef _LIBC
> + # define GETTEXT __gettext
> +-# define DGETTEXT __dgettext
> ++# define DCGETTEXT INTUSE(__dcgettext)
> + #else
> +-# define GETTEXT gettext__
> +-# define DGETTEXT dgettext__
> ++# define GETTEXT libintl_gettext
> ++# define DCGETTEXT libintl_dcgettext
> + #endif
> +
> + /* Look up MSGID in the current default message catalog for the current
> + LC_MESSAGES locale. If not found, returns MSGID itself (the default
> + text). */
> + char *
> +-GETTEXT (msgid)
> +- const char *msgid;
> ++GETTEXT (const char *msgid)
> + {
> +- return DGETTEXT (NULL, msgid);
> ++ return DCGETTEXT (NULL, msgid, LC_MESSAGES);
> + }
> +
> + #ifdef _LIBC
> +--- lrzsz-0.12.20.safe/intl/gettext.h 1998-04-26 09:22:35.000000000 -0400
> ++++ lrzsz-0.12.20/intl/gettext.h 1969-12-31 19:00:00.000000000 -0500
> +@@ -1,105 +0,0 @@
> +-/* Internal header for GNU gettext internationalization functions
> +- Copyright (C) 1995, 1997 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
> +- the Free Software Foundation; either version 2, or (at your option)
> +- any later version.
> +-
> +- This program is distributed in the hope that it will be useful,
> +- but WITHOUT ANY WARRANTY; without even the implied warranty of
> +- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> +- GNU 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. */
> +-
> +-#ifndef _GETTEXT_H
> +-#define _GETTEXT_H 1
> +-
> +-#include <stdio.h>
> +-
> +-#if HAVE_LIMITS_H || _LIBC
> +-# include <limits.h>
> +-#endif
> +-
> +-/* @@ end of prolog @@ */
> +-
> +-/* The magic number of the GNU message catalog format. */
> +-#define _MAGIC 0x950412de
> +-#define _MAGIC_SWAPPED 0xde120495
> +-
> +-/* Revision number of the currently used .mo (binary) file format. */
> +-#define MO_REVISION_NUMBER 0
> +-
> +-/* 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. */
> +-
> +-#if __STDC__
> +-# define UINT_MAX_32_BITS 4294967295U
> +-#else
> +-# define UINT_MAX_32_BITS 0xFFFFFFFF
> +-#endif
> +-
> +-/* If UINT_MAX isn't defined, assume it's a 32-bit type.
> +- This should be valid for all systems GNU cares about because
> +- that doesn't include 16-bit systems, and only modern systems
> +- (that certainly have <limits.h>) have 64+-bit integral types. */
> +-
> +-#ifndef UINT_MAX
> +-# define UINT_MAX UINT_MAX_32_BITS
> +-#endif
> +-
> +-#if UINT_MAX == UINT_MAX_32_BITS
> +-typedef unsigned nls_uint32;
> +-#else
> +-# if USHRT_MAX == UINT_MAX_32_BITS
> +-typedef unsigned short nls_uint32;
> +-# else
> +-# if ULONG_MAX == UINT_MAX_32_BITS
> +-typedef unsigned long nls_uint32;
> +-# else
> +- /* The following line is intended to throw an error. Using #error is
> +- not portable enough. */
> +- "Cannot determine unsigned 32-bit data type."
> +-# endif
> +-# endif
> +-#endif
> +-
> +-
> +-/* Header for binary .mo file format. */
> +-struct mo_file_header
> +-{
> +- /* The magic number. */
> +- nls_uint32 magic;
> +- /* The revision number of the file format. */
> +- nls_uint32 revision;
> +- /* The number of strings pairs. */
> +- nls_uint32 nstrings;
> +- /* Offset of table with start offsets of original strings. */
> +- nls_uint32 orig_tab_offset;
> +- /* Offset of table with start offsets of translation strings. */
> +- nls_uint32 trans_tab_offset;
> +- /* Size of hashing table. */
> +- nls_uint32 hash_tab_size;
> +- /* Offset of first hashing entry. */
> +- nls_uint32 hash_tab_offset;
> +-};
> +-
> +-struct string_desc
> +-{
> +- /* Length of addressed string. */
> +- nls_uint32 length;
> +- /* Offset of string in file. */
> +- nls_uint32 offset;
> +-};
> +-
> +-/* @@ begin of epilog @@ */
> +-
> +-#endif /* gettext.h */
> +--- lrzsz-0.12.20.safe/intl/gettextP.h 1998-04-26 09:22:35.000000000 -0400
> ++++ lrzsz-0.12.20/intl/gettextP.h 2004-09-12 14:40:34.426737296 -0400
> +@@ -1,33 +1,53 @@
> +-/* Header describing internals of gettext library
> +- Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
> ++/* Header describing internals of libintl library.
> ++ Copyright (C) 1995-1999, 2000-2003 Free Software Foundation, Inc.
> ++ Written by Ulrich Drepper <drepper at 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
> +- the Free Software Foundation; either version 2, or (at your option)
> ++ This program is free software; you can redistribute it and/or modify it
> ++ under the terms of the GNU Library General Public License as published
> ++ by the Free Software Foundation; either version 2, or (at your option)
> + any later version.
> +
> + This program is distributed in the hope that it will be useful,
> + but WITHOUT ANY WARRANTY; without even the implied warranty of
> +- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> +- GNU General Public License for more details.
> ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> ++ Library General Public License for more details.
> +
> +- You should have received a copy of the GNU 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. */
> ++ You should have received a copy of the GNU Library General Public
> ++ License along with this program; if not, write to the Free Software
> ++ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
> ++ USA. */
> +
> + #ifndef _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 "gmo.h" /* Get nls_uint32. */
> ++
> + /* @@ end of prolog @@ */
> +
> +-#ifndef PARAMS
> +-# if __STDC__
> +-# define PARAMS(args) args
> +-# else
> +-# define PARAMS(args) ()
> +-# endif
> ++#ifndef internal_function
> ++# define internal_function
> ++#endif
> ++
> ++#ifndef attribute_hidden
> ++# define attribute_hidden
> ++#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
> +@@ -35,38 +55,160 @@
> + #endif
> +
> +
> +-static nls_uint32 SWAP PARAMS ((nls_uint32 i));
> +-
> ++#ifdef _LIBC
> ++# include <byteswap.h>
> ++# define SWAP(i) bswap_32 (i)
> ++#else
> + static inline nls_uint32
> + SWAP (i)
> + nls_uint32 i;
> + {
> + return (i << 24) | ((i & 0xff00) << 8) | ((i >> 8) & 0xff00) | (i >> 24);
> + }
> ++#endif
> ++
> +
> ++/* In-memory representation of system dependent string. */
> ++struct sysdep_string_desc
> ++{
> ++ /* Length of addressed string, including the trailing NUL. */
> ++ size_t length;
> ++ /* Pointer to addressed string. */
> ++ const char *pointer;
> ++};
> +
> ++/* The representation of an opened message catalog. */
> + struct loaded_domain
> + {
> ++ /* Pointer to memory containing the .mo file. */
> + const char *data;
> ++ /* 1 if the memory is mmap()ed, 0 if the memory is malloc()ed. */
> ++ int use_mmap;
> ++ /* Size of mmap()ed memory. */
> ++ size_t mmap_size;
> ++ /* 1 if the .mo file uses a different endianness than this machine. */
> + int must_swap;
> ++ /* Pointer to additional malloc()ed memory. */
> ++ void *malloced;
> ++
> ++ /* Number of static strings pairs. */
> + nls_uint32 nstrings;
> +- struct string_desc *orig_tab;
> +- struct string_desc *trans_tab;
> ++ /* Pointer to descriptors of original strings in the file. */
> ++ const struct string_desc *orig_tab;
> ++ /* Pointer to descriptors of translated strings in the file. */
> ++ const struct string_desc *trans_tab;
> ++
> ++ /* Number of system dependent strings pairs. */
> ++ nls_uint32 n_sysdep_strings;
> ++ /* Pointer to descriptors of original sysdep strings. */
> ++ const struct sysdep_string_desc *orig_sysdep_tab;
> ++ /* Pointer to descriptors of translated sysdep strings. */
> ++ const struct sysdep_string_desc *trans_sysdep_tab;
> ++
> ++ /* Size of hash table. */
> + nls_uint32 hash_size;
> +- nls_uint32 *hash_tab;
> ++ /* Pointer to hash table. */
> ++ const nls_uint32 *hash_tab;
> ++ /* 1 if the hash table uses a different endianness than this machine. */
> ++ int must_swap_hash_tab;
> ++
> ++ int codeset_cntr;
> ++#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];
> + };
> +
> +-struct loaded_l10nfile *_nl_find_domain PARAMS ((const char *__dirname,
> +- char *__locale,
> +- const char *__domainname));
> +-void _nl_load_domain PARAMS ((struct loaded_l10nfile *__domain));
> ++/* 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;
> ++
> ++#ifndef _LIBC
> ++const char *_nl_locale_name (int category, const char *categoryname);
> ++#endif
> ++
> ++struct loaded_l10nfile *_nl_find_domain (const char *__dirname, char *__locale,
> ++ const char *__domainname,
> ++ struct binding *__domainbinding)
> ++ internal_function;
> ++void _nl_load_domain (struct loaded_l10nfile *__domain,
> ++ struct binding *__domainbinding)
> ++ internal_function;
> ++void _nl_unload_domain (struct loaded_domain *__domain)
> ++ internal_function;
> ++const char *_nl_init_domain_conv (struct loaded_l10nfile *__domain_file,
> ++ struct loaded_domain *__domain,
> ++ struct binding *__domainbinding)
> ++ internal_function;
> ++void _nl_free_domain_conv (struct loaded_domain *__domain)
> ++ internal_function;
> ++
> ++char *_nl_find_msg (struct loaded_l10nfile *domain_file,
> ++ struct binding *domainbinding, const char *msgid,
> ++ size_t *lengthp)
> ++ internal_function;
> ++
> ++#ifdef _LIBC
> ++extern char *__gettext (const char *__msgid);
> ++extern char *__dgettext (const char *__domainname, const char *__msgid);
> ++extern char *__dcgettext (const char *__domainname, const char *__msgid,
> ++ int __category);
> ++extern char *__ngettext (const char *__msgid1, const char *__msgid2,
> ++ unsigned long int __n);
> ++extern char *__dngettext (const char *__domainname,
> ++ const char *__msgid1, const char *__msgid2,
> ++ unsigned long int n);
> ++extern char *__dcngettext (const char *__domainname,
> ++ const char *__msgid1, const char *__msgid2,
> ++ unsigned long int __n, int __category);
> ++extern char *__dcigettext (const char *__domainname,
> ++ const char *__msgid1, const char *__msgid2,
> ++ int __plural, unsigned long int __n,
> ++ int __category);
> ++extern char *__textdomain (const char *__domainname);
> ++extern char *__bindtextdomain (const char *__domainname,
> ++ const char *__dirname);
> ++extern char *__bind_textdomain_codeset (const char *__domainname,
> ++ const char *__codeset);
> ++#else
> ++/* Declare the exported libintl_* functions, in a way that allows us to
> ++ call them under their real name. */
> ++# undef _INTL_REDIRECT_INLINE
> ++# undef _INTL_REDIRECT_MACROS
> ++# define _INTL_REDIRECT_MACROS
> ++# include "libgnuintl.h"
> ++extern char *libintl_dcigettext (const char *__domainname,
> ++ const char *__msgid1, const char *__msgid2,
> ++ int __plural, unsigned long int __n,
> ++ int __category);
> ++#endif
> +
> + /* @@ begin of epilog @@ */
> +
> +--- lrzsz-0.12.20.safe/intl/gmo.h 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/intl/gmo.h 2004-09-12 14:40:34.431736536 -0400
> +@@ -0,0 +1,149 @@
> ++/* Description of GNU message catalog format: general file layout.
> ++ Copyright (C) 1995, 1997, 2000-2002, 2004 Free Software Foundation, Inc.
> ++
> ++ This program is free software; you can redistribute it and/or modify it
> ++ under the terms of the GNU Library General Public License as published
> ++ by the Free Software Foundation; either version 2, or (at your option)
> ++ any later version.
> ++
> ++ This program is distributed in the hope that it will be useful,
> ++ but WITHOUT ANY WARRANTY; without even the implied warranty of
> ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> ++ Library General Public License for more details.
> ++
> ++ You should have received a copy of the GNU Library General Public
> ++ License along with this program; if not, write to the Free Software
> ++ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
> ++ USA. */
> ++
> ++#ifndef _GETTEXT_H
> ++#define _GETTEXT_H 1
> ++
> ++#include <limits.h>
> ++
> ++/* @@ end of prolog @@ */
> ++
> ++/* The magic number of the GNU message catalog format. */
> ++#define _MAGIC 0x950412de
> ++#define _MAGIC_SWAPPED 0xde120495
> ++
> ++/* Revision number of the currently used .mo (binary) file format. */
> ++#define MO_REVISION_NUMBER 0
> ++#define MO_REVISION_NUMBER_WITH_SYSDEP_I 1
> ++
> ++/* 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
> ++ 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
> ++#else
> ++# define UINT_MAX_32_BITS 0xFFFFFFFF
> ++#endif
> ++
> ++/* If UINT_MAX isn't defined, assume it's a 32-bit type.
> ++ This should be valid for all systems GNU cares about because
> ++ that doesn't include 16-bit systems, and only modern systems
> ++ (that certainly have <limits.h>) have 64+-bit integral types. */
> ++
> ++#ifndef UINT_MAX
> ++# define UINT_MAX UINT_MAX_32_BITS
> ++#endif
> ++
> ++#if UINT_MAX == UINT_MAX_32_BITS
> ++typedef unsigned nls_uint32;
> ++#else
> ++# if USHRT_MAX == UINT_MAX_32_BITS
> ++typedef unsigned short nls_uint32;
> ++# else
> ++# if ULONG_MAX == UINT_MAX_32_BITS
> ++typedef unsigned long nls_uint32;
> ++# else
> ++ /* The following line is intended to throw an error. Using #error is
> ++ not portable enough. */
> ++ "Cannot determine unsigned 32-bit data type."
> ++# endif
> ++# endif
> ++#endif
> ++
> ++
> ++/* Header for binary .mo file format. */
> ++struct mo_file_header
> ++{
> ++ /* The magic number. */
> ++ nls_uint32 magic;
> ++ /* The revision number of the file format. */
> ++ nls_uint32 revision;
> ++
> ++ /* The following are only used in .mo files with major revision 0 or 1. */
> ++
> ++ /* The number of strings pairs. */
> ++ nls_uint32 nstrings;
> ++ /* Offset of table with start offsets of original strings. */
> ++ nls_uint32 orig_tab_offset;
> ++ /* Offset of table with start offsets of translated strings. */
> ++ nls_uint32 trans_tab_offset;
> ++ /* Size of hash table. */
> ++ nls_uint32 hash_tab_size;
> ++ /* Offset of first hash table entry. */
> ++ nls_uint32 hash_tab_offset;
> ++
> ++ /* The following are only used in .mo files with minor revision >= 1. */
> ++
> ++ /* The number of system dependent segments. */
> ++ nls_uint32 n_sysdep_segments;
> ++ /* Offset of table describing system dependent segments. */
> ++ nls_uint32 sysdep_segments_offset;
> ++ /* The number of system dependent strings pairs. */
> ++ nls_uint32 n_sysdep_strings;
> ++ /* Offset of table with start offsets of original sysdep strings. */
> ++ nls_uint32 orig_sysdep_tab_offset;
> ++ /* Offset of table with start offsets of translated sysdep strings. */
> ++ nls_uint32 trans_sysdep_tab_offset;
> ++};
> ++
> ++/* Descriptor for static string contained in the binary .mo file. */
> ++struct string_desc
> ++{
> ++ /* Length of addressed string, not including the trailing NUL. */
> ++ nls_uint32 length;
> ++ /* Offset of string in file. */
> ++ nls_uint32 offset;
> ++};
> ++
> ++/* The following are only used in .mo files with minor revision >= 1. */
> ++
> ++/* Descriptor for system dependent string segment. */
> ++struct sysdep_segment
> ++{
> ++ /* Length of addressed string, including the trailing NUL. */
> ++ nls_uint32 length;
> ++ /* Offset of string in file. */
> ++ nls_uint32 offset;
> ++};
> ++
> ++/* Descriptor for system dependent string. */
> ++struct sysdep_string
> ++{
> ++ /* Offset of static string segments in file. */
> ++ nls_uint32 offset;
> ++ /* Alternating sequence of static and system dependent segments.
> ++ The last segment is a static segment, including the trailing NUL. */
> ++ struct segment_pair
> ++ {
> ++ /* Size of static segment. */
> ++ nls_uint32 segsize;
> ++ /* Reference to system dependent string segment, or ~0 at the end. */
> ++ nls_uint32 sysdepref;
> ++ } segments[1];
> ++};
> ++
> ++/* Marker for the end of the segments[] array. This has the value 0xFFFFFFFF,
> ++ regardless whether 'int' is 16 bit, 32 bit, or 64 bit. */
> ++#define SEGMENTS_END ((nls_uint32) ~0)
> ++
> ++/* @@ begin of epilog @@ */
> ++
> ++#endif /* gettext.h */
> +--- lrzsz-0.12.20.safe/intl/hash-string.h 1998-04-26 09:22:36.000000000 -0400
> ++++ lrzsz-0.12.20/intl/hash-string.h 2004-09-12 14:40:34.436735776 -0400
> +@@ -1,35 +1,23 @@
> +-/* 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-2003 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
> +- the Free Software Foundation; either version 2, or (at your option)
> ++ This program is free software; you can redistribute it and/or modify it
> ++ under the terms of the GNU Library General Public License as published
> ++ by the Free Software Foundation; either version 2, or (at your option)
> + any later version.
> +
> + This program is distributed in the hope that it will be useful,
> + but WITHOUT ANY WARRANTY; without even the implied warranty of
> +- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> +- GNU General Public License for more details.
> ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> ++ Library General Public License for more details.
> +
> + You should have received a copy of the GNU Library General Public
> +- License along with 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. */
> +-
> +-#ifdef HAVE_VALUES_H
> +-# include <values.h>
> +-#endif
> ++ 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 @@ */
> +
> +-#ifndef PARAMS
> +-# if __STDC__
> +-# define PARAMS(Args) Args
> +-# else
> +-# define PARAMS(Args) ()
> +-# endif
> +-#endif
> +-
> + /* We assume to have `unsigned long int' value with at least 32 bits. */
> + #define HASHWORDBITS 32
> +
> +@@ -37,11 +25,8 @@
> + /* Defines the so called `hashpjw' function by P.J. Weinberger
> + [see Aho/Sethi/Ullman, COMPILERS: Principles, Techniques and Tools,
> + 1986, 1987 Bell Telephone Laboratories, Inc.] */
> +-static unsigned long hash_string PARAMS ((const char *__str_param));
> +-
> +-static inline unsigned long
> +-hash_string (str_param)
> +- const char *str_param;
> ++static inline unsigned long int
> ++hash_string (const char *str_param)
> + {
> + unsigned long int hval, g;
> + const char *str = str_param;
> +@@ -51,8 +36,8 @@
> + while (*str != '\0')
> + {
> + hval <<= 4;
> +- hval += (unsigned long) *str++;
> +- g = hval & ((unsigned long) 0xf << (HASHWORDBITS - 4));
> ++ hval += (unsigned char) *str++;
> ++ g = hval & ((unsigned long int) 0xf << (HASHWORDBITS - 4));
> + if (g != 0)
> + {
> + hval ^= g >> (HASHWORDBITS - 8);
> +--- lrzsz-0.12.20.safe/intl/intl-compat.c 1998-04-26 09:20:52.000000000 -0400
> ++++ lrzsz-0.12.20/intl/intl-compat.c 2004-09-12 14:40:34.441735016 -0400
> +@@ -1,76 +1,131 @@
> + /* intl-compat.c - Stub functions to call gettext functions from GNU gettext
> + Library.
> +- Copyright (C) 1995 Software Foundation, Inc.
> ++ Copyright (C) 1995, 2000-2003 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
> +-the Free Software Foundation; either version 2, or (at your option)
> +-any later version.
> ++ This program is free software; you can redistribute it and/or modify it
> ++ under the terms of the GNU Library General Public License as published
> ++ by the Free Software Foundation; either version 2, or (at your option)
> ++ any later version.
> +
> +-This program is distributed in the hope that it will be useful,
> +-but WITHOUT ANY WARRANTY; without even the implied warranty of
> +-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> +-GNU General Public License for more details.
> ++ This program is distributed in the hope that it will be useful,
> ++ but WITHOUT ANY WARRANTY; without even the implied warranty of
> ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> ++ Library General Public License for more details.
> +
> +-You should have received a copy of the GNU 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. */
> ++ You should have received a copy of the GNU Library General Public
> ++ License along with this program; if not, write to the Free Software
> ++ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
> ++ USA. */
> +
> + #ifdef HAVE_CONFIG_H
> + # include <config.h>
> + #endif
> +
> +-#include "libgettext.h"
> ++#include "gettextP.h"
> +
> + /* @@ end of prolog @@ */
> +
> ++/* This file redirects the gettext functions (without prefix) to those
> ++ defined in the included GNU libintl library (with "libintl_" prefix).
> ++ It is compiled into libintl in order to make the AM_GNU_GETTEXT test
> ++ of gettext <= 0.11.2 work with the libintl library >= 0.11.3 which
> ++ has the redirections primarily in the <libintl.h> include file.
> ++ It is also compiled into libgnuintl so that libgnuintl.so can be used
> ++ as LD_PRELOADable library on glibc systems, to provide the extra
> ++ features that the functions in the libc don't have (namely, logging). */
> ++
> +
> + #undef gettext
> + #undef dgettext
> + #undef dcgettext
> ++#undef ngettext
> ++#undef dngettext
> ++#undef dcngettext
> + #undef textdomain
> + #undef bindtextdomain
> ++#undef bind_textdomain_codeset
> ++
> ++
> ++/* When building a DLL, we must export some functions. Note that because
> ++ the functions are only defined for binary backward compatibility, we
> ++ don't need to use __declspec(dllimport) in any case. */
> ++#if defined _MSC_VER && BUILDING_DLL
> ++# define DLL_EXPORTED __declspec(dllexport)
> ++#else
> ++# define DLL_EXPORTED
> ++#endif
> +
> +
> ++DLL_EXPORTED
> + char *
> +-bindtextdomain (domainname, dirname)
> +- const char *domainname;
> +- const char *dirname;
> ++gettext (const char *msgid)
> + {
> +- return bindtextdomain__ (domainname, dirname);
> ++ return libintl_gettext (msgid);
> + }
> +
> +
> ++DLL_EXPORTED
> + char *
> +-dcgettext (domainname, msgid, category)
> +- const char *domainname;
> +- const char *msgid;
> +- int category;
> ++dgettext (const char *domainname, const char *msgid)
> + {
> +- return dcgettext__ (domainname, msgid, category);
> ++ return libintl_dgettext (domainname, msgid);
> + }
> +
> +
> ++DLL_EXPORTED
> + char *
> +-dgettext (domainname, msgid)
> +- const char *domainname;
> +- const char *msgid;
> ++dcgettext (const char *domainname, const char *msgid, int category)
> + {
> +- return dgettext__ (domainname, msgid);
> ++ return libintl_dcgettext (domainname, msgid, category);
> + }
> +
> +
> ++DLL_EXPORTED
> + char *
> +-gettext (msgid)
> +- const char *msgid;
> ++ngettext (const char *msgid1, const char *msgid2, unsigned long int n)
> + {
> +- return gettext__ (msgid);
> ++ return libintl_ngettext (msgid1, msgid2, n);
> + }
> +
> +
> ++DLL_EXPORTED
> + char *
> +-textdomain (domainname)
> +- const char *domainname;
> ++dngettext (const char *domainname,
> ++ const char *msgid1, const char *msgid2, unsigned long int n)
> + {
> +- return textdomain__ (domainname);
> ++ return libintl_dngettext (domainname, msgid1, msgid2, n);
> ++}
> ++
> ++
> ++DLL_EXPORTED
> ++char *
> ++dcngettext (const char *domainname,
> ++ const char *msgid1, const char *msgid2, unsigned long int n,
> ++ int category)
> ++{
> ++ return libintl_dcngettext (domainname, msgid1, msgid2, n, category);
> ++}
> ++
> ++
> ++DLL_EXPORTED
> ++char *
> ++textdomain (const char *domainname)
> ++{
> ++ return libintl_textdomain (domainname);
> ++}
> ++
> ++
> ++DLL_EXPORTED
> ++char *
> ++bindtextdomain (const char *domainname, const char *dirname)
> ++{
> ++ return libintl_bindtextdomain (domainname, dirname);
> ++}
> ++
> ++
> ++DLL_EXPORTED
> ++char *
> ++bind_textdomain_codeset (const char *domainname, const char *codeset)
> ++{
> ++ return libintl_bind_textdomain_codeset (domainname, codeset);
> + }
> +--- lrzsz-0.12.20.safe/intl/l10nflist.c 1998-04-26 09:22:37.000000000 -0400
> ++++ lrzsz-0.12.20/intl/l10nflist.c 2004-09-12 14:40:34.457732584 -0400
> +@@ -1,52 +1,40 @@
> +-/* Handle list of needed message catalogs
> +- Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
> +- Written by Ulrich Drepper <drepper at gnu.ai.mit.edu>, 1995.
> ++/* Copyright (C) 1995-1999, 2000-2003 Free Software Foundation, Inc.
> ++ Contributed by Ulrich Drepper <drepper at gnu.ai.mit.edu>, 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
> +- the Free Software Foundation; either version 2, or (at your option)
> ++ This program is free software; you can redistribute it and/or modify it
> ++ under the terms of the GNU Library General Public License as published
> ++ by the Free Software Foundation; either version 2, or (at your option)
> + any later version.
> +
> + This program is distributed in the hope that it will be useful,
> + but WITHOUT ANY WARRANTY; without even the implied warranty of
> +- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> +- GNU General Public License for more details.
> ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> ++ Library General Public License for more details.
> +
> +- You should have received a copy of the GNU 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. */
> ++ You should have received a copy of the GNU Library General Public
> ++ License along with this program; if not, write to the Free Software
> ++ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
> ++ USA. */
> ++
> ++/* Tell glibc's <string.h> to provide a prototype for stpcpy().
> ++ This must come before <config.h> because <config.h> may include
> ++ <features.h>, and once <features.h> has been included, it's too late. */
> ++#ifndef _GNU_SOURCE
> ++# define _GNU_SOURCE 1
> ++#endif
> +
> + #ifdef HAVE_CONFIG_H
> + # include <config.h>
> + #endif
> +
> +-
> +-#if defined HAVE_STRING_H || defined _LIBC
> +-# ifndef _GNU_SOURCE
> +-# define _GNU_SOURCE 1
> +-# endif
> +-# 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 <string.h>
> +
> + #if defined _LIBC || defined HAVE_ARGZ_H
> + # include <argz.h>
> + #endif
> + #include <ctype.h>
> + #include <sys/types.h>
> +-
> +-#if defined STDC_HEADERS || defined _LIBC
> +-# include <stdlib.h>
> +-#endif
> ++#include <stdlib.h>
> +
> + #include "loadinfo.h"
> +
> +@@ -65,23 +53,39 @@
> + /* 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 stpcpy(dest, src) __stpcpy(dest, src)
> ++# ifndef stpcpy
> ++# define stpcpy(dest, src) __stpcpy(dest, src)
> ++# endif
> + #else
> + # ifndef HAVE_STPCPY
> +-static char *stpcpy PARAMS ((char *dest, const char *src));
> ++static char *stpcpy (char *dest, const char *src);
> + # endif
> + #endif
> +
> ++/* Pathname support.
> ++ ISSLASH(C) tests whether C is a directory separator character.
> ++ IS_ABSOLUTE_PATH(P) tests whether P is an absolute path. If it is not,
> ++ it may be concatenated to a directory pathname.
> ++ */
> ++#if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__
> ++ /* Win32, OS/2, DOS */
> ++# define ISSLASH(C) ((C) == '/' || (C) == '\\')
> ++# define HAS_DEVICE(P) \
> ++ ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \
> ++ && (P)[1] == ':')
> ++# define IS_ABSOLUTE_PATH(P) (ISSLASH ((P)[0]) || HAS_DEVICE (P))
> ++#else
> ++ /* Unix */
> ++# define ISSLASH(C) ((C) == '/')
> ++# define IS_ABSOLUTE_PATH(P) ISSLASH ((P)[0])
> ++#endif
> ++
> + /* Define function which are usually not available. */
> +
> + #if !defined _LIBC && !defined HAVE___ARGZ_COUNT
> + /* Returns the number of strings in ARGZ. */
> +-static size_t argz_count__ PARAMS ((const char *argz, size_t len));
> +-
> + static size_t
> +-argz_count__ (argz, len)
> +- const char *argz;
> +- size_t len;
> ++argz_count__ (const char *argz, size_t len)
> + {
> + size_t count = 0;
> + while (len > 0)
> +@@ -95,18 +99,17 @@
> + }
> + # undef __argz_count
> + # define __argz_count(argz, len) argz_count__ (argz, len)
> ++#else
> ++# ifdef _LIBC
> ++# define __argz_count(argz, len) INTUSE(__argz_count) (argz, len)
> ++# endif
> + #endif /* !_LIBC && !HAVE___ARGZ_COUNT */
> +
> + #if !defined _LIBC && !defined HAVE___ARGZ_STRINGIFY
> + /* Make '\0' separated arg vector ARGZ printable by converting all the '\0's
> + except the last into the character SEP. */
> +-static void argz_stringify__ PARAMS ((char *argz, size_t len, int sep));
> +-
> + static void
> +-argz_stringify__ (argz, len, sep)
> +- char *argz;
> +- size_t len;
> +- int sep;
> ++argz_stringify__ (char *argz, size_t len, int sep)
> + {
> + while (len > 0)
> + {
> +@@ -119,17 +122,16 @@
> + }
> + # undef __argz_stringify
> + # define __argz_stringify(argz, len, sep) argz_stringify__ (argz, len, sep)
> ++#else
> ++# ifdef _LIBC
> ++# define __argz_stringify(argz, len, sep) \
> ++ INTUSE(__argz_stringify) (argz, len, sep)
> ++# endif
> + #endif /* !_LIBC && !HAVE___ARGZ_STRINGIFY */
> +
> + #if !defined _LIBC && !defined HAVE___ARGZ_NEXT
> +-static char *argz_next__ PARAMS ((char *argz, size_t argz_len,
> +- const char *entry));
> +-
> + static char *
> +-argz_next__ (argz, argz_len, entry)
> +- char *argz;
> +- size_t argz_len;
> +- const char *entry;
> ++argz_next__ (char *argz, size_t argz_len, const char *entry)
> + {
> + if (entry)
> + {
> +@@ -150,11 +152,8 @@
> +
> +
> + /* Return number of bits set in X. */
> +-static int pop PARAMS ((int x));
> +-
> + static inline int
> +-pop (x)
> +- int x;
> ++pop (int x)
> + {
> + /* We assume that no more than 16 bits are used. */
> + x = ((x & ~0x5555) >> 1) + (x & 0x5555);
> +@@ -167,31 +166,27 @@
> +
> +
> + struct loaded_l10nfile *
> +-_nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, mask, language,
> +- territory, codeset, normalized_codeset, modifier, special,
> +- sponsor, revision, filename, do_allocate)
> +- struct loaded_l10nfile **l10nfile_list;
> +- const char *dirlist;
> +- size_t dirlist_len;
> +- int mask;
> +- const char *language;
> +- const char *territory;
> +- const char *codeset;
> +- const char *normalized_codeset;
> +- const char *modifier;
> +- const char *special;
> +- const char *sponsor;
> +- const char *revision;
> +- const char *filename;
> +- int do_allocate;
> ++_nl_make_l10nflist (struct loaded_l10nfile **l10nfile_list,
> ++ const char *dirlist, size_t dirlist_len,
> ++ int mask, const char *language, const char *territory,
> ++ const char *codeset, const char *normalized_codeset,
> ++ const char *modifier, const char *special,
> ++ const char *sponsor, const char *revision,
> ++ const char *filename, int do_allocate)
> + {
> + char *abs_filename;
> +- struct loaded_l10nfile *last = NULL;
> ++ struct loaded_l10nfile **lastp;
> + struct loaded_l10nfile *retval;
> + char *cp;
> ++ size_t dirlist_count;
> + size_t entries;
> + int cnt;
> +
> ++ /* If LANGUAGE contains an absolute directory specification, we ignore
> ++ DIRLIST. */
> ++ if (IS_ABSOLUTE_PATH (language))
> ++ dirlist_len = 0;
> ++
> + /* Allocate room for the full file name. */
> + abs_filename = (char *) malloc (dirlist_len
> + + strlen (language)
> +@@ -209,7 +204,7 @@
> + + (((mask & CEN_SPONSOR) != 0
> + || (mask & CEN_REVISION) != 0)
> + ? (1 + ((mask & CEN_SPONSOR) != 0
> +- ? strlen (sponsor) + 1 : 0)
> ++ ? strlen (sponsor) : 0)
> + + ((mask & CEN_REVISION) != 0
> + ? strlen (revision) + 1 : 0)) : 0)
> + + 1 + strlen (filename) + 1);
> +@@ -217,14 +212,16 @@
> + if (abs_filename == NULL)
> + return NULL;
> +
> +- retval = NULL;
> +- last = NULL;
> +-
> + /* Construct file name. */
> +- memcpy (abs_filename, dirlist, dirlist_len);
> +- __argz_stringify (abs_filename, dirlist_len, ':');
> +- cp = abs_filename + (dirlist_len - 1);
> +- *cp++ = '/';
> ++ cp = abs_filename;
> ++ if (dirlist_len > 0)
> ++ {
> ++ memcpy (cp, dirlist, dirlist_len);
> ++ __argz_stringify (cp, dirlist_len, PATH_SEPARATOR);
> ++ cp += dirlist_len;
> ++ cp[-1] = '/';
> ++ }
> ++
> + cp = stpcpy (cp, language);
> +
> + if ((mask & TERRITORY) != 0)
> +@@ -271,7 +268,7 @@
> +
> + /* Look in list of already loaded domains whether it is already
> + available. */
> +- last = NULL;
> ++ lastp = l10nfile_list;
> + for (retval = *l10nfile_list; retval != NULL; retval = retval->next)
> + if (retval->filename != NULL)
> + {
> +@@ -286,7 +283,7 @@
> + break;
> + }
> +
> +- last = retval;
> ++ lastp = &retval->next;
> + }
> +
> + if (retval != NULL || do_allocate == 0)
> +@@ -295,48 +292,66 @@
> + return retval;
> + }
> +
> +- retval = (struct loaded_l10nfile *)
> +- malloc (sizeof (*retval) + (__argz_count (dirlist, dirlist_len)
> +- * (1 << pop (mask))
> +- * sizeof (struct loaded_l10nfile *)));
> ++ dirlist_count = (dirlist_len > 0 ? __argz_count (dirlist, dirlist_len) : 1);
> ++
> ++ /* Allocate a new loaded_l10nfile. */
> ++ retval =
> ++ (struct loaded_l10nfile *)
> ++ malloc (sizeof (*retval)
> ++ + (((dirlist_count << pop (mask)) + (dirlist_count > 1 ? 1 : 0))
> ++ * sizeof (struct loaded_l10nfile *)));
> + if (retval == NULL)
> + return NULL;
> +
> + retval->filename = abs_filename;
> +- retval->decided = (__argz_count (dirlist, dirlist_len) != 1
> ++
> ++ /* We set retval->data to NULL here; it is filled in later.
> ++ Setting retval->decided to 1 here means that retval does not
> ++ correspond to a real file (dirlist_count > 1) or is not worth
> ++ looking up (if an unnormalized codeset was specified). */
> ++ retval->decided = (dirlist_count > 1
> + || ((mask & XPG_CODESET) != 0
> + && (mask & XPG_NORM_CODESET) != 0));
> + retval->data = NULL;
> +
> +- if (last == NULL)
> +- {
> +- retval->next = *l10nfile_list;
> +- *l10nfile_list = retval;
> +- }
> +- else
> +- {
> +- retval->next = last->next;
> +- last->next = retval;
> +- }
> ++ retval->next = *lastp;
> ++ *lastp = retval;
> +
> + entries = 0;
> +- /* If the DIRLIST is a real list the RETVAL entry corresponds not to
> +- a real file. So we have to use the DIRLIST separation mechanism
> +- of the inner loop. */
> +- cnt = __argz_count (dirlist, dirlist_len) == 1 ? mask - 1 : mask;
> +- for (; cnt >= 0; --cnt)
> ++ /* Recurse to fill the inheritance list of RETVAL.
> ++ If the DIRLIST is a real list (i.e. DIRLIST_COUNT > 1), the RETVAL
> ++ entry does not correspond to a real file; retval->filename contains
> ++ colons. In this case we loop across all elements of DIRLIST and
> ++ across all bit patterns dominated by MASK.
> ++ If the DIRLIST is a single directory or entirely redundant (i.e.
> ++ DIRLIST_COUNT == 1), we loop across all bit patterns dominated by
> ++ MASK, excluding MASK itself.
> ++ In either case, we loop down from MASK to 0. This has the effect
> ++ that the extra bits in the locale name are dropped in this order:
> ++ first the modifier, then the territory, then the codeset, then the
> ++ normalized_codeset. */
> ++ for (cnt = dirlist_count > 1 ? mask : mask - 1; cnt >= 0; --cnt)
> + if ((cnt & ~mask) == 0
> + && ((cnt & CEN_SPECIFIC) == 0 || (cnt & XPG_SPECIFIC) == 0)
> + && ((cnt & XPG_CODESET) == 0 || (cnt & XPG_NORM_CODESET) == 0))
> + {
> +- /* Iterate over all elements of the DIRLIST. */
> +- char *dir = NULL;
> ++ if (dirlist_count > 1)
> ++ {
> ++ /* Iterate over all elements of the DIRLIST. */
> ++ char *dir = NULL;
> +
> +- while ((dir = __argz_next ((char *) dirlist, dirlist_len, dir))
> +- != NULL)
> ++ while ((dir = __argz_next ((char *) dirlist, dirlist_len, dir))
> ++ != NULL)
> ++ retval->successor[entries++]
> ++ = _nl_make_l10nflist (l10nfile_list, dir, strlen (dir) + 1,
> ++ cnt, language, territory, codeset,
> ++ normalized_codeset, modifier, special,
> ++ sponsor, revision, filename, 1);
> ++ }
> ++ else
> + retval->successor[entries++]
> +- = _nl_make_l10nflist (l10nfile_list, dir, strlen (dir) + 1, cnt,
> +- language, territory, codeset,
> ++ = _nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len,
> ++ cnt, language, territory, codeset,
> + normalized_codeset, modifier, special,
> + sponsor, revision, filename, 1);
> + }
> +@@ -347,11 +362,10 @@
> +
> + /* Normalize codeset name. There is no standard for the codeset
> + names. Normalization allows the user to use any of the common
> +- names. */
> ++ names. The return value is dynamically allocated and has to be
> ++ freed by the caller. */
> + const char *
> +-_nl_normalize_codeset (codeset, name_len)
> +- const char *codeset;
> +- size_t name_len;
> ++_nl_normalize_codeset (const char *codeset, size_t name_len)
> + {
> + int len = 0;
> + int only_digit = 1;
> +@@ -360,11 +374,11 @@
> + size_t cnt;
> +
> + for (cnt = 0; cnt < name_len; ++cnt)
> +- if (isalnum (codeset[cnt]))
> ++ if (isalnum ((unsigned char) codeset[cnt]))
> + {
> + ++len;
> +
> +- if (isalpha (codeset[cnt]))
> ++ if (isalpha ((unsigned char) codeset[cnt]))
> + only_digit = 0;
> + }
> +
> +@@ -378,9 +392,9 @@
> + wp = retval;
> +
> + for (cnt = 0; cnt < name_len; ++cnt)
> +- if (isalpha (codeset[cnt]))
> +- *wp++ = tolower (codeset[cnt]);
> +- else if (isdigit (codeset[cnt]))
> ++ if (isalpha ((unsigned char) codeset[cnt]))
> ++ *wp++ = tolower ((unsigned char) codeset[cnt]);
> ++ else if (isdigit ((unsigned char) codeset[cnt]))
> + *wp++ = codeset[cnt];
> +
> + *wp = '\0';
> +@@ -398,9 +412,7 @@
> + to be defined. */
> + #if !_LIBC && !HAVE_STPCPY
> + static char *
> +-stpcpy (dest, src)
> +- char *dest;
> +- const char *src;
> ++stpcpy (char *dest, const char *src)
> + {
> + while ((*dest++ = *src++) != '\0')
> + /* Do nothing. */ ;
> +--- lrzsz-0.12.20.safe/intl/libgettext.h 1998-04-26 09:22:36.000000000 -0400
> ++++ lrzsz-0.12.20/intl/libgettext.h 1969-12-31 19:00:00.000000000 -0500
> +@@ -1,182 +0,0 @@
> +-/* Message catalogs for internationalization.
> +- Copyright (C) 1995, 1996, 1997 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
> +- the Free Software Foundation; either version 2, or (at your option)
> +- any later version.
> +-
> +- This program is distributed in the hope that it will be useful,
> +- but WITHOUT ANY WARRANTY; without even the implied warranty of
> +- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> +- GNU General Public License for more details.
> +-
> +- 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. */
> +-
> +-/* Because on some systems (e.g. Solaris) we sometimes have to include
> +- the systems libintl.h as well as this file we have more complex
> +- include protection above. But the systems header might perhaps also
> +- define _LIBINTL_H and therefore we have to protect the definition here. */
> +-
> +-#if !defined (_LIBINTL_H) || !defined (_LIBGETTEXT_H)
> +-#if !defined (_LIBINTL_H)
> +-# define _LIBINTL_H 1
> +-#endif
> +-#define _LIBGETTEXT_H 1
> +-
> +-/* We define an additional symbol to signal that we use the GNU
> +- implementation of gettext. */
> +-#define __USE_GNU_GETTEXT 1
> +-
> +-#include <sys/types.h>
> +-
> +-#if HAVE_LOCALE_H
> +-# include <locale.h>
> +-#endif
> +-
> +-
> +-#ifdef __cplusplus
> +-extern "C" {
> +-#endif
> +-
> +-/* @@ end of prolog @@ */
> +-
> +-#ifndef PARAMS
> +-# if __STDC__
> +-# define PARAMS(args) args
> +-# else
> +-# define PARAMS(args) ()
> +-# endif
> +-#endif
> +-
> +-#ifndef NULL
> +-# if !defined __cplusplus || defined __GNUC__
> +-# define NULL ((void *) 0)
> +-# else
> +-# define NULL (0)
> +-# endif
> +-#endif
> +-
> +-#if !HAVE_LC_MESSAGES
> +-/* This value determines the behaviour of the gettext() and dgettext()
> +- function. But some system does not have this defined. Define it
> +- to a default value. */
> +-# define LC_MESSAGES (-1)
> +-#endif
> +-
> +-
> +-/* Declarations for gettext-using-catgets interface. Derived from
> +- Jim Meyering's libintl.h. */
> +-struct _msg_ent
> +-{
> +- const char *_msg;
> +- int _msg_number;
> +-};
> +-
> +-
> +-#if HAVE_CATGETS
> +-/* These two variables are defined in the automatically by po-to-tbl.sed
> +- generated file `cat-id-tbl.c'. */
> +-extern const struct _msg_ent _msg_tbl[];
> +-extern int _msg_tbl_length;
> +-#endif
> +-
> +-
> +-/* For automatical extraction of messages sometimes no real
> +- translation is needed. Instead the string itself is the result. */
> +-#define gettext_noop(Str) (Str)
> +-
> +-/* Look up MSGID in the current default message catalog for the current
> +- LC_MESSAGES locale. If not found, returns MSGID itself (the default
> +- text). */
> +-extern char *gettext PARAMS ((const char *__msgid));
> +-extern char *gettext__ PARAMS ((const char *__msgid));
> +-
> +-/* Look up MSGID in the DOMAINNAME message catalog for the current
> +- LC_MESSAGES locale. */
> +-extern char *dgettext PARAMS ((const char *__domainname, const char *__msgid));
> +-extern char *dgettext__ PARAMS ((const char *__domainname,
> +- const char *__msgid));
> +-
> +-/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
> +- locale. */
> +-extern char *dcgettext PARAMS ((const char *__domainname, const char *__msgid,
> +- int __category));
> +-extern char *dcgettext__ PARAMS ((const char *__domainname,
> +- const char *__msgid, int __category));
> +-
> +-
> +-/* Set the current default message catalog to DOMAINNAME.
> +- If DOMAINNAME is null, return the current default.
> +- If DOMAINNAME is "", reset to the default of "messages". */
> +-extern char *textdomain PARAMS ((const char *__domainname));
> +-extern char *textdomain__ PARAMS ((const char *__domainname));
> +-
> +-/* Specify that the DOMAINNAME message catalog will be found
> +- in DIRNAME rather than in the system locale data base. */
> +-extern char *bindtextdomain PARAMS ((const char *__domainname,
> +- const char *__dirname));
> +-extern char *bindtextdomain__ PARAMS ((const char *__domainname,
> +- const char *__dirname));
> +-
> +-#if ENABLE_NLS
> +-
> +-/* Solaris 2.3 has the gettext function but dcgettext is missing.
> +- So we omit this optimization for Solaris 2.3. BTW, Solaris 2.4
> +- has dcgettext. */
> +-# if !HAVE_CATGETS && (!HAVE_GETTEXT || HAVE_DCGETTEXT)
> +-
> +-# define gettext(Msgid) \
> +- dgettext (NULL, Msgid)
> +-
> +-# define dgettext(Domainname, Msgid) \
> +- dcgettext (Domainname, Msgid, LC_MESSAGES)
> +-
> +-# if defined __GNUC__ && __GNUC__ == 2 && __GNUC_MINOR__ >= 7
> +-/* This global variable is defined in loadmsgcat.c. We need a sign,
> +- whether a new catalog was loaded, which can be associated with all
> +- translations. */
> +-extern int _nl_msg_cat_cntr;
> +-
> +-# define dcgettext(Domainname, Msgid, Category) \
> +- (__extension__ \
> +- ({ \
> +- char *__result; \
> +- if (__builtin_constant_p (Msgid)) \
> +- { \
> +- static char *__translation__; \
> +- static int __catalog_counter__; \
> +- if (! __translation__ || __catalog_counter__ != _nl_msg_cat_cntr) \
> +- { \
> +- __translation__ = \
> +- dcgettext__ (Domainname, Msgid, Category); \
> +- __catalog_counter__ = _nl_msg_cat_cntr; \
> +- } \
> +- __result = __translation__; \
> +- } \
> +- else \
> +- __result = dcgettext__ (Domainname, Msgid, Category); \
> +- __result; \
> +- }))
> +-# endif
> +-# endif
> +-
> +-#else
> +-
> +-# define gettext(Msgid) (Msgid)
> +-# define dgettext(Domainname, Msgid) (Msgid)
> +-# define dcgettext(Domainname, Msgid, Category) (Msgid)
> +-# define textdomain(Domainname) while (0) /* nothing */
> +-# define bindtextdomain(Domainname, Dirname) while (0) /* nothing */
> +-
> +-#endif
> +-
> +-/* @@ begin of epilog @@ */
> +-
> +-#ifdef __cplusplus
> +-}
> +-#endif
> +-
> +-#endif
> +--- lrzsz-0.12.20.safe/intl/libgnuintl.h.in 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/intl/libgnuintl.h.in 2004-09-12 14:40:34.462731824 -0400
> +@@ -0,0 +1,383 @@
> ++/* Message catalogs for internationalization.
> ++ Copyright (C) 1995-1997, 2000-2003 Free Software Foundation, Inc.
> ++
> ++ This program is free software; you can redistribute it and/or modify it
> ++ under the terms of the GNU Library General Public License as published
> ++ by the Free Software Foundation; either version 2, or (at your option)
> ++ any later version.
> ++
> ++ This program is distributed in the hope that it will be useful,
> ++ but WITHOUT ANY WARRANTY; without even the implied warranty of
> ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> ++ Library General Public License for more details.
> ++
> ++ You should have received a copy of the GNU Library General Public
> ++ License along with this program; if not, write to the Free Software
> ++ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
> ++ USA. */
> ++
> ++#ifndef _LIBINTL_H
> ++#define _LIBINTL_H 1
> ++
> ++#include <locale.h>
> ++
> ++/* The LC_MESSAGES locale category is the category used by the functions
> ++ gettext() and dgettext(). It is specified in POSIX, but not in ANSI C.
> ++ On systems that don't define it, use an arbitrary value instead.
> ++ On Solaris, <locale.h> defines __LOCALE_H (or _LOCALE_H in Solaris 2.5)
> ++ then includes <libintl.h> (i.e. this file!) and then only defines
> ++ LC_MESSAGES. To avoid a redefinition warning, don't define LC_MESSAGES
> ++ in this case. */
> ++#if !defined LC_MESSAGES && !(defined __LOCALE_H || (defined _LOCALE_H && defined __sun))
> ++# define LC_MESSAGES 1729
> ++#endif
> ++
> ++/* We define an additional symbol to signal that we use the GNU
> ++ implementation of gettext. */
> ++#define __USE_GNU_GETTEXT 1
> ++
> ++/* Provide information about the supported file formats. Returns the
> ++ maximum minor revision number supported for a given major revision. */
> ++#define __GNU_GETTEXT_SUPPORTED_REVISION(major) \
> ++ ((major) == 0 ? 1 : -1)
> ++
> ++/* Resolve a platform specific conflict on DJGPP. GNU gettext takes
> ++ precedence over _conio_gettext. */
> ++#ifdef __DJGPP__
> ++# undef gettext
> ++#endif
> ++
> ++#ifdef __cplusplus
> ++extern "C" {
> ++#endif
> ++
> ++
> ++/* We redirect the functions to those prefixed with "libintl_". This is
> ++ necessary, because some systems define gettext/textdomain/... in the C
> ++ library (namely, Solaris 2.4 and newer, and GNU libc 2.0 and newer).
> ++ If we used the unprefixed names, there would be cases where the
> ++ definition in the C library would override the one in the libintl.so
> ++ shared library. Recall that on ELF systems, the symbols are looked
> ++ up in the following order:
> ++ 1. in the executable,
> ++ 2. in the shared libraries specified on the link command line, in order,
> ++ 3. in the dependencies of the shared libraries specified on the link
> ++ command line,
> ++ 4. in the dlopen()ed shared libraries, in the order in which they were
> ++ dlopen()ed.
> ++ The definition in the C library would override the one in libintl.so if
> ++ either
> ++ * -lc is given on the link command line and -lintl isn't, or
> ++ * -lc is given on the link command line before -lintl, or
> ++ * libintl.so is a dependency of a dlopen()ed shared library but not
> ++ linked to the executable at link time.
> ++ Since Solaris gettext() behaves differently than GNU gettext(), this
> ++ would be unacceptable.
> ++
> ++ The redirection happens by default through macros in C, so that &gettext
> ++ is independent of the compilation unit, but through inline functions in
> ++ C++, in order not to interfere with the name mangling of class fields or
> ++ class methods called 'gettext'. */
> ++
> ++/* The user can define _INTL_REDIRECT_INLINE or _INTL_REDIRECT_MACROS.
> ++ If he doesn't, we choose the method. A third possible method is
> ++ _INTL_REDIRECT_ASM, supported only by GCC. */
> ++#if !(defined _INTL_REDIRECT_INLINE || defined _INTL_REDIRECT_MACROS)
> ++# if __GNUC__ >= 2 && !defined __APPLE_CC__ && !defined __MINGW32__ && !(__GNUC__ == 2 && defined _AIX) && (defined __STDC__ || defined __cplusplus)
> ++# define _INTL_REDIRECT_ASM
> ++# else
> ++# ifdef __cplusplus
> ++# define _INTL_REDIRECT_INLINE
> ++# else
> ++# define _INTL_REDIRECT_MACROS
> ++# endif
> ++# endif
> ++#endif
> ++/* Auxiliary macros. */
> ++#ifdef _INTL_REDIRECT_ASM
> ++# define _INTL_ASM(cname) __asm__ (_INTL_ASMNAME (__USER_LABEL_PREFIX__, #cname))
> ++# define _INTL_ASMNAME(prefix,cnamestring) _INTL_STRINGIFY (prefix) cnamestring
> ++# define _INTL_STRINGIFY(prefix) #prefix
> ++#else
> ++# define _INTL_ASM(cname)
> ++#endif
> ++
> ++/* Look up MSGID in the current default message catalog for the current
> ++ LC_MESSAGES locale. If not found, returns MSGID itself (the default
> ++ text). */
> ++#ifdef _INTL_REDIRECT_INLINE
> ++extern char *libintl_gettext (const char *__msgid);
> ++static inline char *gettext (const char *__msgid)
> ++{
> ++ return libintl_gettext (__msgid);
> ++}
> ++#else
> ++#ifdef _INTL_REDIRECT_MACROS
> ++# define gettext libintl_gettext
> ++#endif
> ++extern char *gettext (const char *__msgid)
> ++ _INTL_ASM (libintl_gettext);
> ++#endif
> ++
> ++/* Look up MSGID in the DOMAINNAME message catalog for the current
> ++ LC_MESSAGES locale. */
> ++#ifdef _INTL_REDIRECT_INLINE
> ++extern char *libintl_dgettext (const char *__domainname, const char *__msgid);
> ++static inline char *dgettext (const char *__domainname, const char *__msgid)
> ++{
> ++ return libintl_dgettext (__domainname, __msgid);
> ++}
> ++#else
> ++#ifdef _INTL_REDIRECT_MACROS
> ++# define dgettext libintl_dgettext
> ++#endif
> ++extern char *dgettext (const char *__domainname, const char *__msgid)
> ++ _INTL_ASM (libintl_dgettext);
> ++#endif
> ++
> ++/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
> ++ locale. */
> ++#ifdef _INTL_REDIRECT_INLINE
> ++extern char *libintl_dcgettext (const char *__domainname, const char *__msgid,
> ++ int __category);
> ++static inline char *dcgettext (const char *__domainname, const char *__msgid,
> ++ int __category)
> ++{
> ++ return libintl_dcgettext (__domainname, __msgid, __category);
> ++}
> ++#else
> ++#ifdef _INTL_REDIRECT_MACROS
> ++# define dcgettext libintl_dcgettext
> ++#endif
> ++extern char *dcgettext (const char *__domainname, const char *__msgid,
> ++ int __category)
> ++ _INTL_ASM (libintl_dcgettext);
> ++#endif
> ++
> ++
> ++/* Similar to `gettext' but select the plural form corresponding to the
> ++ number N. */
> ++#ifdef _INTL_REDIRECT_INLINE
> ++extern char *libintl_ngettext (const char *__msgid1, const char *__msgid2,
> ++ unsigned long int __n);
> ++static inline char *ngettext (const char *__msgid1, const char *__msgid2,
> ++ unsigned long int __n)
> ++{
> ++ return libintl_ngettext (__msgid1, __msgid2, __n);
> ++}
> ++#else
> ++#ifdef _INTL_REDIRECT_MACROS
> ++# define ngettext libintl_ngettext
> ++#endif
> ++extern char *ngettext (const char *__msgid1, const char *__msgid2,
> ++ unsigned long int __n)
> ++ _INTL_ASM (libintl_ngettext);
> ++#endif
> ++
> ++/* Similar to `dgettext' but select the plural form corresponding to the
> ++ number N. */
> ++#ifdef _INTL_REDIRECT_INLINE
> ++extern char *libintl_dngettext (const char *__domainname, const char *__msgid1,
> ++ const char *__msgid2, unsigned long int __n);
> ++static inline char *dngettext (const char *__domainname, const char *__msgid1,
> ++ const char *__msgid2, unsigned long int __n)
> ++{
> ++ return libintl_dngettext (__domainname, __msgid1, __msgid2, __n);
> ++}
> ++#else
> ++#ifdef _INTL_REDIRECT_MACROS
> ++# define dngettext libintl_dngettext
> ++#endif
> ++extern char *dngettext (const char *__domainname,
> ++ const char *__msgid1, const char *__msgid2,
> ++ unsigned long int __n)
> ++ _INTL_ASM (libintl_dngettext);
> ++#endif
> ++
> ++/* Similar to `dcgettext' but select the plural form corresponding to the
> ++ number N. */
> ++#ifdef _INTL_REDIRECT_INLINE
> ++extern char *libintl_dcngettext (const char *__domainname,
> ++ const char *__msgid1, const char *__msgid2,
> ++ unsigned long int __n, int __category);
> ++static inline char *dcngettext (const char *__domainname,
> ++ const char *__msgid1, const char *__msgid2,
> ++ unsigned long int __n, int __category)
> ++{
> ++ return libintl_dcngettext (__domainname, __msgid1, __msgid2, __n, __category);
> ++}
> ++#else
> ++#ifdef _INTL_REDIRECT_MACROS
> ++# define dcngettext libintl_dcngettext
> ++#endif
> ++extern char *dcngettext (const char *__domainname,
> ++ const char *__msgid1, const char *__msgid2,
> ++ unsigned long int __n, int __category)
> ++ _INTL_ASM (libintl_dcngettext);
> ++#endif
> ++
> ++
> ++/* Set the current default message catalog to DOMAINNAME.
> ++ If DOMAINNAME is null, return the current default.
> ++ If DOMAINNAME is "", reset to the default of "messages". */
> ++#ifdef _INTL_REDIRECT_INLINE
> ++extern char *libintl_textdomain (const char *__domainname);
> ++static inline char *textdomain (const char *__domainname)
> ++{
> ++ return libintl_textdomain (__domainname);
> ++}
> ++#else
> ++#ifdef _INTL_REDIRECT_MACROS
> ++# define textdomain libintl_textdomain
> ++#endif
> ++extern char *textdomain (const char *__domainname)
> ++ _INTL_ASM (libintl_textdomain);
> ++#endif
> ++
> ++/* Specify that the DOMAINNAME message catalog will be found
> ++ in DIRNAME rather than in the system locale data base. */
> ++#ifdef _INTL_REDIRECT_INLINE
> ++extern char *libintl_bindtextdomain (const char *__domainname,
> ++ const char *__dirname);
> ++static inline char *bindtextdomain (const char *__domainname,
> ++ const char *__dirname)
> ++{
> ++ return libintl_bindtextdomain (__domainname, __dirname);
> ++}
> ++#else
> ++#ifdef _INTL_REDIRECT_MACROS
> ++# define bindtextdomain libintl_bindtextdomain
> ++#endif
> ++extern char *bindtextdomain (const char *__domainname, const char *__dirname)
> ++ _INTL_ASM (libintl_bindtextdomain);
> ++#endif
> ++
> ++/* Specify the character encoding in which the messages from the
> ++ DOMAINNAME message catalog will be returned. */
> ++#ifdef _INTL_REDIRECT_INLINE
> ++extern char *libintl_bind_textdomain_codeset (const char *__domainname,
> ++ const char *__codeset);
> ++static inline char *bind_textdomain_codeset (const char *__domainname,
> ++ const char *__codeset)
> ++{
> ++ return libintl_bind_textdomain_codeset (__domainname, __codeset);
> ++}
> ++#else
> ++#ifdef _INTL_REDIRECT_MACROS
> ++# define bind_textdomain_codeset libintl_bind_textdomain_codeset
> ++#endif
> ++extern char *bind_textdomain_codeset (const char *__domainname,
> ++ const char *__codeset)
> ++ _INTL_ASM (libintl_bind_textdomain_codeset);
> ++#endif
> ++
> ++
> ++/* Support for format strings with positions in *printf(), following the
> ++ POSIX/XSI specification.
> ++ Note: These replacements for the *printf() functions are visible only
> ++ in source files that #include <libintl.h> or #include "gettext.h".
> ++ Packages that use *printf() in source files that don't refer to _()
> ++ or gettext() but for which the format string could be the return value
> ++ of _() or gettext() need to add this #include. Oh well. */
> ++
> ++#if !@HAVE_POSIX_PRINTF@
> ++
> ++#include <stdio.h>
> ++#include <stddef.h>
> ++
> ++/* Get va_list. */
> ++#if __STDC__ || defined __cplusplus || defined _MSC_VER
> ++# include <stdarg.h>
> ++#else
> ++# include <varargs.h>
> ++#endif
> ++
> ++#undef fprintf
> ++#define fprintf libintl_fprintf
> ++extern int fprintf (FILE *, const char *, ...);
> ++#undef vfprintf
> ++#define vfprintf libintl_vfprintf
> ++extern int vfprintf (FILE *, const char *, va_list);
> ++
> ++#undef printf
> ++#define printf libintl_printf
> ++extern int printf (const char *, ...);
> ++#undef vprintf
> ++#define vprintf libintl_vprintf
> ++extern int vprintf (const char *, va_list);
> ++
> ++#undef sprintf
> ++#define sprintf libintl_sprintf
> ++extern int sprintf (char *, const char *, ...);
> ++#undef vsprintf
> ++#define vsprintf libintl_vsprintf
> ++extern int vsprintf (char *, const char *, va_list);
> ++
> ++#if @HAVE_SNPRINTF@
> ++
> ++#undef snprintf
> ++#define snprintf libintl_snprintf
> ++extern int snprintf (char *, size_t, const char *, ...);
> ++#undef vsnprintf
> ++#define vsnprintf libintl_vsnprintf
> ++extern int vsnprintf (char *, size_t, const char *, va_list);
> ++
> ++#endif
> ++
> ++#if @HAVE_ASPRINTF@
> ++
> ++#undef asprintf
> ++#define asprintf libintl_asprintf
> ++extern int asprintf (char **, const char *, ...);
> ++#undef vasprintf
> ++#define vasprintf libintl_vasprintf
> ++extern int vasprintf (char **, const char *, va_list);
> ++
> ++#endif
> ++
> ++#if @HAVE_WPRINTF@
> ++
> ++#undef fwprintf
> ++#define fwprintf libintl_fwprintf
> ++extern int fwprintf (FILE *, const wchar_t *, ...);
> ++#undef vfwprintf
> ++#define vfwprintf libintl_vfwprintf
> ++extern int vfwprintf (FILE *, const wchar_t *, va_list);
> ++
> ++#undef wprintf
> ++#define wprintf libintl_wprintf
> ++extern int wprintf (const wchar_t *, ...);
> ++#undef vwprintf
> ++#define vwprintf libintl_vwprintf
> ++extern int vwprintf (const wchar_t *, va_list);
> ++
> ++#undef swprintf
> ++#define swprintf libintl_swprintf
> ++extern int swprintf (wchar_t *, size_t, const wchar_t *, ...);
> ++#undef vswprintf
> ++#define vswprintf libintl_vswprintf
> ++extern int vswprintf (wchar_t *, size_t, const wchar_t *, va_list);
> ++
> ++#endif
> ++
> ++#endif
> ++
> ++
> ++/* Support for relocatable packages. */
> ++
> ++/* Sets the original and the current installation prefix of the package.
> ++ Relocation simply replaces a pathname starting with the original prefix
> ++ by the corresponding pathname with the current prefix instead. Both
> ++ prefixes should be directory names without trailing slash (i.e. use ""
> ++ instead of "/"). */
> ++#define libintl_set_relocation_prefix libintl_set_relocation_prefix
> ++extern void
> ++ libintl_set_relocation_prefix (const char *orig_prefix,
> ++ const char *curr_prefix);
> ++
> ++
> ++#ifdef __cplusplus
> ++}
> ++#endif
> ++
> ++#endif /* libintl.h */
> +--- lrzsz-0.12.20.safe/intl/linux-msg.sed 1998-04-26 09:20:52.000000000 -0400
> ++++ lrzsz-0.12.20/intl/linux-msg.sed 1969-12-31 19:00:00.000000000 -0500
> +@@ -1,100 +0,0 @@
> +-# po2msg.sed - Convert Uniforum style .po file to Linux style .msg file
> +-# Copyright (C) 1995 Free Software Foundation, Inc.
> +-# Ulrich Drepper <drepper at gnu.ai.mit.edu>, 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
> +-# the Free Software Foundation; either version 2, or (at your option)
> +-# any later version.
> +-#
> +-# This program is distributed in the hope that it will be useful,
> +-# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> +-# GNU General Public License for more details.
> +-#
> +-# 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.
> +-#
> +-#
> +-# The first directive in the .msg should be the definition of the
> +-# message set number. We use always set number 1.
> +-#
> +-1 {
> +- i\
> +-$set 1 # Automatically created by po2msg.sed
> +- h
> +- s/.*/0/
> +- x
> +-}
> +-#
> +-# Mitch's old catalog format does not allow comments.
> +-#
> +-# We copy the original message as a comment into the .msg file.
> +-#
> +-/^msgid/ {
> +- s/msgid[ ]*"//
> +-#
> +-# This does not work now with the new format.
> +-# /"$/! {
> +-# s/\\$//
> +-# s/$/ ... (more lines following)"/
> +-# }
> +- x
> +-# The following nice solution is by
> +-# Bruno <Haible at ma2s2.mathematik.uni-karlsruhe.de>
> +- td
> +-# Increment a decimal number in pattern space.
> +-# First hide trailing `9' digits.
> +- :d
> +- s/9\(_*\)$/_\1/
> +- td
> +-# Assure at least one digit is available.
> +- s/^\(_*\)$/0\1/
> +-# Increment the last digit.
> +- s/8\(_*\)$/9\1/
> +- s/7\(_*\)$/8\1/
> +- s/6\(_*\)$/7\1/
> +- s/5\(_*\)$/6\1/
> +- s/4\(_*\)$/5\1/
> +- s/3\(_*\)$/4\1/
> +- s/2\(_*\)$/3\1/
> +- s/1\(_*\)$/2\1/
> +- s/0\(_*\)$/1\1/
> +-# Convert the hidden `9' digits to `0's.
> +- s/_/0/g
> +- x
> +- G
> +- s/\(.*\)"\n\([0-9]*\)/$ #\2 Original Message:(\1)/p
> +-}
> +-#
> +-# The .msg file contains, other then the .po file, only the translations
> +-# but each given a unique ID. Starting from 1 and incrementing by 1 for
> +-# each message we assign them to the messages.
> +-# It is important that the .po file used to generate the cat-id-tbl.c file
> +-# (with po-to-tbl) is the same as the one used here. (At least the order
> +-# of declarations must not be changed.)
> +-#
> +-/^msgstr/ {
> +- s/msgstr[ ]*"\(.*\)"/# \1/
> +-# Clear substitution flag.
> +- tb
> +-# Append the next line.
> +- :b
> +- N
> +-# Look whether second part is continuation line.
> +- s/\(.*\n\)"\(.*\)"/\1\2/
> +-# Yes, then branch.
> +- ta
> +- P
> +- D
> +-# Note that D includes a jump to the start!!
> +-# We found a continuation line. But before printing insert '\'.
> +- :a
> +- s/\(.*\)\(\n.*\)/\1\\\2/
> +- P
> +-# We cannot use D here.
> +- s/.*\n\(.*\)/\1/
> +- tb
> +-}
> +-d
> +--- lrzsz-0.12.20.safe/intl/loadinfo.h 1998-04-26 09:20:52.000000000 -0400
> ++++ lrzsz-0.12.20/intl/loadinfo.h 2004-09-12 14:40:34.468730912 -0400
> +@@ -1,9 +1,54 @@
> +-#ifndef PARAMS
> +-# if __STDC__
> +-# define PARAMS(args) args
> +-# else
> +-# define PARAMS(args) ()
> +-# endif
> ++/* Copyright (C) 1996-1999, 2000-2003 Free Software Foundation, Inc.
> ++ This file is part of the GNU C Library.
> ++ Contributed by Ulrich Drepper <drepper at cygnus.com>, 1996.
> ++
> ++ This program is free software; you can redistribute it and/or modify it
> ++ under the terms of the GNU Library General Public License as published
> ++ by the Free Software Foundation; either version 2, or (at your option)
> ++ any later version.
> ++
> ++ This program is distributed in the hope that it will be useful,
> ++ but WITHOUT ANY WARRANTY; without even the implied warranty of
> ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> ++ Library General Public License for more details.
> ++
> ++ You should have received a copy of the GNU Library General Public
> ++ License along with this program; if not, write to the Free Software
> ++ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
> ++ USA. */
> ++
> ++#ifndef _LOADINFO_H
> ++#define _LOADINFO_H 1
> ++
> ++/* Declarations of locale dependent catalog lookup functions.
> ++ Implemented in
> ++
> ++ localealias.c Possibly replace a locale name by another.
> ++ explodename.c Split a locale name into its various fields.
> ++ l10nflist.c Generate a list of filenames of possible message catalogs.
> ++ finddomain.c Find and open the relevant message catalogs.
> ++
> ++ The main function _nl_find_domain() in finddomain.c is declared
> ++ in gettextP.h.
> ++ */
> ++
> ++#ifndef internal_function
> ++# 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
> ++
> ++/* Separator in PATH like lists of pathnames. */
> ++#if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__
> ++ /* Win32, OS/2, DOS */
> ++# define PATH_SEPARATOR ';'
> ++#else
> ++ /* Unix */
> ++# define PATH_SEPARATOR ':'
> + #endif
> +
> + /* Encoding of locale name parts. */
> +@@ -32,27 +77,69 @@
> + };
> +
> +
> +-extern const char *_nl_normalize_codeset PARAMS ((const char *codeset,
> +- size_t name_len));
> ++/* Normalize codeset name. There is no standard for the codeset
> ++ names. Normalization allows the user to use any of the common
> ++ names. The return value is dynamically allocated and has to be
> ++ freed by the caller. */
> ++extern const char *_nl_normalize_codeset (const char *codeset,
> ++ size_t name_len);
> +
> ++/* Lookup a locale dependent file.
> ++ *L10NFILE_LIST denotes a pool of lookup results of locale dependent
> ++ files of the same kind, sorted in decreasing order of ->filename.
> ++ DIRLIST and DIRLIST_LEN are an argz list of directories in which to
> ++ look, containing at least one directory (i.e. DIRLIST_LEN > 0).
> ++ MASK, LANGUAGE, TERRITORY, CODESET, NORMALIZED_CODESET, MODIFIER,
> ++ SPECIAL, SPONSOR, REVISION are the pieces of the locale name, as
> ++ produced by _nl_explode_name(). FILENAME is the filename suffix.
> ++ The return value is the lookup result, either found in *L10NFILE_LIST,
> ++ or - if DO_ALLOCATE is nonzero - freshly allocated, or possibly NULL.
> ++ If the return value is non-NULL, it is added to *L10NFILE_LIST, and
> ++ its ->next field denotes the chaining inside *L10NFILE_LIST, and
> ++ furthermore its ->successor[] field contains a list of other lookup
> ++ results from which this lookup result inherits. */
> + extern struct loaded_l10nfile *
> +-_nl_make_l10nflist PARAMS ((struct loaded_l10nfile **l10nfile_list,
> +- const char *dirlist, size_t dirlist_len, int mask,
> +- const char *language, const char *territory,
> +- const char *codeset,
> +- const char *normalized_codeset,
> +- const char *modifier, const char *special,
> +- const char *sponsor, const char *revision,
> +- const char *filename, int do_allocate));
> ++_nl_make_l10nflist (struct loaded_l10nfile **l10nfile_list,
> ++ const char *dirlist, size_t dirlist_len, int mask,
> ++ const char *language, const char *territory,
> ++ const char *codeset, const char *normalized_codeset,
> ++ const char *modifier, const char *special,
> ++ const char *sponsor, const char *revision,
> ++ const char *filename, int do_allocate);
> +
> ++/* Lookup the real locale name for a locale alias NAME, or NULL if
> ++ NAME is not a locale alias (but possibly a real locale name).
> ++ The return value is statically allocated and must not be freed. */
> ++extern const char *_nl_expand_alias (const char *name);
> +
> +-extern const char *_nl_expand_alias PARAMS ((const char *name));
> ++/* Split a locale name NAME into its pieces: language, modifier,
> ++ territory, codeset, special, sponsor, revision.
> ++ NAME gets destructively modified: NUL bytes are inserted here and
> ++ there. *LANGUAGE gets assigned NAME. Each of *MODIFIER, *TERRITORY,
> ++ *CODESET, *SPECIAL, *SPONSOR, *REVISION gets assigned either a
> ++ pointer into the old NAME string, or NULL. *NORMALIZED_CODESET
> ++ gets assigned the expanded *CODESET, if it is different from *CODESET;
> ++ this one is dynamically allocated and has to be freed by the caller.
> ++ The return value is a bitmask, where each bit corresponds to one
> ++ filled-in value:
> ++ XPG_MODIFIER, CEN_AUDIENCE for *MODIFIER,
> ++ TERRITORY for *TERRITORY,
> ++ XPG_CODESET for *CODESET,
> ++ XPG_NORM_CODESET for *NORMALIZED_CODESET,
> ++ CEN_SPECIAL for *SPECIAL,
> ++ CEN_SPONSOR for *SPONSOR,
> ++ CEN_REVISION for *REVISION.
> ++ */
> ++extern int _nl_explode_name (char *name, const char **language,
> ++ const char **modifier, const char **territory,
> ++ const char **codeset,
> ++ const char **normalized_codeset,
> ++ const char **special, const char **sponsor,
> ++ const char **revision);
> +
> +-extern int _nl_explode_name PARAMS ((char *name, const char **language,
> +- const char **modifier,
> +- const char **territory,
> +- const char **codeset,
> +- const char **normalized_codeset,
> +- const char **special,
> +- const char **sponsor,
> +- const char **revision));
> ++/* Split a locale name NAME into a leading language part and all the
> ++ rest. Return a pointer to the first character after the language,
> ++ i.e. to the first byte of the rest. */
> ++extern char *_nl_find_language (const char *name);
> ++
> ++#endif /* loadinfo.h */
> +--- lrzsz-0.12.20.safe/intl/loadmsgcat.c 1998-04-26 09:22:37.000000000 -0400
> ++++ lrzsz-0.12.20/intl/loadmsgcat.c 2004-09-12 14:40:34.473730152 -0400
> +@@ -1,42 +1,455 @@
> +-/* Load needed message catalogs
> +- Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
> ++/* Load needed message catalogs.
> ++ Copyright (C) 1995-1999, 2000-2004 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
> +- the Free Software Foundation; either version 2, or (at your option)
> ++ This program is free software; you can redistribute it and/or modify it
> ++ under the terms of the GNU Library General Public License as published
> ++ by the Free Software Foundation; either version 2, or (at your option)
> + any later version.
> +
> + This program is distributed in the hope that it will be useful,
> + but WITHOUT ANY WARRANTY; without even the implied warranty of
> +- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> +- GNU General Public License for more details.
> ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> ++ Library General Public License for more details.
> +
> +- You should have received a copy of the GNU 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. */
> ++ You should have received a copy of the GNU Library General Public
> ++ License along with this program; if not, write to the Free Software
> ++ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
> ++ USA. */
> ++
> ++/* Tell glibc's <string.h> to provide a prototype for mempcpy().
> ++ This must come before <config.h> because <config.h> may include
> ++ <features.h>, and once <features.h> has been included, it's too late. */
> ++#ifndef _GNU_SOURCE
> ++# define _GNU_SOURCE 1
> ++#endif
> +
> + #ifdef HAVE_CONFIG_H
> + # include <config.h>
> + #endif
> +
> ++#include <ctype.h>
> ++#include <errno.h>
> + #include <fcntl.h>
> + #include <sys/types.h>
> + #include <sys/stat.h>
> +
> +-#if defined STDC_HEADERS || defined _LIBC
> +-# include <stdlib.h>
> ++#ifdef __GNUC__
> ++# undef alloca
> ++# define alloca __builtin_alloca
> ++# define HAVE_ALLOCA 1
> ++#else
> ++# ifdef _MSC_VER
> ++# include <malloc.h>
> ++# define alloca _alloca
> ++# else
> ++# if defined HAVE_ALLOCA_H || defined _LIBC
> ++# include <alloca.h>
> ++# else
> ++# ifdef _AIX
> ++ #pragma alloca
> ++# else
> ++# ifndef alloca
> ++char *alloca ();
> ++# endif
> ++# endif
> ++# endif
> ++# endif
> + #endif
> +
> ++#include <stdlib.h>
> ++#include <string.h>
> ++
> + #if defined HAVE_UNISTD_H || defined _LIBC
> + # include <unistd.h>
> + #endif
> +
> +-#if (defined HAVE_MMAP && defined HAVE_MUNMAP) || defined _LIBC
> ++#ifdef _LIBC
> ++# include <langinfo.h>
> ++# include <locale.h>
> ++#endif
> ++
> ++#if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \
> ++ || (defined _LIBC && defined _POSIX_MAPPED_FILES)
> + # include <sys/mman.h>
> ++# undef HAVE_MMAP
> ++# define HAVE_MMAP 1
> ++#else
> ++# undef HAVE_MMAP
> + #endif
> +
> +-#include "gettext.h"
> ++#if defined HAVE_STDINT_H_WITH_UINTMAX || defined _LIBC
> ++# include <stdint.h>
> ++#endif
> ++#if defined HAVE_INTTYPES_H || defined _LIBC
> ++# include <inttypes.h>
> ++#endif
> ++
> ++#include "gmo.h"
> + #include "gettextP.h"
> ++#include "hash-string.h"
> ++#include "plural-exp.h"
> ++
> ++#ifdef _LIBC
> ++# include "../locale/localeinfo.h"
> ++#endif
> ++
> ++/* Provide fallback values for macros that ought to be defined in <inttypes.h>.
> ++ Note that our fallback values need not be literal strings, because we don't
> ++ use them with preprocessor string concatenation. */
> ++#if !defined PRId8 || PRI_MACROS_BROKEN
> ++# undef PRId8
> ++# define PRId8 "d"
> ++#endif
> ++#if !defined PRIi8 || PRI_MACROS_BROKEN
> ++# undef PRIi8
> ++# define PRIi8 "i"
> ++#endif
> ++#if !defined PRIo8 || PRI_MACROS_BROKEN
> ++# undef PRIo8
> ++# define PRIo8 "o"
> ++#endif
> ++#if !defined PRIu8 || PRI_MACROS_BROKEN
> ++# undef PRIu8
> ++# define PRIu8 "u"
> ++#endif
> ++#if !defined PRIx8 || PRI_MACROS_BROKEN
> ++# undef PRIx8
> ++# define PRIx8 "x"
> ++#endif
> ++#if !defined PRIX8 || PRI_MACROS_BROKEN
> ++# undef PRIX8
> ++# define PRIX8 "X"
> ++#endif
> ++#if !defined PRId16 || PRI_MACROS_BROKEN
> ++# undef PRId16
> ++# define PRId16 "d"
> ++#endif
> ++#if !defined PRIi16 || PRI_MACROS_BROKEN
> ++# undef PRIi16
> ++# define PRIi16 "i"
> ++#endif
> ++#if !defined PRIo16 || PRI_MACROS_BROKEN
> ++# undef PRIo16
> ++# define PRIo16 "o"
> ++#endif
> ++#if !defined PRIu16 || PRI_MACROS_BROKEN
> ++# undef PRIu16
> ++# define PRIu16 "u"
> ++#endif
> ++#if !defined PRIx16 || PRI_MACROS_BROKEN
> ++# undef PRIx16
> ++# define PRIx16 "x"
> ++#endif
> ++#if !defined PRIX16 || PRI_MACROS_BROKEN
> ++# undef PRIX16
> ++# define PRIX16 "X"
> ++#endif
> ++#if !defined PRId32 || PRI_MACROS_BROKEN
> ++# undef PRId32
> ++# define PRId32 "d"
> ++#endif
> ++#if !defined PRIi32 || PRI_MACROS_BROKEN
> ++# undef PRIi32
> ++# define PRIi32 "i"
> ++#endif
> ++#if !defined PRIo32 || PRI_MACROS_BROKEN
> ++# undef PRIo32
> ++# define PRIo32 "o"
> ++#endif
> ++#if !defined PRIu32 || PRI_MACROS_BROKEN
> ++# undef PRIu32
> ++# define PRIu32 "u"
> ++#endif
> ++#if !defined PRIx32 || PRI_MACROS_BROKEN
> ++# undef PRIx32
> ++# define PRIx32 "x"
> ++#endif
> ++#if !defined PRIX32 || PRI_MACROS_BROKEN
> ++# undef PRIX32
> ++# define PRIX32 "X"
> ++#endif
> ++#if !defined PRId64 || PRI_MACROS_BROKEN
> ++# undef PRId64
> ++# define PRId64 (sizeof (long) == 8 ? "ld" : "lld")
> ++#endif
> ++#if !defined PRIi64 || PRI_MACROS_BROKEN
> ++# undef PRIi64
> ++# define PRIi64 (sizeof (long) == 8 ? "li" : "lli")
> ++#endif
> ++#if !defined PRIo64 || PRI_MACROS_BROKEN
> ++# undef PRIo64
> ++# define PRIo64 (sizeof (long) == 8 ? "lo" : "llo")
> ++#endif
> ++#if !defined PRIu64 || PRI_MACROS_BROKEN
> ++# undef PRIu64
> ++# define PRIu64 (sizeof (long) == 8 ? "lu" : "llu")
> ++#endif
> ++#if !defined PRIx64 || PRI_MACROS_BROKEN
> ++# undef PRIx64
> ++# define PRIx64 (sizeof (long) == 8 ? "lx" : "llx")
> ++#endif
> ++#if !defined PRIX64 || PRI_MACROS_BROKEN
> ++# undef PRIX64
> ++# define PRIX64 (sizeof (long) == 8 ? "lX" : "llX")
> ++#endif
> ++#if !defined PRIdLEAST8 || PRI_MACROS_BROKEN
> ++# undef PRIdLEAST8
> ++# define PRIdLEAST8 "d"
> ++#endif
> ++#if !defined PRIiLEAST8 || PRI_MACROS_BROKEN
> ++# undef PRIiLEAST8
> ++# define PRIiLEAST8 "i"
> ++#endif
> ++#if !defined PRIoLEAST8 || PRI_MACROS_BROKEN
> ++# undef PRIoLEAST8
> ++# define PRIoLEAST8 "o"
> ++#endif
> ++#if !defined PRIuLEAST8 || PRI_MACROS_BROKEN
> ++# undef PRIuLEAST8
> ++# define PRIuLEAST8 "u"
> ++#endif
> ++#if !defined PRIxLEAST8 || PRI_MACROS_BROKEN
> ++# undef PRIxLEAST8
> ++# define PRIxLEAST8 "x"
> ++#endif
> ++#if !defined PRIXLEAST8 || PRI_MACROS_BROKEN
> ++# undef PRIXLEAST8
> ++# define PRIXLEAST8 "X"
> ++#endif
> ++#if !defined PRIdLEAST16 || PRI_MACROS_BROKEN
> ++# undef PRIdLEAST16
> ++# define PRIdLEAST16 "d"
> ++#endif
> ++#if !defined PRIiLEAST16 || PRI_MACROS_BROKEN
> ++# undef PRIiLEAST16
> ++# define PRIiLEAST16 "i"
> ++#endif
> ++#if !defined PRIoLEAST16 || PRI_MACROS_BROKEN
> ++# undef PRIoLEAST16
> ++# define PRIoLEAST16 "o"
> ++#endif
> ++#if !defined PRIuLEAST16 || PRI_MACROS_BROKEN
> ++# undef PRIuLEAST16
> ++# define PRIuLEAST16 "u"
> ++#endif
> ++#if !defined PRIxLEAST16 || PRI_MACROS_BROKEN
> ++# undef PRIxLEAST16
> ++# define PRIxLEAST16 "x"
> ++#endif
> ++#if !defined PRIXLEAST16 || PRI_MACROS_BROKEN
> ++# undef PRIXLEAST16
> ++# define PRIXLEAST16 "X"
> ++#endif
> ++#if !defined PRIdLEAST32 || PRI_MACROS_BROKEN
> ++# undef PRIdLEAST32
> ++# define PRIdLEAST32 "d"
> ++#endif
> ++#if !defined PRIiLEAST32 || PRI_MACROS_BROKEN
> ++# undef PRIiLEAST32
> ++# define PRIiLEAST32 "i"
> ++#endif
> ++#if !defined PRIoLEAST32 || PRI_MACROS_BROKEN
> ++# undef PRIoLEAST32
> ++# define PRIoLEAST32 "o"
> ++#endif
> ++#if !defined PRIuLEAST32 || PRI_MACROS_BROKEN
> ++# undef PRIuLEAST32
> ++# define PRIuLEAST32 "u"
> ++#endif
> ++#if !defined PRIxLEAST32 || PRI_MACROS_BROKEN
> ++# undef PRIxLEAST32
> ++# define PRIxLEAST32 "x"
> ++#endif
> ++#if !defined PRIXLEAST32 || PRI_MACROS_BROKEN
> ++# undef PRIXLEAST32
> ++# define PRIXLEAST32 "X"
> ++#endif
> ++#if !defined PRIdLEAST64 || PRI_MACROS_BROKEN
> ++# undef PRIdLEAST64
> ++# define PRIdLEAST64 PRId64
> ++#endif
> ++#if !defined PRIiLEAST64 || PRI_MACROS_BROKEN
> ++# undef PRIiLEAST64
> ++# define PRIiLEAST64 PRIi64
> ++#endif
> ++#if !defined PRIoLEAST64 || PRI_MACROS_BROKEN
> ++# undef PRIoLEAST64
> ++# define PRIoLEAST64 PRIo64
> ++#endif
> ++#if !defined PRIuLEAST64 || PRI_MACROS_BROKEN
> ++# undef PRIuLEAST64
> ++# define PRIuLEAST64 PRIu64
> ++#endif
> ++#if !defined PRIxLEAST64 || PRI_MACROS_BROKEN
> ++# undef PRIxLEAST64
> ++# define PRIxLEAST64 PRIx64
> ++#endif
> ++#if !defined PRIXLEAST64 || PRI_MACROS_BROKEN
> ++# undef PRIXLEAST64
> ++# define PRIXLEAST64 PRIX64
> ++#endif
> ++#if !defined PRIdFAST8 || PRI_MACROS_BROKEN
> ++# undef PRIdFAST8
> ++# define PRIdFAST8 "d"
> ++#endif
> ++#if !defined PRIiFAST8 || PRI_MACROS_BROKEN
> ++# undef PRIiFAST8
> ++# define PRIiFAST8 "i"
> ++#endif
> ++#if !defined PRIoFAST8 || PRI_MACROS_BROKEN
> ++# undef PRIoFAST8
> ++# define PRIoFAST8 "o"
> ++#endif
> ++#if !defined PRIuFAST8 || PRI_MACROS_BROKEN
> ++# undef PRIuFAST8
> ++# define PRIuFAST8 "u"
> ++#endif
> ++#if !defined PRIxFAST8 || PRI_MACROS_BROKEN
> ++# undef PRIxFAST8
> ++# define PRIxFAST8 "x"
> ++#endif
> ++#if !defined PRIXFAST8 || PRI_MACROS_BROKEN
> ++# undef PRIXFAST8
> ++# define PRIXFAST8 "X"
> ++#endif
> ++#if !defined PRIdFAST16 || PRI_MACROS_BROKEN
> ++# undef PRIdFAST16
> ++# define PRIdFAST16 "d"
> ++#endif
> ++#if !defined PRIiFAST16 || PRI_MACROS_BROKEN
> ++# undef PRIiFAST16
> ++# define PRIiFAST16 "i"
> ++#endif
> ++#if !defined PRIoFAST16 || PRI_MACROS_BROKEN
> ++# undef PRIoFAST16
> ++# define PRIoFAST16 "o"
> ++#endif
> ++#if !defined PRIuFAST16 || PRI_MACROS_BROKEN
> ++# undef PRIuFAST16
> ++# define PRIuFAST16 "u"
> ++#endif
> ++#if !defined PRIxFAST16 || PRI_MACROS_BROKEN
> ++# undef PRIxFAST16
> ++# define PRIxFAST16 "x"
> ++#endif
> ++#if !defined PRIXFAST16 || PRI_MACROS_BROKEN
> ++# undef PRIXFAST16
> ++# define PRIXFAST16 "X"
> ++#endif
> ++#if !defined PRIdFAST32 || PRI_MACROS_BROKEN
> ++# undef PRIdFAST32
> ++# define PRIdFAST32 "d"
> ++#endif
> ++#if !defined PRIiFAST32 || PRI_MACROS_BROKEN
> ++# undef PRIiFAST32
> ++# define PRIiFAST32 "i"
> ++#endif
> ++#if !defined PRIoFAST32 || PRI_MACROS_BROKEN
> ++# undef PRIoFAST32
> ++# define PRIoFAST32 "o"
> ++#endif
> ++#if !defined PRIuFAST32 || PRI_MACROS_BROKEN
> ++# undef PRIuFAST32
> ++# define PRIuFAST32 "u"
> ++#endif
> ++#if !defined PRIxFAST32 || PRI_MACROS_BROKEN
> ++# undef PRIxFAST32
> ++# define PRIxFAST32 "x"
> ++#endif
> ++#if !defined PRIXFAST32 || PRI_MACROS_BROKEN
> ++# undef PRIXFAST32
> ++# define PRIXFAST32 "X"
> ++#endif
> ++#if !defined PRIdFAST64 || PRI_MACROS_BROKEN
> ++# undef PRIdFAST64
> ++# define PRIdFAST64 PRId64
> ++#endif
> ++#if !defined PRIiFAST64 || PRI_MACROS_BROKEN
> ++# undef PRIiFAST64
> ++# define PRIiFAST64 PRIi64
> ++#endif
> ++#if !defined PRIoFAST64 || PRI_MACROS_BROKEN
> ++# undef PRIoFAST64
> ++# define PRIoFAST64 PRIo64
> ++#endif
> ++#if !defined PRIuFAST64 || PRI_MACROS_BROKEN
> ++# undef PRIuFAST64
> ++# define PRIuFAST64 PRIu64
> ++#endif
> ++#if !defined PRIxFAST64 || PRI_MACROS_BROKEN
> ++# undef PRIxFAST64
> ++# define PRIxFAST64 PRIx64
> ++#endif
> ++#if !defined PRIXFAST64 || PRI_MACROS_BROKEN
> ++# undef PRIXFAST64
> ++# define PRIXFAST64 PRIX64
> ++#endif
> ++#if !defined PRIdMAX || PRI_MACROS_BROKEN
> ++# undef PRIdMAX
> ++# define PRIdMAX (sizeof (uintmax_t) == sizeof (long) ? "ld" : "lld")
> ++#endif
> ++#if !defined PRIiMAX || PRI_MACROS_BROKEN
> ++# undef PRIiMAX
> ++# define PRIiMAX (sizeof (uintmax_t) == sizeof (long) ? "li" : "lli")
> ++#endif
> ++#if !defined PRIoMAX || PRI_MACROS_BROKEN
> ++# undef PRIoMAX
> ++# define PRIoMAX (sizeof (uintmax_t) == sizeof (long) ? "lo" : "llo")
> ++#endif
> ++#if !defined PRIuMAX || PRI_MACROS_BROKEN
> ++# undef PRIuMAX
> ++# define PRIuMAX (sizeof (uintmax_t) == sizeof (long) ? "lu" : "llu")
> ++#endif
> ++#if !defined PRIxMAX || PRI_MACROS_BROKEN
> ++# undef PRIxMAX
> ++# define PRIxMAX (sizeof (uintmax_t) == sizeof (long) ? "lx" : "llx")
> ++#endif
> ++#if !defined PRIXMAX || PRI_MACROS_BROKEN
> ++# undef PRIXMAX
> ++# define PRIXMAX (sizeof (uintmax_t) == sizeof (long) ? "lX" : "llX")
> ++#endif
> ++#if !defined PRIdPTR || PRI_MACROS_BROKEN
> ++# undef PRIdPTR
> ++# define PRIdPTR \
> ++ (sizeof (void *) == sizeof (long) ? "ld" : \
> ++ sizeof (void *) == sizeof (int) ? "d" : \
> ++ "lld")
> ++#endif
> ++#if !defined PRIiPTR || PRI_MACROS_BROKEN
> ++# undef PRIiPTR
> ++# define PRIiPTR \
> ++ (sizeof (void *) == sizeof (long) ? "li" : \
> ++ sizeof (void *) == sizeof (int) ? "i" : \
> ++ "lli")
> ++#endif
> ++#if !defined PRIoPTR || PRI_MACROS_BROKEN
> ++# undef PRIoPTR
> ++# define PRIoPTR \
> ++ (sizeof (void *) == sizeof (long) ? "lo" : \
> ++ sizeof (void *) == sizeof (int) ? "o" : \
> ++ "llo")
> ++#endif
> ++#if !defined PRIuPTR || PRI_MACROS_BROKEN
> ++# undef PRIuPTR
> ++# define PRIuPTR \
> ++ (sizeof (void *) == sizeof (long) ? "lu" : \
> ++ sizeof (void *) == sizeof (int) ? "u" : \
> ++ "llu")
> ++#endif
> ++#if !defined PRIxPTR || PRI_MACROS_BROKEN
> ++# undef PRIxPTR
> ++# define PRIxPTR \
> ++ (sizeof (void *) == sizeof (long) ? "lx" : \
> ++ sizeof (void *) == sizeof (int) ? "x" : \
> ++ "llx")
> ++#endif
> ++#if !defined PRIXPTR || PRI_MACROS_BROKEN
> ++# undef PRIXPTR
> ++# define PRIXPTR \
> ++ (sizeof (void *) == sizeof (long) ? "lX" : \
> ++ sizeof (void *) == sizeof (int) ? "X" : \
> ++ "llX")
> ++#endif
> +
> + /* @@ end of prolog @@ */
> +
> +@@ -44,7 +457,6 @@
> + /* Rename the non ISO C functions. This is required by the standard
> + because some ISO C functions will require linking with this object
> + file and the name space must not be polluted. */
> +-# define fstat __fstat
> + # define open __open
> + # define close __close
> + # define read __read
> +@@ -52,30 +464,471 @@
> + # define munmap __munmap
> + #endif
> +
> ++/* For those losing systems which don't have `alloca' we have to add
> ++ some additional code emulating it. */
> ++#ifdef HAVE_ALLOCA
> ++# define freea(p) /* nothing */
> ++#else
> ++# define alloca(n) malloc (n)
> ++# define freea(p) free (p)
> ++#endif
> ++
> ++/* For systems that distinguish between text and binary I/O.
> ++ O_BINARY is usually declared in <fcntl.h>. */
> ++#if !defined O_BINARY && defined _O_BINARY
> ++ /* For MSC-compatible compilers. */
> ++# define O_BINARY _O_BINARY
> ++# define O_TEXT _O_TEXT
> ++#endif
> ++#ifdef __BEOS__
> ++ /* BeOS 5 has O_BINARY and O_TEXT, but they have no effect. */
> ++# undef O_BINARY
> ++# undef O_TEXT
> ++#endif
> ++/* On reasonable systems, binary I/O is the default. */
> ++#ifndef O_BINARY
> ++# define O_BINARY 0
> ++#endif
> ++
> ++
> + /* We need a sign, whether a new catalog was loaded, which can be associated
> + with all translations. This is important if the translations are
> + cached by one of GCC's features. */
> +-int _nl_msg_cat_cntr = 0;
> ++int _nl_msg_cat_cntr;
> +
> +
> ++/* Expand a system dependent string segment. Return NULL if unsupported. */
> ++static const char *
> ++get_sysdep_segment_value (const char *name)
> ++{
> ++ /* Test for an ISO C 99 section 7.8.1 format string directive.
> ++ Syntax:
> ++ P R I { d | i | o | u | x | X }
> ++ { { | LEAST | FAST } { 8 | 16 | 32 | 64 } | MAX | PTR } */
> ++ /* We don't use a table of 14 times 6 'const char *' strings here, because
> ++ data relocations cost startup time. */
> ++ if (name[0] == 'P' && name[1] == 'R' && name[2] == 'I')
> ++ {
> ++ if (name[3] == 'd' || name[3] == 'i' || name[3] == 'o' || name[3] == 'u'
> ++ || name[3] == 'x' || name[3] == 'X')
> ++ {
> ++ if (name[4] == '8' && name[5] == '\0')
> ++ {
> ++ if (name[3] == 'd')
> ++ return PRId8;
> ++ if (name[3] == 'i')
> ++ return PRIi8;
> ++ if (name[3] == 'o')
> ++ return PRIo8;
> ++ if (name[3] == 'u')
> ++ return PRIu8;
> ++ if (name[3] == 'x')
> ++ return PRIx8;
> ++ if (name[3] == 'X')
> ++ return PRIX8;
> ++ abort ();
> ++ }
> ++ if (name[4] == '1' && name[5] == '6' && name[6] == '\0')
> ++ {
> ++ if (name[3] == 'd')
> ++ return PRId16;
> ++ if (name[3] == 'i')
> ++ return PRIi16;
> ++ if (name[3] == 'o')
> ++ return PRIo16;
> ++ if (name[3] == 'u')
> ++ return PRIu16;
> ++ if (name[3] == 'x')
> ++ return PRIx16;
> ++ if (name[3] == 'X')
> ++ return PRIX16;
> ++ abort ();
> ++ }
> ++ if (name[4] == '3' && name[5] == '2' && name[6] == '\0')
> ++ {
> ++ if (name[3] == 'd')
> ++ return PRId32;
> ++ if (name[3] == 'i')
> ++ return PRIi32;
> ++ if (name[3] == 'o')
> ++ return PRIo32;
> ++ if (name[3] == 'u')
> ++ return PRIu32;
> ++ if (name[3] == 'x')
> ++ return PRIx32;
> ++ if (name[3] == 'X')
> ++ return PRIX32;
> ++ abort ();
> ++ }
> ++ if (name[4] == '6' && name[5] == '4' && name[6] == '\0')
> ++ {
> ++ if (name[3] == 'd')
> ++ return PRId64;
> ++ if (name[3] == 'i')
> ++ return PRIi64;
> ++ if (name[3] == 'o')
> ++ return PRIo64;
> ++ if (name[3] == 'u')
> ++ return PRIu64;
> ++ if (name[3] == 'x')
> ++ return PRIx64;
> ++ if (name[3] == 'X')
> ++ return PRIX64;
> ++ abort ();
> ++ }
> ++ if (name[4] == 'L' && name[5] == 'E' && name[6] == 'A'
> ++ && name[7] == 'S' && name[8] == 'T')
> ++ {
> ++ if (name[9] == '8' && name[10] == '\0')
> ++ {
> ++ if (name[3] == 'd')
> ++ return PRIdLEAST8;
> ++ if (name[3] == 'i')
> ++ return PRIiLEAST8;
> ++ if (name[3] == 'o')
> ++ return PRIoLEAST8;
> ++ if (name[3] == 'u')
> ++ return PRIuLEAST8;
> ++ if (name[3] == 'x')
> ++ return PRIxLEAST8;
> ++ if (name[3] == 'X')
> ++ return PRIXLEAST8;
> ++ abort ();
> ++ }
> ++ if (name[9] == '1' && name[10] == '6' && name[11] == '\0')
> ++ {
> ++ if (name[3] == 'd')
> ++ return PRIdLEAST16;
> ++ if (name[3] == 'i')
> ++ return PRIiLEAST16;
> ++ if (name[3] == 'o')
> ++ return PRIoLEAST16;
> ++ if (name[3] == 'u')
> ++ return PRIuLEAST16;
> ++ if (name[3] == 'x')
> ++ return PRIxLEAST16;
> ++ if (name[3] == 'X')
> ++ return PRIXLEAST16;
> ++ abort ();
> ++ }
> ++ if (name[9] == '3' && name[10] == '2' && name[11] == '\0')
> ++ {
> ++ if (name[3] == 'd')
> ++ return PRIdLEAST32;
> ++ if (name[3] == 'i')
> ++ return PRIiLEAST32;
> ++ if (name[3] == 'o')
> ++ return PRIoLEAST32;
> ++ if (name[3] == 'u')
> ++ return PRIuLEAST32;
> ++ if (name[3] == 'x')
> ++ return PRIxLEAST32;
> ++ if (name[3] == 'X')
> ++ return PRIXLEAST32;
> ++ abort ();
> ++ }
> ++ if (name[9] == '6' && name[10] == '4' && name[11] == '\0')
> ++ {
> ++ if (name[3] == 'd')
> ++ return PRIdLEAST64;
> ++ if (name[3] == 'i')
> ++ return PRIiLEAST64;
> ++ if (name[3] == 'o')
> ++ return PRIoLEAST64;
> ++ if (name[3] == 'u')
> ++ return PRIuLEAST64;
> ++ if (name[3] == 'x')
> ++ return PRIxLEAST64;
> ++ if (name[3] == 'X')
> ++ return PRIXLEAST64;
> ++ abort ();
> ++ }
> ++ }
> ++ if (name[4] == 'F' && name[5] == 'A' && name[6] == 'S'
> ++ && name[7] == 'T')
> ++ {
> ++ if (name[8] == '8' && name[9] == '\0')
> ++ {
> ++ if (name[3] == 'd')
> ++ return PRIdFAST8;
> ++ if (name[3] == 'i')
> ++ return PRIiFAST8;
> ++ if (name[3] == 'o')
> ++ return PRIoFAST8;
> ++ if (name[3] == 'u')
> ++ return PRIuFAST8;
> ++ if (name[3] == 'x')
> ++ return PRIxFAST8;
> ++ if (name[3] == 'X')
> ++ return PRIXFAST8;
> ++ abort ();
> ++ }
> ++ if (name[8] == '1' && name[9] == '6' && name[10] == '\0')
> ++ {
> ++ if (name[3] == 'd')
> ++ return PRIdFAST16;
> ++ if (name[3] == 'i')
> ++ return PRIiFAST16;
> ++ if (name[3] == 'o')
> ++ return PRIoFAST16;
> ++ if (name[3] == 'u')
> ++ return PRIuFAST16;
> ++ if (name[3] == 'x')
> ++ return PRIxFAST16;
> ++ if (name[3] == 'X')
> ++ return PRIXFAST16;
> ++ abort ();
> ++ }
> ++ if (name[8] == '3' && name[9] == '2' && name[10] == '\0')
> ++ {
> ++ if (name[3] == 'd')
> ++ return PRIdFAST32;
> ++ if (name[3] == 'i')
> ++ return PRIiFAST32;
> ++ if (name[3] == 'o')
> ++ return PRIoFAST32;
> ++ if (name[3] == 'u')
> ++ return PRIuFAST32;
> ++ if (name[3] == 'x')
> ++ return PRIxFAST32;
> ++ if (name[3] == 'X')
> ++ return PRIXFAST32;
> ++ abort ();
> ++ }
> ++ if (name[8] == '6' && name[9] == '4' && name[10] == '\0')
> ++ {
> ++ if (name[3] == 'd')
> ++ return PRIdFAST64;
> ++ if (name[3] == 'i')
> ++ return PRIiFAST64;
> ++ if (name[3] == 'o')
> ++ return PRIoFAST64;
> ++ if (name[3] == 'u')
> ++ return PRIuFAST64;
> ++ if (name[3] == 'x')
> ++ return PRIxFAST64;
> ++ if (name[3] == 'X')
> ++ return PRIXFAST64;
> ++ abort ();
> ++ }
> ++ }
> ++ if (name[4] == 'M' && name[5] == 'A' && name[6] == 'X'
> ++ && name[7] == '\0')
> ++ {
> ++ if (name[3] == 'd')
> ++ return PRIdMAX;
> ++ if (name[3] == 'i')
> ++ return PRIiMAX;
> ++ if (name[3] == 'o')
> ++ return PRIoMAX;
> ++ if (name[3] == 'u')
> ++ return PRIuMAX;
> ++ if (name[3] == 'x')
> ++ return PRIxMAX;
> ++ if (name[3] == 'X')
> ++ return PRIXMAX;
> ++ abort ();
> ++ }
> ++ if (name[4] == 'P' && name[5] == 'T' && name[6] == 'R'
> ++ && name[7] == '\0')
> ++ {
> ++ if (name[3] == 'd')
> ++ return PRIdPTR;
> ++ if (name[3] == 'i')
> ++ return PRIiPTR;
> ++ if (name[3] == 'o')
> ++ return PRIoPTR;
> ++ if (name[3] == 'u')
> ++ return PRIuPTR;
> ++ if (name[3] == 'x')
> ++ return PRIxPTR;
> ++ if (name[3] == 'X')
> ++ return PRIXPTR;
> ++ abort ();
> ++ }
> ++ }
> ++ }
> ++ /* Test for a glibc specific printf() format directive flag. */
> ++ if (name[0] == 'I' && name[1] == '\0')
> ++ {
> ++#if defined _LIBC || __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2)
> ++ /* The 'I' flag, in numeric format directives, replaces ASCII digits
> ++ with the 'outdigits' defined in the LC_CTYPE locale facet. This is
> ++ used for Farsi (Persian) and maybe Arabic. */
> ++ return "I";
> ++#else
> ++ return "";
> ++#endif
> ++ }
> ++ /* Other system dependent strings are not valid. */
> ++ return NULL;
> ++}
> ++
> ++/* Initialize the codeset dependent parts of an opened message catalog.
> ++ Return the header entry. */
> ++const char *
> ++internal_function
> ++_nl_init_domain_conv (struct loaded_l10nfile *domain_file,
> ++ struct loaded_domain *domain,
> ++ struct binding *domainbinding)
> ++{
> ++ /* Find out about the character set the file is encoded with.
> ++ This can be found (in textual form) in the entry "". If this
> ++ entry does not exist or if this does not contain the `charset='
> ++ information, we will assume the charset matches the one the
> ++ current locale and we don't have to perform any conversion. */
> ++ char *nullentry;
> ++ size_t nullentrylen;
> ++
> ++ /* Preinitialize fields, to avoid recursion during _nl_find_msg. */
> ++ domain->codeset_cntr =
> ++ (domainbinding != NULL ? domainbinding->codeset_cntr : 0);
> ++#ifdef _LIBC
> ++ domain->conv = (__gconv_t) -1;
> ++#else
> ++# if HAVE_ICONV
> ++ domain->conv = (iconv_t) -1;
> ++# endif
> ++#endif
> ++ domain->conv_tab = NULL;
> ++
> ++ /* Get the header entry. */
> ++ nullentry = _nl_find_msg (domain_file, domainbinding, "", &nullentrylen);
> ++
> ++ if (nullentry != NULL)
> ++ {
> ++#if defined _LIBC || HAVE_ICONV
> ++ const char *charsetstr;
> ++
> ++ charsetstr = strstr (nullentry, "charset=");
> ++ if (charsetstr != NULL)
> ++ {
> ++ size_t len;
> ++ char *charset;
> ++ const char *outcharset;
> ++
> ++ charsetstr += strlen ("charset=");
> ++ len = strcspn (charsetstr, " \t\n");
> ++
> ++ charset = (char *) alloca (len + 1);
> ++# if defined _LIBC || HAVE_MEMPCPY
> ++ *((char *) mempcpy (charset, charsetstr, len)) = '\0';
> ++# else
> ++ memcpy (charset, charsetstr, len);
> ++ charset[len] = '\0';
> ++# endif
> ++
> ++ /* The output charset should normally be determined by the
> ++ locale. But sometimes the locale is not used or not correctly
> ++ set up, so we provide a possibility for the user to override
> ++ this. Moreover, the value specified through
> ++ bind_textdomain_codeset overrides both. */
> ++ if (domainbinding != NULL && domainbinding->codeset != NULL)
> ++ outcharset = domainbinding->codeset;
> ++ else
> ++ {
> ++ outcharset = getenv ("OUTPUT_CHARSET");
> ++ if (outcharset == NULL || outcharset[0] == '\0')
> ++ {
> ++# ifdef _LIBC
> ++ outcharset = _NL_CURRENT (LC_CTYPE, CODESET);
> ++# else
> ++# if HAVE_ICONV
> ++ extern const char *locale_charset (void);
> ++ outcharset = locale_charset ();
> ++# endif
> ++# endif
> ++ }
> ++ }
> ++
> ++# ifdef _LIBC
> ++ /* We always want to use transliteration. */
> ++ outcharset = norm_add_slashes (outcharset, "TRANSLIT");
> ++ charset = norm_add_slashes (charset, NULL);
> ++ if (__gconv_open (outcharset, charset, &domain->conv,
> ++ GCONV_AVOID_NOCONV)
> ++ != __GCONV_OK)
> ++ domain->conv = (__gconv_t) -1;
> ++# else
> ++# if HAVE_ICONV
> ++ /* When using GNU libc >= 2.2 or GNU libiconv >= 1.5,
> ++ we want to use transliteration. */
> ++# if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) || __GLIBC__ > 2 \
> ++ || _LIBICONV_VERSION >= 0x0105
> ++ if (strchr (outcharset, '/') == NULL)
> ++ {
> ++ char *tmp;
> ++
> ++ len = strlen (outcharset);
> ++ tmp = (char *) alloca (len + 10 + 1);
> ++ memcpy (tmp, outcharset, len);
> ++ memcpy (tmp + len, "//TRANSLIT", 10 + 1);
> ++ outcharset = tmp;
> ++
> ++ domain->conv = iconv_open (outcharset, charset);
> ++
> ++ freea (outcharset);
> ++ }
> ++ else
> ++# endif
> ++ domain->conv = iconv_open (outcharset, charset);
> ++# endif
> ++# endif
> ++
> ++ freea (charset);
> ++ }
> ++#endif /* _LIBC || HAVE_ICONV */
> ++ }
> ++
> ++ return nullentry;
> ++}
> ++
> ++/* Frees the codeset dependent parts of an opened message catalog. */
> ++void
> ++internal_function
> ++_nl_free_domain_conv (struct loaded_domain *domain)
> ++{
> ++ if (domain->conv_tab != NULL && domain->conv_tab != (char **) -1)
> ++ free (domain->conv_tab);
> ++
> ++#ifdef _LIBC
> ++ if (domain->conv != (__gconv_t) -1)
> ++ __gconv_close (domain->conv);
> ++#else
> ++# if HAVE_ICONV
> ++ if (domain->conv != (iconv_t) -1)
> ++ iconv_close (domain->conv);
> ++# endif
> ++#endif
> ++}
> ++
> + /* Load the message catalogs specified by FILENAME. If it is no valid
> + message catalog do nothing. */
> + void
> +-_nl_load_domain (domain_file)
> +- struct loaded_l10nfile *domain_file;
> ++internal_function
> ++_nl_load_domain (struct loaded_l10nfile *domain_file,
> ++ struct binding *domainbinding)
> + {
> + int fd;
> ++ size_t size;
> ++#ifdef _LIBC
> ++ struct stat64 st;
> ++#else
> + struct stat st;
> ++#endif
> + struct mo_file_header *data = (struct mo_file_header *) -1;
> +-#if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \
> +- || defined _LIBC
> + int use_mmap = 0;
> +-#endif
> + struct loaded_domain *domain;
> ++ int revision;
> ++ const char *nullentry;
> +
> + domain_file->decided = 1;
> + domain_file->data = NULL;
> +
> ++ /* Note that it would be useless to store domainbinding in domain_file
> ++ because domainbinding might be == NULL now but != NULL later (after
> ++ a call to bind_textdomain_codeset). */
> ++
> + /* If the record does not represent a valid locale the FILENAME
> + might be NULL. This can happen when according to the given
> + specification the locale file name is different for XPG and CEN
> +@@ -84,27 +937,32 @@
> + return;
> +
> + /* Try to open the addressed file. */
> +- fd = open (domain_file->filename, O_RDONLY);
> ++ fd = open (domain_file->filename, O_RDONLY | O_BINARY);
> + if (fd == -1)
> + return;
> +
> + /* We must know about the size of the file. */
> +- if (fstat (fd, &st) != 0
> +- && st.st_size < (off_t) sizeof (struct mo_file_header))
> ++ if (
> ++#ifdef _LIBC
> ++ __builtin_expect (fstat64 (fd, &st) != 0, 0)
> ++#else
> ++ __builtin_expect (fstat (fd, &st) != 0, 0)
> ++#endif
> ++ || __builtin_expect ((size = (size_t) st.st_size) != st.st_size, 0)
> ++ || __builtin_expect (size < sizeof (struct mo_file_header), 0))
> + {
> + /* Something went wrong. */
> + close (fd);
> + return;
> + }
> +
> +-#if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \
> +- || defined _LIBC
> ++#ifdef HAVE_MMAP
> + /* Now we are ready to load the file. If mmap() is available we try
> + this first. If not available or it failed we try to load it. */
> +- data = (struct mo_file_header *) mmap (NULL, st.st_size, PROT_READ,
> ++ data = (struct mo_file_header *) mmap (NULL, size, PROT_READ,
> + MAP_PRIVATE, fd, 0);
> +
> +- if (data != (struct mo_file_header *) -1)
> ++ if (__builtin_expect (data != (struct mo_file_header *) -1, 1))
> + {
> + /* mmap() call was successful. */
> + close (fd);
> +@@ -116,24 +974,27 @@
> + it manually. */
> + if (data == (struct mo_file_header *) -1)
> + {
> +- off_t to_read;
> ++ size_t to_read;
> + char *read_ptr;
> +
> +- data = (struct mo_file_header *) malloc (st.st_size);
> ++ data = (struct mo_file_header *) malloc (size);
> + if (data == NULL)
> + return;
> +
> +- to_read = st.st_size;
> ++ to_read = size;
> + read_ptr = (char *) data;
> + do
> + {
> + long int nb = (long int) read (fd, read_ptr, to_read);
> +- if (nb == -1)
> ++ if (nb <= 0)
> + {
> ++#ifdef EINTR
> ++ if (nb == -1 && errno == EINTR)
> ++ continue;
> ++#endif
> + close (fd);
> + return;
> + }
> +-
> + read_ptr += nb;
> + to_read -= nb;
> + }
> +@@ -144,47 +1005,378 @@
> +
> + /* Using the magic number we can test whether it really is a message
> + catalog file. */
> +- if (data->magic != _MAGIC && data->magic != _MAGIC_SWAPPED)
> ++ if (__builtin_expect (data->magic != _MAGIC && data->magic != _MAGIC_SWAPPED,
> ++ 0))
> + {
> + /* The magic number is wrong: not a message catalog file. */
> +-#if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \
> +- || defined _LIBC
> ++#ifdef HAVE_MMAP
> + if (use_mmap)
> +- munmap ((caddr_t) data, st.st_size);
> ++ munmap ((caddr_t) data, size);
> + else
> + #endif
> + free (data);
> + return;
> + }
> +
> +- domain_file->data
> +- = (struct loaded_domain *) malloc (sizeof (struct loaded_domain));
> +- if (domain_file->data == NULL)
> ++ domain = (struct loaded_domain *) malloc (sizeof (struct loaded_domain));
> ++ if (domain == NULL)
> + return;
> ++ domain_file->data = domain;
> +
> +- domain = (struct loaded_domain *) domain_file->data;
> + domain->data = (char *) data;
> ++ domain->use_mmap = use_mmap;
> ++ domain->mmap_size = size;
> + domain->must_swap = data->magic != _MAGIC;
> ++ domain->malloced = NULL;
> +
> + /* Fill in the information about the available tables. */
> +- switch (W (domain->must_swap, data->revision))
> ++ revision = W (domain->must_swap, data->revision);
> ++ /* We support only the major revisions 0 and 1. */
> ++ switch (revision >> 16)
> + {
> + case 0:
> ++ case 1:
> + domain->nstrings = W (domain->must_swap, data->nstrings);
> +- domain->orig_tab = (struct string_desc *)
> ++ domain->orig_tab = (const struct string_desc *)
> + ((char *) data + W (domain->must_swap, data->orig_tab_offset));
> +- domain->trans_tab = (struct string_desc *)
> ++ domain->trans_tab = (const struct string_desc *)
> + ((char *) data + W (domain->must_swap, data->trans_tab_offset));
> + domain->hash_size = W (domain->must_swap, data->hash_tab_size);
> +- domain->hash_tab = (nls_uint32 *)
> +- ((char *) data + W (domain->must_swap, data->hash_tab_offset));
> ++ domain->hash_tab =
> ++ (domain->hash_size > 2
> ++ ? (const nls_uint32 *)
> ++ ((char *) data + W (domain->must_swap, data->hash_tab_offset))
> ++ : NULL);
> ++ domain->must_swap_hash_tab = domain->must_swap;
> ++
> ++ /* Now dispatch on the minor revision. */
> ++ switch (revision & 0xffff)
> ++ {
> ++ case 0:
> ++ domain->n_sysdep_strings = 0;
> ++ domain->orig_sysdep_tab = NULL;
> ++ domain->trans_sysdep_tab = NULL;
> ++ break;
> ++ case 1:
> ++ default:
> ++ {
> ++ nls_uint32 n_sysdep_strings;
> ++
> ++ if (domain->hash_tab == NULL)
> ++ /* This is invalid. These minor revisions need a hash table. */
> ++ goto invalid;
> ++
> ++ n_sysdep_strings =
> ++ W (domain->must_swap, data->n_sysdep_strings);
> ++ if (n_sysdep_strings > 0)
> ++ {
> ++ nls_uint32 n_sysdep_segments;
> ++ const struct sysdep_segment *sysdep_segments;
> ++ const char **sysdep_segment_values;
> ++ const nls_uint32 *orig_sysdep_tab;
> ++ const nls_uint32 *trans_sysdep_tab;
> ++ nls_uint32 n_inmem_sysdep_strings;
> ++ size_t memneed;
> ++ char *mem;
> ++ struct sysdep_string_desc *inmem_orig_sysdep_tab;
> ++ struct sysdep_string_desc *inmem_trans_sysdep_tab;
> ++ nls_uint32 *inmem_hash_tab;
> ++ unsigned int i, j;
> ++
> ++ /* Get the values of the system dependent segments. */
> ++ n_sysdep_segments =
> ++ W (domain->must_swap, data->n_sysdep_segments);
> ++ sysdep_segments = (const struct sysdep_segment *)
> ++ ((char *) data
> ++ + W (domain->must_swap, data->sysdep_segments_offset));
> ++ sysdep_segment_values =
> ++ alloca (n_sysdep_segments * sizeof (const char *));
> ++ for (i = 0; i < n_sysdep_segments; i++)
> ++ {
> ++ const char *name =
> ++ (char *) data
> ++ + W (domain->must_swap, sysdep_segments[i].offset);
> ++ nls_uint32 namelen =
> ++ W (domain->must_swap, sysdep_segments[i].length);
> ++
> ++ if (!(namelen > 0 && name[namelen - 1] == '\0'))
> ++ {
> ++ freea (sysdep_segment_values);
> ++ goto invalid;
> ++ }
> ++
> ++ sysdep_segment_values[i] = get_sysdep_segment_value (name);
> ++ }
> ++
> ++ orig_sysdep_tab = (const nls_uint32 *)
> ++ ((char *) data
> ++ + W (domain->must_swap, data->orig_sysdep_tab_offset));
> ++ trans_sysdep_tab = (const nls_uint32 *)
> ++ ((char *) data
> ++ + W (domain->must_swap, data->trans_sysdep_tab_offset));
> ++
> ++ /* Compute the amount of additional memory needed for the
> ++ system dependent strings and the augmented hash table.
> ++ At the same time, also drop string pairs which refer to
> ++ an undefined system dependent segment. */
> ++ n_inmem_sysdep_strings = 0;
> ++ memneed = domain->hash_size * sizeof (nls_uint32);
> ++ for (i = 0; i < n_sysdep_strings; i++)
> ++ {
> ++ int valid = 1;
> ++ size_t needs[2];
> ++
> ++ for (j = 0; j < 2; j++)
> ++ {
> ++ const struct sysdep_string *sysdep_string =
> ++ (const struct sysdep_string *)
> ++ ((char *) data
> ++ + W (domain->must_swap,
> ++ j == 0
> ++ ? orig_sysdep_tab[i]
> ++ : trans_sysdep_tab[i]));
> ++ size_t need = 0;
> ++ const struct segment_pair *p = sysdep_string->segments;
> ++
> ++ if (W (domain->must_swap, p->sysdepref) != SEGMENTS_END)
> ++ for (p = sysdep_string->segments;; p++)
> ++ {
> ++ nls_uint32 sysdepref;
> ++
> ++ need += W (domain->must_swap, p->segsize);
> ++
> ++ sysdepref = W (domain->must_swap, p->sysdepref);
> ++ if (sysdepref == SEGMENTS_END)
> ++ break;
> ++
> ++ if (sysdepref >= n_sysdep_segments)
> ++ {
> ++ /* Invalid. */
> ++ freea (sysdep_segment_values);
> ++ goto invalid;
> ++ }
> ++
> ++ if (sysdep_segment_values[sysdepref] == NULL)
> ++ {
> ++ /* This particular string pair is invalid. */
> ++ valid = 0;
> ++ break;
> ++ }
> ++
> ++ need += strlen (sysdep_segment_values[sysdepref]);
> ++ }
> ++
> ++ needs[j] = need;
> ++ if (!valid)
> ++ break;
> ++ }
> ++
> ++ if (valid)
> ++ {
> ++ n_inmem_sysdep_strings++;
> ++ memneed += needs[0] + needs[1];
> ++ }
> ++ }
> ++ memneed += 2 * n_inmem_sysdep_strings
> ++ * sizeof (struct sysdep_string_desc);
> ++
> ++ if (n_inmem_sysdep_strings > 0)
> ++ {
> ++ unsigned int k;
> ++
> ++ /* Allocate additional memory. */
> ++ mem = (char *) malloc (memneed);
> ++ if (mem == NULL)
> ++ goto invalid;
> ++
> ++ domain->malloced = mem;
> ++ inmem_orig_sysdep_tab = (struct sysdep_string_desc *) mem;
> ++ mem += n_inmem_sysdep_strings
> ++ * sizeof (struct sysdep_string_desc);
> ++ inmem_trans_sysdep_tab = (struct sysdep_string_desc *) mem;
> ++ mem += n_inmem_sysdep_strings
> ++ * sizeof (struct sysdep_string_desc);
> ++ inmem_hash_tab = (nls_uint32 *) mem;
> ++ mem += domain->hash_size * sizeof (nls_uint32);
> ++
> ++ /* Compute the system dependent strings. */
> ++ k = 0;
> ++ for (i = 0; i < n_sysdep_strings; i++)
> ++ {
> ++ int valid = 1;
> ++
> ++ for (j = 0; j < 2; j++)
> ++ {
> ++ const struct sysdep_string *sysdep_string =
> ++ (const struct sysdep_string *)
> ++ ((char *) data
> ++ + W (domain->must_swap,
> ++ j == 0
> ++ ? orig_sysdep_tab[i]
> ++ : trans_sysdep_tab[i]));
> ++ const struct segment_pair *p =
> ++ sysdep_string->segments;
> ++
> ++ if (W (domain->must_swap, p->sysdepref)
> ++ != SEGMENTS_END)
> ++ for (p = sysdep_string->segments;; p++)
> ++ {
> ++ nls_uint32 sysdepref;
> ++
> ++ sysdepref =
> ++ W (domain->must_swap, p->sysdepref);
> ++ if (sysdepref == SEGMENTS_END)
> ++ break;
> ++
> ++ if (sysdep_segment_values[sysdepref] == NULL)
> ++ {
> ++ /* This particular string pair is
> ++ invalid. */
> ++ valid = 0;
> ++ break;
> ++ }
> ++ }
> ++
> ++ if (!valid)
> ++ break;
> ++ }
> ++
> ++ if (valid)
> ++ {
> ++ for (j = 0; j < 2; j++)
> ++ {
> ++ const struct sysdep_string *sysdep_string =
> ++ (const struct sysdep_string *)
> ++ ((char *) data
> ++ + W (domain->must_swap,
> ++ j == 0
> ++ ? orig_sysdep_tab[i]
> ++ : trans_sysdep_tab[i]));
> ++ const char *static_segments =
> ++ (char *) data
> ++ + W (domain->must_swap, sysdep_string->offset);
> ++ const struct segment_pair *p =
> ++ sysdep_string->segments;
> ++
> ++ /* Concatenate the segments, and fill
> ++ inmem_orig_sysdep_tab[k] (for j == 0) and
> ++ inmem_trans_sysdep_tab[k] (for j == 1). */
> ++
> ++ struct sysdep_string_desc *inmem_tab_entry =
> ++ (j == 0
> ++ ? inmem_orig_sysdep_tab
> ++ : inmem_trans_sysdep_tab)
> ++ + k;
> ++
> ++ if (W (domain->must_swap, p->sysdepref)
> ++ == SEGMENTS_END)
> ++ {
> ++ /* Only one static segment. */
> ++ inmem_tab_entry->length =
> ++ W (domain->must_swap, p->segsize);
> ++ inmem_tab_entry->pointer = static_segments;
> ++ }
> ++ else
> ++ {
> ++ inmem_tab_entry->pointer = mem;
> ++
> ++ for (p = sysdep_string->segments;; p++)
> ++ {
> ++ nls_uint32 segsize =
> ++ W (domain->must_swap, p->segsize);
> ++ nls_uint32 sysdepref =
> ++ W (domain->must_swap, p->sysdepref);
> ++ size_t n;
> ++
> ++ if (segsize > 0)
> ++ {
> ++ memcpy (mem, static_segments, segsize);
> ++ mem += segsize;
> ++ static_segments += segsize;
> ++ }
> ++
> ++ if (sysdepref == SEGMENTS_END)
> ++ break;
> ++
> ++ n = strlen (sysdep_segment_values[sysdepref]);
> ++ memcpy (mem, sysdep_segment_values[sysdepref], n);
> ++ mem += n;
> ++ }
> ++
> ++ inmem_tab_entry->length =
> ++ mem - inmem_tab_entry->pointer;
> ++ }
> ++ }
> ++
> ++ k++;
> ++ }
> ++ }
> ++ if (k != n_inmem_sysdep_strings)
> ++ abort ();
> ++
> ++ /* Compute the augmented hash table. */
> ++ for (i = 0; i < domain->hash_size; i++)
> ++ inmem_hash_tab[i] =
> ++ W (domain->must_swap_hash_tab, domain->hash_tab[i]);
> ++ for (i = 0; i < n_inmem_sysdep_strings; i++)
> ++ {
> ++ const char *msgid = inmem_orig_sysdep_tab[i].pointer;
> ++ nls_uint32 hash_val = hash_string (msgid);
> ++ nls_uint32 idx = hash_val % domain->hash_size;
> ++ nls_uint32 incr =
> ++ 1 + (hash_val % (domain->hash_size - 2));
> ++
> ++ for (;;)
> ++ {
> ++ if (inmem_hash_tab[idx] == 0)
> ++ {
> ++ /* Hash table entry is empty. Use it. */
> ++ inmem_hash_tab[idx] = 1 + domain->nstrings + i;
> ++ break;
> ++ }
> ++
> ++ if (idx >= domain->hash_size - incr)
> ++ idx -= domain->hash_size - incr;
> ++ else
> ++ idx += incr;
> ++ }
> ++ }
> ++
> ++ domain->n_sysdep_strings = n_inmem_sysdep_strings;
> ++ domain->orig_sysdep_tab = inmem_orig_sysdep_tab;
> ++ domain->trans_sysdep_tab = inmem_trans_sysdep_tab;
> ++
> ++ domain->hash_tab = inmem_hash_tab;
> ++ domain->must_swap_hash_tab = 0;
> ++ }
> ++ else
> ++ {
> ++ domain->n_sysdep_strings = 0;
> ++ domain->orig_sysdep_tab = NULL;
> ++ domain->trans_sysdep_tab = NULL;
> ++ }
> ++
> ++ freea (sysdep_segment_values);
> ++ }
> ++ else
> ++ {
> ++ domain->n_sysdep_strings = 0;
> ++ domain->orig_sysdep_tab = NULL;
> ++ domain->trans_sysdep_tab = NULL;
> ++ }
> ++ }
> ++ break;
> ++ }
> + break;
> + default:
> +- /* This is an illegal revision. */
> +-#if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \
> +- || defined _LIBC
> ++ /* This is an invalid revision. */
> ++ invalid:
> ++ /* This is an invalid .mo file. */
> ++ if (domain->malloced)
> ++ free (domain->malloced);
> ++#ifdef HAVE_MMAP
> + if (use_mmap)
> +- munmap ((caddr_t) data, st.st_size);
> ++ munmap ((caddr_t) data, size);
> + else
> + #endif
> + free (data);
> +@@ -193,7 +1385,36 @@
> + return;
> + }
> +
> +- /* Show that one domain is changed. This might make some cached
> +- translations invalid. */
> +- ++_nl_msg_cat_cntr;
> ++ /* Now initialize the character set converter from the character set
> ++ the file is encoded with (found in the header entry) to the domain's
> ++ specified character set or the locale's character set. */
> ++ nullentry = _nl_init_domain_conv (domain_file, domain, domainbinding);
> ++
> ++ /* Also look for a plural specification. */
> ++ EXTRACT_PLURAL_EXPRESSION (nullentry, &domain->plural, &domain->nplurals);
> + }
> ++
> ++
> ++#ifdef _LIBC
> ++void
> ++internal_function
> ++_nl_unload_domain (struct loaded_domain *domain)
> ++{
> ++ if (domain->plural != &__gettext_germanic_plural)
> ++ __gettext_free_exp (domain->plural);
> ++
> ++ _nl_free_domain_conv (domain);
> ++
> ++ if (domain->malloced)
> ++ free (domain->malloced);
> ++
> ++# ifdef _POSIX_MAPPED_FILES
> ++ if (domain->use_mmap)
> ++ munmap ((caddr_t) domain->data, domain->mmap_size);
> ++ else
> ++# endif /* _POSIX_MAPPED_FILES */
> ++ free ((void *) domain->data);
> ++
> ++ free (domain);
> ++}
> ++#endif
> +--- lrzsz-0.12.20.safe/intl/localcharset.c 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/intl/localcharset.c 2004-09-12 14:40:34.478729392 -0400
> +@@ -0,0 +1,398 @@
> ++/* Determine a canonical name for the current locale's character encoding.
> ++
> ++ Copyright (C) 2000-2003 Free Software Foundation, Inc.
> ++
> ++ This program is free software; you can redistribute it and/or modify it
> ++ under the terms of the GNU Library General Public License as published
> ++ by the Free Software Foundation; either version 2, or (at your option)
> ++ any later version.
> ++
> ++ This program is distributed in the hope that it will be useful,
> ++ but WITHOUT ANY WARRANTY; without even the implied warranty of
> ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> ++ Library General Public License for more details.
> ++
> ++ You should have received a copy of the GNU Library General Public
> ++ License along with this program; if not, write to the Free Software
> ++ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
> ++ USA. */
> ++
> ++/* Written by Bruno Haible <bruno at clisp.org>. */
> ++
> ++#ifdef HAVE_CONFIG_H
> ++# include <config.h>
> ++#endif
> ++
> ++/* Specification. */
> ++#include "localcharset.h"
> ++
> ++#if HAVE_STDDEF_H
> ++# include <stddef.h>
> ++#endif
> ++
> ++#include <stdio.h>
> ++#if HAVE_STRING_H
> ++# include <string.h>
> ++#else
> ++# include <strings.h>
> ++#endif
> ++#if HAVE_STDLIB_H
> ++# include <stdlib.h>
> ++#endif
> ++
> ++#if defined _WIN32 || defined __WIN32__
> ++# undef WIN32 /* avoid warning on mingw32 */
> ++# define WIN32
> ++#endif
> ++
> ++#if defined __EMX__
> ++/* Assume EMX program runs on OS/2, even if compiled under DOS. */
> ++# define OS2
> ++#endif
> ++
> ++#if !defined WIN32
> ++# if HAVE_LANGINFO_CODESET
> ++# include <langinfo.h>
> ++# else
> ++# if HAVE_SETLOCALE
> ++# include <locale.h>
> ++# endif
> ++# endif
> ++#elif defined WIN32
> ++# define WIN32_LEAN_AND_MEAN
> ++# include <windows.h>
> ++#endif
> ++#if defined OS2
> ++# define INCL_DOS
> ++# include <os2.h>
> ++#endif
> ++
> ++#if ENABLE_RELOCATABLE
> ++# include "relocatable.h"
> ++#else
> ++# define relocate(pathname) (pathname)
> ++#endif
> ++
> ++#if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__
> ++ /* Win32, OS/2, DOS */
> ++# define ISSLASH(C) ((C) == '/' || (C) == '\\')
> ++#endif
> ++
> ++#ifndef DIRECTORY_SEPARATOR
> ++# define DIRECTORY_SEPARATOR '/'
> ++#endif
> ++
> ++#ifndef ISSLASH
> ++# define ISSLASH(C) ((C) == DIRECTORY_SEPARATOR)
> ++#endif
> ++
> ++#if HAVE_DECL_GETC_UNLOCKED
> ++# undef getc
> ++# define getc getc_unlocked
> ++#endif
> ++
> ++/* The following static variable is declared 'volatile' to avoid a
> ++ possible multithread problem in the function get_charset_aliases. If we
> ++ are running in a threaded environment, and if two threads initialize
> ++ 'charset_aliases' simultaneously, both will produce the same value,
> ++ and everything will be ok if the two assignments to 'charset_aliases'
> ++ are atomic. But I don't know what will happen if the two assignments mix. */
> ++#if __STDC__ != 1
> ++# define volatile /* empty */
> ++#endif
> ++/* Pointer to the contents of the charset.alias file, if it has already been
> ++ read, else NULL. Its format is:
> ++ ALIAS_1 '\0' CANONICAL_1 '\0' ... ALIAS_n '\0' CANONICAL_n '\0' '\0' */
> ++static const char * volatile charset_aliases;
> ++
> ++/* Return a pointer to the contents of the charset.alias file. */
> ++static const char *
> ++get_charset_aliases ()
> ++{
> ++ const char *cp;
> ++
> ++ cp = charset_aliases;
> ++ if (cp == NULL)
> ++ {
> ++#if !(defined VMS || defined WIN32)
> ++ FILE *fp;
> ++ const char *dir = relocate (LIBDIR);
> ++ const char *base = "charset.alias";
> ++ char *file_name;
> ++
> ++ /* Concatenate dir and base into freshly allocated file_name. */
> ++ {
> ++ size_t dir_len = strlen (dir);
> ++ size_t base_len = strlen (base);
> ++ int add_slash = (dir_len > 0 && !ISSLASH (dir[dir_len - 1]));
> ++ file_name = (char *) malloc (dir_len + add_slash + base_len + 1);
> ++ if (file_name != NULL)
> ++ {
> ++ memcpy (file_name, dir, dir_len);
> ++ if (add_slash)
> ++ file_name[dir_len] = DIRECTORY_SEPARATOR;
> ++ memcpy (file_name + dir_len + add_slash, base, base_len + 1);
> ++ }
> ++ }
> ++
> ++ if (file_name == NULL || (fp = fopen (file_name, "r")) == NULL)
> ++ /* Out of memory or file not found, treat it as empty. */
> ++ cp = "";
> ++ else
> ++ {
> ++ /* Parse the file's contents. */
> ++ int c;
> ++ char buf1[50+1];
> ++ char buf2[50+1];
> ++ char *res_ptr = NULL;
> ++ size_t res_size = 0;
> ++ size_t l1, l2;
> ++
> ++ for (;;)
> ++ {
> ++ c = getc (fp);
> ++ if (c == EOF)
> ++ break;
> ++ if (c == '\n' || c == ' ' || c == '\t')
> ++ continue;
> ++ if (c == '#')
> ++ {
> ++ /* Skip comment, to end of line. */
> ++ do
> ++ c = getc (fp);
> ++ while (!(c == EOF || c == '\n'));
> ++ if (c == EOF)
> ++ break;
> ++ continue;
> ++ }
> ++ ungetc (c, fp);
> ++ if (fscanf (fp, "%50s %50s", buf1, buf2) < 2)
> ++ break;
> ++ l1 = strlen (buf1);
> ++ l2 = strlen (buf2);
> ++ if (res_size == 0)
> ++ {
> ++ res_size = l1 + 1 + l2 + 1;
> ++ res_ptr = (char *) malloc (res_size + 1);
> ++ }
> ++ else
> ++ {
> ++ res_size += l1 + 1 + l2 + 1;
> ++ res_ptr = (char *) realloc (res_ptr, res_size + 1);
> ++ }
> ++ if (res_ptr == NULL)
> ++ {
> ++ /* Out of memory. */
> ++ res_size = 0;
> ++ break;
> ++ }
> ++ strcpy (res_ptr + res_size - (l2 + 1) - (l1 + 1), buf1);
> ++ strcpy (res_ptr + res_size - (l2 + 1), buf2);
> ++ }
> ++ fclose (fp);
> ++ if (res_size == 0)
> ++ cp = "";
> ++ else
> ++ {
> ++ *(res_ptr + res_size) = '\0';
> ++ cp = res_ptr;
> ++ }
> ++ }
> ++
> ++ if (file_name != NULL)
> ++ free (file_name);
> ++
> ++#else
> ++
> ++# if defined VMS
> ++ /* To avoid the troubles of an extra file charset.alias_vms in the
> ++ sources of many GNU packages, simply inline the aliases here. */
> ++ /* The list of encodings is taken from the OpenVMS 7.3-1 documentation
> ++ "Compaq C Run-Time Library Reference Manual for OpenVMS systems"
> ++ section 10.7 "Handling Different Character Sets". */
> ++ cp = "ISO8859-1" "\0" "ISO-8859-1" "\0"
> ++ "ISO8859-2" "\0" "ISO-8859-2" "\0"
> ++ "ISO8859-5" "\0" "ISO-8859-5" "\0"
> ++ "ISO8859-7" "\0" "ISO-8859-7" "\0"
> ++ "ISO8859-8" "\0" "ISO-8859-8" "\0"
> ++ "ISO8859-9" "\0" "ISO-8859-9" "\0"
> ++ /* Japanese */
> ++ "eucJP" "\0" "EUC-JP" "\0"
> ++ "SJIS" "\0" "SHIFT_JIS" "\0"
> ++ "DECKANJI" "\0" "DEC-KANJI" "\0"
> ++ "SDECKANJI" "\0" "EUC-JP" "\0"
> ++ /* Chinese */
> ++ "eucTW" "\0" "EUC-TW" "\0"
> ++ "DECHANYU" "\0" "DEC-HANYU" "\0"
> ++ "DECHANZI" "\0" "GB2312" "\0"
> ++ /* Korean */
> ++ "DECKOREAN" "\0" "EUC-KR" "\0";
> ++# endif
> ++
> ++# if defined WIN32
> ++ /* To avoid the troubles of installing a separate file in the same
> ++ directory as the DLL and of retrieving the DLL's directory at
> ++ runtime, simply inline the aliases here. */
> ++
> ++ cp = "CP936" "\0" "GBK" "\0"
> ++ "CP1361" "\0" "JOHAB" "\0"
> ++ "CP20127" "\0" "ASCII" "\0"
> ++ "CP20866" "\0" "KOI8-R" "\0"
> ++ "CP21866" "\0" "KOI8-RU" "\0"
> ++ "CP28591" "\0" "ISO-8859-1" "\0"
> ++ "CP28592" "\0" "ISO-8859-2" "\0"
> ++ "CP28593" "\0" "ISO-8859-3" "\0"
> ++ "CP28594" "\0" "ISO-8859-4" "\0"
> ++ "CP28595" "\0" "ISO-8859-5" "\0"
> ++ "CP28596" "\0" "ISO-8859-6" "\0"
> ++ "CP28597" "\0" "ISO-8859-7" "\0"
> ++ "CP28598" "\0" "ISO-8859-8" "\0"
> ++ "CP28599" "\0" "ISO-8859-9" "\0"
> ++ "CP28605" "\0" "ISO-8859-15" "\0";
> ++# endif
> ++#endif
> ++
> ++ charset_aliases = cp;
> ++ }
> ++
> ++ return cp;
> ++}
> ++
> ++/* Determine the current locale's character encoding, and canonicalize it
> ++ into one of the canonical names listed in config.charset.
> ++ The result must not be freed; it is statically allocated.
> ++ If the canonical name cannot be determined, the result is a non-canonical
> ++ name. */
> ++
> ++#ifdef STATIC
> ++STATIC
> ++#endif
> ++const char *
> ++locale_charset ()
> ++{
> ++ const char *codeset;
> ++ const char *aliases;
> ++
> ++#if !(defined WIN32 || defined OS2)
> ++
> ++# if HAVE_LANGINFO_CODESET
> ++
> ++ /* Most systems support nl_langinfo (CODESET) nowadays. */
> ++ codeset = nl_langinfo (CODESET);
> ++
> ++# else
> ++
> ++ /* On old systems which lack it, use setlocale or getenv. */
> ++ const char *locale = NULL;
> ++
> ++ /* But most old systems don't have a complete set of locales. Some
> ++ (like SunOS 4 or DJGPP) have only the C locale. Therefore we don't
> ++ use setlocale here; it would return "C" when it doesn't support the
> ++ locale name the user has set. */
> ++# if HAVE_SETLOCALE && 0
> ++ locale = setlocale (LC_CTYPE, NULL);
> ++# endif
> ++ if (locale == NULL || locale[0] == '\0')
> ++ {
> ++ locale = getenv ("LC_ALL");
> ++ if (locale == NULL || locale[0] == '\0')
> ++ {
> ++ locale = getenv ("LC_CTYPE");
> ++ if (locale == NULL || locale[0] == '\0')
> ++ locale = getenv ("LANG");
> ++ }
> ++ }
> ++
> ++ /* On some old systems, one used to set locale = "iso8859_1". On others,
> ++ you set it to "language_COUNTRY.charset". In any case, we resolve it
> ++ through the charset.alias file. */
> ++ codeset = locale;
> ++
> ++# endif
> ++
> ++#elif defined WIN32
> ++
> ++ static char buf[2 + 10 + 1];
> ++
> ++ /* Woe32 has a function returning the locale's codepage as a number. */
> ++ sprintf (buf, "CP%u", GetACP ());
> ++ codeset = buf;
> ++
> ++#elif defined OS2
> ++
> ++ const char *locale;
> ++ static char buf[2 + 10 + 1];
> ++ ULONG cp[3];
> ++ ULONG cplen;
> ++
> ++ /* Allow user to override the codeset, as set in the operating system,
> ++ with standard language environment variables. */
> ++ locale = getenv ("LC_ALL");
> ++ if (locale == NULL || locale[0] == '\0')
> ++ {
> ++ locale = getenv ("LC_CTYPE");
> ++ if (locale == NULL || locale[0] == '\0')
> ++ locale = getenv ("LANG");
> ++ }
> ++ if (locale != NULL && locale[0] != '\0')
> ++ {
> ++ /* If the locale name contains an encoding after the dot, return it. */
> ++ const char *dot = strchr (locale, '.');
> ++
> ++ if (dot != NULL)
> ++ {
> ++ const char *modifier;
> ++
> ++ dot++;
> ++ /* Look for the possible @... trailer and remove it, if any. */
> ++ modifier = strchr (dot, '@');
> ++ if (modifier == NULL)
> ++ return dot;
> ++ if (modifier - dot < sizeof (buf))
> ++ {
> ++ memcpy (buf, dot, modifier - dot);
> ++ buf [modifier - dot] = '\0';
> ++ return buf;
> ++ }
> ++ }
> ++
> ++ /* Resolve through the charset.alias file. */
> ++ codeset = locale;
> ++ }
> ++ else
> ++ {
> ++ /* OS/2 has a function returning the locale's codepage as a number. */
> ++ if (DosQueryCp (sizeof (cp), cp, &cplen))
> ++ codeset = "";
> ++ else
> ++ {
> ++ sprintf (buf, "CP%u", cp[0]);
> ++ codeset = buf;
> ++ }
> ++ }
> ++
> ++#endif
> ++
> ++ if (codeset == NULL)
> ++ /* The canonical name cannot be determined. */
> ++ codeset = "";
> ++
> ++ /* Resolve alias. */
> ++ for (aliases = get_charset_aliases ();
> ++ *aliases != '\0';
> ++ aliases += strlen (aliases) + 1, aliases += strlen (aliases) + 1)
> ++ if (strcmp (codeset, aliases) == 0
> ++ || (aliases[0] == '*' && aliases[1] == '\0'))
> ++ {
> ++ codeset = aliases + strlen (aliases) + 1;
> ++ break;
> ++ }
> ++
> ++ /* Don't return an empty string. GNU libc and GNU libiconv interpret
> ++ the empty string as denoting "the locale's character encoding",
> ++ thus GNU libiconv would call this function a second time. */
> ++ if (codeset[0] == '\0')
> ++ codeset = "ASCII";
> ++
> ++ return codeset;
> ++}
> +--- lrzsz-0.12.20.safe/intl/localcharset.h 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/intl/localcharset.h 2004-09-12 14:40:34.483728632 -0400
> +@@ -0,0 +1,42 @@
> ++/* Determine a canonical name for the current locale's character encoding.
> ++ Copyright (C) 2000-2003 Free Software Foundation, Inc.
> ++ This file is part of the GNU CHARSET Library.
> ++
> ++ This program is free software; you can redistribute it and/or modify it
> ++ under the terms of the GNU Library General Public License as published
> ++ by the Free Software Foundation; either version 2, or (at your option)
> ++ any later version.
> ++
> ++ This program is distributed in the hope that it will be useful,
> ++ but WITHOUT ANY WARRANTY; without even the implied warranty of
> ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> ++ Library General Public License for more details.
> ++
> ++ You should have received a copy of the GNU Library General Public
> ++ License along with this program; if not, write to the Free Software
> ++ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
> ++ USA. */
> ++
> ++#ifndef _LOCALCHARSET_H
> ++#define _LOCALCHARSET_H
> ++
> ++
> ++#ifdef __cplusplus
> ++extern "C" {
> ++#endif
> ++
> ++
> ++/* Determine the current locale's character encoding, and canonicalize it
> ++ into one of the canonical names listed in config.charset.
> ++ The result must not be freed; it is statically allocated.
> ++ If the canonical name cannot be determined, the result is a non-canonical
> ++ name. */
> ++extern const char * locale_charset (void);
> ++
> ++
> ++#ifdef __cplusplus
> ++}
> ++#endif
> ++
> ++
> ++#endif /* _LOCALCHARSET_H */
> +--- lrzsz-0.12.20.safe/intl/locale.alias 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/intl/locale.alias 2004-09-12 14:40:34.499726200 -0400
> +@@ -0,0 +1,78 @@
> ++# Locale name alias data base.
> ++# Copyright (C) 1996-2001,2003 Free Software Foundation, Inc.
> ++#
> ++# This program is free software; you can redistribute it and/or modify it
> ++# under the terms of the GNU Library General Public License as published
> ++# by the Free Software Foundation; either version 2, or (at your option)
> ++# any later version.
> ++#
> ++# This program is distributed in the hope that it will be useful,
> ++# but WITHOUT ANY WARRANTY; without even the implied warranty of
> ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> ++# Library General Public License for more details.
> ++#
> ++# You should have received a copy of the GNU Library General Public
> ++# License along with this program; if not, write to the Free Software
> ++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
> ++# USA.
> ++
> ++# The format of this file is the same as for the corresponding file of
> ++# the X Window System, which normally can be found in
> ++# /usr/lib/X11/locale/locale.alias
> ++# A single line contains two fields: an alias and a substitution value.
> ++# All entries are case independent.
> ++
> ++# Note: This file is far from being complete. If you have a value for
> ++# your own site which you think might be useful for others too, share
> ++# it with the rest of us. Send it using the `glibcbug' script to
> ++# bugs at gnu.org.
> ++
> ++# Packages using this file:
> ++
> ++bokmal nb_NO.ISO-8859-1
> ++bokm�l nb_NO.ISO-8859-1
> ++catalan ca_ES.ISO-8859-1
> ++croatian hr_HR.ISO-8859-2
> ++czech cs_CZ.ISO-8859-2
> ++danish da_DK.ISO-8859-1
> ++dansk da_DK.ISO-8859-1
> ++deutsch de_DE.ISO-8859-1
> ++dutch nl_NL.ISO-8859-1
> ++eesti et_EE.ISO-8859-1
> ++estonian et_EE.ISO-8859-1
> ++finnish fi_FI.ISO-8859-1
> ++fran�ais fr_FR.ISO-8859-1
> ++french fr_FR.ISO-8859-1
> ++galego gl_ES.ISO-8859-1
> ++galician gl_ES.ISO-8859-1
> ++german de_DE.ISO-8859-1
> ++greek el_GR.ISO-8859-7
> ++hebrew he_IL.ISO-8859-8
> ++hrvatski hr_HR.ISO-8859-2
> ++hungarian hu_HU.ISO-8859-2
> ++icelandic is_IS.ISO-8859-1
> ++italian it_IT.ISO-8859-1
> ++japanese ja_JP.eucJP
> ++japanese.euc ja_JP.eucJP
> ++ja_JP ja_JP.eucJP
> ++ja_JP.ujis ja_JP.eucJP
> ++japanese.sjis ja_JP.SJIS
> ++korean ko_KR.eucKR
> ++korean.euc ko_KR.eucKR
> ++ko_KR ko_KR.eucKR
> ++lithuanian lt_LT.ISO-8859-13
> ++no_NO nb_NO.ISO-8859-1
> ++no_NO.ISO-8859-1 nb_NO.ISO-8859-1
> ++norwegian nb_NO.ISO-8859-1
> ++nynorsk nn_NO.ISO-8859-1
> ++polish pl_PL.ISO-8859-2
> ++portuguese pt_PT.ISO-8859-1
> ++romanian ro_RO.ISO-8859-2
> ++russian ru_RU.ISO-8859-5
> ++slovak sk_SK.ISO-8859-2
> ++slovene sl_SI.ISO-8859-2
> ++slovenian sl_SI.ISO-8859-2
> ++spanish es_ES.ISO-8859-1
> ++swedish sv_SE.ISO-8859-1
> ++thai th_TH.TIS-620
> ++turkish tr_TR.ISO-8859-9
> +--- lrzsz-0.12.20.safe/intl/localealias.c 1998-04-26 09:22:37.000000000 -0400
> ++++ lrzsz-0.12.20/intl/localealias.c 2004-09-12 14:40:34.505725288 -0400
> +@@ -1,20 +1,27 @@
> +-/* Handle aliases for locale names
> +- Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
> +- Written by Ulrich Drepper <drepper at gnu.ai.mit.edu>, 1995.
> ++/* Handle aliases for locale names.
> ++ Copyright (C) 1995-1999, 2000-2001, 2003 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
> +- the Free Software Foundation; either version 2, or (at your option)
> ++ This program is free software; you can redistribute it and/or modify it
> ++ under the terms of the GNU Library General Public License as published
> ++ by the Free Software Foundation; either version 2, or (at your option)
> + any later version.
> +
> + This program is distributed in the hope that it will be useful,
> + but WITHOUT ANY WARRANTY; without even the implied warranty of
> +- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> +- GNU General Public License for more details.
> ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> ++ Library General Public License for more details.
> +
> +- You should have received a copy of the GNU 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. */
> ++ You should have received a copy of the GNU Library General Public
> ++ License along with this program; if not, write to the Free Software
> ++ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
> ++ USA. */
> ++
> ++/* Tell glibc's <string.h> to provide a prototype for mempcpy().
> ++ This must come before <config.h> because <config.h> may include
> ++ <features.h>, and once <features.h> has been included, it's too late. */
> ++#ifndef _GNU_SOURCE
> ++# define _GNU_SOURCE 1
> ++#endif
> +
> + #ifdef HAVE_CONFIG_H
> + # include <config.h>
> +@@ -22,56 +29,45 @@
> +
> + #include <ctype.h>
> + #include <stdio.h>
> ++#if defined _LIBC || defined HAVE___FSETLOCKING
> ++# include <stdio_ext.h>
> ++#endif
> + #include <sys/types.h>
> +
> + #ifdef __GNUC__
> ++# undef alloca
> + # define alloca __builtin_alloca
> + # define HAVE_ALLOCA 1
> + #else
> +-# if defined HAVE_ALLOCA_H || defined _LIBC
> +-# include <alloca.h>
> ++# ifdef _MSC_VER
> ++# include <malloc.h>
> ++# define alloca _alloca
> + # else
> +-# ifdef _AIX
> +- #pragma alloca
> ++# if defined HAVE_ALLOCA_H || defined _LIBC
> ++# include <alloca.h>
> + # else
> +-# ifndef alloca
> ++# ifdef _AIX
> ++ #pragma alloca
> ++# else
> ++# ifndef alloca
> + char *alloca ();
> ++# endif
> + # endif
> + # endif
> + # endif
> + #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
> ++#include <stdlib.h>
> ++#include <string.h>
> +
> +-#if defined HAVE_STRING_H || defined _LIBC
> +-# ifndef _GNU_SOURCE
> +-# define _GNU_SOURCE 1
> +-# endif
> +-# include <string.h>
> ++#include "gettextP.h"
> ++
> ++#if ENABLE_RELOCATABLE
> ++# include "relocatable.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
> ++# define relocate(pathname) (pathname)
> + #endif
> +
> +-#include "gettext.h"
> +-#include "gettextP.h"
> +-
> + /* @@ end of prolog @@ */
> +
> + #ifdef _LIBC
> +@@ -79,43 +75,49 @@
> + because some ANSI C functions will require linking with this object
> + file and the name space must not be polluted. */
> + # define strcasecmp __strcasecmp
> ++
> ++# ifndef mempcpy
> ++# define mempcpy __mempcpy
> ++# endif
> ++# define HAVE_MEMPCPY 1
> ++# define HAVE___FSETLOCKING 1
> ++
> ++/* We need locking here since we can be called from different places. */
> ++# include <bits/libc-lock.h>
> ++
> ++__libc_lock_define_initialized (static, lock);
> ++#endif
> ++
> ++#ifndef internal_function
> ++# define internal_function
> + #endif
> +
> ++/* Some optimizations for glibc. */
> ++#ifdef _LIBC
> ++# define FEOF(fp) feof_unlocked (fp)
> ++# define FGETS(buf, n, fp) fgets_unlocked (buf, n, fp)
> ++#else
> ++# define FEOF(fp) feof (fp)
> ++# define FGETS(buf, n, fp) fgets (buf, n, fp)
> ++#endif
> +
> +-/* For those loosing systems which don't have `alloca' we have to add
> ++/* For those losing systems which don't have `alloca' we have to add
> + some additional code emulating it. */
> + #ifdef HAVE_ALLOCA
> +-/* Nothing has to be done. */
> +-# define ADD_BLOCK(list, address) /* nothing */
> +-# define FREE_BLOCKS(list) /* nothing */
> ++# define freea(p) /* 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 */
> ++# define alloca(n) malloc (n)
> ++# define freea(p) free (p)
> ++#endif
> ++
> ++#if defined _LIBC_REENTRANT || HAVE_DECL_FGETS_UNLOCKED
> ++# undef fgets
> ++# define fgets(buf, len, s) fgets_unlocked (buf, len, s)
> ++#endif
> ++#if defined _LIBC_REENTRANT || HAVE_DECL_FEOF_UNLOCKED
> ++# undef feof
> ++# define feof(s) feof_unlocked (s)
> ++#endif
> +
> +
> + struct alias_map
> +@@ -125,26 +127,41 @@
> + };
> +
> +
> +-static struct alias_map *map;
> +-static size_t nmap = 0;
> +-static size_t maxmap = 0;
> ++#ifndef _LIBC
> ++# define libc_freeres_ptr(decl) decl
> ++#endif
> ++
> ++libc_freeres_ptr (static char *string_space);
> ++static size_t string_space_act;
> ++static size_t string_space_max;
> ++libc_freeres_ptr (static struct alias_map *map);
> ++static size_t nmap;
> ++static size_t maxmap;
> +
> +
> + /* Prototypes for local functions. */
> +-static size_t read_alias_file PARAMS ((const char *fname, int fname_len));
> +-static void extend_alias_table PARAMS ((void));
> +-static int alias_compare PARAMS ((const struct alias_map *map1,
> +- const struct alias_map *map2));
> ++static size_t read_alias_file (const char *fname, int fname_len)
> ++ internal_function;
> ++static int extend_alias_table (void);
> ++static int alias_compare (const struct alias_map *map1,
> ++ const struct alias_map *map2);
> +
> +
> + const char *
> +-_nl_expand_alias (name)
> +- const char *name;
> ++_nl_expand_alias (const char *name)
> + {
> +- static const char *locale_alias_path = LOCALE_ALIAS_PATH;
> ++ static const char *locale_alias_path;
> + struct alias_map *retval;
> ++ const char *result = NULL;
> + size_t added;
> +
> ++#ifdef _LIBC
> ++ __libc_lock_lock (lock);
> ++#endif
> ++
> ++ if (locale_alias_path == NULL)
> ++ locale_alias_path = LOCALE_ALIAS_PATH;
> ++
> + do
> + {
> + struct alias_map item;
> +@@ -154,15 +171,18 @@
> + if (nmap > 0)
> + retval = (struct alias_map *) bsearch (&item, map, nmap,
> + sizeof (struct alias_map),
> +- (int (*) PARAMS ((const void *,
> +- const void *))
> ++ (int (*) (const void *,
> ++ const void *)
> + ) alias_compare);
> + else
> + retval = NULL;
> +
> + /* We really found an alias. Return the value. */
> + if (retval != NULL)
> +- return retval->value;
> ++ {
> ++ result = retval->value;
> ++ break;
> ++ }
> +
> + /* Perhaps we can find another alias file. */
> + added = 0;
> +@@ -170,11 +190,12 @@
> + {
> + const char *start;
> +
> +- while (locale_alias_path[0] == ':')
> ++ while (locale_alias_path[0] == PATH_SEPARATOR)
> + ++locale_alias_path;
> + start = locale_alias_path;
> +
> +- while (locale_alias_path[0] != '\0' && locale_alias_path[0] != ':')
> ++ while (locale_alias_path[0] != '\0'
> ++ && locale_alias_path[0] != PATH_SEPARATOR)
> + ++locale_alias_path;
> +
> + if (start < locale_alias_path)
> +@@ -183,78 +204,87 @@
> + }
> + while (added != 0);
> +
> +- return NULL;
> ++#ifdef _LIBC
> ++ __libc_lock_unlock (lock);
> ++#endif
> ++
> ++ return result;
> + }
> +
> +
> + static size_t
> +-read_alias_file (fname, fname_len)
> +- const char *fname;
> +- int fname_len;
> ++internal_function
> ++read_alias_file (const char *fname, int fname_len)
> + {
> +-#ifndef HAVE_ALLOCA
> +- struct block_list *block_list = NULL;
> +-#endif
> + FILE *fp;
> + char *full_fname;
> + size_t added;
> + static const char aliasfile[] = "/locale.alias";
> +
> + full_fname = (char *) alloca (fname_len + sizeof aliasfile);
> +- ADD_BLOCK (block_list, full_fname);
> ++#ifdef HAVE_MEMPCPY
> ++ mempcpy (mempcpy (full_fname, fname, fname_len),
> ++ aliasfile, sizeof aliasfile);
> ++#else
> + memcpy (full_fname, fname, fname_len);
> + memcpy (&full_fname[fname_len], aliasfile, sizeof aliasfile);
> ++#endif
> +
> +- fp = fopen (full_fname, "r");
> ++ fp = fopen (relocate (full_fname), "r");
> ++ freea (full_fname);
> + if (fp == NULL)
> +- {
> +- FREE_BLOCKS (block_list);
> +- return 0;
> +- }
> ++ return 0;
> ++
> ++#ifdef HAVE___FSETLOCKING
> ++ /* No threads present. */
> ++ __fsetlocking (fp, FSETLOCKING_BYCALLER);
> ++#endif
> +
> + added = 0;
> +- while (!feof (fp))
> ++ while (!FEOF (fp))
> + {
> + /* It is a reasonable approach to use a fix buffer here because
> + a) we are only interested in the first two fields
> + b) these fields must be usable as file names and so must not
> + be that long
> +- */
> +- char buf[BUFSIZ];
> ++ We avoid a multi-kilobyte buffer here since this would use up
> ++ stack space which we might not have if the program ran out of
> ++ memory. */
> ++ char buf[400];
> + char *alias;
> + char *value;
> + char *cp;
> +
> +- if (fgets (buf, BUFSIZ, fp) == NULL)
> ++ if (FGETS (buf, sizeof buf, fp) == NULL)
> + /* EOF reached. */
> + break;
> +
> + cp = buf;
> + /* Ignore leading white space. */
> +- while (isspace (cp[0]))
> ++ while (isspace ((unsigned char) cp[0]))
> + ++cp;
> +
> + /* A leading '#' signals a comment line. */
> + if (cp[0] != '\0' && cp[0] != '#')
> + {
> + alias = cp++;
> +- while (cp[0] != '\0' && !isspace (cp[0]))
> ++ while (cp[0] != '\0' && !isspace ((unsigned char) cp[0]))
> + ++cp;
> + /* Terminate alias name. */
> + if (cp[0] != '\0')
> + *cp++ = '\0';
> +
> + /* Now look for the beginning of the value. */
> +- while (isspace (cp[0]))
> ++ while (isspace ((unsigned char) cp[0]))
> + ++cp;
> +
> + if (cp[0] != '\0')
> + {
> +- char *tp;
> +- size_t len;
> ++ size_t alias_len;
> ++ size_t value_len;
> +
> + value = cp++;
> +- while (cp[0] != '\0' && !isspace (cp[0]))
> ++ while (cp[0] != '\0' && !isspace ((unsigned char) cp[0]))
> + ++cp;
> + /* Terminate value. */
> + if (cp[0] == '\n')
> +@@ -269,28 +299,44 @@
> + *cp++ = '\0';
> +
> + if (nmap >= maxmap)
> +- extend_alias_table ();
> +-
> +- /* We cannot depend on strdup available in the libc. Sigh! */
> +- len = strlen (alias) + 1;
> +- tp = (char *) malloc (len);
> +- if (tp == NULL)
> +- {
> +- FREE_BLOCKS (block_list);
> ++ if (__builtin_expect (extend_alias_table (), 0))
> + return added;
> +- }
> +- memcpy (tp, alias, len);
> +- map[nmap].alias = tp;
> +
> +- len = strlen (value) + 1;
> +- tp = (char *) malloc (len);
> +- if (tp == NULL)
> ++ alias_len = strlen (alias) + 1;
> ++ value_len = strlen (value) + 1;
> ++
> ++ if (string_space_act + alias_len + value_len > string_space_max)
> + {
> +- FREE_BLOCKS (block_list);
> +- return added;
> ++ /* Increase size of memory pool. */
> ++ size_t new_size = (string_space_max
> ++ + (alias_len + value_len > 1024
> ++ ? alias_len + value_len : 1024));
> ++ char *new_pool = (char *) realloc (string_space, new_size);
> ++ if (new_pool == NULL)
> ++ return added;
> ++
> ++ if (__builtin_expect (string_space != new_pool, 0))
> ++ {
> ++ size_t i;
> ++
> ++ for (i = 0; i < nmap; i++)
> ++ {
> ++ map[i].alias += new_pool - string_space;
> ++ map[i].value += new_pool - string_space;
> ++ }
> ++ }
> ++
> ++ string_space = new_pool;
> ++ string_space_max = new_size;
> + }
> +- memcpy (tp, value, len);
> +- map[nmap].value = tp;
> ++
> ++ map[nmap].alias = memcpy (&string_space[string_space_act],
> ++ alias, alias_len);
> ++ string_space_act += alias_len;
> ++
> ++ map[nmap].value = memcpy (&string_space[string_space_act],
> ++ value, value_len);
> ++ string_space_act += value_len;
> +
> + ++nmap;
> + ++added;
> +@@ -299,14 +345,11 @@
> +
> + /* Possibly not the whole line fits into the buffer. Ignore
> + the rest of the line. */
> +- while (strchr (cp, '\n') == NULL)
> +- {
> +- cp = buf;
> +- if (fgets (buf, BUFSIZ, fp) == NULL)
> +- /* Make sure the inner loop will be left. The outer loop
> +- will exit at the `feof' test. */
> +- *cp = '\n';
> +- }
> ++ while (strchr (buf, '\n') == NULL)
> ++ if (FGETS (buf, sizeof buf, fp) == NULL)
> ++ /* Make sure the inner loop will be left. The outer loop
> ++ will exit at the `feof' test. */
> ++ break;
> + }
> +
> + /* Should we test for ferror()? I think we have to silently ignore
> +@@ -315,40 +358,33 @@
> +
> + if (added > 0)
> + qsort (map, nmap, sizeof (struct alias_map),
> +- (int (*) PARAMS ((const void *, const void *))) alias_compare);
> ++ (int (*) (const void *, const void *)) alias_compare);
> +
> +- FREE_BLOCKS (block_list);
> + return added;
> + }
> +
> +
> +-static void
> ++static int
> + extend_alias_table ()
> + {
> + size_t new_size;
> + struct alias_map *new_map;
> +
> + new_size = maxmap == 0 ? 100 : 2 * maxmap;
> +- new_map = (struct alias_map *) malloc (new_size
> +- * sizeof (struct alias_map));
> ++ new_map = (struct alias_map *) realloc (map, (new_size
> ++ * sizeof (struct alias_map)));
> + if (new_map == NULL)
> + /* Simply don't extend: we don't have any more core. */
> +- return;
> +-
> +- memcpy (new_map, map, nmap * sizeof (struct alias_map));
> +-
> +- if (maxmap != 0)
> +- free (map);
> ++ return -1;
> +
> + map = new_map;
> + maxmap = new_size;
> ++ return 0;
> + }
> +
> +
> + static int
> +-alias_compare (map1, map2)
> +- const struct alias_map *map1;
> +- const struct alias_map *map2;
> ++alias_compare (const struct alias_map *map1, const struct alias_map *map2)
> + {
> + #if defined _LIBC || defined HAVE_STRCASECMP
> + return strcasecmp (map1->alias, map2->alias);
> +--- lrzsz-0.12.20.safe/intl/localename.c 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/intl/localename.c 2004-09-12 14:40:34.510724528 -0400
> +@@ -0,0 +1,1142 @@
> ++/* Determine the current selected locale.
> ++ Copyright (C) 1995-1999, 2000-2004 Free Software Foundation, Inc.
> ++
> ++ This program is free software; you can redistribute it and/or modify it
> ++ under the terms of the GNU Library General Public License as published
> ++ by the Free Software Foundation; either version 2, or (at your option)
> ++ any later version.
> ++
> ++ This program is distributed in the hope that it will be useful,
> ++ but WITHOUT ANY WARRANTY; without even the implied warranty of
> ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> ++ Library General Public License for more details.
> ++
> ++ You should have received a copy of the GNU Library General Public
> ++ License along with this program; if not, write to the Free Software
> ++ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
> ++ USA. */
> ++
> ++/* Written by Ulrich Drepper <drepper at gnu.org>, 1995. */
> ++/* Win32 code written by Tor Lillqvist <tml at iki.fi>. */
> ++
> ++#ifdef HAVE_CONFIG_H
> ++# include <config.h>
> ++#endif
> ++
> ++#include <stdlib.h>
> ++#include <locale.h>
> ++
> ++#if defined _WIN32 || defined __WIN32__
> ++# undef WIN32 /* avoid warning on mingw32 */
> ++# define WIN32
> ++#endif
> ++
> ++#ifdef WIN32
> ++# define WIN32_LEAN_AND_MEAN
> ++# include <windows.h>
> ++/* List of language codes, sorted by value:
> ++ 0x01 LANG_ARABIC
> ++ 0x02 LANG_BULGARIAN
> ++ 0x03 LANG_CATALAN
> ++ 0x04 LANG_CHINESE
> ++ 0x05 LANG_CZECH
> ++ 0x06 LANG_DANISH
> ++ 0x07 LANG_GERMAN
> ++ 0x08 LANG_GREEK
> ++ 0x09 LANG_ENGLISH
> ++ 0x0a LANG_SPANISH
> ++ 0x0b LANG_FINNISH
> ++ 0x0c LANG_FRENCH
> ++ 0x0d LANG_HEBREW
> ++ 0x0e LANG_HUNGARIAN
> ++ 0x0f LANG_ICELANDIC
> ++ 0x10 LANG_ITALIAN
> ++ 0x11 LANG_JAPANESE
> ++ 0x12 LANG_KOREAN
> ++ 0x13 LANG_DUTCH
> ++ 0x14 LANG_NORWEGIAN
> ++ 0x15 LANG_POLISH
> ++ 0x16 LANG_PORTUGUESE
> ++ 0x17 LANG_RHAETO_ROMANCE
> ++ 0x18 LANG_ROMANIAN
> ++ 0x19 LANG_RUSSIAN
> ++ 0x1a LANG_CROATIAN == LANG_SERBIAN
> ++ 0x1b LANG_SLOVAK
> ++ 0x1c LANG_ALBANIAN
> ++ 0x1d LANG_SWEDISH
> ++ 0x1e LANG_THAI
> ++ 0x1f LANG_TURKISH
> ++ 0x20 LANG_URDU
> ++ 0x21 LANG_INDONESIAN
> ++ 0x22 LANG_UKRAINIAN
> ++ 0x23 LANG_BELARUSIAN
> ++ 0x24 LANG_SLOVENIAN
> ++ 0x25 LANG_ESTONIAN
> ++ 0x26 LANG_LATVIAN
> ++ 0x27 LANG_LITHUANIAN
> ++ 0x28 LANG_TAJIK
> ++ 0x29 LANG_FARSI
> ++ 0x2a LANG_VIETNAMESE
> ++ 0x2b LANG_ARMENIAN
> ++ 0x2c LANG_AZERI
> ++ 0x2d LANG_BASQUE
> ++ 0x2e LANG_SORBIAN
> ++ 0x2f LANG_MACEDONIAN
> ++ 0x30 LANG_SUTU
> ++ 0x31 LANG_TSONGA
> ++ 0x32 LANG_TSWANA
> ++ 0x33 LANG_VENDA
> ++ 0x34 LANG_XHOSA
> ++ 0x35 LANG_ZULU
> ++ 0x36 LANG_AFRIKAANS
> ++ 0x37 LANG_GEORGIAN
> ++ 0x38 LANG_FAEROESE
> ++ 0x39 LANG_HINDI
> ++ 0x3a LANG_MALTESE
> ++ 0x3b LANG_SAAMI
> ++ 0x3c LANG_GAELIC
> ++ 0x3d LANG_YIDDISH
> ++ 0x3e LANG_MALAY
> ++ 0x3f LANG_KAZAK
> ++ 0x40 LANG_KYRGYZ
> ++ 0x41 LANG_SWAHILI
> ++ 0x42 LANG_TURKMEN
> ++ 0x43 LANG_UZBEK
> ++ 0x44 LANG_TATAR
> ++ 0x45 LANG_BENGALI
> ++ 0x46 LANG_PUNJABI
> ++ 0x47 LANG_GUJARATI
> ++ 0x48 LANG_ORIYA
> ++ 0x49 LANG_TAMIL
> ++ 0x4a LANG_TELUGU
> ++ 0x4b LANG_KANNADA
> ++ 0x4c LANG_MALAYALAM
> ++ 0x4d LANG_ASSAMESE
> ++ 0x4e LANG_MARATHI
> ++ 0x4f LANG_SANSKRIT
> ++ 0x50 LANG_MONGOLIAN
> ++ 0x51 LANG_TIBETAN
> ++ 0x52 LANG_WELSH
> ++ 0x53 LANG_CAMBODIAN
> ++ 0x54 LANG_LAO
> ++ 0x55 LANG_BURMESE
> ++ 0x56 LANG_GALICIAN
> ++ 0x57 LANG_KONKANI
> ++ 0x58 LANG_MANIPURI
> ++ 0x59 LANG_SINDHI
> ++ 0x5a LANG_SYRIAC
> ++ 0x5b LANG_SINHALESE
> ++ 0x5c LANG_CHEROKEE
> ++ 0x5d LANG_INUKTITUT
> ++ 0x5e LANG_AMHARIC
> ++ 0x5f LANG_TAMAZIGHT
> ++ 0x60 LANG_KASHMIRI
> ++ 0x61 LANG_NEPALI
> ++ 0x62 LANG_FRISIAN
> ++ 0x63 LANG_PASHTO
> ++ 0x64 LANG_TAGALOG
> ++ 0x65 LANG_DIVEHI
> ++ 0x66 LANG_EDO
> ++ 0x67 LANG_FULFULDE
> ++ 0x68 LANG_HAUSA
> ++ 0x69 LANG_IBIBIO
> ++ 0x6a LANG_YORUBA
> ++ 0x70 LANG_IGBO
> ++ 0x71 LANG_KANURI
> ++ 0x72 LANG_OROMO
> ++ 0x73 LANG_TIGRINYA
> ++ 0x74 LANG_GUARANI
> ++ 0x75 LANG_HAWAIIAN
> ++ 0x76 LANG_LATIN
> ++ 0x77 LANG_SOMALI
> ++ 0x78 LANG_YI
> ++ 0x79 LANG_PAPIAMENTU
> ++*/
> ++/* Mingw headers don't have latest language and sublanguage codes. */
> ++# ifndef LANG_AFRIKAANS
> ++# define LANG_AFRIKAANS 0x36
> ++# endif
> ++# ifndef LANG_ALBANIAN
> ++# define LANG_ALBANIAN 0x1c
> ++# endif
> ++# ifndef LANG_AMHARIC
> ++# define LANG_AMHARIC 0x5e
> ++# endif
> ++# ifndef LANG_ARABIC
> ++# define LANG_ARABIC 0x01
> ++# endif
> ++# ifndef LANG_ARMENIAN
> ++# define LANG_ARMENIAN 0x2b
> ++# endif
> ++# ifndef LANG_ASSAMESE
> ++# define LANG_ASSAMESE 0x4d
> ++# endif
> ++# ifndef LANG_AZERI
> ++# define LANG_AZERI 0x2c
> ++# endif
> ++# ifndef LANG_BASQUE
> ++# define LANG_BASQUE 0x2d
> ++# endif
> ++# ifndef LANG_BELARUSIAN
> ++# define LANG_BELARUSIAN 0x23
> ++# endif
> ++# ifndef LANG_BENGALI
> ++# define LANG_BENGALI 0x45
> ++# endif
> ++# ifndef LANG_BURMESE
> ++# define LANG_BURMESE 0x55
> ++# endif
> ++# ifndef LANG_CAMBODIAN
> ++# define LANG_CAMBODIAN 0x53
> ++# endif
> ++# ifndef LANG_CATALAN
> ++# define LANG_CATALAN 0x03
> ++# endif
> ++# ifndef LANG_CHEROKEE
> ++# define LANG_CHEROKEE 0x5c
> ++# endif
> ++# ifndef LANG_DIVEHI
> ++# define LANG_DIVEHI 0x65
> ++# endif
> ++# ifndef LANG_EDO
> ++# define LANG_EDO 0x66
> ++# endif
> ++# ifndef LANG_ESTONIAN
> ++# define LANG_ESTONIAN 0x25
> ++# endif
> ++# ifndef LANG_FAEROESE
> ++# define LANG_FAEROESE 0x38
> ++# endif
> ++# ifndef LANG_FARSI
> ++# define LANG_FARSI 0x29
> ++# endif
> ++# ifndef LANG_FRISIAN
> ++# define LANG_FRISIAN 0x62
> ++# endif
> ++# ifndef LANG_FULFULDE
> ++# define LANG_FULFULDE 0x67
> ++# endif
> ++# ifndef LANG_GAELIC
> ++# define LANG_GAELIC 0x3c
> ++# endif
> ++# ifndef LANG_GALICIAN
> ++# define LANG_GALICIAN 0x56
> ++# endif
> ++# ifndef LANG_GEORGIAN
> ++# define LANG_GEORGIAN 0x37
> ++# endif
> ++# ifndef LANG_GUARANI
> ++# define LANG_GUARANI 0x74
> ++# endif
> ++# ifndef LANG_GUJARATI
> ++# define LANG_GUJARATI 0x47
> ++# endif
> ++# ifndef LANG_HAUSA
> ++# define LANG_HAUSA 0x68
> ++# endif
> ++# ifndef LANG_HAWAIIAN
> ++# define LANG_HAWAIIAN 0x75
> ++# endif
> ++# ifndef LANG_HEBREW
> ++# define LANG_HEBREW 0x0d
> ++# endif
> ++# ifndef LANG_HINDI
> ++# define LANG_HINDI 0x39
> ++# endif
> ++# ifndef LANG_IBIBIO
> ++# define LANG_IBIBIO 0x69
> ++# endif
> ++# ifndef LANG_IGBO
> ++# define LANG_IGBO 0x70
> ++# endif
> ++# ifndef LANG_INDONESIAN
> ++# define LANG_INDONESIAN 0x21
> ++# endif
> ++# ifndef LANG_INUKTITUT
> ++# define LANG_INUKTITUT 0x5d
> ++# endif
> ++# ifndef LANG_KANNADA
> ++# define LANG_KANNADA 0x4b
> ++# endif
> ++# ifndef LANG_KANURI
> ++# define LANG_KANURI 0x71
> ++# endif
> ++# ifndef LANG_KASHMIRI
> ++# define LANG_KASHMIRI 0x60
> ++# endif
> ++# ifndef LANG_KAZAK
> ++# define LANG_KAZAK 0x3f
> ++# endif
> ++# ifndef LANG_KONKANI
> ++# define LANG_KONKANI 0x57
> ++# endif
> ++# ifndef LANG_KYRGYZ
> ++# define LANG_KYRGYZ 0x40
> ++# endif
> ++# ifndef LANG_LAO
> ++# define LANG_LAO 0x54
> ++# endif
> ++# ifndef LANG_LATIN
> ++# define LANG_LATIN 0x76
> ++# endif
> ++# ifndef LANG_LATVIAN
> ++# define LANG_LATVIAN 0x26
> ++# endif
> ++# ifndef LANG_LITHUANIAN
> ++# define LANG_LITHUANIAN 0x27
> ++# endif
> ++# ifndef LANG_MACEDONIAN
> ++# define LANG_MACEDONIAN 0x2f
> ++# endif
> ++# ifndef LANG_MALAY
> ++# define LANG_MALAY 0x3e
> ++# endif
> ++# ifndef LANG_MALAYALAM
> ++# define LANG_MALAYALAM 0x4c
> ++# endif
> ++# ifndef LANG_MALTESE
> ++# define LANG_MALTESE 0x3a
> ++# endif
> ++# ifndef LANG_MANIPURI
> ++# define LANG_MANIPURI 0x58
> ++# endif
> ++# ifndef LANG_MARATHI
> ++# define LANG_MARATHI 0x4e
> ++# endif
> ++# ifndef LANG_MONGOLIAN
> ++# define LANG_MONGOLIAN 0x50
> ++# endif
> ++# ifndef LANG_NEPALI
> ++# define LANG_NEPALI 0x61
> ++# endif
> ++# ifndef LANG_ORIYA
> ++# define LANG_ORIYA 0x48
> ++# endif
> ++# ifndef LANG_OROMO
> ++# define LANG_OROMO 0x72
> ++# endif
> ++# ifndef LANG_PAPIAMENTU
> ++# define LANG_PAPIAMENTU 0x79
> ++# endif
> ++# ifndef LANG_PASHTO
> ++# define LANG_PASHTO 0x63
> ++# endif
> ++# ifndef LANG_PUNJABI
> ++# define LANG_PUNJABI 0x46
> ++# endif
> ++# ifndef LANG_RHAETO_ROMANCE
> ++# define LANG_RHAETO_ROMANCE 0x17
> ++# endif
> ++# ifndef LANG_SAAMI
> ++# define LANG_SAAMI 0x3b
> ++# endif
> ++# ifndef LANG_SANSKRIT
> ++# define LANG_SANSKRIT 0x4f
> ++# endif
> ++# ifndef LANG_SERBIAN
> ++# define LANG_SERBIAN 0x1a
> ++# endif
> ++# ifndef LANG_SINDHI
> ++# define LANG_SINDHI 0x59
> ++# endif
> ++# ifndef LANG_SINHALESE
> ++# define LANG_SINHALESE 0x5b
> ++# endif
> ++# ifndef LANG_SLOVAK
> ++# define LANG_SLOVAK 0x1b
> ++# endif
> ++# ifndef LANG_SOMALI
> ++# define LANG_SOMALI 0x77
> ++# endif
> ++# ifndef LANG_SORBIAN
> ++# define LANG_SORBIAN 0x2e
> ++# endif
> ++# ifndef LANG_SUTU
> ++# define LANG_SUTU 0x30
> ++# endif
> ++# ifndef LANG_SWAHILI
> ++# define LANG_SWAHILI 0x41
> ++# endif
> ++# ifndef LANG_SYRIAC
> ++# define LANG_SYRIAC 0x5a
> ++# endif
> ++# ifndef LANG_TAGALOG
> ++# define LANG_TAGALOG 0x64
> ++# endif
> ++# ifndef LANG_TAJIK
> ++# define LANG_TAJIK 0x28
> ++# endif
> ++# ifndef LANG_TAMAZIGHT
> ++# define LANG_TAMAZIGHT 0x5f
> ++# endif
> ++# ifndef LANG_TAMIL
> ++# define LANG_TAMIL 0x49
> ++# endif
> ++# ifndef LANG_TATAR
> ++# define LANG_TATAR 0x44
> ++# endif
> ++# ifndef LANG_TELUGU
> ++# define LANG_TELUGU 0x4a
> ++# endif
> ++# ifndef LANG_THAI
> ++# define LANG_THAI 0x1e
> ++# endif
> ++# ifndef LANG_TIBETAN
> ++# define LANG_TIBETAN 0x51
> ++# endif
> ++# ifndef LANG_TIGRINYA
> ++# define LANG_TIGRINYA 0x73
> ++# endif
> ++# ifndef LANG_TSONGA
> ++# define LANG_TSONGA 0x31
> ++# endif
> ++# ifndef LANG_TSWANA
> ++# define LANG_TSWANA 0x32
> ++# endif
> ++# ifndef LANG_TURKMEN
> ++# define LANG_TURKMEN 0x42
> ++# endif
> ++# ifndef LANG_UKRAINIAN
> ++# define LANG_UKRAINIAN 0x22
> ++# endif
> ++# ifndef LANG_URDU
> ++# define LANG_URDU 0x20
> ++# endif
> ++# ifndef LANG_UZBEK
> ++# define LANG_UZBEK 0x43
> ++# endif
> ++# ifndef LANG_VENDA
> ++# define LANG_VENDA 0x33
> ++# endif
> ++# ifndef LANG_VIETNAMESE
> ++# define LANG_VIETNAMESE 0x2a
> ++# endif
> ++# ifndef LANG_WELSH
> ++# define LANG_WELSH 0x52
> ++# endif
> ++# ifndef LANG_XHOSA
> ++# define LANG_XHOSA 0x34
> ++# endif
> ++# ifndef LANG_YI
> ++# define LANG_YI 0x78
> ++# endif
> ++# ifndef LANG_YIDDISH
> ++# define LANG_YIDDISH 0x3d
> ++# endif
> ++# ifndef LANG_YORUBA
> ++# define LANG_YORUBA 0x6a
> ++# endif
> ++# ifndef LANG_ZULU
> ++# define LANG_ZULU 0x35
> ++# endif
> ++# ifndef SUBLANG_ARABIC_SAUDI_ARABIA
> ++# define SUBLANG_ARABIC_SAUDI_ARABIA 0x01
> ++# endif
> ++# ifndef SUBLANG_ARABIC_IRAQ
> ++# define SUBLANG_ARABIC_IRAQ 0x02
> ++# endif
> ++# ifndef SUBLANG_ARABIC_EGYPT
> ++# define SUBLANG_ARABIC_EGYPT 0x03
> ++# endif
> ++# ifndef SUBLANG_ARABIC_LIBYA
> ++# define SUBLANG_ARABIC_LIBYA 0x04
> ++# endif
> ++# ifndef SUBLANG_ARABIC_ALGERIA
> ++# define SUBLANG_ARABIC_ALGERIA 0x05
> ++# endif
> ++# ifndef SUBLANG_ARABIC_MOROCCO
> ++# define SUBLANG_ARABIC_MOROCCO 0x06
> ++# endif
> ++# ifndef SUBLANG_ARABIC_TUNISIA
> ++# define SUBLANG_ARABIC_TUNISIA 0x07
> ++# endif
> ++# ifndef SUBLANG_ARABIC_OMAN
> ++# define SUBLANG_ARABIC_OMAN 0x08
> ++# endif
> ++# ifndef SUBLANG_ARABIC_YEMEN
> ++# define SUBLANG_ARABIC_YEMEN 0x09
> ++# endif
> ++# ifndef SUBLANG_ARABIC_SYRIA
> ++# define SUBLANG_ARABIC_SYRIA 0x0a
> ++# endif
> ++# ifndef SUBLANG_ARABIC_JORDAN
> ++# define SUBLANG_ARABIC_JORDAN 0x0b
> ++# endif
> ++# ifndef SUBLANG_ARABIC_LEBANON
> ++# define SUBLANG_ARABIC_LEBANON 0x0c
> ++# endif
> ++# ifndef SUBLANG_ARABIC_KUWAIT
> ++# define SUBLANG_ARABIC_KUWAIT 0x0d
> ++# endif
> ++# ifndef SUBLANG_ARABIC_UAE
> ++# define SUBLANG_ARABIC_UAE 0x0e
> ++# endif
> ++# ifndef SUBLANG_ARABIC_BAHRAIN
> ++# define SUBLANG_ARABIC_BAHRAIN 0x0f
> ++# endif
> ++# ifndef SUBLANG_ARABIC_QATAR
> ++# define SUBLANG_ARABIC_QATAR 0x10
> ++# endif
> ++# ifndef SUBLANG_AZERI_LATIN
> ++# define SUBLANG_AZERI_LATIN 0x01
> ++# endif
> ++# ifndef SUBLANG_AZERI_CYRILLIC
> ++# define SUBLANG_AZERI_CYRILLIC 0x02
> ++# endif
> ++# ifndef SUBLANG_BENGALI_INDIA
> ++# define SUBLANG_BENGALI_INDIA 0x00
> ++# endif
> ++# ifndef SUBLANG_BENGALI_BANGLADESH
> ++# define SUBLANG_BENGALI_BANGLADESH 0x01
> ++# endif
> ++# ifndef SUBLANG_CHINESE_MACAU
> ++# define SUBLANG_CHINESE_MACAU 0x05
> ++# endif
> ++# ifndef SUBLANG_ENGLISH_SOUTH_AFRICA
> ++# define SUBLANG_ENGLISH_SOUTH_AFRICA 0x07
> ++# endif
> ++# ifndef SUBLANG_ENGLISH_JAMAICA
> ++# define SUBLANG_ENGLISH_JAMAICA 0x08
> ++# endif
> ++# ifndef SUBLANG_ENGLISH_CARIBBEAN
> ++# define SUBLANG_ENGLISH_CARIBBEAN 0x09
> ++# endif
> ++# ifndef SUBLANG_ENGLISH_BELIZE
> ++# define SUBLANG_ENGLISH_BELIZE 0x0a
> ++# endif
> ++# ifndef SUBLANG_ENGLISH_TRINIDAD
> ++# define SUBLANG_ENGLISH_TRINIDAD 0x0b
> ++# endif
> ++# ifndef SUBLANG_ENGLISH_ZIMBABWE
> ++# define SUBLANG_ENGLISH_ZIMBABWE 0x0c
> ++# endif
> ++# ifndef SUBLANG_ENGLISH_PHILIPPINES
> ++# define SUBLANG_ENGLISH_PHILIPPINES 0x0d
> ++# endif
> ++# ifndef SUBLANG_ENGLISH_INDONESIA
> ++# define SUBLANG_ENGLISH_INDONESIA 0x0e
> ++# endif
> ++# ifndef SUBLANG_ENGLISH_HONGKONG
> ++# define SUBLANG_ENGLISH_HONGKONG 0x0f
> ++# endif
> ++# ifndef SUBLANG_ENGLISH_INDIA
> ++# define SUBLANG_ENGLISH_INDIA 0x10
> ++# endif
> ++# ifndef SUBLANG_ENGLISH_MALAYSIA
> ++# define SUBLANG_ENGLISH_MALAYSIA 0x11
> ++# endif
> ++# ifndef SUBLANG_ENGLISH_SINGAPORE
> ++# define SUBLANG_ENGLISH_SINGAPORE 0x12
> ++# endif
> ++# ifndef SUBLANG_FRENCH_LUXEMBOURG
> ++# define SUBLANG_FRENCH_LUXEMBOURG 0x05
> ++# endif
> ++# ifndef SUBLANG_FRENCH_MONACO
> ++# define SUBLANG_FRENCH_MONACO 0x06
> ++# endif
> ++# ifndef SUBLANG_FRENCH_WESTINDIES
> ++# define SUBLANG_FRENCH_WESTINDIES 0x07
> ++# endif
> ++# ifndef SUBLANG_FRENCH_REUNION
> ++# define SUBLANG_FRENCH_REUNION 0x08
> ++# endif
> ++# ifndef SUBLANG_FRENCH_CONGO
> ++# define SUBLANG_FRENCH_CONGO 0x09
> ++# endif
> ++# ifndef SUBLANG_FRENCH_SENEGAL
> ++# define SUBLANG_FRENCH_SENEGAL 0x0a
> ++# endif
> ++# ifndef SUBLANG_FRENCH_CAMEROON
> ++# define SUBLANG_FRENCH_CAMEROON 0x0b
> ++# endif
> ++# ifndef SUBLANG_FRENCH_COTEDIVOIRE
> ++# define SUBLANG_FRENCH_COTEDIVOIRE 0x0c
> ++# endif
> ++# ifndef SUBLANG_FRENCH_MALI
> ++# define SUBLANG_FRENCH_MALI 0x0d
> ++# endif
> ++# ifndef SUBLANG_FRENCH_MOROCCO
> ++# define SUBLANG_FRENCH_MOROCCO 0x0e
> ++# endif
> ++# ifndef SUBLANG_FRENCH_HAITI
> ++# define SUBLANG_FRENCH_HAITI 0x0f
> ++# endif
> ++# ifndef SUBLANG_GERMAN_LUXEMBOURG
> ++# define SUBLANG_GERMAN_LUXEMBOURG 0x04
> ++# endif
> ++# ifndef SUBLANG_GERMAN_LIECHTENSTEIN
> ++# define SUBLANG_GERMAN_LIECHTENSTEIN 0x05
> ++# endif
> ++# ifndef SUBLANG_KASHMIRI_INDIA
> ++# define SUBLANG_KASHMIRI_INDIA 0x02
> ++# endif
> ++# ifndef SUBLANG_MALAY_MALAYSIA
> ++# define SUBLANG_MALAY_MALAYSIA 0x01
> ++# endif
> ++# ifndef SUBLANG_MALAY_BRUNEI_DARUSSALAM
> ++# define SUBLANG_MALAY_BRUNEI_DARUSSALAM 0x02
> ++# endif
> ++# ifndef SUBLANG_NEPALI_INDIA
> ++# define SUBLANG_NEPALI_INDIA 0x02
> ++# endif
> ++# ifndef SUBLANG_PUNJABI_INDIA
> ++# define SUBLANG_PUNJABI_INDIA 0x00
> ++# endif
> ++# ifndef SUBLANG_PUNJABI_PAKISTAN
> ++# define SUBLANG_PUNJABI_PAKISTAN 0x01
> ++# endif
> ++# ifndef SUBLANG_ROMANIAN_ROMANIA
> ++# define SUBLANG_ROMANIAN_ROMANIA 0x00
> ++# endif
> ++# ifndef SUBLANG_ROMANIAN_MOLDOVA
> ++# define SUBLANG_ROMANIAN_MOLDOVA 0x01
> ++# endif
> ++# ifndef SUBLANG_SERBIAN_LATIN
> ++# define SUBLANG_SERBIAN_LATIN 0x02
> ++# endif
> ++# ifndef SUBLANG_SERBIAN_CYRILLIC
> ++# define SUBLANG_SERBIAN_CYRILLIC 0x03
> ++# endif
> ++# ifndef SUBLANG_SINDHI_INDIA
> ++# define SUBLANG_SINDHI_INDIA 0x00
> ++# endif
> ++# ifndef SUBLANG_SINDHI_PAKISTAN
> ++# define SUBLANG_SINDHI_PAKISTAN 0x01
> ++# endif
> ++# ifndef SUBLANG_SPANISH_GUATEMALA
> ++# define SUBLANG_SPANISH_GUATEMALA 0x04
> ++# endif
> ++# ifndef SUBLANG_SPANISH_COSTA_RICA
> ++# define SUBLANG_SPANISH_COSTA_RICA 0x05
> ++# endif
> ++# ifndef SUBLANG_SPANISH_PANAMA
> ++# define SUBLANG_SPANISH_PANAMA 0x06
> ++# endif
> ++# ifndef SUBLANG_SPANISH_DOMINICAN_REPUBLIC
> ++# define SUBLANG_SPANISH_DOMINICAN_REPUBLIC 0x07
> ++# endif
> ++# ifndef SUBLANG_SPANISH_VENEZUELA
> ++# define SUBLANG_SPANISH_VENEZUELA 0x08
> ++# endif
> ++# ifndef SUBLANG_SPANISH_COLOMBIA
> ++# define SUBLANG_SPANISH_COLOMBIA 0x09
> ++# endif
> ++# ifndef SUBLANG_SPANISH_PERU
> ++# define SUBLANG_SPANISH_PERU 0x0a
> ++# endif
> ++# ifndef SUBLANG_SPANISH_ARGENTINA
> ++# define SUBLANG_SPANISH_ARGENTINA 0x0b
> ++# endif
> ++# ifndef SUBLANG_SPANISH_ECUADOR
> ++# define SUBLANG_SPANISH_ECUADOR 0x0c
> ++# endif
> ++# ifndef SUBLANG_SPANISH_CHILE
> ++# define SUBLANG_SPANISH_CHILE 0x0d
> ++# endif
> ++# ifndef SUBLANG_SPANISH_URUGUAY
> ++# define SUBLANG_SPANISH_URUGUAY 0x0e
> ++# endif
> ++# ifndef SUBLANG_SPANISH_PARAGUAY
> ++# define SUBLANG_SPANISH_PARAGUAY 0x0f
> ++# endif
> ++# ifndef SUBLANG_SPANISH_BOLIVIA
> ++# define SUBLANG_SPANISH_BOLIVIA 0x10
> ++# endif
> ++# ifndef SUBLANG_SPANISH_EL_SALVADOR
> ++# define SUBLANG_SPANISH_EL_SALVADOR 0x11
> ++# endif
> ++# ifndef SUBLANG_SPANISH_HONDURAS
> ++# define SUBLANG_SPANISH_HONDURAS 0x12
> ++# endif
> ++# ifndef SUBLANG_SPANISH_NICARAGUA
> ++# define SUBLANG_SPANISH_NICARAGUA 0x13
> ++# endif
> ++# ifndef SUBLANG_SPANISH_PUERTO_RICO
> ++# define SUBLANG_SPANISH_PUERTO_RICO 0x14
> ++# endif
> ++# ifndef SUBLANG_SWEDISH_FINLAND
> ++# define SUBLANG_SWEDISH_FINLAND 0x02
> ++# endif
> ++# ifndef SUBLANG_TAMAZIGHT_ARABIC
> ++# define SUBLANG_TAMAZIGHT_ARABIC 0x01
> ++# endif
> ++# ifndef SUBLANG_TAMAZIGHT_LATIN
> ++# define SUBLANG_TAMAZIGHT_LATIN 0x02
> ++# endif
> ++# ifndef SUBLANG_TIGRINYA_ETHIOPIA
> ++# define SUBLANG_TIGRINYA_ETHIOPIA 0x00
> ++# endif
> ++# ifndef SUBLANG_TIGRINYA_ERITREA
> ++# define SUBLANG_TIGRINYA_ERITREA 0x01
> ++# endif
> ++# ifndef SUBLANG_URDU_PAKISTAN
> ++# define SUBLANG_URDU_PAKISTAN 0x01
> ++# endif
> ++# ifndef SUBLANG_URDU_INDIA
> ++# define SUBLANG_URDU_INDIA 0x02
> ++# endif
> ++# ifndef SUBLANG_UZBEK_LATIN
> ++# define SUBLANG_UZBEK_LATIN 0x01
> ++# endif
> ++# ifndef SUBLANG_UZBEK_CYRILLIC
> ++# define SUBLANG_UZBEK_CYRILLIC 0x02
> ++# endif
> ++#endif
> ++
> ++/* XPG3 defines the result of 'setlocale (category, NULL)' as:
> ++ "Directs 'setlocale()' to query 'category' and return the current
> ++ setting of 'local'."
> ++ However it does not specify the exact format. Neither do SUSV2 and
> ++ ISO C 99. So we can use this feature only on selected systems (e.g.
> ++ those using GNU C Library). */
> ++#if defined _LIBC || (defined __GNU_LIBRARY__ && __GNU_LIBRARY__ >= 2)
> ++# define HAVE_LOCALE_NULL
> ++#endif
> ++
> ++/* Determine the current locale's name, and canonicalize it into XPG syntax
> ++ language[_territory[.codeset]][@modifier]
> ++ The codeset part in the result is not reliable; the locale_charset()
> ++ should be used for codeset information instead.
> ++ The result must not be freed; it is statically allocated. */
> ++
> ++const char *
> ++_nl_locale_name (int category, const char *categoryname)
> ++{
> ++ const char *retval;
> ++
> ++#ifndef WIN32
> ++
> ++ /* Use 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
> ++ retval = setlocale (category, NULL);
> ++# else
> ++ /* Setting of LC_ALL overwrites all other. */
> ++ retval = getenv ("LC_ALL");
> ++ if (retval == NULL || retval[0] == '\0')
> ++ {
> ++ /* Next comes the name of the desired category. */
> ++ retval = getenv (categoryname);
> ++ if (retval == NULL || retval[0] == '\0')
> ++ {
> ++ /* Last possibility is the LANG environment variable. */
> ++ retval = getenv ("LANG");
> ++ if (retval == NULL || retval[0] == '\0')
> ++ /* We use C as the default domain. POSIX says this is
> ++ implementation defined. */
> ++ retval = "C";
> ++ }
> ++ }
> ++# endif
> ++
> ++ return retval;
> ++
> ++#else /* WIN32 */
> ++
> ++ /* Return an XPG style locale name language[_territory][@modifier].
> ++ Don't even bother determining the codeset; it's not useful in this
> ++ context, because message catalogs are not specific to a single
> ++ codeset. */
> ++
> ++ LCID lcid;
> ++ LANGID langid;
> ++ int primary, sub;
> ++
> ++ /* Let the user override the system settings through environment
> ++ variables, as on POSIX systems. */
> ++ retval = getenv ("LC_ALL");
> ++ if (retval != NULL && retval[0] != '\0')
> ++ return retval;
> ++ retval = getenv (categoryname);
> ++ if (retval != NULL && retval[0] != '\0')
> ++ return retval;
> ++ retval = getenv ("LANG");
> ++ if (retval != NULL && retval[0] != '\0')
> ++ return retval;
> ++
> ++ /* Use native Win32 API locale ID. */
> ++ lcid = GetThreadLocale ();
> ++
> ++ /* Strip off the sorting rules, keep only the language part. */
> ++ langid = LANGIDFROMLCID (lcid);
> ++
> ++ /* Split into language and territory part. */
> ++ primary = PRIMARYLANGID (langid);
> ++ sub = SUBLANGID (langid);
> ++
> ++ /* Dispatch on language.
> ++ See also http://www.unicode.org/unicode/onlinedat/languages.html .
> ++ For details about languages, see http://www.ethnologue.com/ . */
> ++ switch (primary)
> ++ {
> ++ case LANG_AFRIKAANS: return "af_ZA";
> ++ case LANG_ALBANIAN: return "sq_AL";
> ++ case LANG_AMHARIC: return "am_ET";
> ++ case LANG_ARABIC:
> ++ switch (sub)
> ++ {
> ++ case SUBLANG_ARABIC_SAUDI_ARABIA: return "ar_SA";
> ++ case SUBLANG_ARABIC_IRAQ: return "ar_IQ";
> ++ case SUBLANG_ARABIC_EGYPT: return "ar_EG";
> ++ case SUBLANG_ARABIC_LIBYA: return "ar_LY";
> ++ case SUBLANG_ARABIC_ALGERIA: return "ar_DZ";
> ++ case SUBLANG_ARABIC_MOROCCO: return "ar_MA";
> ++ case SUBLANG_ARABIC_TUNISIA: return "ar_TN";
> ++ case SUBLANG_ARABIC_OMAN: return "ar_OM";
> ++ case SUBLANG_ARABIC_YEMEN: return "ar_YE";
> ++ case SUBLANG_ARABIC_SYRIA: return "ar_SY";
> ++ case SUBLANG_ARABIC_JORDAN: return "ar_JO";
> ++ case SUBLANG_ARABIC_LEBANON: return "ar_LB";
> ++ case SUBLANG_ARABIC_KUWAIT: return "ar_KW";
> ++ case SUBLANG_ARABIC_UAE: return "ar_AE";
> ++ case SUBLANG_ARABIC_BAHRAIN: return "ar_BH";
> ++ case SUBLANG_ARABIC_QATAR: return "ar_QA";
> ++ }
> ++ return "ar";
> ++ case LANG_ARMENIAN: return "hy_AM";
> ++ case LANG_ASSAMESE: return "as_IN";
> ++ case LANG_AZERI:
> ++ switch (sub)
> ++ {
> ++ /* FIXME: Adjust this when Azerbaijani locales appear on Unix. */
> ++ case SUBLANG_AZERI_LATIN: return "az_AZ at latin";
> ++ case SUBLANG_AZERI_CYRILLIC: return "az_AZ at cyrillic";
> ++ }
> ++ return "az";
> ++ case LANG_BASQUE:
> ++ return "eu"; /* Ambiguous: could be "eu_ES" or "eu_FR". */
> ++ case LANG_BELARUSIAN: return "be_BY";
> ++ case LANG_BENGALI:
> ++ switch (sub)
> ++ {
> ++ case SUBLANG_BENGALI_INDIA: return "bn_IN";
> ++ case SUBLANG_BENGALI_BANGLADESH: return "bn_BD";
> ++ }
> ++ return "bn";
> ++ case LANG_BULGARIAN: return "bg_BG";
> ++ case LANG_BURMESE: return "my_MM";
> ++ case LANG_CAMBODIAN: return "km_KH";
> ++ case LANG_CATALAN: return "ca_ES";
> ++ case LANG_CHEROKEE: return "chr_US";
> ++ case LANG_CHINESE:
> ++ switch (sub)
> ++ {
> ++ case SUBLANG_CHINESE_TRADITIONAL: return "zh_TW";
> ++ case SUBLANG_CHINESE_SIMPLIFIED: return "zh_CN";
> ++ case SUBLANG_CHINESE_HONGKONG: return "zh_HK";
> ++ case SUBLANG_CHINESE_SINGAPORE: return "zh_SG";
> ++ case SUBLANG_CHINESE_MACAU: return "zh_MO";
> ++ }
> ++ return "zh";
> ++ case LANG_CROATIAN: /* LANG_CROATIAN == LANG_SERBIAN
> ++ * What used to be called Serbo-Croatian
> ++ * should really now be two separate
> ++ * languages because of political reasons.
> ++ * (Says tml, who knows nothing about Serbian
> ++ * or Croatian.)
> ++ * (I can feel those flames coming already.)
> ++ */
> ++ switch (sub)
> ++ {
> ++ case SUBLANG_DEFAULT: return "hr_HR";
> ++ case SUBLANG_SERBIAN_LATIN: return "sr_CS";
> ++ case SUBLANG_SERBIAN_CYRILLIC: return "sr_CS at cyrillic";
> ++ }
> ++ return "hr";
> ++ case LANG_CZECH: return "cs_CZ";
> ++ case LANG_DANISH: return "da_DK";
> ++ case LANG_DIVEHI: return "dv_MV";
> ++ case LANG_DUTCH:
> ++ switch (sub)
> ++ {
> ++ case SUBLANG_DUTCH: return "nl_NL";
> ++ case SUBLANG_DUTCH_BELGIAN: /* FLEMISH, VLAAMS */ return "nl_BE";
> ++ }
> ++ return "nl";
> ++ case LANG_EDO: return "bin_NG";
> ++ case LANG_ENGLISH:
> ++ switch (sub)
> ++ {
> ++ /* SUBLANG_ENGLISH_US == SUBLANG_DEFAULT. Heh. I thought
> ++ * English was the language spoken in England.
> ++ * Oh well.
> ++ */
> ++ case SUBLANG_ENGLISH_US: return "en_US";
> ++ case SUBLANG_ENGLISH_UK: return "en_GB";
> ++ case SUBLANG_ENGLISH_AUS: return "en_AU";
> ++ case SUBLANG_ENGLISH_CAN: return "en_CA";
> ++ case SUBLANG_ENGLISH_NZ: return "en_NZ";
> ++ case SUBLANG_ENGLISH_EIRE: return "en_IE";
> ++ case SUBLANG_ENGLISH_SOUTH_AFRICA: return "en_ZA";
> ++ case SUBLANG_ENGLISH_JAMAICA: return "en_JM";
> ++ case SUBLANG_ENGLISH_CARIBBEAN: return "en_GD"; /* Grenada? */
> ++ case SUBLANG_ENGLISH_BELIZE: return "en_BZ";
> ++ case SUBLANG_ENGLISH_TRINIDAD: return "en_TT";
> ++ case SUBLANG_ENGLISH_ZIMBABWE: return "en_ZW";
> ++ case SUBLANG_ENGLISH_PHILIPPINES: return "en_PH";
> ++ case SUBLANG_ENGLISH_INDONESIA: return "en_ID";
> ++ case SUBLANG_ENGLISH_HONGKONG: return "en_HK";
> ++ case SUBLANG_ENGLISH_INDIA: return "en_IN";
> ++ case SUBLANG_ENGLISH_MALAYSIA: return "en_MY";
> ++ case SUBLANG_ENGLISH_SINGAPORE: return "en_SG";
> ++ }
> ++ return "en";
> ++ case LANG_ESTONIAN: return "et_EE";
> ++ case LANG_FAEROESE: return "fo_FO";
> ++ case LANG_FARSI: return "fa_IR";
> ++ case LANG_FINNISH: return "fi_FI";
> ++ case LANG_FRENCH:
> ++ switch (sub)
> ++ {
> ++ case SUBLANG_FRENCH: return "fr_FR";
> ++ case SUBLANG_FRENCH_BELGIAN: /* WALLOON */ return "fr_BE";
> ++ case SUBLANG_FRENCH_CANADIAN: return "fr_CA";
> ++ case SUBLANG_FRENCH_SWISS: return "fr_CH";
> ++ case SUBLANG_FRENCH_LUXEMBOURG: return "fr_LU";
> ++ case SUBLANG_FRENCH_MONACO: return "fr_MC";
> ++ case SUBLANG_FRENCH_WESTINDIES: return "fr"; /* Caribbean? */
> ++ case SUBLANG_FRENCH_REUNION: return "fr_RE";
> ++ case SUBLANG_FRENCH_CONGO: return "fr_CG";
> ++ case SUBLANG_FRENCH_SENEGAL: return "fr_SN";
> ++ case SUBLANG_FRENCH_CAMEROON: return "fr_CM";
> ++ case SUBLANG_FRENCH_COTEDIVOIRE: return "fr_CI";
> ++ case SUBLANG_FRENCH_MALI: return "fr_ML";
> ++ case SUBLANG_FRENCH_MOROCCO: return "fr_MA";
> ++ case SUBLANG_FRENCH_HAITI: return "fr_HT";
> ++ }
> ++ return "fr";
> ++ case LANG_FRISIAN: return "fy_NL";
> ++ case LANG_FULFULDE:
> ++ /* Spoken in Nigeria, Guinea, Senegal, Mali, Niger, Cameroon, Benin. */
> ++ return "ff_NG";
> ++ case LANG_GAELIC:
> ++ switch (sub)
> ++ {
> ++ case 0x01: /* SCOTTISH */ return "gd_GB";
> ++ case 0x02: /* IRISH */ return "ga_IE";
> ++ }
> ++ return "C";
> ++ case LANG_GALICIAN: return "gl_ES";
> ++ case LANG_GEORGIAN: return "ka_GE";
> ++ case LANG_GERMAN:
> ++ switch (sub)
> ++ {
> ++ case SUBLANG_GERMAN: return "de_DE";
> ++ case SUBLANG_GERMAN_SWISS: return "de_CH";
> ++ case SUBLANG_GERMAN_AUSTRIAN: return "de_AT";
> ++ case SUBLANG_GERMAN_LUXEMBOURG: return "de_LU";
> ++ case SUBLANG_GERMAN_LIECHTENSTEIN: return "de_LI";
> ++ }
> ++ return "de";
> ++ case LANG_GREEK: return "el_GR";
> ++ case LANG_GUARANI: return "gn_PY";
> ++ case LANG_GUJARATI: return "gu_IN";
> ++ case LANG_HAUSA: return "ha_NG";
> ++ case LANG_HAWAIIAN:
> ++ /* FIXME: Do they mean Hawaiian ("haw_US", 1000 speakers)
> ++ or Hawaii Creole English ("cpe_US", 600000 speakers)? */
> ++ return "cpe_US";
> ++ case LANG_HEBREW: return "he_IL";
> ++ case LANG_HINDI: return "hi_IN";
> ++ case LANG_HUNGARIAN: return "hu_HU";
> ++ case LANG_IBIBIO: return "nic_NG";
> ++ case LANG_ICELANDIC: return "is_IS";
> ++ case LANG_IGBO: return "ig_NG";
> ++ case LANG_INDONESIAN: return "id_ID";
> ++ case LANG_INUKTITUT: return "iu_CA";
> ++ case LANG_ITALIAN:
> ++ switch (sub)
> ++ {
> ++ case SUBLANG_ITALIAN: return "it_IT";
> ++ case SUBLANG_ITALIAN_SWISS: return "it_CH";
> ++ }
> ++ return "it";
> ++ case LANG_JAPANESE: return "ja_JP";
> ++ case LANG_KANNADA: return "kn_IN";
> ++ case LANG_KANURI: return "kr_NG";
> ++ case LANG_KASHMIRI:
> ++ switch (sub)
> ++ {
> ++ case SUBLANG_DEFAULT: return "ks_PK";
> ++ case SUBLANG_KASHMIRI_INDIA: return "ks_IN";
> ++ }
> ++ return "ks";
> ++ case LANG_KAZAK: return "kk_KZ";
> ++ case LANG_KONKANI:
> ++ /* FIXME: Adjust this when such locales appear on Unix. */
> ++ return "kok_IN";
> ++ case LANG_KOREAN: return "ko_KR";
> ++ case LANG_KYRGYZ: return "ky_KG";
> ++ case LANG_LAO: return "lo_LA";
> ++ case LANG_LATIN: return "la_VA";
> ++ case LANG_LATVIAN: return "lv_LV";
> ++ case LANG_LITHUANIAN: return "lt_LT";
> ++ case LANG_MACEDONIAN: return "mk_MK";
> ++ case LANG_MALAY:
> ++ switch (sub)
> ++ {
> ++ case SUBLANG_MALAY_MALAYSIA: return "ms_MY";
> ++ case SUBLANG_MALAY_BRUNEI_DARUSSALAM: return "ms_BN";
> ++ }
> ++ return "ms";
> ++ case LANG_MALAYALAM: return "ml_IN";
> ++ case LANG_MALTESE: return "mt_MT";
> ++ case LANG_MANIPURI:
> ++ /* FIXME: Adjust this when such locales appear on Unix. */
> ++ return "mni_IN";
> ++ case LANG_MARATHI: return "mr_IN";
> ++ case LANG_MONGOLIAN:
> ++ return "mn"; /* Ambiguous: could be "mn_CN" or "mn_MN". */
> ++ case LANG_NEPALI:
> ++ switch (sub)
> ++ {
> ++ case SUBLANG_DEFAULT: return "ne_NP";
> ++ case SUBLANG_NEPALI_INDIA: return "ne_IN";
> ++ }
> ++ return "ne";
> ++ case LANG_NORWEGIAN:
> ++ switch (sub)
> ++ {
> ++ case SUBLANG_NORWEGIAN_BOKMAL: return "no_NO";
> ++ case SUBLANG_NORWEGIAN_NYNORSK: return "nn_NO";
> ++ }
> ++ return "no";
> ++ case LANG_ORIYA: return "or_IN";
> ++ case LANG_OROMO: return "om_ET";
> ++ case LANG_PAPIAMENTU: return "pap_AN";
> ++ case LANG_PASHTO:
> ++ return "ps"; /* Ambiguous: could be "ps_PK" or "ps_AF". */
> ++ case LANG_POLISH: return "pl_PL";
> ++ case LANG_PORTUGUESE:
> ++ switch (sub)
> ++ {
> ++ case SUBLANG_PORTUGUESE: return "pt_PT";
> ++ /* Hmm. SUBLANG_PORTUGUESE_BRAZILIAN == SUBLANG_DEFAULT.
> ++ Same phenomenon as SUBLANG_ENGLISH_US == SUBLANG_DEFAULT. */
> ++ case SUBLANG_PORTUGUESE_BRAZILIAN: return "pt_BR";
> ++ }
> ++ return "pt";
> ++ case LANG_PUNJABI:
> ++ switch (sub)
> ++ {
> ++ case SUBLANG_PUNJABI_INDIA: return "pa_IN"; /* Gurmukhi script */
> ++ case SUBLANG_PUNJABI_PAKISTAN: return "pa_PK"; /* Arabic script */
> ++ }
> ++ return "pa";
> ++ case LANG_RHAETO_ROMANCE: return "rm_CH";
> ++ case LANG_ROMANIAN:
> ++ switch (sub)
> ++ {
> ++ case SUBLANG_ROMANIAN_ROMANIA: return "ro_RO";
> ++ case SUBLANG_ROMANIAN_MOLDOVA: return "ro_MD";
> ++ }
> ++ return "ro";
> ++ case LANG_RUSSIAN:
> ++ return "ru"; /* Ambiguous: could be "ru_RU" or "ru_UA" or "ru_MD". */
> ++ case LANG_SAAMI: /* actually Northern Sami */ return "se_NO";
> ++ case LANG_SANSKRIT: return "sa_IN";
> ++ case LANG_SINDHI:
> ++ switch (sub)
> ++ {
> ++ case SUBLANG_SINDHI_INDIA: return "sd_IN";
> ++ case SUBLANG_SINDHI_PAKISTAN: return "sd_PK";
> ++ }
> ++ return "sd";
> ++ case LANG_SINHALESE: return "si_LK";
> ++ case LANG_SLOVAK: return "sk_SK";
> ++ case LANG_SLOVENIAN: return "sl_SI";
> ++ case LANG_SOMALI: return "so_SO";
> ++ case LANG_SORBIAN:
> ++ /* FIXME: Adjust this when such locales appear on Unix. */
> ++ return "wen_DE";
> ++ case LANG_SPANISH:
> ++ switch (sub)
> ++ {
> ++ case SUBLANG_SPANISH: return "es_ES";
> ++ case SUBLANG_SPANISH_MEXICAN: return "es_MX";
> ++ case SUBLANG_SPANISH_MODERN:
> ++ return "es_ES at modern"; /* not seen on Unix */
> ++ case SUBLANG_SPANISH_GUATEMALA: return "es_GT";
> ++ case SUBLANG_SPANISH_COSTA_RICA: return "es_CR";
> ++ case SUBLANG_SPANISH_PANAMA: return "es_PA";
> ++ case SUBLANG_SPANISH_DOMINICAN_REPUBLIC: return "es_DO";
> ++ case SUBLANG_SPANISH_VENEZUELA: return "es_VE";
> ++ case SUBLANG_SPANISH_COLOMBIA: return "es_CO";
> ++ case SUBLANG_SPANISH_PERU: return "es_PE";
> ++ case SUBLANG_SPANISH_ARGENTINA: return "es_AR";
> ++ case SUBLANG_SPANISH_ECUADOR: return "es_EC";
> ++ case SUBLANG_SPANISH_CHILE: return "es_CL";
> ++ case SUBLANG_SPANISH_URUGUAY: return "es_UY";
> ++ case SUBLANG_SPANISH_PARAGUAY: return "es_PY";
> ++ case SUBLANG_SPANISH_BOLIVIA: return "es_BO";
> ++ case SUBLANG_SPANISH_EL_SALVADOR: return "es_SV";
> ++ case SUBLANG_SPANISH_HONDURAS: return "es_HN";
> ++ case SUBLANG_SPANISH_NICARAGUA: return "es_NI";
> ++ case SUBLANG_SPANISH_PUERTO_RICO: return "es_PR";
> ++ }
> ++ return "es";
> ++ case LANG_SUTU: return "bnt_TZ"; /* or "st_LS" or "nso_ZA"? */
> ++ case LANG_SWAHILI: return "sw_KE";
> ++ case LANG_SWEDISH:
> ++ switch (sub)
> ++ {
> ++ case SUBLANG_DEFAULT: return "sv_SE";
> ++ case SUBLANG_SWEDISH_FINLAND: return "sv_FI";
> ++ }
> ++ return "sv";
> ++ case LANG_SYRIAC: return "syr_TR"; /* An extinct language. */
> ++ case LANG_TAGALOG: return "tl_PH";
> ++ case LANG_TAJIK: return "tg_TJ";
> ++ case LANG_TAMAZIGHT:
> ++ switch (sub)
> ++ {
> ++ /* FIXME: Adjust this when Tamazight locales appear on Unix. */
> ++ case SUBLANG_TAMAZIGHT_ARABIC: return "ber_MA at arabic";
> ++ case SUBLANG_TAMAZIGHT_LATIN: return "ber_MA at latin";
> ++ }
> ++ return "ber_MA";
> ++ case LANG_TAMIL:
> ++ return "ta"; /* Ambiguous: could be "ta_IN" or "ta_LK" or "ta_SG". */
> ++ case LANG_TATAR: return "tt_RU";
> ++ case LANG_TELUGU: return "te_IN";
> ++ case LANG_THAI: return "th_TH";
> ++ case LANG_TIBETAN: return "bo_CN";
> ++ case LANG_TIGRINYA:
> ++ switch (sub)
> ++ {
> ++ case SUBLANG_TIGRINYA_ETHIOPIA: return "ti_ET";
> ++ case SUBLANG_TIGRINYA_ERITREA: return "ti_ER";
> ++ }
> ++ return "ti";
> ++ case LANG_TSONGA: return "ts_ZA";
> ++ case LANG_TSWANA: return "tn_BW";
> ++ case LANG_TURKISH: return "tr_TR";
> ++ case LANG_TURKMEN: return "tk_TM";
> ++ case LANG_UKRAINIAN: return "uk_UA";
> ++ case LANG_URDU:
> ++ switch (sub)
> ++ {
> ++ case SUBLANG_URDU_PAKISTAN: return "ur_PK";
> ++ case SUBLANG_URDU_INDIA: return "ur_IN";
> ++ }
> ++ return "ur";
> ++ case LANG_UZBEK:
> ++ switch (sub)
> ++ {
> ++ case SUBLANG_UZBEK_LATIN: return "uz_UZ";
> ++ case SUBLANG_UZBEK_CYRILLIC: return "uz_UZ at cyrillic";
> ++ }
> ++ return "uz";
> ++ case LANG_VENDA: return "ve_ZA";
> ++ case LANG_VIETNAMESE: return "vi_VN";
> ++ case LANG_WELSH: return "cy_GB";
> ++ case LANG_XHOSA: return "xh_ZA";
> ++ case LANG_YI: return "sit_CN";
> ++ case LANG_YIDDISH: return "yi_IL";
> ++ case LANG_YORUBA: return "yo_NG";
> ++ case LANG_ZULU: return "zu_ZA";
> ++ default: return "C";
> ++ }
> ++
> ++#endif
> ++}
> +--- lrzsz-0.12.20.safe/intl/log.c 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/intl/log.c 2004-09-12 14:40:34.515723768 -0400
> +@@ -0,0 +1,98 @@
> ++/* Log file output.
> ++ Copyright (C) 2003 Free Software Foundation, Inc.
> ++
> ++ This program is free software; you can redistribute it and/or modify it
> ++ under the terms of the GNU Library General Public License as published
> ++ by the Free Software Foundation; either version 2, or (at your option)
> ++ any later version.
> ++
> ++ This program is distributed in the hope that it will be useful,
> ++ but WITHOUT ANY WARRANTY; without even the implied warranty of
> ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> ++ Library General Public License for more details.
> ++
> ++ You should have received a copy of the GNU Library General Public
> ++ License along with this program; if not, write to the Free Software
> ++ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
> ++ USA. */
> ++
> ++/* Written by Bruno Haible <bruno at clisp.org>. */
> ++
> ++#ifdef HAVE_CONFIG_H
> ++# include <config.h>
> ++#endif
> ++
> ++#include <stdio.h>
> ++#include <stdlib.h>
> ++#include <string.h>
> ++
> ++/* Print an ASCII string with quotes and escape sequences where needed. */
> ++static void
> ++print_escaped (FILE *stream, const char *str)
> ++{
> ++ putc ('"', stream);
> ++ for (; *str != '\0'; str++)
> ++ if (*str == '\n')
> ++ {
> ++ fputs ("\\n\"", stream);
> ++ if (str[1] == '\0')
> ++ return;
> ++ fputs ("\n\"", stream);
> ++ }
> ++ else
> ++ {
> ++ if (*str == '"' || *str == '\\')
> ++ putc ('\\', stream);
> ++ putc (*str, stream);
> ++ }
> ++ putc ('"', stream);
> ++}
> ++
> ++/* Add to the log file an entry denoting a failed translation. */
> ++void
> ++_nl_log_untranslated (const char *logfilename, const char *domainname,
> ++ const char *msgid1, const char *msgid2, int plural)
> ++{
> ++ static char *last_logfilename = NULL;
> ++ static FILE *last_logfile = NULL;
> ++ FILE *logfile;
> ++
> ++ /* Can we reuse the last opened logfile? */
> ++ if (last_logfilename == NULL || strcmp (logfilename, last_logfilename) != 0)
> ++ {
> ++ /* Close the last used logfile. */
> ++ if (last_logfilename != NULL)
> ++ {
> ++ if (last_logfile != NULL)
> ++ {
> ++ fclose (last_logfile);
> ++ last_logfile = NULL;
> ++ }
> ++ free (last_logfilename);
> ++ last_logfilename = NULL;
> ++ }
> ++ /* Open the logfile. */
> ++ last_logfilename = (char *) malloc (strlen (logfilename) + 1);
> ++ if (last_logfilename == NULL)
> ++ return;
> ++ strcpy (last_logfilename, logfilename);
> ++ last_logfile = fopen (logfilename, "a");
> ++ if (last_logfile == NULL)
> ++ return;
> ++ }
> ++ logfile = last_logfile;
> ++
> ++ fprintf (logfile, "domain ");
> ++ print_escaped (logfile, domainname);
> ++ fprintf (logfile, "\nmsgid ");
> ++ print_escaped (logfile, msgid1);
> ++ if (plural)
> ++ {
> ++ fprintf (logfile, "\nmsgid_plural ");
> ++ print_escaped (logfile, msgid2);
> ++ fprintf (logfile, "\nmsgstr[0] \"\"\n");
> ++ }
> ++ else
> ++ fprintf (logfile, "\nmsgstr \"\"\n");
> ++ putc ('\n', logfile);
> ++}
> +--- lrzsz-0.12.20.safe/intl/Makefile.in 1998-04-26 09:22:35.000000000 -0400
> ++++ lrzsz-0.12.20/intl/Makefile.in 2004-09-12 14:40:34.521722856 -0400
> +@@ -1,19 +1,20 @@
> +-# Makefile for directory with message catalog handling in GNU NLS Utilities.
> +-# Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
> ++# Makefile for directory with message catalog handling library of GNU gettext
> ++# Copyright (C) 1995-1998, 2000-2003 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
> +-# the Free Software Foundation; either version 2, or (at your option)
> ++# This program is free software; you can redistribute it and/or modify it
> ++# under the terms of the GNU Library General Public License as published
> ++# by the Free Software Foundation; either version 2, or (at your option)
> + # any later version.
> + #
> + # This program is distributed in the hope that it will be useful,
> + # but WITHOUT ANY WARRANTY; without even the implied warranty of
> +-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> +-# GNU General Public License for more details.
> ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> ++# Library General Public License for more details.
> + #
> +-# You should have received a copy of the GNU 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.
> ++# You should have received a copy of the GNU Library General Public
> ++# License along with this program; if not, write to the Free Software
> ++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
> ++# USA.
> +
> + PACKAGE = @PACKAGE@
> + VERSION = @VERSION@
> +@@ -23,118 +24,341 @@
> + srcdir = @srcdir@
> + top_srcdir = @top_srcdir@
> + top_builddir = ..
> +-VPATH = @srcdir@
> ++#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) $(MKINSTALLDIRS)
> +
> +-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)\" -DIN_LIBINTL \
> ++-DENABLE_RELOCATABLE=1 -DIN_LIBRARY -DINSTALLDIR=\"$(libdir)\" -DNO_XMALLOC \
> ++-Dset_relocation_prefix=libintl_set_relocation_prefix \
> ++-Drelocate=libintl_relocate \
> ++-DDEPENDS_ON_LIBICONV=1 @DEFS@
> + CPPFLAGS = @CPPFLAGS@
> + CFLAGS = @CFLAGS@
> + LDFLAGS = @LDFLAGS@
> ++LIBS = @LIBS@
> +
> + COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS)
> +
> +-HEADERS = $(COMHDRS) libgettext.h loadinfo.h
> +-COMHDRS = gettext.h gettextP.h hash-string.h
> +-SOURCES = $(COMSRCS) intl-compat.c cat-compat.c
> +-COMSRCS = bindtextdom.c dcgettext.c dgettext.c gettext.c \
> +-finddomain.c loadmsgcat.c localealias.c textdomain.c l10nflist.c \
> +-explodename.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
> +-GETTOBJS = intl-compat.$lo
> +-DISTFILES.common = ChangeLog Makefile.in linux-msg.sed po2tbl.sed.in \
> +-xopen-msg.sed $(HEADERS) $(SOURCES)
> ++HEADERS = \
> ++ gmo.h \
> ++ gettextP.h \
> ++ hash-string.h \
> ++ loadinfo.h \
> ++ plural-exp.h \
> ++ eval-plural.h \
> ++ localcharset.h \
> ++ relocatable.h \
> ++ xsize.h \
> ++ printf-args.h printf-args.c \
> ++ printf-parse.h wprintf-parse.h printf-parse.c \
> ++ vasnprintf.h vasnwprintf.h vasnprintf.c \
> ++ os2compat.h \
> ++ libgnuintl.h.in
> ++SOURCES = \
> ++ bindtextdom.c \
> ++ dcgettext.c \
> ++ dgettext.c \
> ++ gettext.c \
> ++ finddomain.c \
> ++ loadmsgcat.c \
> ++ localealias.c \
> ++ textdomain.c \
> ++ l10nflist.c \
> ++ explodename.c \
> ++ dcigettext.c \
> ++ dcngettext.c \
> ++ dngettext.c \
> ++ ngettext.c \
> ++ plural.y \
> ++ plural-exp.c \
> ++ localcharset.c \
> ++ relocatable.c \
> ++ localename.c \
> ++ log.c \
> ++ printf.c \
> ++ osdep.c \
> ++ os2compat.c \
> ++ intl-compat.c
> ++OBJECTS = \
> ++ bindtextdom.$lo \
> ++ dcgettext.$lo \
> ++ dgettext.$lo \
> ++ gettext.$lo \
> ++ finddomain.$lo \
> ++ loadmsgcat.$lo \
> ++ localealias.$lo \
> ++ textdomain.$lo \
> ++ l10nflist.$lo \
> ++ explodename.$lo \
> ++ dcigettext.$lo \
> ++ dcngettext.$lo \
> ++ dngettext.$lo \
> ++ ngettext.$lo \
> ++ plural.$lo \
> ++ plural-exp.$lo \
> ++ localcharset.$lo \
> ++ relocatable.$lo \
> ++ localename.$lo \
> ++ log.$lo \
> ++ printf.$lo \
> ++ osdep.$lo \
> ++ intl-compat.$lo
> ++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 = COPYING.LIB-2.0 COPYING.LIB-2.1 libintl.glibc \
> ++libgnuintl.h_vms Makefile.vms \
> ++libgnuintl.h.msvc-static libgnuintl.h.msvc-shared README.woe32 Makefile.msvc
> ++DISTFILES.obsolete = xopen-msg.sed linux-msg.sed po2tbl.sed.in cat-compat.c \
> ++COPYING.LIB-2 gettext.h libgettext.h plural-eval.c libgnuintl.h
> ++
> ++all: all- at USE_INCLUDED_LIBINTL@
> ++all-yes: libintl.$la libintl.h charset.alias ref-add.sed ref-del.sed
> ++all-no: all-no- at BUILD_INCLUDED_LIBINTL@
> ++all-no-yes: libgnuintl.$la
> ++all-no-no:
> ++
> ++libintl.a libgnuintl.a: $(OBJECTS)
> ++ rm -f $@
> ++ $(AR) cru $@ $(OBJECTS)
> ++ $(RANLIB) $@
> ++
> ++libintl.la libgnuintl.la: $(OBJECTS)
> ++ $(LIBTOOL) --mode=link \
> ++ $(CC) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) $(LDFLAGS) -o $@ \
> ++ $(OBJECTS) @LTLIBICONV@ $(LIBS) -lc \
> ++ -version-info $(LTV_CURRENT):$(LTV_REVISION):$(LTV_AGE) \
> ++ -rpath $(libdir) \
> ++ -no-undefined
> ++
> ++# 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=7
> ++LTV_REVISION=0
> ++LTV_AGE=4
> +
> + .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- at USE_INCLUDED_LIBINTL@
> ++bindtextdom.lo: $(srcdir)/bindtextdom.c
> ++ $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/bindtextdom.c
> ++dcgettext.lo: $(srcdir)/dcgettext.c
> ++ $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/dcgettext.c
> ++dgettext.lo: $(srcdir)/dgettext.c
> ++ $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/dgettext.c
> ++gettext.lo: $(srcdir)/gettext.c
> ++ $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/gettext.c
> ++finddomain.lo: $(srcdir)/finddomain.c
> ++ $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/finddomain.c
> ++loadmsgcat.lo: $(srcdir)/loadmsgcat.c
> ++ $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/loadmsgcat.c
> ++localealias.lo: $(srcdir)/localealias.c
> ++ $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/localealias.c
> ++textdomain.lo: $(srcdir)/textdomain.c
> ++ $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/textdomain.c
> ++l10nflist.lo: $(srcdir)/l10nflist.c
> ++ $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/l10nflist.c
> ++explodename.lo: $(srcdir)/explodename.c
> ++ $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/explodename.c
> ++dcigettext.lo: $(srcdir)/dcigettext.c
> ++ $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/dcigettext.c
> ++dcngettext.lo: $(srcdir)/dcngettext.c
> ++ $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/dcngettext.c
> ++dngettext.lo: $(srcdir)/dngettext.c
> ++ $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/dngettext.c
> ++ngettext.lo: $(srcdir)/ngettext.c
> ++ $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/ngettext.c
> ++plural.lo: $(srcdir)/plural.c
> ++ $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/plural.c
> ++plural-exp.lo: $(srcdir)/plural-exp.c
> ++ $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/plural-exp.c
> ++localcharset.lo: $(srcdir)/localcharset.c
> ++ $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/localcharset.c
> ++relocatable.lo: $(srcdir)/relocatable.c
> ++ $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/relocatable.c
> ++localename.lo: $(srcdir)/localename.c
> ++ $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/localename.c
> ++log.lo: $(srcdir)/log.c
> ++ $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/log.c
> ++printf.lo: $(srcdir)/printf.c
> ++ $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/printf.c
> ++osdep.lo: $(srcdir)/osdep.c
> ++ $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/osdep.c
> ++intl-compat.lo: $(srcdir)/intl-compat.c
> ++ $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/intl-compat.c
> +
> +-all-yes: libintl.$la intlh.inst
> +-all-no:
> ++ref-add.sed: $(srcdir)/ref-add.sin
> ++ sed -e '/^#/d' -e 's/@''PACKAGE''@/@PACKAGE@/g' $(srcdir)/ref-add.sin > t-ref-add.sed
> ++ mv t-ref-add.sed ref-add.sed
> ++ref-del.sed: $(srcdir)/ref-del.sin
> ++ sed -e '/^#/d' -e 's/@''PACKAGE''@/@PACKAGE@/g' $(srcdir)/ref-del.sin > t-ref-del.sed
> ++ mv t-ref-del.sed ref-del.sed
> +
> +-libintl.a: $(OBJECTS)
> +- rm -f $@
> +- $(AR) cru $@ $(OBJECTS)
> +- $(RANLIB) $@
> ++INCLUDES = -I. -I$(srcdir) -I..
> +
> +-libintl.la: $(OBJECTS)
> +- $(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $@ $(OBJECTS) \
> +- -version-info 1:0 -rpath $(libdir)
> ++libgnuintl.h: $(srcdir)/libgnuintl.h.in
> ++ sed -e 's,@''HAVE_POSIX_PRINTF''@, at HAVE_POSIX_PRINTF@,g' \
> ++ -e 's,@''HAVE_ASPRINTF''@, at HAVE_ASPRINTF@,g' \
> ++ -e 's,@''HAVE_SNPRINTF''@, at HAVE_SNPRINTF@,g' \
> ++ -e 's,@''HAVE_WPRINTF''@, at HAVE_WPRINTF@,g' \
> ++ < $(srcdir)/libgnuintl.h.in > libgnuintl.h
> +
> +-../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 libgnuintl.h libintl.h
> +
> +-check: all
> ++charset.alias: $(srcdir)/config.charset
> ++ $(SHELL) $(srcdir)/config.charset '@host@' > t-$@
> ++ mv t-$@ $@
> +
> +-# This installation goal is only used in GNU gettext. Packages which
> +-# only use the library should use install instead.
> ++check: all
> +
> + # 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); \
> +- else \
> +- $(top_srcdir)/mkinstalldirs $(libdir) $(includedir); \
> ++ if { test "$(PACKAGE)" = "gettext-runtime" || test "$(PACKAGE)" = "gettext-tools"; } \
> ++ && test '@USE_INCLUDED_LIBINTL@' = yes; then \
> ++ $(mkinstalldirs) $(DESTDIR)$(libdir) $(DESTDIR)$(includedir); \
> ++ $(INSTALL_DATA) libintl.h $(DESTDIR)$(includedir)/libintl.h; \
> ++ $(LIBTOOL) --mode=install \
> ++ $(INSTALL_DATA) libintl.$la $(DESTDIR)$(libdir)/libintl.$la; \
> ++ if test "@RELOCATABLE@" = yes; then \
> ++ dependencies=`sed -n -e 's,^dependency_libs=\(.*\),\1,p' < $(DESTDIR)$(libdir)/libintl.la | sed -e "s,^',," -e "s,'\$$,,"`; \
> ++ if test -n "$$dependencies"; then \
> ++ rm -f $(DESTDIR)$(libdir)/libintl.la; \
> ++ fi; \
> + fi; \
> +- $(INSTALL_DATA) intlh.inst $(includedir)/libintl.h; \
> +- $(INSTALL_DATA) libintl.a $(libdir)/libintl.a; \
> + else \
> + : ; \
> + fi
> +-install-data: all
> +- if test "$(PACKAGE)" = "gettext"; then \
> +- if test -r $(MKINSTALLDIRS); then \
> +- $(MKINSTALLDIRS) $(gettextsrcdir); \
> ++ if test "$(PACKAGE)" = "gettext-tools" \
> ++ && test '@USE_INCLUDED_LIBINTL@' = no; then \
> ++ $(mkinstalldirs) $(DESTDIR)$(libdir); \
> ++ $(LIBTOOL) --mode=install \
> ++ $(INSTALL_DATA) libgnuintl.$la $(DESTDIR)$(libdir)/libgnuintl.$la; \
> ++ rm -f $(DESTDIR)$(libdir)/preloadable_libintl.so; \
> ++ $(INSTALL_DATA) $(DESTDIR)$(libdir)/libgnuintl.so $(DESTDIR)$(libdir)/preloadable_libintl.so; \
> ++ $(LIBTOOL) --mode=uninstall \
> ++ rm -f $(DESTDIR)$(libdir)/libgnuintl.$la; \
> ++ else \
> ++ : ; \
> ++ fi
> ++ if test '@USE_INCLUDED_LIBINTL@' = yes; then \
> ++ test @GLIBC21@ != no || $(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 $(gettextsrcdir); \
> ++ 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) VERSION $(gettextsrcdir)/VERSION; \
> +- dists="$(DISTFILES.common)"; \
> ++ $(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-tools"; then \
> ++ $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \
> ++ $(INSTALL_DATA) VERSION $(DESTDIR)$(gettextsrcdir)/VERSION; \
> ++ $(INSTALL_DATA) ChangeLog.inst $(DESTDIR)$(gettextsrcdir)/ChangeLog; \
> ++ dists="COPYING.LIB-2.0 COPYING.LIB-2.1 $(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 \
> ++ : ; \
> ++ fi
> ++
> ++install-strip: install
> ++
> ++installdirs:
> ++ if { test "$(PACKAGE)" = "gettext-runtime" || test "$(PACKAGE)" = "gettext-tools"; } \
> ++ && test '@USE_INCLUDED_LIBINTL@' = yes; then \
> ++ $(mkinstalldirs) $(DESTDIR)$(libdir) $(DESTDIR)$(includedir); \
> ++ else \
> ++ : ; \
> ++ fi
> ++ if test "$(PACKAGE)" = "gettext-tools" \
> ++ && test '@USE_INCLUDED_LIBINTL@' = no; then \
> ++ $(mkinstalldirs) $(DESTDIR)$(libdir); \
> ++ else \
> ++ : ; \
> ++ fi
> ++ if test '@USE_INCLUDED_LIBINTL@' = yes; then \
> ++ test @GLIBC21@ != no || $(mkinstalldirs) $(DESTDIR)$(libdir); \
> ++ $(mkinstalldirs) $(DESTDIR)$(localedir); \
> ++ else \
> ++ : ; \
> ++ fi
> ++ if test "$(PACKAGE)" = "gettext-tools"; then \
> ++ $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \
> + else \
> + : ; \
> + fi
> +@@ -143,22 +367,76 @@
> + installcheck:
> +
> + uninstall:
> +- dists="$(DISTFILES.common)"; \
> +- for file in $$dists; do \
> +- rm -f $(gettextsrcdir)/$$file; \
> +- done
> ++ if { test "$(PACKAGE)" = "gettext-runtime" || test "$(PACKAGE)" = "gettext-tools"; } \
> ++ && test '@USE_INCLUDED_LIBINTL@' = yes; then \
> ++ rm -f $(DESTDIR)$(includedir)/libintl.h; \
> ++ $(LIBTOOL) --mode=uninstall \
> ++ rm -f $(DESTDIR)$(libdir)/libintl.$la; \
> ++ else \
> ++ : ; \
> ++ fi
> ++ if test "$(PACKAGE)" = "gettext-tools" \
> ++ && test '@USE_INCLUDED_LIBINTL@' = no; then \
> ++ rm -f $(DESTDIR)$(libdir)/preloadable_libintl.so; \
> ++ else \
> ++ : ; \
> ++ fi
> ++ if test '@USE_INCLUDED_LIBINTL@' = yes; then \
> ++ if test -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-tools"; then \
> ++ for file in VERSION ChangeLog COPYING.LIB-2.0 COPYING.LIB-2.1 $(DISTFILES.common) $(DISTFILES.generated); do \
> ++ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
> ++ done; \
> ++ else \
> ++ : ; \
> ++ fi
> +
> +-info dvi:
> ++info dvi ps pdf html:
> +
> +-$(OBJECTS): ../config.h libgettext.h
> +-bindtextdom.$lo finddomain.$lo loadmsgcat.$lo: gettextP.h gettext.h loadinfo.h
> +-dcgettext.$lo: gettextP.h gettext.h hash-string.h loadinfo.h
> ++$(OBJECTS): ../config.h libgnuintl.h
> ++bindtextdom.$lo dcgettext.$lo dcigettext.$lo dcngettext.$lo dgettext.$lo dngettext.$lo finddomain.$lo gettext.$lo intl-compat.$lo loadmsgcat.$lo localealias.$lo ngettext.$lo textdomain.$lo: $(srcdir)/gettextP.h $(srcdir)/gmo.h $(srcdir)/loadinfo.h
> ++dcigettext.$lo loadmsgcat.$lo: $(srcdir)/hash-string.h
> ++explodename.$lo l10nflist.$lo: $(srcdir)/loadinfo.h
> ++dcigettext.$lo loadmsgcat.$lo plural.$lo plural-exp.$lo: $(srcdir)/plural-exp.h
> ++dcigettext.$lo: $(srcdir)/eval-plural.h
> ++localcharset.$lo: $(srcdir)/localcharset.h
> ++localealias.$lo localcharset.$lo relocatable.$lo: $(srcdir)/relocatable.h
> ++printf.$lo: $(srcdir)/printf-args.h $(srcdir)/printf-args.c $(srcdir)/printf-parse.h $(srcdir)/wprintf-parse.h $(srcdir)/xsize.h $(srcdir)/printf-parse.c $(srcdir)/vasnprintf.h $(srcdir)/vasnwprintf.h $(srcdir)/vasnprintf.c
> +
> + tags: TAGS
> +
> + TAGS: $(HEADERS) $(SOURCES)
> + here=`pwd`; cd $(srcdir) && etags -o $$here/TAGS $(HEADERS) $(SOURCES)
> +
> ++ctags: CTAGS
> ++
> ++CTAGS: $(HEADERS) $(SOURCES)
> ++ here=`pwd`; cd $(srcdir) && ctags -o $$here/CTAGS $(HEADERS) $(SOURCES)
> ++
> + id: ID
> +
> + ID: $(HEADERS) $(SOURCES)
> +@@ -166,12 +444,19 @@
> +
> +
> + mostlyclean:
> +- rm -f *.a *.o *.lo core core.*
> ++ rm -f *.a *.la *.o *.obj *.lo core core.*
> ++ rm -f libgnuintl.h 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-runtime" || test "$(PACKAGE)" = "gettext-tools"; then \
> ++ rm -f ChangeLog.inst $(DISTFILES.normal); \
> ++ else \
> ++ : ; \
> ++ fi
> +
> + maintainer-clean: distclean
> + @echo "This command is intended for maintainers to use;"
> +@@ -181,33 +466,27 @@
> + # 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)
> +- if test "$(PACKAGE)" = gettext; then \
> +- additional="$(DISTFILES.gettext)"; \
> ++dist distdir: Makefile
> ++ if test "$(PACKAGE)" = "gettext-tools"; then \
> ++ : ; \
> + else \
> +- additional="$(DISTFILES.normal)"; \
> +- fi; \
> +- for file in $(DISTFILES.common) $$additional; do \
> +- ln $(srcdir)/$$file $(distdir) 2> /dev/null \
> +- || cp -p $(srcdir)/$$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
> ++ if test "$(PACKAGE)" = "gettext-runtime"; then \
> ++ additional="$(DISTFILES.gettext)"; \
> ++ else \
> ++ additional="$(DISTFILES.normal)"; \
> ++ fi; \
> ++ $(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; \
> ++ cp -p $$dir/$$file $(distdir); \
> ++ done; \
> ++ fi
> +
> +-# 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.
> +- at GT_YES@intlh.inst: intlh.inst.in ../config.status
> +- at GT_YES@ cd .. \
> +- at GT_YES@ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= \
> +- at GT_YES@ $(SHELL) ./config.status
> +- at GT_NO@.PHONY: intlh.inst
> +- at GT_NO@intlh.inst:
> ++Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
> ++ cd $(top_builddir) && $(SHELL) ./config.status
> ++# This would be more efficient, but doesn't work any more with autoconf-2.57,
> ++# when AC_CONFIG_FILES([intl/Makefile:somedir/Makefile.in]) is used.
> ++# cd $(top_builddir) && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
> +
> + # Tell versions [3.59,3.63) of GNU make not to export all variables.
> + # Otherwise a system limit (for SysV at least) may be exceeded.
> +--- lrzsz-0.12.20.safe/intl/ngettext.c 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/intl/ngettext.c 2004-09-12 14:40:34.533721032 -0400
> +@@ -0,0 +1,65 @@
> ++/* Implementation of ngettext(3) function.
> ++ Copyright (C) 1995, 1997, 2000-2003 Free Software Foundation, Inc.
> ++
> ++ This program is free software; you can redistribute it and/or modify it
> ++ under the terms of the GNU Library General Public License as published
> ++ by the Free Software Foundation; either version 2, or (at your option)
> ++ any later version.
> ++
> ++ This program is distributed in the hope that it will be useful,
> ++ but WITHOUT ANY WARRANTY; without even the implied warranty of
> ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> ++ Library General Public License for more details.
> ++
> ++ You should have received a copy of the GNU Library General Public
> ++ License along with this program; if not, write to the Free Software
> ++ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
> ++ USA. */
> ++
> ++#ifdef HAVE_CONFIG_H
> ++# include <config.h>
> ++#endif
> ++
> ++#ifdef _LIBC
> ++# define __need_NULL
> ++# include <stddef.h>
> ++#else
> ++# include <stdlib.h> /* Just for NULL. */
> ++#endif
> ++
> ++#include "gettextP.h"
> ++#ifdef _LIBC
> ++# include <libintl.h>
> ++#else
> ++# include "libgnuintl.h"
> ++#endif
> ++
> ++#include <locale.h>
> ++
> ++/* @@ end of prolog @@ */
> ++
> ++/* 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 NGETTEXT __ngettext
> ++# define DCNGETTEXT __dcngettext
> ++#else
> ++# define NGETTEXT libintl_ngettext
> ++# define DCNGETTEXT libintl_dcngettext
> ++#endif
> ++
> ++/* Look up MSGID in the current default message catalog for the current
> ++ LC_MESSAGES locale. If not found, returns MSGID itself (the default
> ++ text). */
> ++char *
> ++NGETTEXT (const char *msgid1, const char *msgid2, unsigned long int n)
> ++{
> ++ return DCNGETTEXT (NULL, msgid1, msgid2, n, LC_MESSAGES);
> ++}
> ++
> ++#ifdef _LIBC
> ++/* Alias for function name in GNU C Library. */
> ++weak_alias (__ngettext, ngettext);
> ++#endif
> +--- lrzsz-0.12.20.safe/intl/os2compat.c 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/intl/os2compat.c 2004-09-12 14:40:34.539720120 -0400
> +@@ -0,0 +1,98 @@
> ++/* OS/2 compatibility functions.
> ++ Copyright (C) 2001-2002 Free Software Foundation, Inc.
> ++
> ++ This program is free software; you can redistribute it and/or modify it
> ++ under the terms of the GNU Library General Public License as published
> ++ by the Free Software Foundation; either version 2, or (at your option)
> ++ any later version.
> ++
> ++ This program is distributed in the hope that it will be useful,
> ++ but WITHOUT ANY WARRANTY; without even the implied warranty of
> ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> ++ Library General Public License for more details.
> ++
> ++ You should have received a copy of the GNU Library General Public
> ++ License along with this program; if not, write to the Free Software
> ++ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
> ++ USA. */
> ++
> ++#define OS2_AWARE
> ++#ifdef HAVE_CONFIG_H
> ++#include <config.h>
> ++#endif
> ++
> ++#include <stdlib.h>
> ++#include <string.h>
> ++#include <sys/param.h>
> ++
> ++/* A version of getenv() that works from DLLs */
> ++extern unsigned long DosScanEnv (const unsigned char *pszName, unsigned char **ppszValue);
> ++
> ++char *
> ++_nl_getenv (const char *name)
> ++{
> ++ unsigned char *value;
> ++ if (DosScanEnv (name, &value))
> ++ return NULL;
> ++ else
> ++ return value;
> ++}
> ++
> ++/* A fixed size buffer. */
> ++char libintl_nl_default_dirname[MAXPATHLEN+1];
> ++
> ++char *_nlos2_libdir = NULL;
> ++char *_nlos2_localealiaspath = NULL;
> ++char *_nlos2_localedir = NULL;
> ++
> ++static __attribute__((constructor)) void
> ++nlos2_initialize ()
> ++{
> ++ char *root = getenv ("UNIXROOT");
> ++ char *gnulocaledir = getenv ("GNULOCALEDIR");
> ++
> ++ _nlos2_libdir = gnulocaledir;
> ++ if (!_nlos2_libdir)
> ++ {
> ++ if (root)
> ++ {
> ++ size_t sl = strlen (root);
> ++ _nlos2_libdir = (char *) malloc (sl + strlen (LIBDIR) + 1);
> ++ memcpy (_nlos2_libdir, root, sl);
> ++ memcpy (_nlos2_libdir + sl, LIBDIR, strlen (LIBDIR) + 1);
> ++ }
> ++ else
> ++ _nlos2_libdir = LIBDIR;
> ++ }
> ++
> ++ _nlos2_localealiaspath = gnulocaledir;
> ++ if (!_nlos2_localealiaspath)
> ++ {
> ++ if (root)
> ++ {
> ++ size_t sl = strlen (root);
> ++ _nlos2_localealiaspath = (char *) malloc (sl + strlen (LOCALE_ALIAS_PATH) + 1);
> ++ memcpy (_nlos2_localealiaspath, root, sl);
> ++ memcpy (_nlos2_localealiaspath + sl, LOCALE_ALIAS_PATH, strlen (LOCALE_ALIAS_PATH) + 1);
> ++ }
> ++ else
> ++ _nlos2_localealiaspath = LOCALE_ALIAS_PATH;
> ++ }
> ++
> ++ _nlos2_localedir = gnulocaledir;
> ++ if (!_nlos2_localedir)
> ++ {
> ++ if (root)
> ++ {
> ++ size_t sl = strlen (root);
> ++ _nlos2_localedir = (char *) malloc (sl + strlen (LOCALEDIR) + 1);
> ++ memcpy (_nlos2_localedir, root, sl);
> ++ memcpy (_nlos2_localedir + sl, LOCALEDIR, strlen (LOCALEDIR) + 1);
> ++ }
> ++ else
> ++ _nlos2_localedir = LOCALEDIR;
> ++ }
> ++
> ++ if (strlen (_nlos2_localedir) <= MAXPATHLEN)
> ++ strcpy (libintl_nl_default_dirname, _nlos2_localedir);
> ++}
> +--- lrzsz-0.12.20.safe/intl/os2compat.h 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/intl/os2compat.h 2004-09-12 14:40:34.544719360 -0400
> +@@ -0,0 +1,46 @@
> ++/* OS/2 compatibility defines.
> ++ This file is intended to be included from config.h
> ++ Copyright (C) 2001-2002 Free Software Foundation, Inc.
> ++
> ++ This program is free software; you can redistribute it and/or modify it
> ++ under the terms of the GNU Library General Public License as published
> ++ by the Free Software Foundation; either version 2, or (at your option)
> ++ any later version.
> ++
> ++ This program is distributed in the hope that it will be useful,
> ++ but WITHOUT ANY WARRANTY; without even the implied warranty of
> ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> ++ Library General Public License for more details.
> ++
> ++ You should have received a copy of the GNU Library General Public
> ++ License along with this program; if not, write to the Free Software
> ++ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
> ++ USA. */
> ++
> ++/* When included from os2compat.h we need all the original definitions */
> ++#ifndef OS2_AWARE
> ++
> ++#undef LIBDIR
> ++#define LIBDIR _nlos2_libdir
> ++extern char *_nlos2_libdir;
> ++
> ++#undef LOCALEDIR
> ++#define LOCALEDIR _nlos2_localedir
> ++extern char *_nlos2_localedir;
> ++
> ++#undef LOCALE_ALIAS_PATH
> ++#define LOCALE_ALIAS_PATH _nlos2_localealiaspath
> ++extern char *_nlos2_localealiaspath;
> ++
> ++#endif
> ++
> ++#undef HAVE_STRCASECMP
> ++#define HAVE_STRCASECMP 1
> ++#define strcasecmp stricmp
> ++#define strncasecmp strnicmp
> ++
> ++/* We have our own getenv() which works even if library is compiled as DLL */
> ++#define getenv _nl_getenv
> ++
> ++/* Older versions of gettext used -1 as the value of LC_MESSAGES */
> ++#define LC_MESSAGES_COMPAT (-1)
> +--- lrzsz-0.12.20.safe/intl/osdep.c 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/intl/osdep.c 2004-09-12 14:40:34.550718448 -0400
> +@@ -0,0 +1,24 @@
> ++/* OS dependent parts of libintl.
> ++ Copyright (C) 2001-2002 Free Software Foundation, Inc.
> ++
> ++ This program is free software; you can redistribute it and/or modify it
> ++ under the terms of the GNU Library General Public License as published
> ++ by the Free Software Foundation; either version 2, or (at your option)
> ++ any later version.
> ++
> ++ This program is distributed in the hope that it will be useful,
> ++ but WITHOUT ANY WARRANTY; without even the implied warranty of
> ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> ++ Library General Public License for more details.
> ++
> ++ You should have received a copy of the GNU Library General Public
> ++ License along with this program; if not, write to the Free Software
> ++ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
> ++ USA. */
> ++
> ++#if defined __EMX__
> ++# include "os2compat.c"
> ++#else
> ++/* Avoid AIX compiler warning. */
> ++typedef int dummy;
> ++#endif
> +--- lrzsz-0.12.20.safe/intl/plural.c 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/intl/plural.c 2004-09-12 14:40:36.571411256 -0400
> +@@ -0,0 +1,1490 @@
> ++/* A Bison parser, made from plural.y
> ++ by GNU bison 1.35. */
> ++
> ++#define YYBISON 1 /* Identify Bison output. */
> ++
> ++#define yyparse __gettextparse
> ++#define yylex __gettextlex
> ++#define yyerror __gettexterror
> ++#define yylval __gettextlval
> ++#define yychar __gettextchar
> ++#define yydebug __gettextdebug
> ++#define yynerrs __gettextnerrs
> ++# define EQUOP2 257
> ++# define CMPOP2 258
> ++# define ADDOP2 259
> ++# define MULOP2 260
> ++# define NUMBER 261
> ++
> ++#line 1 "plural.y"
> ++
> ++/* Expression parsing for plural form selection.
> ++ Copyright (C) 2000-2001, 2003 Free Software Foundation, Inc.
> ++ Written by Ulrich Drepper <drepper at cygnus.com>, 2000.
> ++
> ++ This program is free software; you can redistribute it and/or modify it
> ++ under the terms of the GNU Library General Public License as published
> ++ by the Free Software Foundation; either version 2, or (at your option)
> ++ any later version.
> ++
> ++ This program is distributed in the hope that it will be useful,
> ++ but WITHOUT ANY WARRANTY; without even the implied warranty of
> ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> ++ Library General Public License for more details.
> ++
> ++ You should have received a copy of the GNU Library General Public
> ++ License along with this program; if not, write to the Free Software
> ++ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
> ++ USA. */
> ++
> ++/* The bison generated parser uses alloca. AIX 3 forces us to put this
> ++ declaration at the beginning of the file. The declaration in bison's
> ++ skeleton file comes too late. This must come before <config.h>
> ++ because <config.h> may include arbitrary system headers. */
> ++#if defined _AIX && !defined __GNUC__
> ++ #pragma alloca
> ++#endif
> ++
> ++#ifdef HAVE_CONFIG_H
> ++# include <config.h>
> ++#endif
> ++
> ++#include <stddef.h>
> ++#include <stdlib.h>
> ++#include "plural-exp.h"
> ++
> ++/* The main function generated by the parser is called __gettextparse,
> ++ but we want it to be called PLURAL_PARSE. */
> ++#ifndef _LIBC
> ++# define __gettextparse PLURAL_PARSE
> ++#endif
> ++
> ++#define YYLEX_PARAM &((struct parse_args *) arg)->cp
> ++#define YYPARSE_PARAM arg
> ++
> ++#line 49 "plural.y"
> ++#ifndef YYSTYPE
> ++typedef union {
> ++ unsigned long int num;
> ++ enum operator op;
> ++ struct expression *exp;
> ++} yystype;
> ++# define YYSTYPE yystype
> ++# define YYSTYPE_IS_TRIVIAL 1
> ++#endif
> ++#line 55 "plural.y"
> ++
> ++/* Prototypes for local functions. */
> ++static int yylex (YYSTYPE *lval, const char **pexp);
> ++static void yyerror (const char *str);
> ++
> ++/* Allocation of expressions. */
> ++
> ++static struct expression *
> ++new_exp (int nargs, enum operator op, struct expression * const *args)
> ++{
> ++ int i;
> ++ struct expression *newp;
> ++
> ++ /* If any of the argument could not be malloc'ed, just return NULL. */
> ++ for (i = nargs - 1; i >= 0; i--)
> ++ if (args[i] == NULL)
> ++ goto fail;
> ++
> ++ /* Allocate a new expression. */
> ++ newp = (struct expression *) malloc (sizeof (*newp));
> ++ if (newp != NULL)
> ++ {
> ++ newp->nargs = nargs;
> ++ newp->operation = op;
> ++ for (i = nargs - 1; i >= 0; i--)
> ++ newp->val.args[i] = args[i];
> ++ return newp;
> ++ }
> ++
> ++ fail:
> ++ for (i = nargs - 1; i >= 0; i--)
> ++ FREE_EXPRESSION (args[i]);
> ++
> ++ return NULL;
> ++}
> ++
> ++static inline struct expression *
> ++new_exp_0 (enum operator op)
> ++{
> ++ return new_exp (0, op, NULL);
> ++}
> ++
> ++static inline struct expression *
> ++new_exp_1 (enum operator op, struct expression *right)
> ++{
> ++ struct expression *args[1];
> ++
> ++ args[0] = right;
> ++ return new_exp (1, op, args);
> ++}
> ++
> ++static struct expression *
> ++new_exp_2 (enum operator op, struct expression *left, struct expression *right)
> ++{
> ++ struct expression *args[2];
> ++
> ++ args[0] = left;
> ++ args[1] = right;
> ++ return new_exp (2, op, args);
> ++}
> ++
> ++static inline struct expression *
> ++new_exp_3 (enum operator op, struct expression *bexp,
> ++ struct expression *tbranch, struct expression *fbranch)
> ++{
> ++ struct expression *args[3];
> ++
> ++ args[0] = bexp;
> ++ args[1] = tbranch;
> ++ args[2] = fbranch;
> ++ return new_exp (3, op, args);
> ++}
> ++
> ++#ifndef YYDEBUG
> ++# define YYDEBUG 0
> ++#endif
> ++
> ++
> ++
> ++#define YYFINAL 27
> ++#define YYFLAG -32768
> ++#define YYNTBASE 16
> ++
> ++/* YYTRANSLATE(YYLEX) -- Bison token number corresponding to YYLEX. */
> ++#define YYTRANSLATE(x) ((unsigned)(x) <= 261 ? yytranslate[x] : 18)
> ++
> ++/* YYTRANSLATE[YYLEX] -- Bison token number corresponding to YYLEX. */
> ++static const char yytranslate[] =
> ++{
> ++ 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
> ++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
> ++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
> ++ 2, 2, 2, 10, 2, 2, 2, 2, 5, 2,
> ++ 14, 15, 2, 2, 2, 2, 2, 2, 2, 2,
> ++ 2, 2, 2, 2, 2, 2, 2, 2, 12, 2,
> ++ 2, 2, 2, 3, 2, 2, 2, 2, 2, 2,
> ++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
> ++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
> ++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
> ++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
> ++ 13, 2, 2, 2, 2, 2, 2, 2, 2, 2,
> ++ 2, 2, 2, 2, 4, 2, 2, 2, 2, 2,
> ++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
> ++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
> ++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
> ++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
> ++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
> ++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
> ++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
> ++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
> ++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
> ++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
> ++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
> ++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
> ++ 2, 2, 2, 2, 2, 2, 1, 6, 7, 8,
> ++ 9, 11
> ++};
> ++
> ++#if YYDEBUG
> ++static const short yyprhs[] =
> ++{
> ++ 0, 0, 2, 8, 12, 16, 20, 24, 28, 32,
> ++ 35, 37, 39
> ++};
> ++static const short yyrhs[] =
> ++{
> ++ 17, 0, 17, 3, 17, 12, 17, 0, 17, 4,
> ++ 17, 0, 17, 5, 17, 0, 17, 6, 17, 0,
> ++ 17, 7, 17, 0, 17, 8, 17, 0, 17, 9,
> ++ 17, 0, 10, 17, 0, 13, 0, 11, 0, 14,
> ++ 17, 15, 0
> ++};
> ++
> ++#endif
> ++
> ++#if YYDEBUG
> ++/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
> ++static const short yyrline[] =
> ++{
> ++ 0, 150, 158, 162, 166, 170, 174, 178, 182, 186,
> ++ 190, 194, 199
> ++};
> ++#endif
> ++
> ++
> ++#if (YYDEBUG) || defined YYERROR_VERBOSE
> ++
> ++/* YYTNAME[TOKEN_NUM] -- String name of the token TOKEN_NUM. */
> ++static const char *const yytname[] =
> ++{
> ++ "$", "error", "$undefined.", "'?'", "'|'", "'&'", "EQUOP2", "CMPOP2",
> ++ "ADDOP2", "MULOP2", "'!'", "NUMBER", "':'", "'n'", "'('", "')'",
> ++ "start", "exp", 0
> ++};
> ++#endif
> ++
> ++/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
> ++static const short yyr1[] =
> ++{
> ++ 0, 16, 17, 17, 17, 17, 17, 17, 17, 17,
> ++ 17, 17, 17
> ++};
> ++
> ++/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
> ++static const short yyr2[] =
> ++{
> ++ 0, 1, 5, 3, 3, 3, 3, 3, 3, 2,
> ++ 1, 1, 3
> ++};
> ++
> ++/* YYDEFACT[S] -- default rule to reduce with in state S when YYTABLE
> ++ doesn't specify something else to do. Zero means the default is an
> ++ error. */
> ++static const short yydefact[] =
> ++{
> ++ 0, 0, 11, 10, 0, 1, 9, 0, 0, 0,
> ++ 0, 0, 0, 0, 0, 12, 0, 3, 4, 5,
> ++ 6, 7, 8, 0, 2, 0, 0, 0
> ++};
> ++
> ++static const short yydefgoto[] =
> ++{
> ++ 25, 5
> ++};
> ++
> ++static const short yypact[] =
> ++{
> ++ -9, -9,-32768,-32768, -9, 34,-32768, 11, -9, -9,
> ++ -9, -9, -9, -9, -9,-32768, 24, 39, 43, 16,
> ++ 26, -3,-32768, -9, 34, 21, 53,-32768
> ++};
> ++
> ++static const short yypgoto[] =
> ++{
> ++ -32768, -1
> ++};
> ++
> ++
> ++#define YYLAST 53
> ++
> ++
> ++static const short yytable[] =
> ++{
> ++ 6, 1, 2, 7, 3, 4, 14, 16, 17, 18,
> ++ 19, 20, 21, 22, 8, 9, 10, 11, 12, 13,
> ++ 14, 26, 24, 12, 13, 14, 15, 8, 9, 10,
> ++ 11, 12, 13, 14, 13, 14, 23, 8, 9, 10,
> ++ 11, 12, 13, 14, 10, 11, 12, 13, 14, 11,
> ++ 12, 13, 14, 27
> ++};
> ++
> ++static const short yycheck[] =
> ++{
> ++ 1, 10, 11, 4, 13, 14, 9, 8, 9, 10,
> ++ 11, 12, 13, 14, 3, 4, 5, 6, 7, 8,
> ++ 9, 0, 23, 7, 8, 9, 15, 3, 4, 5,
> ++ 6, 7, 8, 9, 8, 9, 12, 3, 4, 5,
> ++ 6, 7, 8, 9, 5, 6, 7, 8, 9, 6,
> ++ 7, 8, 9, 0
> ++};
> ++#define YYPURE 1
> ++
> ++/* -*-C-*- Note some compilers choke on comments on `#line' lines. */
> ++#line 3 "/usr/local/share/bison/bison.simple"
> ++
> ++/* Skeleton output parser for bison,
> ++
> ++ Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002 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
> ++ the Free Software Foundation; either version 2, or (at your option)
> ++ any later version.
> ++
> ++ This program is distributed in the hope that it will be useful,
> ++ but WITHOUT ANY WARRANTY; without even the implied warranty of
> ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> ++ GNU General Public License for more details.
> ++
> ++ 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. */
> ++
> ++/* As a special exception, when this file is copied by Bison into a
> ++ Bison output file, you may use that output file without restriction.
> ++ This special exception was added by the Free Software Foundation
> ++ in version 1.24 of Bison. */
> ++
> ++/* This is the parser code that is written into each bison parser when
> ++ the %semantic_parser declaration is not specified in the grammar.
> ++ It was written by Richard Stallman by simplifying the hairy parser
> ++ used when %semantic_parser is specified. */
> ++
> ++/* All symbols defined below should begin with yy or YY, to avoid
> ++ infringing on user name space. This should be done even for local
> ++ variables, as they might otherwise be expanded by user macros.
> ++ There are some unavoidable exceptions within include files to
> ++ define necessary library symbols; they are noted "INFRINGES ON
> ++ USER NAME SPACE" below. */
> ++
> ++#if ! defined (yyoverflow) || defined (YYERROR_VERBOSE)
> ++
> ++/* The parser invokes alloca or malloc; define the necessary symbols. */
> ++
> ++# if YYSTACK_USE_ALLOCA
> ++# define YYSTACK_ALLOC alloca
> ++# else
> ++# ifndef YYSTACK_USE_ALLOCA
> ++# if defined (alloca) || defined (_ALLOCA_H)
> ++# define YYSTACK_ALLOC alloca
> ++# else
> ++# ifdef __GNUC__
> ++# define YYSTACK_ALLOC __builtin_alloca
> ++# endif
> ++# endif
> ++# endif
> ++# endif
> ++
> ++# ifdef YYSTACK_ALLOC
> ++ /* Pacify GCC's `empty if-body' warning. */
> ++# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
> ++# else
> ++# if defined (__STDC__) || defined (__cplusplus)
> ++# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
> ++# define YYSIZE_T size_t
> ++# endif
> ++# define YYSTACK_ALLOC malloc
> ++# define YYSTACK_FREE free
> ++# endif
> ++#endif /* ! defined (yyoverflow) || defined (YYERROR_VERBOSE) */
> ++
> ++
> ++#if (! defined (yyoverflow) \
> ++ && (! defined (__cplusplus) \
> ++ || (YYLTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
> ++
> ++/* A type that is properly aligned for any stack member. */
> ++union yyalloc
> ++{
> ++ short yyss;
> ++ YYSTYPE yyvs;
> ++# if YYLSP_NEEDED
> ++ YYLTYPE yyls;
> ++# endif
> ++};
> ++
> ++/* The size of the maximum gap between one aligned stack and the next. */
> ++# define YYSTACK_GAP_MAX (sizeof (union yyalloc) - 1)
> ++
> ++/* The size of an array large to enough to hold all stacks, each with
> ++ N elements. */
> ++# if YYLSP_NEEDED
> ++# define YYSTACK_BYTES(N) \
> ++ ((N) * (sizeof (short) + sizeof (YYSTYPE) + sizeof (YYLTYPE)) \
> ++ + 2 * YYSTACK_GAP_MAX)
> ++# else
> ++# define YYSTACK_BYTES(N) \
> ++ ((N) * (sizeof (short) + sizeof (YYSTYPE)) \
> ++ + YYSTACK_GAP_MAX)
> ++# endif
> ++
> ++/* Copy COUNT objects from FROM to TO. The source and destination do
> ++ not overlap. */
> ++# ifndef YYCOPY
> ++# if 1 < __GNUC__
> ++# define YYCOPY(To, From, Count) \
> ++ __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
> ++# else
> ++# define YYCOPY(To, From, Count) \
> ++ do \
> ++ { \
> ++ register YYSIZE_T yyi; \
> ++ for (yyi = 0; yyi < (Count); yyi++) \
> ++ (To)[yyi] = (From)[yyi]; \
> ++ } \
> ++ while (0)
> ++# endif
> ++# endif
> ++
> ++/* Relocate STACK from its old location to the new one. The
> ++ local variables YYSIZE and YYSTACKSIZE give the old and new number of
> ++ elements in the stack, and YYPTR gives the new location of the
> ++ stack. Advance YYPTR to a properly aligned location for the next
> ++ stack. */
> ++# define YYSTACK_RELOCATE(Stack) \
> ++ do \
> ++ { \
> ++ YYSIZE_T yynewbytes; \
> ++ YYCOPY (&yyptr->Stack, Stack, yysize); \
> ++ Stack = &yyptr->Stack; \
> ++ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAX; \
> ++ yyptr += yynewbytes / sizeof (*yyptr); \
> ++ } \
> ++ while (0)
> ++
> ++#endif
> ++
> ++
> ++#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
> ++# define YYSIZE_T __SIZE_TYPE__
> ++#endif
> ++#if ! defined (YYSIZE_T) && defined (size_t)
> ++# define YYSIZE_T size_t
> ++#endif
> ++#if ! defined (YYSIZE_T)
> ++# if defined (__STDC__) || defined (__cplusplus)
> ++# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
> ++# define YYSIZE_T size_t
> ++# endif
> ++#endif
> ++#if ! defined (YYSIZE_T)
> ++# define YYSIZE_T unsigned int
> ++#endif
> ++
> ++#define yyerrok (yyerrstatus = 0)
> ++#define yyclearin (yychar = YYEMPTY)
> ++#define YYEMPTY -2
> ++#define YYEOF 0
> ++#define YYACCEPT goto yyacceptlab
> ++#define YYABORT goto yyabortlab
> ++#define YYERROR goto yyerrlab1
> ++/* Like YYERROR except do call yyerror. This remains here temporarily
> ++ to ease the transition to the new meaning of YYERROR, for GCC.
> ++ Once GCC version 2 has supplanted version 1, this can go. */
> ++#define YYFAIL goto yyerrlab
> ++#define YYRECOVERING() (!!yyerrstatus)
> ++#define YYBACKUP(Token, Value) \
> ++do \
> ++ if (yychar == YYEMPTY && yylen == 1) \
> ++ { \
> ++ yychar = (Token); \
> ++ yylval = (Value); \
> ++ yychar1 = YYTRANSLATE (yychar); \
> ++ YYPOPSTACK; \
> ++ goto yybackup; \
> ++ } \
> ++ else \
> ++ { \
> ++ yyerror ("syntax error: cannot back up"); \
> ++ YYERROR; \
> ++ } \
> ++while (0)
> ++
> ++#define YYTERROR 1
> ++#define YYERRCODE 256
> ++
> ++
> ++/* YYLLOC_DEFAULT -- Compute the default location (before the actions
> ++ are run).
> ++
> ++ When YYLLOC_DEFAULT is run, CURRENT is set the location of the
> ++ first token. By default, to implement support for ranges, extend
> ++ its range to the last symbol. */
> ++
> ++#ifndef YYLLOC_DEFAULT
> ++# define YYLLOC_DEFAULT(Current, Rhs, N) \
> ++ Current.last_line = Rhs[N].last_line; \
> ++ Current.last_column = Rhs[N].last_column;
> ++#endif
> ++
> ++
> ++/* YYLEX -- calling `yylex' with the right arguments. */
> ++
> ++#if YYPURE
> ++# if YYLSP_NEEDED
> ++# ifdef YYLEX_PARAM
> ++# define YYLEX yylex (&yylval, &yylloc, YYLEX_PARAM)
> ++# else
> ++# define YYLEX yylex (&yylval, &yylloc)
> ++# endif
> ++# else /* !YYLSP_NEEDED */
> ++# ifdef YYLEX_PARAM
> ++# define YYLEX yylex (&yylval, YYLEX_PARAM)
> ++# else
> ++# define YYLEX yylex (&yylval)
> ++# endif
> ++# endif /* !YYLSP_NEEDED */
> ++#else /* !YYPURE */
> ++# define YYLEX yylex ()
> ++#endif /* !YYPURE */
> ++
> ++
> ++/* Enable debugging if requested. */
> ++#if YYDEBUG
> ++
> ++# ifndef YYFPRINTF
> ++# include <stdio.h> /* INFRINGES ON USER NAME SPACE */
> ++# define YYFPRINTF fprintf
> ++# endif
> ++
> ++# define YYDPRINTF(Args) \
> ++do { \
> ++ if (yydebug) \
> ++ YYFPRINTF Args; \
> ++} while (0)
> ++/* Nonzero means print parse trace. It is left uninitialized so that
> ++ multiple parsers can coexist. */
> ++int yydebug;
> ++#else /* !YYDEBUG */
> ++# define YYDPRINTF(Args)
> ++#endif /* !YYDEBUG */
> ++
> ++/* YYINITDEPTH -- initial size of the parser's stacks. */
> ++#ifndef YYINITDEPTH
> ++# define YYINITDEPTH 200
> ++#endif
> ++
> ++/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
> ++ if the built-in stack extension method is used).
> ++
> ++ Do not make this value too large; the results are undefined if
> ++ SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
> ++ evaluated with infinite-precision integer arithmetic. */
> ++
> ++#if YYMAXDEPTH == 0
> ++# undef YYMAXDEPTH
> ++#endif
> ++
> ++#ifndef YYMAXDEPTH
> ++# define YYMAXDEPTH 10000
> ++#endif
> ++
> ++#ifdef YYERROR_VERBOSE
> ++
> ++# ifndef yystrlen
> ++# if defined (__GLIBC__) && defined (_STRING_H)
> ++# define yystrlen strlen
> ++# else
> ++/* Return the length of YYSTR. */
> ++static YYSIZE_T
> ++# if defined (__STDC__) || defined (__cplusplus)
> ++yystrlen (const char *yystr)
> ++# else
> ++yystrlen (yystr)
> ++ const char *yystr;
> ++# endif
> ++{
> ++ register const char *yys = yystr;
> ++
> ++ while (*yys++ != '\0')
> ++ continue;
> ++
> ++ return yys - yystr - 1;
> ++}
> ++# endif
> ++# endif
> ++
> ++# ifndef yystpcpy
> ++# if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
> ++# define yystpcpy stpcpy
> ++# else
> ++/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
> ++ YYDEST. */
> ++static char *
> ++# if defined (__STDC__) || defined (__cplusplus)
> ++yystpcpy (char *yydest, const char *yysrc)
> ++# else
> ++yystpcpy (yydest, yysrc)
> ++ char *yydest;
> ++ const char *yysrc;
> ++# endif
> ++{
> ++ register char *yyd = yydest;
> ++ register const char *yys = yysrc;
> ++
> ++ while ((*yyd++ = *yys++) != '\0')
> ++ continue;
> ++
> ++ return yyd - 1;
> ++}
> ++# endif
> ++# endif
> ++#endif
> ++
> ++#line 315 "/usr/local/share/bison/bison.simple"
> ++
> ++
> ++/* The user can define YYPARSE_PARAM as the name of an argument to be passed
> ++ into yyparse. The argument should have type void *.
> ++ It should actually point to an object.
> ++ Grammar actions can access the variable by casting it
> ++ to the proper pointer type. */
> ++
> ++#ifdef YYPARSE_PARAM
> ++# if defined (__STDC__) || defined (__cplusplus)
> ++# define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
> ++# define YYPARSE_PARAM_DECL
> ++# else
> ++# define YYPARSE_PARAM_ARG YYPARSE_PARAM
> ++# define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
> ++# endif
> ++#else /* !YYPARSE_PARAM */
> ++# define YYPARSE_PARAM_ARG
> ++# define YYPARSE_PARAM_DECL
> ++#endif /* !YYPARSE_PARAM */
> ++
> ++/* Prevent warning if -Wstrict-prototypes. */
> ++#ifdef __GNUC__
> ++# ifdef YYPARSE_PARAM
> ++int yyparse (void *);
> ++# else
> ++int yyparse (void);
> ++# endif
> ++#endif
> ++
> ++/* YY_DECL_VARIABLES -- depending whether we use a pure parser,
> ++ variables are global, or local to YYPARSE. */
> ++
> ++#define YY_DECL_NON_LSP_VARIABLES \
> ++/* The lookahead symbol. */ \
> ++int yychar; \
> ++ \
> ++/* The semantic value of the lookahead symbol. */ \
> ++YYSTYPE yylval; \
> ++ \
> ++/* Number of parse errors so far. */ \
> ++int yynerrs;
> ++
> ++#if YYLSP_NEEDED
> ++# define YY_DECL_VARIABLES \
> ++YY_DECL_NON_LSP_VARIABLES \
> ++ \
> ++/* Location data for the lookahead symbol. */ \
> ++YYLTYPE yylloc;
> ++#else
> ++# define YY_DECL_VARIABLES \
> ++YY_DECL_NON_LSP_VARIABLES
> ++#endif
> ++
> ++
> ++/* If nonreentrant, generate the variables here. */
> ++
> ++#if !YYPURE
> ++YY_DECL_VARIABLES
> ++#endif /* !YYPURE */
> ++
> ++int
> ++yyparse (YYPARSE_PARAM_ARG)
> ++ YYPARSE_PARAM_DECL
> ++{
> ++ /* If reentrant, generate the variables here. */
> ++#if YYPURE
> ++ YY_DECL_VARIABLES
> ++#endif /* !YYPURE */
> ++
> ++ register int yystate;
> ++ register int yyn;
> ++ int yyresult;
> ++ /* Number of tokens to shift before error messages enabled. */
> ++ int yyerrstatus;
> ++ /* Lookahead token as an internal (translated) token number. */
> ++ int yychar1 = 0;
> ++
> ++ /* Three stacks and their tools:
> ++ `yyss': related to states,
> ++ `yyvs': related to semantic values,
> ++ `yyls': related to locations.
> ++
> ++ Refer to the stacks thru separate pointers, to allow yyoverflow
> ++ to reallocate them elsewhere. */
> ++
> ++ /* The state stack. */
> ++ short yyssa[YYINITDEPTH];
> ++ short *yyss = yyssa;
> ++ register short *yyssp;
> ++
> ++ /* The semantic value stack. */
> ++ YYSTYPE yyvsa[YYINITDEPTH];
> ++ YYSTYPE *yyvs = yyvsa;
> ++ register YYSTYPE *yyvsp;
> ++
> ++#if YYLSP_NEEDED
> ++ /* The location stack. */
> ++ YYLTYPE yylsa[YYINITDEPTH];
> ++ YYLTYPE *yyls = yylsa;
> ++ YYLTYPE *yylsp;
> ++#endif
> ++
> ++#if YYLSP_NEEDED
> ++# define YYPOPSTACK (yyvsp--, yyssp--, yylsp--)
> ++#else
> ++# define YYPOPSTACK (yyvsp--, yyssp--)
> ++#endif
> ++
> ++ YYSIZE_T yystacksize = YYINITDEPTH;
> ++
> ++
> ++ /* The variables used to return semantic value and location from the
> ++ action routines. */
> ++ YYSTYPE yyval;
> ++#if YYLSP_NEEDED
> ++ YYLTYPE yyloc;
> ++#endif
> ++
> ++ /* When reducing, the number of symbols on the RHS of the reduced
> ++ rule. */
> ++ int yylen;
> ++
> ++ YYDPRINTF ((stderr, "Starting parse\n"));
> ++
> ++ yystate = 0;
> ++ yyerrstatus = 0;
> ++ yynerrs = 0;
> ++ yychar = YYEMPTY; /* Cause a token to be read. */
> ++
> ++ /* Initialize stack pointers.
> ++ Waste one element of value and location stack
> ++ so that they stay on the same level as the state stack.
> ++ The wasted elements are never initialized. */
> ++
> ++ yyssp = yyss;
> ++ yyvsp = yyvs;
> ++#if YYLSP_NEEDED
> ++ yylsp = yyls;
> ++#endif
> ++ goto yysetstate;
> ++
> ++/*------------------------------------------------------------.
> ++| yynewstate -- Push a new state, which is found in yystate. |
> ++`------------------------------------------------------------*/
> ++ yynewstate:
> ++ /* In all cases, when you get here, the value and location stacks
> ++ have just been pushed. so pushing a state here evens the stacks.
> ++ */
> ++ yyssp++;
> ++
> ++ yysetstate:
> ++ *yyssp = yystate;
> ++
> ++ if (yyssp >= yyss + yystacksize - 1)
> ++ {
> ++ /* Get the current used size of the three stacks, in elements. */
> ++ YYSIZE_T yysize = yyssp - yyss + 1;
> ++
> ++#ifdef yyoverflow
> ++ {
> ++ /* Give user a chance to reallocate the stack. Use copies of
> ++ these so that the &'s don't force the real ones into
> ++ memory. */
> ++ YYSTYPE *yyvs1 = yyvs;
> ++ short *yyss1 = yyss;
> ++
> ++ /* Each stack pointer address is followed by the size of the
> ++ data in use in that stack, in bytes. */
> ++# if YYLSP_NEEDED
> ++ YYLTYPE *yyls1 = yyls;
> ++ /* This used to be a conditional around just the two extra args,
> ++ but that might be undefined if yyoverflow is a macro. */
> ++ yyoverflow ("parser stack overflow",
> ++ &yyss1, yysize * sizeof (*yyssp),
> ++ &yyvs1, yysize * sizeof (*yyvsp),
> ++ &yyls1, yysize * sizeof (*yylsp),
> ++ &yystacksize);
> ++ yyls = yyls1;
> ++# else
> ++ yyoverflow ("parser stack overflow",
> ++ &yyss1, yysize * sizeof (*yyssp),
> ++ &yyvs1, yysize * sizeof (*yyvsp),
> ++ &yystacksize);
> ++# endif
> ++ yyss = yyss1;
> ++ yyvs = yyvs1;
> ++ }
> ++#else /* no yyoverflow */
> ++# ifndef YYSTACK_RELOCATE
> ++ goto yyoverflowlab;
> ++# else
> ++ /* Extend the stack our own way. */
> ++ if (yystacksize >= YYMAXDEPTH)
> ++ goto yyoverflowlab;
> ++ yystacksize *= 2;
> ++ if (yystacksize > YYMAXDEPTH)
> ++ yystacksize = YYMAXDEPTH;
> ++
> ++ {
> ++ short *yyss1 = yyss;
> ++ union yyalloc *yyptr =
> ++ (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
> ++ if (! yyptr)
> ++ goto yyoverflowlab;
> ++ YYSTACK_RELOCATE (yyss);
> ++ YYSTACK_RELOCATE (yyvs);
> ++# if YYLSP_NEEDED
> ++ YYSTACK_RELOCATE (yyls);
> ++# endif
> ++# undef YYSTACK_RELOCATE
> ++ if (yyss1 != yyssa)
> ++ YYSTACK_FREE (yyss1);
> ++ }
> ++# endif
> ++#endif /* no yyoverflow */
> ++
> ++ yyssp = yyss + yysize - 1;
> ++ yyvsp = yyvs + yysize - 1;
> ++#if YYLSP_NEEDED
> ++ yylsp = yyls + yysize - 1;
> ++#endif
> ++
> ++ YYDPRINTF ((stderr, "Stack size increased to %lu\n",
> ++ (unsigned long int) yystacksize));
> ++
> ++ if (yyssp >= yyss + yystacksize - 1)
> ++ YYABORT;
> ++ }
> ++
> ++ YYDPRINTF ((stderr, "Entering state %d\n", yystate));
> ++
> ++ goto yybackup;
> ++
> ++
> ++/*-----------.
> ++| yybackup. |
> ++`-----------*/
> ++yybackup:
> ++
> ++/* Do appropriate processing given the current state. */
> ++/* Read a lookahead token if we need one and don't already have one. */
> ++/* yyresume: */
> ++
> ++ /* First try to decide what to do without reference to lookahead token. */
> ++
> ++ yyn = yypact[yystate];
> ++ if (yyn == YYFLAG)
> ++ goto yydefault;
> ++
> ++ /* Not known => get a lookahead token if don't already have one. */
> ++
> ++ /* yychar is either YYEMPTY or YYEOF
> ++ or a valid token in external form. */
> ++
> ++ if (yychar == YYEMPTY)
> ++ {
> ++ YYDPRINTF ((stderr, "Reading a token: "));
> ++ yychar = YYLEX;
> ++ }
> ++
> ++ /* Convert token to internal form (in yychar1) for indexing tables with */
> ++
> ++ if (yychar <= 0) /* This means end of input. */
> ++ {
> ++ yychar1 = 0;
> ++ yychar = YYEOF; /* Don't call YYLEX any more */
> ++
> ++ YYDPRINTF ((stderr, "Now at end of input.\n"));
> ++ }
> ++ else
> ++ {
> ++ yychar1 = YYTRANSLATE (yychar);
> ++
> ++#if YYDEBUG
> ++ /* We have to keep this `#if YYDEBUG', since we use variables
> ++ which are defined only if `YYDEBUG' is set. */
> ++ if (yydebug)
> ++ {
> ++ YYFPRINTF (stderr, "Next token is %d (%s",
> ++ yychar, yytname[yychar1]);
> ++ /* Give the individual parser a way to print the precise
> ++ meaning of a token, for further debugging info. */
> ++# ifdef YYPRINT
> ++ YYPRINT (stderr, yychar, yylval);
> ++# endif
> ++ YYFPRINTF (stderr, ")\n");
> ++ }
> ++#endif
> ++ }
> ++
> ++ yyn += yychar1;
> ++ if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
> ++ goto yydefault;
> ++
> ++ yyn = yytable[yyn];
> ++
> ++ /* yyn is what to do for this token type in this state.
> ++ Negative => reduce, -yyn is rule number.
> ++ Positive => shift, yyn is new state.
> ++ New state is final state => don't bother to shift,
> ++ just return success.
> ++ 0, or most negative number => error. */
> ++
> ++ if (yyn < 0)
> ++ {
> ++ if (yyn == YYFLAG)
> ++ goto yyerrlab;
> ++ yyn = -yyn;
> ++ goto yyreduce;
> ++ }
> ++ else if (yyn == 0)
> ++ goto yyerrlab;
> ++
> ++ if (yyn == YYFINAL)
> ++ YYACCEPT;
> ++
> ++ /* Shift the lookahead token. */
> ++ YYDPRINTF ((stderr, "Shifting token %d (%s), ",
> ++ yychar, yytname[yychar1]));
> ++
> ++ /* Discard the token being shifted unless it is eof. */
> ++ if (yychar != YYEOF)
> ++ yychar = YYEMPTY;
> ++
> ++ *++yyvsp = yylval;
> ++#if YYLSP_NEEDED
> ++ *++yylsp = yylloc;
> ++#endif
> ++
> ++ /* Count tokens shifted since error; after three, turn off error
> ++ status. */
> ++ if (yyerrstatus)
> ++ yyerrstatus--;
> ++
> ++ yystate = yyn;
> ++ goto yynewstate;
> ++
> ++
> ++/*-----------------------------------------------------------.
> ++| yydefault -- do the default action for the current state. |
> ++`-----------------------------------------------------------*/
> ++yydefault:
> ++ yyn = yydefact[yystate];
> ++ if (yyn == 0)
> ++ goto yyerrlab;
> ++ goto yyreduce;
> ++
> ++
> ++/*-----------------------------.
> ++| yyreduce -- Do a reduction. |
> ++`-----------------------------*/
> ++yyreduce:
> ++ /* yyn is the number of a rule to reduce with. */
> ++ yylen = yyr2[yyn];
> ++
> ++ /* If YYLEN is nonzero, implement the default value of the action:
> ++ `$$ = $1'.
> ++
> ++ Otherwise, the following line sets YYVAL to the semantic value of
> ++ the lookahead token. This behavior is undocumented and Bison
> ++ users should not rely upon it. Assigning to YYVAL
> ++ unconditionally makes the parser a bit smaller, and it avoids a
> ++ GCC warning that YYVAL may be used uninitialized. */
> ++ yyval = yyvsp[1-yylen];
> ++
> ++#if YYLSP_NEEDED
> ++ /* Similarly for the default location. Let the user run additional
> ++ commands if for instance locations are ranges. */
> ++ yyloc = yylsp[1-yylen];
> ++ YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen);
> ++#endif
> ++
> ++#if YYDEBUG
> ++ /* We have to keep this `#if YYDEBUG', since we use variables which
> ++ are defined only if `YYDEBUG' is set. */
> ++ if (yydebug)
> ++ {
> ++ int yyi;
> ++
> ++ YYFPRINTF (stderr, "Reducing via rule %d (line %d), ",
> ++ yyn, yyrline[yyn]);
> ++
> ++ /* Print the symbols being reduced, and their result. */
> ++ for (yyi = yyprhs[yyn]; yyrhs[yyi] > 0; yyi++)
> ++ YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]);
> ++ YYFPRINTF (stderr, " -> %s\n", yytname[yyr1[yyn]]);
> ++ }
> ++#endif
> ++
> ++ switch (yyn) {
> ++
> ++case 1:
> ++#line 151 "plural.y"
> ++{
> ++ if (yyvsp[0].exp == NULL)
> ++ YYABORT;
> ++ ((struct parse_args *) arg)->res = yyvsp[0].exp;
> ++ }
> ++ break;
> ++case 2:
> ++#line 159 "plural.y"
> ++{
> ++ yyval.exp = new_exp_3 (qmop, yyvsp[-4].exp, yyvsp[-2].exp, yyvsp[0].exp);
> ++ }
> ++ break;
> ++case 3:
> ++#line 163 "plural.y"
> ++{
> ++ yyval.exp = new_exp_2 (lor, yyvsp[-2].exp, yyvsp[0].exp);
> ++ }
> ++ break;
> ++case 4:
> ++#line 167 "plural.y"
> ++{
> ++ yyval.exp = new_exp_2 (land, yyvsp[-2].exp, yyvsp[0].exp);
> ++ }
> ++ break;
> ++case 5:
> ++#line 171 "plural.y"
> ++{
> ++ yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp);
> ++ }
> ++ break;
> ++case 6:
> ++#line 175 "plural.y"
> ++{
> ++ yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp);
> ++ }
> ++ break;
> ++case 7:
> ++#line 179 "plural.y"
> ++{
> ++ yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp);
> ++ }
> ++ break;
> ++case 8:
> ++#line 183 "plural.y"
> ++{
> ++ yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp);
> ++ }
> ++ break;
> ++case 9:
> ++#line 187 "plural.y"
> ++{
> ++ yyval.exp = new_exp_1 (lnot, yyvsp[0].exp);
> ++ }
> ++ break;
> ++case 10:
> ++#line 191 "plural.y"
> ++{
> ++ yyval.exp = new_exp_0 (var);
> ++ }
> ++ break;
> ++case 11:
> ++#line 195 "plural.y"
> ++{
> ++ if ((yyval.exp = new_exp_0 (num)) != NULL)
> ++ yyval.exp->val.num = yyvsp[0].num;
> ++ }
> ++ break;
> ++case 12:
> ++#line 200 "plural.y"
> ++{
> ++ yyval.exp = yyvsp[-1].exp;
> ++ }
> ++ break;
> ++}
> ++
> ++#line 705 "/usr/local/share/bison/bison.simple"
> ++
> ++
> ++ yyvsp -= yylen;
> ++ yyssp -= yylen;
> ++#if YYLSP_NEEDED
> ++ yylsp -= yylen;
> ++#endif
> ++
> ++#if YYDEBUG
> ++ if (yydebug)
> ++ {
> ++ short *yyssp1 = yyss - 1;
> ++ YYFPRINTF (stderr, "state stack now");
> ++ while (yyssp1 != yyssp)
> ++ YYFPRINTF (stderr, " %d", *++yyssp1);
> ++ YYFPRINTF (stderr, "\n");
> ++ }
> ++#endif
> ++
> ++ *++yyvsp = yyval;
> ++#if YYLSP_NEEDED
> ++ *++yylsp = yyloc;
> ++#endif
> ++
> ++ /* Now `shift' the result of the reduction. Determine what state
> ++ that goes to, based on the state we popped back to and the rule
> ++ number reduced by. */
> ++
> ++ yyn = yyr1[yyn];
> ++
> ++ yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
> ++ if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
> ++ yystate = yytable[yystate];
> ++ else
> ++ yystate = yydefgoto[yyn - YYNTBASE];
> ++
> ++ goto yynewstate;
> ++
> ++
> ++/*------------------------------------.
> ++| yyerrlab -- here on detecting error |
> ++`------------------------------------*/
> ++yyerrlab:
> ++ /* If not already recovering from an error, report this error. */
> ++ if (!yyerrstatus)
> ++ {
> ++ ++yynerrs;
> ++
> ++#ifdef YYERROR_VERBOSE
> ++ yyn = yypact[yystate];
> ++
> ++ if (yyn > YYFLAG && yyn < YYLAST)
> ++ {
> ++ YYSIZE_T yysize = 0;
> ++ char *yymsg;
> ++ int yyx, yycount;
> ++
> ++ yycount = 0;
> ++ /* Start YYX at -YYN if negative to avoid negative indexes in
> ++ YYCHECK. */
> ++ for (yyx = yyn < 0 ? -yyn : 0;
> ++ yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++)
> ++ if (yycheck[yyx + yyn] == yyx)
> ++ yysize += yystrlen (yytname[yyx]) + 15, yycount++;
> ++ yysize += yystrlen ("parse error, unexpected ") + 1;
> ++ yysize += yystrlen (yytname[YYTRANSLATE (yychar)]);
> ++ yymsg = (char *) YYSTACK_ALLOC (yysize);
> ++ if (yymsg != 0)
> ++ {
> ++ char *yyp = yystpcpy (yymsg, "parse error, unexpected ");
> ++ yyp = yystpcpy (yyp, yytname[YYTRANSLATE (yychar)]);
> ++
> ++ if (yycount < 5)
> ++ {
> ++ yycount = 0;
> ++ for (yyx = yyn < 0 ? -yyn : 0;
> ++ yyx < (int) (sizeof (yytname) / sizeof (char *));
> ++ yyx++)
> ++ if (yycheck[yyx + yyn] == yyx)
> ++ {
> ++ const char *yyq = ! yycount ? ", expecting " : " or ";
> ++ yyp = yystpcpy (yyp, yyq);
> ++ yyp = yystpcpy (yyp, yytname[yyx]);
> ++ yycount++;
> ++ }
> ++ }
> ++ yyerror (yymsg);
> ++ YYSTACK_FREE (yymsg);
> ++ }
> ++ else
> ++ yyerror ("parse error; also virtual memory exhausted");
> ++ }
> ++ else
> ++#endif /* defined (YYERROR_VERBOSE) */
> ++ yyerror ("parse error");
> ++ }
> ++ goto yyerrlab1;
> ++
> ++
> ++/*--------------------------------------------------.
> ++| yyerrlab1 -- error raised explicitly by an action |
> ++`--------------------------------------------------*/
> ++yyerrlab1:
> ++ if (yyerrstatus == 3)
> ++ {
> ++ /* If just tried and failed to reuse lookahead token after an
> ++ error, discard it. */
> ++
> ++ /* return failure if at end of input */
> ++ if (yychar == YYEOF)
> ++ YYABORT;
> ++ YYDPRINTF ((stderr, "Discarding token %d (%s).\n",
> ++ yychar, yytname[yychar1]));
> ++ yychar = YYEMPTY;
> ++ }
> ++
> ++ /* Else will try to reuse lookahead token after shifting the error
> ++ token. */
> ++
> ++ yyerrstatus = 3; /* Each real token shifted decrements this */
> ++
> ++ goto yyerrhandle;
> ++
> ++
> ++/*-------------------------------------------------------------------.
> ++| yyerrdefault -- current state does not do anything special for the |
> ++| error token. |
> ++`-------------------------------------------------------------------*/
> ++yyerrdefault:
> ++#if 0
> ++ /* This is wrong; only states that explicitly want error tokens
> ++ should shift them. */
> ++
> ++ /* If its default is to accept any token, ok. Otherwise pop it. */
> ++ yyn = yydefact[yystate];
> ++ if (yyn)
> ++ goto yydefault;
> ++#endif
> ++
> ++
> ++/*---------------------------------------------------------------.
> ++| yyerrpop -- pop the current state because it cannot handle the |
> ++| error token |
> ++`---------------------------------------------------------------*/
> ++yyerrpop:
> ++ if (yyssp == yyss)
> ++ YYABORT;
> ++ yyvsp--;
> ++ yystate = *--yyssp;
> ++#if YYLSP_NEEDED
> ++ yylsp--;
> ++#endif
> ++
> ++#if YYDEBUG
> ++ if (yydebug)
> ++ {
> ++ short *yyssp1 = yyss - 1;
> ++ YYFPRINTF (stderr, "Error: state stack now");
> ++ while (yyssp1 != yyssp)
> ++ YYFPRINTF (stderr, " %d", *++yyssp1);
> ++ YYFPRINTF (stderr, "\n");
> ++ }
> ++#endif
> ++
> ++/*--------------.
> ++| yyerrhandle. |
> ++`--------------*/
> ++yyerrhandle:
> ++ yyn = yypact[yystate];
> ++ if (yyn == YYFLAG)
> ++ goto yyerrdefault;
> ++
> ++ yyn += YYTERROR;
> ++ if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
> ++ goto yyerrdefault;
> ++
> ++ yyn = yytable[yyn];
> ++ if (yyn < 0)
> ++ {
> ++ if (yyn == YYFLAG)
> ++ goto yyerrpop;
> ++ yyn = -yyn;
> ++ goto yyreduce;
> ++ }
> ++ else if (yyn == 0)
> ++ goto yyerrpop;
> ++
> ++ if (yyn == YYFINAL)
> ++ YYACCEPT;
> ++
> ++ YYDPRINTF ((stderr, "Shifting error token, "));
> ++
> ++ *++yyvsp = yylval;
> ++#if YYLSP_NEEDED
> ++ *++yylsp = yylloc;
> ++#endif
> ++
> ++ yystate = yyn;
> ++ goto yynewstate;
> ++
> ++
> ++/*-------------------------------------.
> ++| yyacceptlab -- YYACCEPT comes here. |
> ++`-------------------------------------*/
> ++yyacceptlab:
> ++ yyresult = 0;
> ++ goto yyreturn;
> ++
> ++/*-----------------------------------.
> ++| yyabortlab -- YYABORT comes here. |
> ++`-----------------------------------*/
> ++yyabortlab:
> ++ yyresult = 1;
> ++ goto yyreturn;
> ++
> ++/*---------------------------------------------.
> ++| yyoverflowab -- parser overflow comes here. |
> ++`---------------------------------------------*/
> ++yyoverflowlab:
> ++ yyerror ("parser stack overflow");
> ++ yyresult = 2;
> ++ /* Fall through. */
> ++
> ++yyreturn:
> ++#ifndef yyoverflow
> ++ if (yyss != yyssa)
> ++ YYSTACK_FREE (yyss);
> ++#endif
> ++ return yyresult;
> ++}
> ++#line 205 "plural.y"
> ++
> ++
> ++void
> ++internal_function
> ++FREE_EXPRESSION (struct expression *exp)
> ++{
> ++ if (exp == NULL)
> ++ return;
> ++
> ++ /* Handle the recursive case. */
> ++ switch (exp->nargs)
> ++ {
> ++ case 3:
> ++ FREE_EXPRESSION (exp->val.args[2]);
> ++ /* FALLTHROUGH */
> ++ case 2:
> ++ FREE_EXPRESSION (exp->val.args[1]);
> ++ /* FALLTHROUGH */
> ++ case 1:
> ++ FREE_EXPRESSION (exp->val.args[0]);
> ++ /* FALLTHROUGH */
> ++ default:
> ++ break;
> ++ }
> ++
> ++ free (exp);
> ++}
> ++
> ++
> ++static int
> ++yylex (YYSTYPE *lval, const char **pexp)
> ++{
> ++ const char *exp = *pexp;
> ++ int result;
> ++
> ++ while (1)
> ++ {
> ++ if (exp[0] == '\0')
> ++ {
> ++ *pexp = exp;
> ++ return YYEOF;
> ++ }
> ++
> ++ if (exp[0] != ' ' && exp[0] != '\t')
> ++ break;
> ++
> ++ ++exp;
> ++ }
> ++
> ++ result = *exp++;
> ++ switch (result)
> ++ {
> ++ case '0': case '1': case '2': case '3': case '4':
> ++ case '5': case '6': case '7': case '8': case '9':
> ++ {
> ++ unsigned long int n = result - '0';
> ++ while (exp[0] >= '0' && exp[0] <= '9')
> ++ {
> ++ n *= 10;
> ++ n += exp[0] - '0';
> ++ ++exp;
> ++ }
> ++ lval->num = n;
> ++ result = NUMBER;
> ++ }
> ++ break;
> ++
> ++ case '=':
> ++ if (exp[0] == '=')
> ++ {
> ++ ++exp;
> ++ lval->op = equal;
> ++ result = EQUOP2;
> ++ }
> ++ else
> ++ result = YYERRCODE;
> ++ break;
> ++
> ++ case '!':
> ++ if (exp[0] == '=')
> ++ {
> ++ ++exp;
> ++ lval->op = not_equal;
> ++ result = EQUOP2;
> ++ }
> ++ break;
> ++
> ++ case '&':
> ++ case '|':
> ++ if (exp[0] == result)
> ++ ++exp;
> ++ else
> ++ result = YYERRCODE;
> ++ break;
> ++
> ++ case '<':
> ++ if (exp[0] == '=')
> ++ {
> ++ ++exp;
> ++ lval->op = less_or_equal;
> ++ }
> ++ else
> ++ lval->op = less_than;
> ++ result = CMPOP2;
> ++ break;
> ++
> ++ case '>':
> ++ if (exp[0] == '=')
> ++ {
> ++ ++exp;
> ++ lval->op = greater_or_equal;
> ++ }
> ++ else
> ++ lval->op = greater_than;
> ++ result = CMPOP2;
> ++ break;
> ++
> ++ case '*':
> ++ lval->op = mult;
> ++ result = MULOP2;
> ++ break;
> ++
> ++ case '/':
> ++ lval->op = divide;
> ++ result = MULOP2;
> ++ break;
> ++
> ++ case '%':
> ++ lval->op = module;
> ++ result = MULOP2;
> ++ break;
> ++
> ++ case '+':
> ++ lval->op = plus;
> ++ result = ADDOP2;
> ++ break;
> ++
> ++ case '-':
> ++ lval->op = minus;
> ++ result = ADDOP2;
> ++ break;
> ++
> ++ case 'n':
> ++ case '?':
> ++ case ':':
> ++ case '(':
> ++ case ')':
> ++ /* Nothing, just return the character. */
> ++ break;
> ++
> ++ case ';':
> ++ case '\n':
> ++ case '\0':
> ++ /* Be safe and let the user call this function again. */
> ++ --exp;
> ++ result = YYEOF;
> ++ break;
> ++
> ++ default:
> ++ result = YYERRCODE;
> ++#if YYDEBUG != 0
> ++ --exp;
> ++#endif
> ++ break;
> ++ }
> ++
> ++ *pexp = exp;
> ++
> ++ return result;
> ++}
> ++
> ++
> ++static void
> ++yyerror (const char *str)
> ++{
> ++ /* Do nothing. We don't print error messages here. */
> ++}
> +--- lrzsz-0.12.20.safe/intl/plural-exp.c 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/intl/plural-exp.c 2004-09-12 14:40:34.578714192 -0400
> +@@ -0,0 +1,154 @@
> ++/* Expression parsing for plural form selection.
> ++ Copyright (C) 2000-2001, 2003 Free Software Foundation, Inc.
> ++ Written by Ulrich Drepper <drepper at cygnus.com>, 2000.
> ++
> ++ This program is free software; you can redistribute it and/or modify it
> ++ under the terms of the GNU Library General Public License as published
> ++ by the Free Software Foundation; either version 2, or (at your option)
> ++ any later version.
> ++
> ++ This program is distributed in the hope that it will be useful,
> ++ but WITHOUT ANY WARRANTY; without even the implied warranty of
> ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> ++ Library General Public License for more details.
> ++
> ++ You should have received a copy of the GNU Library General Public
> ++ License along with this program; if not, write to the Free Software
> ++ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
> ++ USA. */
> ++
> ++#ifdef HAVE_CONFIG_H
> ++# include <config.h>
> ++#endif
> ++
> ++#include <ctype.h>
> ++#include <stdlib.h>
> ++#include <string.h>
> ++
> ++#include "plural-exp.h"
> ++
> ++#if (defined __GNUC__ && !defined __APPLE_CC__) \
> ++ || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L)
> ++
> ++/* These structs are the constant expression for the germanic plural
> ++ form determination. It represents the expression "n != 1". */
> ++static const struct expression plvar =
> ++{
> ++ .nargs = 0,
> ++ .operation = var,
> ++};
> ++static const struct expression plone =
> ++{
> ++ .nargs = 0,
> ++ .operation = num,
> ++ .val =
> ++ {
> ++ .num = 1
> ++ }
> ++};
> ++struct expression GERMANIC_PLURAL =
> ++{
> ++ .nargs = 2,
> ++ .operation = not_equal,
> ++ .val =
> ++ {
> ++ .args =
> ++ {
> ++ [0] = (struct expression *) &plvar,
> ++ [1] = (struct expression *) &plone
> ++ }
> ++ }
> ++};
> ++
> ++# define INIT_GERMANIC_PLURAL()
> ++
> ++#else
> ++
> ++/* For compilers without support for ISO C 99 struct/union initializers:
> ++ Initialization at run-time. */
> ++
> ++static struct expression plvar;
> ++static struct expression plone;
> ++struct expression GERMANIC_PLURAL;
> ++
> ++static void
> ++init_germanic_plural ()
> ++{
> ++ if (plone.val.num == 0)
> ++ {
> ++ plvar.nargs = 0;
> ++ plvar.operation = var;
> ++
> ++ plone.nargs = 0;
> ++ plone.operation = num;
> ++ plone.val.num = 1;
> ++
> ++ GERMANIC_PLURAL.nargs = 2;
> ++ GERMANIC_PLURAL.operation = not_equal;
> ++ GERMANIC_PLURAL.val.args[0] = &plvar;
> ++ GERMANIC_PLURAL.val.args[1] = &plone;
> ++ }
> ++}
> ++
> ++# define INIT_GERMANIC_PLURAL() init_germanic_plural ()
> ++
> ++#endif
> ++
> ++void
> ++internal_function
> ++EXTRACT_PLURAL_EXPRESSION (const char *nullentry, struct expression **pluralp,
> ++ unsigned long int *npluralsp)
> ++{
> ++ if (nullentry != NULL)
> ++ {
> ++ const char *plural;
> ++ const char *nplurals;
> ++
> ++ plural = strstr (nullentry, "plural=");
> ++ nplurals = strstr (nullentry, "nplurals=");
> ++ if (plural == NULL || nplurals == NULL)
> ++ goto no_plural;
> ++ else
> ++ {
> ++ char *endp;
> ++ unsigned long int n;
> ++ struct parse_args args;
> ++
> ++ /* First get the number. */
> ++ nplurals += 9;
> ++ while (*nplurals != '\0' && isspace ((unsigned char) *nplurals))
> ++ ++nplurals;
> ++ if (!(*nplurals >= '0' && *nplurals <= '9'))
> ++ goto no_plural;
> ++#if defined HAVE_STRTOUL || defined _LIBC
> ++ n = strtoul (nplurals, &endp, 10);
> ++#else
> ++ for (endp = nplurals, n = 0; *endp >= '0' && *endp <= '9'; endp++)
> ++ n = n * 10 + (*endp - '0');
> ++#endif
> ++ if (nplurals == endp)
> ++ goto no_plural;
> ++ *npluralsp = n;
> ++
> ++ /* Due to the restrictions bison imposes onto the interface of the
> ++ scanner function we have to put the input string and the result
> ++ passed up from the parser into the same structure which address
> ++ is passed down to the parser. */
> ++ plural += 7;
> ++ args.cp = plural;
> ++ if (PLURAL_PARSE (&args) != 0)
> ++ goto no_plural;
> ++ *pluralp = args.res;
> ++ }
> ++ }
> ++ else
> ++ {
> ++ /* By default we are using the Germanic form: singular form only
> ++ for `one', the plural form otherwise. Yes, this is also what
> ++ English is using since English is a Germanic language. */
> ++ no_plural:
> ++ INIT_GERMANIC_PLURAL ();
> ++ *pluralp = &GERMANIC_PLURAL;
> ++ *npluralsp = 2;
> ++ }
> ++}
> +--- lrzsz-0.12.20.safe/intl/plural-exp.h 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/intl/plural-exp.h 2004-09-12 14:40:34.584713280 -0400
> +@@ -0,0 +1,118 @@
> ++/* Expression parsing and evaluation for plural form selection.
> ++ Copyright (C) 2000-2003 Free Software Foundation, Inc.
> ++ Written by Ulrich Drepper <drepper at cygnus.com>, 2000.
> ++
> ++ This program is free software; you can redistribute it and/or modify it
> ++ under the terms of the GNU Library General Public License as published
> ++ by the Free Software Foundation; either version 2, or (at your option)
> ++ any later version.
> ++
> ++ This program is distributed in the hope that it will be useful,
> ++ but WITHOUT ANY WARRANTY; without even the implied warranty of
> ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> ++ Library General Public License for more details.
> ++
> ++ You should have received a copy of the GNU Library General Public
> ++ License along with this program; if not, write to the Free Software
> ++ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
> ++ USA. */
> ++
> ++#ifndef _PLURAL_EXP_H
> ++#define _PLURAL_EXP_H
> ++
> ++#ifndef internal_function
> ++# define internal_function
> ++#endif
> ++
> ++#ifndef attribute_hidden
> ++# define attribute_hidden
> ++#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, /* Modulo operation. */
> ++ plus, /* Addition. */
> ++ minus, /* Subtraction. */
> ++ less_than, /* Comparison. */
> ++ greater_than, /* Comparison. */
> ++ less_or_equal, /* Comparison. */
> ++ greater_or_equal, /* Comparison. */
> ++ equal, /* Comparison for equality. */
> ++ not_equal, /* Comparison 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;
> ++};
> ++
> ++
> ++/* Names for the libintl functions are a problem. This source code is used
> ++ 1. in the GNU C Library library,
> ++ 2. in the GNU libintl library,
> ++ 3. in the GNU gettext tools.
> ++ The function names in each situation must be different, to allow for
> ++ binary incompatible changes in 'struct expression'. Furthermore,
> ++ 1. in the GNU C Library library, the names have a __ prefix,
> ++ 2.+3. in the GNU libintl library and in the GNU gettext tools, the names
> ++ must follow ANSI C and not start with __.
> ++ So we have to distinguish the three cases. */
> ++#ifdef _LIBC
> ++# define FREE_EXPRESSION __gettext_free_exp
> ++# define PLURAL_PARSE __gettextparse
> ++# define GERMANIC_PLURAL __gettext_germanic_plural
> ++# define EXTRACT_PLURAL_EXPRESSION __gettext_extract_plural
> ++#elif defined (IN_LIBINTL)
> ++# define FREE_EXPRESSION libintl_gettext_free_exp
> ++# define PLURAL_PARSE libintl_gettextparse
> ++# define GERMANIC_PLURAL libintl_gettext_germanic_plural
> ++# define EXTRACT_PLURAL_EXPRESSION libintl_gettext_extract_plural
> ++#else
> ++# define FREE_EXPRESSION free_plural_expression
> ++# define PLURAL_PARSE parse_plural_expression
> ++# define GERMANIC_PLURAL germanic_plural
> ++# define EXTRACT_PLURAL_EXPRESSION extract_plural_expression
> ++#endif
> ++
> ++extern void FREE_EXPRESSION (struct expression *exp)
> ++ internal_function;
> ++extern int PLURAL_PARSE (void *arg);
> ++extern struct expression GERMANIC_PLURAL attribute_hidden;
> ++extern void EXTRACT_PLURAL_EXPRESSION (const char *nullentry,
> ++ struct expression **pluralp,
> ++ unsigned long int *npluralsp)
> ++ internal_function;
> ++
> ++#if !defined (_LIBC) && !defined (IN_LIBINTL)
> ++extern unsigned long int plural_eval (struct expression *pexp,
> ++ unsigned long int n);
> ++#endif
> ++
> ++#endif /* _PLURAL_EXP_H */
> +--- lrzsz-0.12.20.safe/intl/plural.y 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/intl/plural.y 2004-09-12 14:40:34.589712520 -0400
> +@@ -0,0 +1,381 @@
> ++%{
> ++/* Expression parsing for plural form selection.
> ++ Copyright (C) 2000-2001, 2003 Free Software Foundation, Inc.
> ++ Written by Ulrich Drepper <drepper at cygnus.com>, 2000.
> ++
> ++ This program is free software; you can redistribute it and/or modify it
> ++ under the terms of the GNU Library General Public License as published
> ++ by the Free Software Foundation; either version 2, or (at your option)
> ++ any later version.
> ++
> ++ This program is distributed in the hope that it will be useful,
> ++ but WITHOUT ANY WARRANTY; without even the implied warranty of
> ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> ++ Library General Public License for more details.
> ++
> ++ You should have received a copy of the GNU Library General Public
> ++ License along with this program; if not, write to the Free Software
> ++ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
> ++ USA. */
> ++
> ++/* The bison generated parser uses alloca. AIX 3 forces us to put this
> ++ declaration at the beginning of the file. The declaration in bison's
> ++ skeleton file comes too late. This must come before <config.h>
> ++ because <config.h> may include arbitrary system headers. */
> ++#if defined _AIX && !defined __GNUC__
> ++ #pragma alloca
> ++#endif
> ++
> ++#ifdef HAVE_CONFIG_H
> ++# include <config.h>
> ++#endif
> ++
> ++#include <stddef.h>
> ++#include <stdlib.h>
> ++#include "plural-exp.h"
> ++
> ++/* The main function generated by the parser is called __gettextparse,
> ++ but we want it to be called PLURAL_PARSE. */
> ++#ifndef _LIBC
> ++# define __gettextparse PLURAL_PARSE
> ++#endif
> ++
> ++#define YYLEX_PARAM &((struct parse_args *) arg)->cp
> ++#define YYPARSE_PARAM arg
> ++%}
> ++%pure_parser
> ++%expect 7
> ++
> ++%union {
> ++ unsigned long int num;
> ++ enum operator op;
> ++ struct expression *exp;
> ++}
> ++
> ++%{
> ++/* Prototypes for local functions. */
> ++static int yylex (YYSTYPE *lval, const char **pexp);
> ++static void yyerror (const char *str);
> ++
> ++/* Allocation of expressions. */
> ++
> ++static struct expression *
> ++new_exp (int nargs, enum operator op, struct expression * const *args)
> ++{
> ++ int i;
> ++ struct expression *newp;
> ++
> ++ /* If any of the argument could not be malloc'ed, just return NULL. */
> ++ for (i = nargs - 1; i >= 0; i--)
> ++ if (args[i] == NULL)
> ++ goto fail;
> ++
> ++ /* Allocate a new expression. */
> ++ newp = (struct expression *) malloc (sizeof (*newp));
> ++ if (newp != NULL)
> ++ {
> ++ newp->nargs = nargs;
> ++ newp->operation = op;
> ++ for (i = nargs - 1; i >= 0; i--)
> ++ newp->val.args[i] = args[i];
> ++ return newp;
> ++ }
> ++
> ++ fail:
> ++ for (i = nargs - 1; i >= 0; i--)
> ++ FREE_EXPRESSION (args[i]);
> ++
> ++ return NULL;
> ++}
> ++
> ++static inline struct expression *
> ++new_exp_0 (enum operator op)
> ++{
> ++ return new_exp (0, op, NULL);
> ++}
> ++
> ++static inline struct expression *
> ++new_exp_1 (enum operator op, struct expression *right)
> ++{
> ++ struct expression *args[1];
> ++
> ++ args[0] = right;
> ++ return new_exp (1, op, args);
> ++}
> ++
> ++static struct expression *
> ++new_exp_2 (enum operator op, struct expression *left, struct expression *right)
> ++{
> ++ struct expression *args[2];
> ++
> ++ args[0] = left;
> ++ args[1] = right;
> ++ return new_exp (2, op, args);
> ++}
> ++
> ++static inline struct expression *
> ++new_exp_3 (enum operator op, struct expression *bexp,
> ++ struct expression *tbranch, struct expression *fbranch)
> ++{
> ++ struct expression *args[3];
> ++
> ++ args[0] = bexp;
> ++ args[1] = tbranch;
> ++ args[2] = fbranch;
> ++ return new_exp (3, op, args);
> ++}
> ++
> ++%}
> ++
> ++/* This declares that all operators have the same associativity and the
> ++ precedence order as in C. See [Harbison, Steele: C, A Reference Manual].
> ++ There is no unary minus and no bitwise operators.
> ++ Operators with the same syntactic behaviour have been merged into a single
> ++ token, to save space in the array generated by bison. */
> ++%right '?' /* ? */
> ++%left '|' /* || */
> ++%left '&' /* && */
> ++%left EQUOP2 /* == != */
> ++%left CMPOP2 /* < > <= >= */
> ++%left ADDOP2 /* + - */
> ++%left MULOP2 /* * / % */
> ++%right '!' /* ! */
> ++
> ++%token <op> EQUOP2 CMPOP2 ADDOP2 MULOP2
> ++%token <num> NUMBER
> ++%type <exp> exp
> ++
> ++%%
> ++
> ++start: exp
> ++ {
> ++ if ($1 == NULL)
> ++ YYABORT;
> ++ ((struct parse_args *) arg)->res = $1;
> ++ }
> ++ ;
> ++
> ++exp: exp '?' exp ':' exp
> ++ {
> ++ $$ = new_exp_3 (qmop, $1, $3, $5);
> ++ }
> ++ | exp '|' exp
> ++ {
> ++ $$ = new_exp_2 (lor, $1, $3);
> ++ }
> ++ | exp '&' exp
> ++ {
> ++ $$ = new_exp_2 (land, $1, $3);
> ++ }
> ++ | exp EQUOP2 exp
> ++ {
> ++ $$ = new_exp_2 ($2, $1, $3);
> ++ }
> ++ | exp CMPOP2 exp
> ++ {
> ++ $$ = new_exp_2 ($2, $1, $3);
> ++ }
> ++ | exp ADDOP2 exp
> ++ {
> ++ $$ = new_exp_2 ($2, $1, $3);
> ++ }
> ++ | exp MULOP2 exp
> ++ {
> ++ $$ = new_exp_2 ($2, $1, $3);
> ++ }
> ++ | '!' exp
> ++ {
> ++ $$ = new_exp_1 (lnot, $2);
> ++ }
> ++ | 'n'
> ++ {
> ++ $$ = new_exp_0 (var);
> ++ }
> ++ | NUMBER
> ++ {
> ++ if (($$ = new_exp_0 (num)) != NULL)
> ++ $$->val.num = $1;
> ++ }
> ++ | '(' exp ')'
> ++ {
> ++ $$ = $2;
> ++ }
> ++ ;
> ++
> ++%%
> ++
> ++void
> ++internal_function
> ++FREE_EXPRESSION (struct expression *exp)
> ++{
> ++ if (exp == NULL)
> ++ return;
> ++
> ++ /* Handle the recursive case. */
> ++ switch (exp->nargs)
> ++ {
> ++ case 3:
> ++ FREE_EXPRESSION (exp->val.args[2]);
> ++ /* FALLTHROUGH */
> ++ case 2:
> ++ FREE_EXPRESSION (exp->val.args[1]);
> ++ /* FALLTHROUGH */
> ++ case 1:
> ++ FREE_EXPRESSION (exp->val.args[0]);
> ++ /* FALLTHROUGH */
> ++ default:
> ++ break;
> ++ }
> ++
> ++ free (exp);
> ++}
> ++
> ++
> ++static int
> ++yylex (YYSTYPE *lval, const char **pexp)
> ++{
> ++ const char *exp = *pexp;
> ++ int result;
> ++
> ++ while (1)
> ++ {
> ++ if (exp[0] == '\0')
> ++ {
> ++ *pexp = exp;
> ++ return YYEOF;
> ++ }
> ++
> ++ if (exp[0] != ' ' && exp[0] != '\t')
> ++ break;
> ++
> ++ ++exp;
> ++ }
> ++
> ++ result = *exp++;
> ++ switch (result)
> ++ {
> ++ case '0': case '1': case '2': case '3': case '4':
> ++ case '5': case '6': case '7': case '8': case '9':
> ++ {
> ++ unsigned long int n = result - '0';
> ++ while (exp[0] >= '0' && exp[0] <= '9')
> ++ {
> ++ n *= 10;
> ++ n += exp[0] - '0';
> ++ ++exp;
> ++ }
> ++ lval->num = n;
> ++ result = NUMBER;
> ++ }
> ++ break;
> ++
> ++ case '=':
> ++ if (exp[0] == '=')
> ++ {
> ++ ++exp;
> ++ lval->op = equal;
> ++ result = EQUOP2;
> ++ }
> ++ else
> ++ result = YYERRCODE;
> ++ break;
> ++
> ++ case '!':
> ++ if (exp[0] == '=')
> ++ {
> ++ ++exp;
> ++ lval->op = not_equal;
> ++ result = EQUOP2;
> ++ }
> ++ break;
> ++
> ++ case '&':
> ++ case '|':
> ++ if (exp[0] == result)
> ++ ++exp;
> ++ else
> ++ result = YYERRCODE;
> ++ break;
> ++
> ++ case '<':
> ++ if (exp[0] == '=')
> ++ {
> ++ ++exp;
> ++ lval->op = less_or_equal;
> ++ }
> ++ else
> ++ lval->op = less_than;
> ++ result = CMPOP2;
> ++ break;
> ++
> ++ case '>':
> ++ if (exp[0] == '=')
> ++ {
> ++ ++exp;
> ++ lval->op = greater_or_equal;
> ++ }
> ++ else
> ++ lval->op = greater_than;
> ++ result = CMPOP2;
> ++ break;
> ++
> ++ case '*':
> ++ lval->op = mult;
> ++ result = MULOP2;
> ++ break;
> ++
> ++ case '/':
> ++ lval->op = divide;
> ++ result = MULOP2;
> ++ break;
> ++
> ++ case '%':
> ++ lval->op = module;
> ++ result = MULOP2;
> ++ break;
> ++
> ++ case '+':
> ++ lval->op = plus;
> ++ result = ADDOP2;
> ++ break;
> ++
> ++ case '-':
> ++ lval->op = minus;
> ++ result = ADDOP2;
> ++ break;
> ++
> ++ case 'n':
> ++ case '?':
> ++ case ':':
> ++ case '(':
> ++ case ')':
> ++ /* Nothing, just return the character. */
> ++ break;
> ++
> ++ case ';':
> ++ case '\n':
> ++ case '\0':
> ++ /* Be safe and let the user call this function again. */
> ++ --exp;
> ++ result = YYEOF;
> ++ break;
> ++
> ++ default:
> ++ result = YYERRCODE;
> ++#if YYDEBUG != 0
> ++ --exp;
> ++#endif
> ++ break;
> ++ }
> ++
> ++ *pexp = exp;
> ++
> ++ return result;
> ++}
> ++
> ++
> ++static void
> ++yyerror (const char *str)
> ++{
> ++ /* Do nothing. We don't print error messages here. */
> ++}
> +--- lrzsz-0.12.20.safe/intl/po2tbl.sed.in 1998-04-26 09:20:52.000000000 -0400
> ++++ lrzsz-0.12.20/intl/po2tbl.sed.in 1969-12-31 19:00:00.000000000 -0500
> +@@ -1,102 +0,0 @@
> +-# po2tbl.sed - Convert Uniforum style .po file to lookup table for catgets
> +-# Copyright (C) 1995 Free Software Foundation, Inc.
> +-# Ulrich Drepper <drepper at gnu.ai.mit.edu>, 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
> +-# the Free Software Foundation; either version 2, or (at your option)
> +-# any later version.
> +-#
> +-# This program is distributed in the hope that it will be useful,
> +-# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> +-# GNU General Public License for more details.
> +-#
> +-# 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.
> +-#
> +-1 {
> +- i\
> +-/* Automatically generated by po2tbl.sed from @PACKAGE NAME at .pot. */\
> +-\
> +-#if HAVE_CONFIG_H\
> +-# include <config.h>\
> +-#endif\
> +-\
> +-#include "libgettext.h"\
> +-\
> +-const struct _msg_ent _msg_tbl[] = {
> +- h
> +- s/.*/0/
> +- x
> +-}
> +-#
> +-# Write msgid entries in C array form.
> +-#
> +-/^msgid/ {
> +- s/msgid[ ]*\(".*"\)/ {\1/
> +- tb
> +-# Append the next line
> +- :b
> +- N
> +-# Look whether second part is continuation line.
> +- s/\(.*\)"\(\n\)"\(.*"\)/\1\2\3/
> +-# Yes, then branch.
> +- ta
> +-# Because we assume that the input file correctly formed the line
> +-# just read cannot be again be a msgid line. So it's safe to ignore
> +-# it.
> +- s/\(.*\)\n.*/\1/
> +- bc
> +-# We found a continuation line. But before printing insert '\'.
> +- :a
> +- s/\(.*\)\(\n.*\)/\1\\\2/
> +- P
> +-# We cannot use D here.
> +- s/.*\n\(.*\)/\1/
> +-# Some buggy seds do not clear the `successful substitution since last ``t'''
> +-# flag on `N', so we do a `t' here to clear it.
> +- tb
> +-# Not reached
> +- :c
> +- x
> +-# The following nice solution is by
> +-# Bruno <Haible at ma2s2.mathematik.uni-karlsruhe.de>
> +- td
> +-# Increment a decimal number in pattern space.
> +-# First hide trailing `9' digits.
> +- :d
> +- s/9\(_*\)$/_\1/
> +- td
> +-# Assure at least one digit is available.
> +- s/^\(_*\)$/0\1/
> +-# Increment the last digit.
> +- s/8\(_*\)$/9\1/
> +- s/7\(_*\)$/8\1/
> +- s/6\(_*\)$/7\1/
> +- s/5\(_*\)$/6\1/
> +- s/4\(_*\)$/5\1/
> +- s/3\(_*\)$/4\1/
> +- s/2\(_*\)$/3\1/
> +- s/1\(_*\)$/2\1/
> +- s/0\(_*\)$/1\1/
> +-# Convert the hidden `9' digits to `0's.
> +- s/_/0/g
> +- x
> +- G
> +- s/\(.*\)\n\([0-9]*\)/\1, \2},/
> +- s/\(.*\)"$/\1/
> +- p
> +-}
> +-#
> +-# Last line.
> +-#
> +-$ {
> +- i\
> +-};\
> +-
> +- g
> +- s/0*\(.*\)/int _msg_tbl_length = \1;/p
> +-}
> +-d
> +--- lrzsz-0.12.20.safe/intl/printf-args.c 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/intl/printf-args.c 2004-09-12 14:40:34.595711608 -0400
> +@@ -0,0 +1,119 @@
> ++/* Decomposed printf argument list.
> ++ Copyright (C) 1999, 2002-2003 Free Software Foundation, Inc.
> ++
> ++ This program is free software; you can redistribute it and/or modify it
> ++ under the terms of the GNU Library General Public License as published
> ++ by the Free Software Foundation; either version 2, or (at your option)
> ++ any later version.
> ++
> ++ This program is distributed in the hope that it will be useful,
> ++ but WITHOUT ANY WARRANTY; without even the implied warranty of
> ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> ++ Library General Public License for more details.
> ++
> ++ You should have received a copy of the GNU Library General Public
> ++ License along with this program; if not, write to the Free Software
> ++ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
> ++ USA. */
> ++
> ++#ifdef HAVE_CONFIG_H
> ++# include <config.h>
> ++#endif
> ++
> ++/* Specification. */
> ++#include "printf-args.h"
> ++
> ++#ifdef STATIC
> ++STATIC
> ++#endif
> ++int
> ++printf_fetchargs (va_list args, arguments *a)
> ++{
> ++ size_t i;
> ++ argument *ap;
> ++
> ++ for (i = 0, ap = &a->arg[0]; i < a->count; i++, ap++)
> ++ switch (ap->type)
> ++ {
> ++ case TYPE_SCHAR:
> ++ ap->a.a_schar = va_arg (args, /*signed char*/ int);
> ++ break;
> ++ case TYPE_UCHAR:
> ++ ap->a.a_uchar = va_arg (args, /*unsigned char*/ int);
> ++ break;
> ++ case TYPE_SHORT:
> ++ ap->a.a_short = va_arg (args, /*short*/ int);
> ++ break;
> ++ case TYPE_USHORT:
> ++ ap->a.a_ushort = va_arg (args, /*unsigned short*/ int);
> ++ break;
> ++ case TYPE_INT:
> ++ ap->a.a_int = va_arg (args, int);
> ++ break;
> ++ case TYPE_UINT:
> ++ ap->a.a_uint = va_arg (args, unsigned int);
> ++ break;
> ++ case TYPE_LONGINT:
> ++ ap->a.a_longint = va_arg (args, long int);
> ++ break;
> ++ case TYPE_ULONGINT:
> ++ ap->a.a_ulongint = va_arg (args, unsigned long int);
> ++ break;
> ++#ifdef HAVE_LONG_LONG
> ++ case TYPE_LONGLONGINT:
> ++ ap->a.a_longlongint = va_arg (args, long long int);
> ++ break;
> ++ case TYPE_ULONGLONGINT:
> ++ ap->a.a_ulonglongint = va_arg (args, unsigned long long int);
> ++ break;
> ++#endif
> ++ case TYPE_DOUBLE:
> ++ ap->a.a_double = va_arg (args, double);
> ++ break;
> ++#ifdef HAVE_LONG_DOUBLE
> ++ case TYPE_LONGDOUBLE:
> ++ ap->a.a_longdouble = va_arg (args, long double);
> ++ break;
> ++#endif
> ++ case TYPE_CHAR:
> ++ ap->a.a_char = va_arg (args, int);
> ++ break;
> ++#ifdef HAVE_WINT_T
> ++ case TYPE_WIDE_CHAR:
> ++ ap->a.a_wide_char = va_arg (args, wint_t);
> ++ break;
> ++#endif
> ++ case TYPE_STRING:
> ++ ap->a.a_string = va_arg (args, const char *);
> ++ break;
> ++#ifdef HAVE_WCHAR_T
> ++ case TYPE_WIDE_STRING:
> ++ ap->a.a_wide_string = va_arg (args, const wchar_t *);
> ++ break;
> ++#endif
> ++ case TYPE_POINTER:
> ++ ap->a.a_pointer = va_arg (args, void *);
> ++ break;
> ++ case TYPE_COUNT_SCHAR_POINTER:
> ++ ap->a.a_count_schar_pointer = va_arg (args, signed char *);
> ++ break;
> ++ case TYPE_COUNT_SHORT_POINTER:
> ++ ap->a.a_count_short_pointer = va_arg (args, short *);
> ++ break;
> ++ case TYPE_COUNT_INT_POINTER:
> ++ ap->a.a_count_int_pointer = va_arg (args, int *);
> ++ break;
> ++ case TYPE_COUNT_LONGINT_POINTER:
> ++ ap->a.a_count_longint_pointer = va_arg (args, long int *);
> ++ break;
> ++#ifdef HAVE_LONG_LONG
> ++ case TYPE_COUNT_LONGLONGINT_POINTER:
> ++ ap->a.a_count_longlongint_pointer = va_arg (args, long long int *);
> ++ break;
> ++#endif
> ++ default:
> ++ /* Unknown type. */
> ++ return -1;
> ++ }
> ++ return 0;
> ++}
> +--- lrzsz-0.12.20.safe/intl/printf-args.h 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/intl/printf-args.h 2004-09-12 14:40:34.601710696 -0400
> +@@ -0,0 +1,137 @@
> ++/* Decomposed printf argument list.
> ++ Copyright (C) 1999, 2002-2003 Free Software Foundation, Inc.
> ++
> ++ This program is free software; you can redistribute it and/or modify it
> ++ under the terms of the GNU Library General Public License as published
> ++ by the Free Software Foundation; either version 2, or (at your option)
> ++ any later version.
> ++
> ++ This program is distributed in the hope that it will be useful,
> ++ but WITHOUT ANY WARRANTY; without even the implied warranty of
> ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> ++ Library General Public License for more details.
> ++
> ++ You should have received a copy of the GNU Library General Public
> ++ License along with this program; if not, write to the Free Software
> ++ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
> ++ USA. */
> ++
> ++#ifndef _PRINTF_ARGS_H
> ++#define _PRINTF_ARGS_H
> ++
> ++/* Get size_t. */
> ++#include <stddef.h>
> ++
> ++/* Get wchar_t. */
> ++#ifdef HAVE_WCHAR_T
> ++# include <stddef.h>
> ++#endif
> ++
> ++/* Get wint_t. */
> ++#ifdef HAVE_WINT_T
> ++# include <wchar.h>
> ++#endif
> ++
> ++/* Get va_list. */
> ++#include <stdarg.h>
> ++
> ++
> ++/* Argument types */
> ++typedef enum
> ++{
> ++ TYPE_NONE,
> ++ TYPE_SCHAR,
> ++ TYPE_UCHAR,
> ++ TYPE_SHORT,
> ++ TYPE_USHORT,
> ++ TYPE_INT,
> ++ TYPE_UINT,
> ++ TYPE_LONGINT,
> ++ TYPE_ULONGINT,
> ++#ifdef HAVE_LONG_LONG
> ++ TYPE_LONGLONGINT,
> ++ TYPE_ULONGLONGINT,
> ++#endif
> ++ TYPE_DOUBLE,
> ++#ifdef HAVE_LONG_DOUBLE
> ++ TYPE_LONGDOUBLE,
> ++#endif
> ++ TYPE_CHAR,
> ++#ifdef HAVE_WINT_T
> ++ TYPE_WIDE_CHAR,
> ++#endif
> ++ TYPE_STRING,
> ++#ifdef HAVE_WCHAR_T
> ++ TYPE_WIDE_STRING,
> ++#endif
> ++ TYPE_POINTER,
> ++ TYPE_COUNT_SCHAR_POINTER,
> ++ TYPE_COUNT_SHORT_POINTER,
> ++ TYPE_COUNT_INT_POINTER,
> ++ TYPE_COUNT_LONGINT_POINTER
> ++#ifdef HAVE_LONG_LONG
> ++, TYPE_COUNT_LONGLONGINT_POINTER
> ++#endif
> ++} arg_type;
> ++
> ++/* Polymorphic argument */
> ++typedef struct
> ++{
> ++ arg_type type;
> ++ union
> ++ {
> ++ signed char a_schar;
> ++ unsigned char a_uchar;
> ++ short a_short;
> ++ unsigned short a_ushort;
> ++ int a_int;
> ++ unsigned int a_uint;
> ++ long int a_longint;
> ++ unsigned long int a_ulongint;
> ++#ifdef HAVE_LONG_LONG
> ++ long long int a_longlongint;
> ++ unsigned long long int a_ulonglongint;
> ++#endif
> ++ float a_float;
> ++ double a_double;
> ++#ifdef HAVE_LONG_DOUBLE
> ++ long double a_longdouble;
> ++#endif
> ++ int a_char;
> ++#ifdef HAVE_WINT_T
> ++ wint_t a_wide_char;
> ++#endif
> ++ const char* a_string;
> ++#ifdef HAVE_WCHAR_T
> ++ const wchar_t* a_wide_string;
> ++#endif
> ++ void* a_pointer;
> ++ signed char * a_count_schar_pointer;
> ++ short * a_count_short_pointer;
> ++ int * a_count_int_pointer;
> ++ long int * a_count_longint_pointer;
> ++#ifdef HAVE_LONG_LONG
> ++ long long int * a_count_longlongint_pointer;
> ++#endif
> ++ }
> ++ a;
> ++}
> ++argument;
> ++
> ++typedef struct
> ++{
> ++ size_t count;
> ++ argument *arg;
> ++}
> ++arguments;
> ++
> ++
> ++/* Fetch the arguments, putting them into a. */
> ++#ifdef STATIC
> ++STATIC
> ++#else
> ++extern
> ++#endif
> ++int printf_fetchargs (va_list args, arguments *a);
> ++
> ++#endif /* _PRINTF_ARGS_H */
> +--- lrzsz-0.12.20.safe/intl/printf.c 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/intl/printf.c 2004-09-12 14:40:34.607709784 -0400
> +@@ -0,0 +1,371 @@
> ++/* Formatted output to strings, using POSIX/XSI format strings with positions.
> ++ Copyright (C) 2003 Free Software Foundation, Inc.
> ++ Written by Bruno Haible <bruno at clisp.org>, 2003.
> ++
> ++ This program is free software; you can redistribute it and/or modify it
> ++ under the terms of the GNU Library General Public License as published
> ++ by the Free Software Foundation; either version 2, or (at your option)
> ++ any later version.
> ++
> ++ This program is distributed in the hope that it will be useful,
> ++ but WITHOUT ANY WARRANTY; without even the implied warranty of
> ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> ++ Library General Public License for more details.
> ++
> ++ You should have received a copy of the GNU Library General Public
> ++ License along with this program; if not, write to the Free Software
> ++ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
> ++ USA. */
> ++
> ++#ifdef HAVE_CONFIG_H
> ++# include <config.h>
> ++#endif
> ++
> ++#ifdef __GNUC__
> ++# define alloca __builtin_alloca
> ++# define HAVE_ALLOCA 1
> ++#else
> ++# ifdef _MSC_VER
> ++# include <malloc.h>
> ++# define alloca _alloca
> ++# else
> ++# if defined HAVE_ALLOCA_H || defined _LIBC
> ++# include <alloca.h>
> ++# else
> ++# ifdef _AIX
> ++ #pragma alloca
> ++# else
> ++# ifndef alloca
> ++char *alloca ();
> ++# endif
> ++# endif
> ++# endif
> ++# endif
> ++#endif
> ++
> ++#include <stdio.h>
> ++
> ++#if !HAVE_POSIX_PRINTF
> ++
> ++#include <stdlib.h>
> ++#include <string.h>
> ++
> ++/* When building a DLL, we must export some functions. Note that because
> ++ the functions are only defined for binary backward compatibility, we
> ++ don't need to use __declspec(dllimport) in any case. */
> ++#if defined _MSC_VER && BUILDING_DLL
> ++# define DLL_EXPORTED __declspec(dllexport)
> ++#else
> ++# define DLL_EXPORTED
> ++#endif
> ++
> ++#define STATIC static
> ++
> ++/* Define auxiliary functions declared in "printf-args.h". */
> ++#include "printf-args.c"
> ++
> ++/* Define auxiliary functions declared in "printf-parse.h". */
> ++#include "printf-parse.c"
> ++
> ++/* Define functions declared in "vasnprintf.h". */
> ++#define vasnprintf libintl_vasnprintf
> ++#include "vasnprintf.c"
> ++#if 0 /* not needed */
> ++#define asnprintf libintl_asnprintf
> ++#include "asnprintf.c"
> ++#endif
> ++
> ++DLL_EXPORTED
> ++int
> ++libintl_vfprintf (FILE *stream, const char *format, va_list args)
> ++{
> ++ if (strchr (format, '$') == NULL)
> ++ return vfprintf (stream, format, args);
> ++ else
> ++ {
> ++ size_t length;
> ++ char *result = libintl_vasnprintf (NULL, &length, format, args);
> ++ int retval = -1;
> ++ if (result != NULL)
> ++ {
> ++ if (fwrite (result, 1, length, stream) == length)
> ++ retval = length;
> ++ free (result);
> ++ }
> ++ return retval;
> ++ }
> ++}
> ++
> ++DLL_EXPORTED
> ++int
> ++libintl_fprintf (FILE *stream, const char *format, ...)
> ++{
> ++ va_list args;
> ++ int retval;
> ++
> ++ va_start (args, format);
> ++ retval = libintl_vfprintf (stream, format, args);
> ++ va_end (args);
> ++ return retval;
> ++}
> ++
> ++DLL_EXPORTED
> ++int
> ++libintl_vprintf (const char *format, va_list args)
> ++{
> ++ return libintl_vfprintf (stdout, format, args);
> ++}
> ++
> ++DLL_EXPORTED
> ++int
> ++libintl_printf (const char *format, ...)
> ++{
> ++ va_list args;
> ++ int retval;
> ++
> ++ va_start (args, format);
> ++ retval = libintl_vprintf (format, args);
> ++ va_end (args);
> ++ return retval;
> ++}
> ++
> ++DLL_EXPORTED
> ++int
> ++libintl_vsprintf (char *resultbuf, const char *format, va_list args)
> ++{
> ++ if (strchr (format, '$') == NULL)
> ++ return vsprintf (resultbuf, format, args);
> ++ else
> ++ {
> ++ size_t length = (size_t) ~0 / (4 * sizeof (char));
> ++ char *result = libintl_vasnprintf (resultbuf, &length, format, args);
> ++ if (result != resultbuf)
> ++ {
> ++ free (result);
> ++ return -1;
> ++ }
> ++ else
> ++ return length;
> ++ }
> ++}
> ++
> ++DLL_EXPORTED
> ++int
> ++libintl_sprintf (char *resultbuf, const char *format, ...)
> ++{
> ++ va_list args;
> ++ int retval;
> ++
> ++ va_start (args, format);
> ++ retval = libintl_vsprintf (resultbuf, format, args);
> ++ va_end (args);
> ++ return retval;
> ++}
> ++
> ++#if HAVE_SNPRINTF
> ++
> ++# if HAVE_DECL__SNPRINTF
> ++ /* Windows. */
> ++# define system_vsnprintf _vsnprintf
> ++# else
> ++ /* Unix. */
> ++# define system_vsnprintf vsnprintf
> ++# endif
> ++
> ++DLL_EXPORTED
> ++int
> ++libintl_vsnprintf (char *resultbuf, size_t length, const char *format, va_list args)
> ++{
> ++ if (strchr (format, '$') == NULL)
> ++ return system_vsnprintf (resultbuf, length, format, args);
> ++ else
> ++ {
> ++ size_t maxlength = length;
> ++ char *result = libintl_vasnprintf (resultbuf, &length, format, args);
> ++ if (result != resultbuf)
> ++ {
> ++ if (maxlength > 0)
> ++ {
> ++ if (length < maxlength)
> ++ abort ();
> ++ memcpy (resultbuf, result, maxlength - 1);
> ++ resultbuf[maxlength - 1] = '\0';
> ++ }
> ++ free (result);
> ++ return -1;
> ++ }
> ++ else
> ++ return length;
> ++ }
> ++}
> ++
> ++DLL_EXPORTED
> ++int
> ++libintl_snprintf (char *resultbuf, size_t length, const char *format, ...)
> ++{
> ++ va_list args;
> ++ int retval;
> ++
> ++ va_start (args, format);
> ++ retval = libintl_vsnprintf (resultbuf, length, format, args);
> ++ va_end (args);
> ++ return retval;
> ++}
> ++
> ++#endif
> ++
> ++#if HAVE_ASPRINTF
> ++
> ++DLL_EXPORTED
> ++int
> ++libintl_vasprintf (char **resultp, const char *format, va_list args)
> ++{
> ++ size_t length;
> ++ char *result = libintl_vasnprintf (NULL, &length, format, args);
> ++ if (result == NULL)
> ++ return -1;
> ++ *resultp = result;
> ++ return length;
> ++}
> ++
> ++DLL_EXPORTED
> ++int
> ++libintl_asprintf (char **resultp, const char *format, ...)
> ++{
> ++ va_list args;
> ++ int retval;
> ++
> ++ va_start (args, format);
> ++ retval = libintl_vasprintf (resultp, format, args);
> ++ va_end (args);
> ++ return retval;
> ++}
> ++
> ++#endif
> ++
> ++#if HAVE_FWPRINTF
> ++
> ++#include <wchar.h>
> ++
> ++#define WIDE_CHAR_VERSION 1
> ++
> ++/* Define auxiliary functions declared in "wprintf-parse.h". */
> ++#include "printf-parse.c"
> ++
> ++/* Define functions declared in "vasnprintf.h". */
> ++#define vasnwprintf libintl_vasnwprintf
> ++#include "vasnprintf.c"
> ++#if 0 /* not needed */
> ++#define asnwprintf libintl_asnwprintf
> ++#include "asnprintf.c"
> ++#endif
> ++
> ++# if HAVE_DECL__SNWPRINTF
> ++ /* Windows. */
> ++# define system_vswprintf _vsnwprintf
> ++# else
> ++ /* Unix. */
> ++# define system_vswprintf vswprintf
> ++# endif
> ++
> ++DLL_EXPORTED
> ++int
> ++libintl_vfwprintf (FILE *stream, const wchar_t *format, va_list args)
> ++{
> ++ if (wcschr (format, '$') == NULL)
> ++ return vfwprintf (stream, format, args);
> ++ else
> ++ {
> ++ size_t length;
> ++ wchar_t *result = libintl_vasnwprintf (NULL, &length, format, args);
> ++ int retval = -1;
> ++ if (result != NULL)
> ++ {
> ++ size_t i;
> ++ for (i = 0; i < length; i++)
> ++ if (fputwc (result[i], stream) == WEOF)
> ++ break;
> ++ if (i == length)
> ++ retval = length;
> ++ free (result);
> ++ }
> ++ return retval;
> ++ }
> ++}
> ++
> ++DLL_EXPORTED
> ++int
> ++libintl_fwprintf (FILE *stream, const wchar_t *format, ...)
> ++{
> ++ va_list args;
> ++ int retval;
> ++
> ++ va_start (args, format);
> ++ retval = libintl_vfwprintf (stream, format, args);
> ++ va_end (args);
> ++ return retval;
> ++}
> ++
> ++DLL_EXPORTED
> ++int
> ++libintl_vwprintf (const wchar_t *format, va_list args)
> ++{
> ++ return libintl_vfwprintf (stdout, format, args);
> ++}
> ++
> ++DLL_EXPORTED
> ++int
> ++libintl_wprintf (const wchar_t *format, ...)
> ++{
> ++ va_list args;
> ++ int retval;
> ++
> ++ va_start (args, format);
> ++ retval = libintl_vwprintf (format, args);
> ++ va_end (args);
> ++ return retval;
> ++}
> ++
> ++DLL_EXPORTED
> ++int
> ++libintl_vswprintf (wchar_t *resultbuf, size_t length, const wchar_t *format, va_list args)
> ++{
> ++ if (wcschr (format, '$') == NULL)
> ++ return system_vswprintf (resultbuf, length, format, args);
> ++ else
> ++ {
> ++ size_t maxlength = length;
> ++ wchar_t *result = libintl_vasnwprintf (resultbuf, &length, format, args);
> ++ if (result != resultbuf)
> ++ {
> ++ if (maxlength > 0)
> ++ {
> ++ if (length < maxlength)
> ++ abort ();
> ++ memcpy (resultbuf, result, (maxlength - 1) * sizeof (wchar_t));
> ++ resultbuf[maxlength - 1] = 0;
> ++ }
> ++ free (result);
> ++ return -1;
> ++ }
> ++ else
> ++ return length;
> ++ }
> ++}
> ++
> ++DLL_EXPORTED
> ++int
> ++libintl_swprintf (wchar_t *resultbuf, size_t length, const wchar_t *format, ...)
> ++{
> ++ va_list args;
> ++ int retval;
> ++
> ++ va_start (args, format);
> ++ retval = libintl_vswprintf (resultbuf, length, format, args);
> ++ va_end (args);
> ++ return retval;
> ++}
> ++
> ++#endif
> ++
> ++#endif
> +--- lrzsz-0.12.20.safe/intl/printf-parse.c 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/intl/printf-parse.c 2004-09-12 14:40:34.622707504 -0400
> +@@ -0,0 +1,537 @@
> ++/* Formatted output to strings.
> ++ Copyright (C) 1999-2000, 2002-2003 Free Software Foundation, Inc.
> ++
> ++ This program is free software; you can redistribute it and/or modify it
> ++ under the terms of the GNU Library General Public License as published
> ++ by the Free Software Foundation; either version 2, or (at your option)
> ++ any later version.
> ++
> ++ This program is distributed in the hope that it will be useful,
> ++ but WITHOUT ANY WARRANTY; without even the implied warranty of
> ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> ++ Library General Public License for more details.
> ++
> ++ You should have received a copy of the GNU Library General Public
> ++ License along with this program; if not, write to the Free Software
> ++ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
> ++ USA. */
> ++
> ++#ifdef HAVE_CONFIG_H
> ++# include <config.h>
> ++#endif
> ++
> ++/* Specification. */
> ++#if WIDE_CHAR_VERSION
> ++# include "wprintf-parse.h"
> ++#else
> ++# include "printf-parse.h"
> ++#endif
> ++
> ++/* Get size_t, NULL. */
> ++#include <stddef.h>
> ++
> ++/* Get intmax_t. */
> ++#if HAVE_STDINT_H_WITH_UINTMAX
> ++# include <stdint.h>
> ++#endif
> ++#if HAVE_INTTYPES_H_WITH_UINTMAX
> ++# include <inttypes.h>
> ++#endif
> ++
> ++/* malloc(), realloc(), free(). */
> ++#include <stdlib.h>
> ++
> ++/* Checked size_t computations. */
> ++#include "xsize.h"
> ++
> ++#if WIDE_CHAR_VERSION
> ++# define PRINTF_PARSE wprintf_parse
> ++# define CHAR_T wchar_t
> ++# define DIRECTIVE wchar_t_directive
> ++# define DIRECTIVES wchar_t_directives
> ++#else
> ++# define PRINTF_PARSE printf_parse
> ++# define CHAR_T char
> ++# define DIRECTIVE char_directive
> ++# define DIRECTIVES char_directives
> ++#endif
> ++
> ++#ifdef STATIC
> ++STATIC
> ++#endif
> ++int
> ++PRINTF_PARSE (const CHAR_T *format, DIRECTIVES *d, arguments *a)
> ++{
> ++ const CHAR_T *cp = format; /* pointer into format */
> ++ size_t arg_posn = 0; /* number of regular arguments consumed */
> ++ size_t d_allocated; /* allocated elements of d->dir */
> ++ size_t a_allocated; /* allocated elements of a->arg */
> ++ size_t max_width_length = 0;
> ++ size_t max_precision_length = 0;
> ++
> ++ d->count = 0;
> ++ d_allocated = 1;
> ++ d->dir = malloc (d_allocated * sizeof (DIRECTIVE));
> ++ if (d->dir == NULL)
> ++ /* Out of memory. */
> ++ return -1;
> ++
> ++ a->count = 0;
> ++ a_allocated = 0;
> ++ a->arg = NULL;
> ++
> ++#define REGISTER_ARG(_index_,_type_) \
> ++ { \
> ++ size_t n = (_index_); \
> ++ if (n >= a_allocated) \
> ++ { \
> ++ size_t memory_size; \
> ++ argument *memory; \
> ++ \
> ++ a_allocated = xtimes (a_allocated, 2); \
> ++ if (a_allocated <= n) \
> ++ a_allocated = xsum (n, 1); \
> ++ memory_size = xtimes (a_allocated, sizeof (argument)); \
> ++ if (size_overflow_p (memory_size)) \
> ++ /* Overflow, would lead to out of memory. */ \
> ++ goto error; \
> ++ memory = (a->arg \
> ++ ? realloc (a->arg, memory_size) \
> ++ : malloc (memory_size)); \
> ++ if (memory == NULL) \
> ++ /* Out of memory. */ \
> ++ goto error; \
> ++ a->arg = memory; \
> ++ } \
> ++ while (a->count <= n) \
> ++ a->arg[a->count++].type = TYPE_NONE; \
> ++ if (a->arg[n].type == TYPE_NONE) \
> ++ a->arg[n].type = (_type_); \
> ++ else if (a->arg[n].type != (_type_)) \
> ++ /* Ambiguous type for positional argument. */ \
> ++ goto error; \
> ++ }
> ++
> ++ while (*cp != '\0')
> ++ {
> ++ CHAR_T c = *cp++;
> ++ if (c == '%')
> ++ {
> ++ size_t arg_index = ARG_NONE;
> ++ DIRECTIVE *dp = &d->dir[d->count];/* pointer to next directive */
> ++
> ++ /* Initialize the next directive. */
> ++ dp->dir_start = cp - 1;
> ++ dp->flags = 0;
> ++ dp->width_start = NULL;
> ++ dp->width_end = NULL;
> ++ dp->width_arg_index = ARG_NONE;
> ++ dp->precision_start = NULL;
> ++ dp->precision_end = NULL;
> ++ dp->precision_arg_index = ARG_NONE;
> ++ dp->arg_index = ARG_NONE;
> ++
> ++ /* Test for positional argument. */
> ++ if (*cp >= '0' && *cp <= '9')
> ++ {
> ++ const CHAR_T *np;
> ++
> ++ for (np = cp; *np >= '0' && *np <= '9'; np++)
> ++ ;
> ++ if (*np == '$')
> ++ {
> ++ size_t n = 0;
> ++
> ++ for (np = cp; *np >= '0' && *np <= '9'; np++)
> ++ n = xsum (xtimes (n, 10), *np - '0');
> ++ if (n == 0)
> ++ /* Positional argument 0. */
> ++ goto error;
> ++ if (size_overflow_p (n))
> ++ /* n too large, would lead to out of memory later. */
> ++ goto error;
> ++ arg_index = n - 1;
> ++ cp = np + 1;
> ++ }
> ++ }
> ++
> ++ /* Read the flags. */
> ++ for (;;)
> ++ {
> ++ if (*cp == '\'')
> ++ {
> ++ dp->flags |= FLAG_GROUP;
> ++ cp++;
> ++ }
> ++ else if (*cp == '-')
> ++ {
> ++ dp->flags |= FLAG_LEFT;
> ++ cp++;
> ++ }
> ++ else if (*cp == '+')
> ++ {
> ++ dp->flags |= FLAG_SHOWSIGN;
> ++ cp++;
> ++ }
> ++ else if (*cp == ' ')
> ++ {
> ++ dp->flags |= FLAG_SPACE;
> ++ cp++;
> ++ }
> ++ else if (*cp == '#')
> ++ {
> ++ dp->flags |= FLAG_ALT;
> ++ cp++;
> ++ }
> ++ else if (*cp == '0')
> ++ {
> ++ dp->flags |= FLAG_ZERO;
> ++ cp++;
> ++ }
> ++ else
> ++ break;
> ++ }
> ++
> ++ /* Parse the field width. */
> ++ if (*cp == '*')
> ++ {
> ++ dp->width_start = cp;
> ++ cp++;
> ++ dp->width_end = cp;
> ++ if (max_width_length < 1)
> ++ max_width_length = 1;
> ++
> ++ /* Test for positional argument. */
> ++ if (*cp >= '0' && *cp <= '9')
> ++ {
> ++ const CHAR_T *np;
> ++
> ++ for (np = cp; *np >= '0' && *np <= '9'; np++)
> ++ ;
> ++ if (*np == '$')
> ++ {
> ++ size_t n = 0;
> ++
> ++ for (np = cp; *np >= '0' && *np <= '9'; np++)
> ++ n = xsum (xtimes (n, 10), *np - '0');
> ++ if (n == 0)
> ++ /* Positional argument 0. */
> ++ goto error;
> ++ if (size_overflow_p (n))
> ++ /* n too large, would lead to out of memory later. */
> ++ goto error;
> ++ dp->width_arg_index = n - 1;
> ++ cp = np + 1;
> ++ }
> ++ }
> ++ if (dp->width_arg_index == ARG_NONE)
> ++ {
> ++ dp->width_arg_index = arg_posn++;
> ++ if (dp->width_arg_index == ARG_NONE)
> ++ /* arg_posn wrapped around. */
> ++ goto error;
> ++ }
> ++ REGISTER_ARG (dp->width_arg_index, TYPE_INT);
> ++ }
> ++ else if (*cp >= '0' && *cp <= '9')
> ++ {
> ++ size_t width_length;
> ++
> ++ dp->width_start = cp;
> ++ for (; *cp >= '0' && *cp <= '9'; cp++)
> ++ ;
> ++ dp->width_end = cp;
> ++ width_length = dp->width_end - dp->width_start;
> ++ if (max_width_length < width_length)
> ++ max_width_length = width_length;
> ++ }
> ++
> ++ /* Parse the precision. */
> ++ if (*cp == '.')
> ++ {
> ++ cp++;
> ++ if (*cp == '*')
> ++ {
> ++ dp->precision_start = cp - 1;
> ++ cp++;
> ++ dp->precision_end = cp;
> ++ if (max_precision_length < 2)
> ++ max_precision_length = 2;
> ++
> ++ /* Test for positional argument. */
> ++ if (*cp >= '0' && *cp <= '9')
> ++ {
> ++ const CHAR_T *np;
> ++
> ++ for (np = cp; *np >= '0' && *np <= '9'; np++)
> ++ ;
> ++ if (*np == '$')
> ++ {
> ++ size_t n = 0;
> ++
> ++ for (np = cp; *np >= '0' && *np <= '9'; np++)
> ++ n = xsum (xtimes (n, 10), *np - '0');
> ++ if (n == 0)
> ++ /* Positional argument 0. */
> ++ goto error;
> ++ if (size_overflow_p (n))
> ++ /* n too large, would lead to out of memory
> ++ later. */
> ++ goto error;
> ++ dp->precision_arg_index = n - 1;
> ++ cp = np + 1;
> ++ }
> ++ }
> ++ if (dp->precision_arg_index == ARG_NONE)
> ++ {
> ++ dp->precision_arg_index = arg_posn++;
> ++ if (dp->precision_arg_index == ARG_NONE)
> ++ /* arg_posn wrapped around. */
> ++ goto error;
> ++ }
> ++ REGISTER_ARG (dp->precision_arg_index, TYPE_INT);
> ++ }
> ++ else
> ++ {
> ++ size_t precision_length;
> ++
> ++ dp->precision_start = cp - 1;
> ++ for (; *cp >= '0' && *cp <= '9'; cp++)
> ++ ;
> ++ dp->precision_end = cp;
> ++ precision_length = dp->precision_end - dp->precision_start;
> ++ if (max_precision_length < precision_length)
> ++ max_precision_length = precision_length;
> ++ }
> ++ }
> ++
> ++ {
> ++ arg_type type;
> ++
> ++ /* Parse argument type/size specifiers. */
> ++ {
> ++ int flags = 0;
> ++
> ++ for (;;)
> ++ {
> ++ if (*cp == 'h')
> ++ {
> ++ flags |= (1 << (flags & 1));
> ++ cp++;
> ++ }
> ++ else if (*cp == 'L')
> ++ {
> ++ flags |= 4;
> ++ cp++;
> ++ }
> ++ else if (*cp == 'l')
> ++ {
> ++ flags += 8;
> ++ cp++;
> ++ }
> ++#ifdef HAVE_INTMAX_T
> ++ else if (*cp == 'j')
> ++ {
> ++ if (sizeof (intmax_t) > sizeof (long))
> ++ {
> ++ /* intmax_t = long long */
> ++ flags += 16;
> ++ }
> ++ else if (sizeof (intmax_t) > sizeof (int))
> ++ {
> ++ /* intmax_t = long */
> ++ flags += 8;
> ++ }
> ++ cp++;
> ++ }
> ++#endif
> ++ else if (*cp == 'z' || *cp == 'Z')
> ++ {
> ++ /* 'z' is standardized in ISO C 99, but glibc uses 'Z'
> ++ because the warning facility in gcc-2.95.2 understands
> ++ only 'Z' (see gcc-2.95.2/gcc/c-common.c:1784). */
> ++ if (sizeof (size_t) > sizeof (long))
> ++ {
> ++ /* size_t = long long */
> ++ flags += 16;
> ++ }
> ++ else if (sizeof (size_t) > sizeof (int))
> ++ {
> ++ /* size_t = long */
> ++ flags += 8;
> ++ }
> ++ cp++;
> ++ }
> ++ else if (*cp == 't')
> ++ {
> ++ if (sizeof (ptrdiff_t) > sizeof (long))
> ++ {
> ++ /* ptrdiff_t = long long */
> ++ flags += 16;
> ++ }
> ++ else if (sizeof (ptrdiff_t) > sizeof (int))
> ++ {
> ++ /* ptrdiff_t = long */
> ++ flags += 8;
> ++ }
> ++ cp++;
> ++ }
> ++ else
> ++ break;
> ++ }
> ++
> ++ /* Read the conversion character. */
> ++ c = *cp++;
> ++ switch (c)
> ++ {
> ++ case 'd': case 'i':
> ++#ifdef HAVE_LONG_LONG
> ++ if (flags >= 16 || (flags & 4))
> ++ type = TYPE_LONGLONGINT;
> ++ else
> ++#endif
> ++ if (flags >= 8)
> ++ type = TYPE_LONGINT;
> ++ else if (flags & 2)
> ++ type = TYPE_SCHAR;
> ++ else if (flags & 1)
> ++ type = TYPE_SHORT;
> ++ else
> ++ type = TYPE_INT;
> ++ break;
> ++ case 'o': case 'u': case 'x': case 'X':
> ++#ifdef HAVE_LONG_LONG
> ++ if (flags >= 16 || (flags & 4))
> ++ type = TYPE_ULONGLONGINT;
> ++ else
> ++#endif
> ++ if (flags >= 8)
> ++ type = TYPE_ULONGINT;
> ++ else if (flags & 2)
> ++ type = TYPE_UCHAR;
> ++ else if (flags & 1)
> ++ type = TYPE_USHORT;
> ++ else
> ++ type = TYPE_UINT;
> ++ break;
> ++ case 'f': case 'F': case 'e': case 'E': case 'g': case 'G':
> ++ case 'a': case 'A':
> ++#ifdef HAVE_LONG_DOUBLE
> ++ if (flags >= 16 || (flags & 4))
> ++ type = TYPE_LONGDOUBLE;
> ++ else
> ++#endif
> ++ type = TYPE_DOUBLE;
> ++ break;
> ++ case 'c':
> ++ if (flags >= 8)
> ++#ifdef HAVE_WINT_T
> ++ type = TYPE_WIDE_CHAR;
> ++#else
> ++ goto error;
> ++#endif
> ++ else
> ++ type = TYPE_CHAR;
> ++ break;
> ++#ifdef HAVE_WINT_T
> ++ case 'C':
> ++ type = TYPE_WIDE_CHAR;
> ++ c = 'c';
> ++ break;
> ++#endif
> ++ case 's':
> ++ if (flags >= 8)
> ++#ifdef HAVE_WCHAR_T
> ++ type = TYPE_WIDE_STRING;
> ++#else
> ++ goto error;
> ++#endif
> ++ else
> ++ type = TYPE_STRING;
> ++ break;
> ++#ifdef HAVE_WCHAR_T
> ++ case 'S':
> ++ type = TYPE_WIDE_STRING;
> ++ c = 's';
> ++ break;
> ++#endif
> ++ case 'p':
> ++ type = TYPE_POINTER;
> ++ break;
> ++ case 'n':
> ++#ifdef HAVE_LONG_LONG
> ++ if (flags >= 16 || (flags & 4))
> ++ type = TYPE_COUNT_LONGLONGINT_POINTER;
> ++ else
> ++#endif
> ++ if (flags >= 8)
> ++ type = TYPE_COUNT_LONGINT_POINTER;
> ++ else if (flags & 2)
> ++ type = TYPE_COUNT_SCHAR_POINTER;
> ++ else if (flags & 1)
> ++ type = TYPE_COUNT_SHORT_POINTER;
> ++ else
> ++ type = TYPE_COUNT_INT_POINTER;
> ++ break;
> ++ case '%':
> ++ type = TYPE_NONE;
> ++ break;
> ++ default:
> ++ /* Unknown conversion character. */
> ++ goto error;
> ++ }
> ++ }
> ++
> ++ if (type != TYPE_NONE)
> ++ {
> ++ dp->arg_index = arg_index;
> ++ if (dp->arg_index == ARG_NONE)
> ++ {
> ++ dp->arg_index = arg_posn++;
> ++ if (dp->arg_index == ARG_NONE)
> ++ /* arg_posn wrapped around. */
> ++ goto error;
> ++ }
> ++ REGISTER_ARG (dp->arg_index, type);
> ++ }
> ++ dp->conversion = c;
> ++ dp->dir_end = cp;
> ++ }
> ++
> ++ d->count++;
> ++ if (d->count >= d_allocated)
> ++ {
> ++ size_t memory_size;
> ++ DIRECTIVE *memory;
> ++
> ++ d_allocated = xtimes (d_allocated, 2);
> ++ memory_size = xtimes (d_allocated, sizeof (DIRECTIVE));
> ++ if (size_overflow_p (memory_size))
> ++ /* Overflow, would lead to out of memory. */
> ++ goto error;
> ++ memory = realloc (d->dir, memory_size);
> ++ if (memory == NULL)
> ++ /* Out of memory. */
> ++ goto error;
> ++ d->dir = memory;
> ++ }
> ++ }
> ++ }
> ++ d->dir[d->count].dir_start = cp;
> ++
> ++ d->max_width_length = max_width_length;
> ++ d->max_precision_length = max_precision_length;
> ++ return 0;
> ++
> ++error:
> ++ if (a->arg)
> ++ free (a->arg);
> ++ if (d->dir)
> ++ free (d->dir);
> ++ return -1;
> ++}
> ++
> ++#undef DIRECTIVES
> ++#undef DIRECTIVE
> ++#undef CHAR_T
> ++#undef PRINTF_PARSE
> +--- lrzsz-0.12.20.safe/intl/printf-parse.h 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/intl/printf-parse.h 2004-09-12 14:40:34.628706592 -0400
> +@@ -0,0 +1,75 @@
> ++/* Parse printf format string.
> ++ Copyright (C) 1999, 2002-2003 Free Software Foundation, Inc.
> ++
> ++ This program is free software; you can redistribute it and/or modify it
> ++ under the terms of the GNU Library General Public License as published
> ++ by the Free Software Foundation; either version 2, or (at your option)
> ++ any later version.
> ++
> ++ This program is distributed in the hope that it will be useful,
> ++ but WITHOUT ANY WARRANTY; without even the implied warranty of
> ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> ++ Library General Public License for more details.
> ++
> ++ You should have received a copy of the GNU Library General Public
> ++ License along with this program; if not, write to the Free Software
> ++ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
> ++ USA. */
> ++
> ++#ifndef _PRINTF_PARSE_H
> ++#define _PRINTF_PARSE_H
> ++
> ++#include "printf-args.h"
> ++
> ++
> ++/* Flags */
> ++#define FLAG_GROUP 1 /* ' flag */
> ++#define FLAG_LEFT 2 /* - flag */
> ++#define FLAG_SHOWSIGN 4 /* + flag */
> ++#define FLAG_SPACE 8 /* space flag */
> ++#define FLAG_ALT 16 /* # flag */
> ++#define FLAG_ZERO 32
> ++
> ++/* arg_index value indicating that no argument is consumed. */
> ++#define ARG_NONE (~(size_t)0)
> ++
> ++/* A parsed directive. */
> ++typedef struct
> ++{
> ++ const char* dir_start;
> ++ const char* dir_end;
> ++ int flags;
> ++ const char* width_start;
> ++ const char* width_end;
> ++ size_t width_arg_index;
> ++ const char* precision_start;
> ++ const char* precision_end;
> ++ size_t precision_arg_index;
> ++ char conversion; /* d i o u x X f e E g G c s p n U % but not C S */
> ++ size_t arg_index;
> ++}
> ++char_directive;
> ++
> ++/* A parsed format string. */
> ++typedef struct
> ++{
> ++ size_t count;
> ++ char_directive *dir;
> ++ size_t max_width_length;
> ++ size_t max_precision_length;
> ++}
> ++char_directives;
> ++
> ++
> ++/* Parses the format string. Fills in the number N of directives, and fills
> ++ in directives[0], ..., directives[N-1], and sets directives[N].dir_start
> ++ to the end of the format string. Also fills in the arg_type fields of the
> ++ arguments and the needed count of arguments. */
> ++#ifdef STATIC
> ++STATIC
> ++#else
> ++extern
> ++#endif
> ++int printf_parse (const char *format, char_directives *d, arguments *a);
> ++
> ++#endif /* _PRINTF_PARSE_H */
> +--- lrzsz-0.12.20.safe/intl/ref-add.sin 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/intl/ref-add.sin 2004-09-12 14:40:34.633705832 -0400
> +@@ -0,0 +1,31 @@
> ++# Add this package to a list of references stored in a text file.
> ++#
> ++# Copyright (C) 2000 Free Software Foundation, Inc.
> ++#
> ++# This program is free software; you can redistribute it and/or modify it
> ++# under the terms of the GNU Library General Public License as published
> ++# by the Free Software Foundation; either version 2, or (at your option)
> ++# any later version.
> ++#
> ++# This program is distributed in the hope that it will be useful,
> ++# but WITHOUT ANY WARRANTY; without even the implied warranty of
> ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> ++# Library General Public License for more details.
> ++#
> ++# You should have received a copy of the GNU Library General Public
> ++# License along with this program; if not, write to the Free Software
> ++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
> ++# USA.
> ++#
> ++# Written by Bruno Haible <haible at clisp.cons.org>.
> ++#
> ++/^# Packages using this file: / {
> ++ s/# Packages using this file://
> ++ ta
> ++ :a
> ++ s/ @PACKAGE@ / @PACKAGE@ /
> ++ tb
> ++ s/ $/ @PACKAGE@ /
> ++ :b
> ++ s/^/# Packages using this file:/
> ++}
> +--- lrzsz-0.12.20.safe/intl/ref-del.sin 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/intl/ref-del.sin 2004-09-12 14:40:34.638705072 -0400
> +@@ -0,0 +1,26 @@
> ++# Remove this package from a list of references stored in a text file.
> ++#
> ++# Copyright (C) 2000 Free Software Foundation, Inc.
> ++#
> ++# This program is free software; you can redistribute it and/or modify it
> ++# under the terms of the GNU Library General Public License as published
> ++# by the Free Software Foundation; either version 2, or (at your option)
> ++# any later version.
> ++#
> ++# This program is distributed in the hope that it will be useful,
> ++# but WITHOUT ANY WARRANTY; without even the implied warranty of
> ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> ++# Library General Public License for more details.
> ++#
> ++# You should have received a copy of the GNU Library General Public
> ++# License along with this program; if not, write to the Free Software
> ++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
> ++# USA.
> ++#
> ++# Written by Bruno Haible <haible at clisp.cons.org>.
> ++#
> ++/^# Packages using this file: / {
> ++ s/# Packages using this file://
> ++ s/ @PACKAGE@ / /
> ++ s/^/# Packages using this file:/
> ++}
> +--- lrzsz-0.12.20.safe/intl/relocatable.c 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/intl/relocatable.c 2004-09-12 14:40:34.644704160 -0400
> +@@ -0,0 +1,449 @@
> ++/* Provide relocatable packages.
> ++ Copyright (C) 2003 Free Software Foundation, Inc.
> ++ Written by Bruno Haible <bruno at clisp.org>, 2003.
> ++
> ++ This program is free software; you can redistribute it and/or modify it
> ++ under the terms of the GNU Library General Public License as published
> ++ by the Free Software Foundation; either version 2, or (at your option)
> ++ any later version.
> ++
> ++ This program is distributed in the hope that it will be useful,
> ++ but WITHOUT ANY WARRANTY; without even the implied warranty of
> ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> ++ Library General Public License for more details.
> ++
> ++ You should have received a copy of the GNU Library General Public
> ++ License along with this program; if not, write to the Free Software
> ++ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
> ++ USA. */
> ++
> ++
> ++/* Tell glibc's <stdio.h> to provide a prototype for getline().
> ++ This must come before <config.h> because <config.h> may include
> ++ <features.h>, and once <features.h> has been included, it's too late. */
> ++#ifndef _GNU_SOURCE
> ++# define _GNU_SOURCE 1
> ++#endif
> ++
> ++#ifdef HAVE_CONFIG_H
> ++# include "config.h"
> ++#endif
> ++
> ++/* Specification. */
> ++#include "relocatable.h"
> ++
> ++#if ENABLE_RELOCATABLE
> ++
> ++#include <stddef.h>
> ++#include <stdio.h>
> ++#include <stdlib.h>
> ++#include <string.h>
> ++
> ++#ifdef NO_XMALLOC
> ++# define xmalloc malloc
> ++#else
> ++# include "xalloc.h"
> ++#endif
> ++
> ++#if defined _WIN32 || defined __WIN32__
> ++# define WIN32_LEAN_AND_MEAN
> ++# include <windows.h>
> ++#endif
> ++
> ++#if DEPENDS_ON_LIBCHARSET
> ++# include <libcharset.h>
> ++#endif
> ++#if DEPENDS_ON_LIBICONV && HAVE_ICONV
> ++# include <iconv.h>
> ++#endif
> ++#if DEPENDS_ON_LIBINTL && ENABLE_NLS
> ++# include <libintl.h>
> ++#endif
> ++
> ++/* Faked cheap 'bool'. */
> ++#undef bool
> ++#undef false
> ++#undef true
> ++#define bool int
> ++#define false 0
> ++#define true 1
> ++
> ++/* Pathname support.
> ++ ISSLASH(C) tests whether C is a directory separator character.
> ++ IS_PATH_WITH_DIR(P) tests whether P contains a directory specification.
> ++ */
> ++#if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__
> ++ /* Win32, OS/2, DOS */
> ++# define ISSLASH(C) ((C) == '/' || (C) == '\\')
> ++# define HAS_DEVICE(P) \
> ++ ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \
> ++ && (P)[1] == ':')
> ++# define IS_PATH_WITH_DIR(P) \
> ++ (strchr (P, '/') != NULL || strchr (P, '\\') != NULL || HAS_DEVICE (P))
> ++# define FILESYSTEM_PREFIX_LEN(P) (HAS_DEVICE (P) ? 2 : 0)
> ++#else
> ++ /* Unix */
> ++# define ISSLASH(C) ((C) == '/')
> ++# define IS_PATH_WITH_DIR(P) (strchr (P, '/') != NULL)
> ++# define FILESYSTEM_PREFIX_LEN(P) 0
> ++#endif
> ++
> ++/* Original installation prefix. */
> ++static char *orig_prefix;
> ++static size_t orig_prefix_len;
> ++/* Current installation prefix. */
> ++static char *curr_prefix;
> ++static size_t curr_prefix_len;
> ++/* These prefixes do not end in a slash. Anything that will be concatenated
> ++ to them must start with a slash. */
> ++
> ++/* Sets the original and the current installation prefix of this module.
> ++ Relocation simply replaces a pathname starting with the original prefix
> ++ by the corresponding pathname with the current prefix instead. Both
> ++ prefixes should be directory names without trailing slash (i.e. use ""
> ++ instead of "/"). */
> ++static void
> ++set_this_relocation_prefix (const char *orig_prefix_arg,
> ++ const char *curr_prefix_arg)
> ++{
> ++ if (orig_prefix_arg != NULL && curr_prefix_arg != NULL
> ++ /* Optimization: if orig_prefix and curr_prefix are equal, the
> ++ relocation is a nop. */
> ++ && strcmp (orig_prefix_arg, curr_prefix_arg) != 0)
> ++ {
> ++ /* Duplicate the argument strings. */
> ++ char *memory;
> ++
> ++ orig_prefix_len = strlen (orig_prefix_arg);
> ++ curr_prefix_len = strlen (curr_prefix_arg);
> ++ memory = (char *) xmalloc (orig_prefix_len + 1 + curr_prefix_len + 1);
> ++#ifdef NO_XMALLOC
> ++ if (memory != NULL)
> ++#endif
> ++ {
> ++ memcpy (memory, orig_prefix_arg, orig_prefix_len + 1);
> ++ orig_prefix = memory;
> ++ memory += orig_prefix_len + 1;
> ++ memcpy (memory, curr_prefix_arg, curr_prefix_len + 1);
> ++ curr_prefix = memory;
> ++ return;
> ++ }
> ++ }
> ++ orig_prefix = NULL;
> ++ curr_prefix = NULL;
> ++ /* Don't worry about wasted memory here - this function is usually only
> ++ called once. */
> ++}
> ++
> ++/* Sets the original and the current installation prefix of the package.
> ++ Relocation simply replaces a pathname starting with the original prefix
> ++ by the corresponding pathname with the current prefix instead. Both
> ++ prefixes should be directory names without trailing slash (i.e. use ""
> ++ instead of "/"). */
> ++void
> ++set_relocation_prefix (const char *orig_prefix_arg, const char *curr_prefix_arg)
> ++{
> ++ set_this_relocation_prefix (orig_prefix_arg, curr_prefix_arg);
> ++
> ++ /* Now notify all dependent libraries. */
> ++#if DEPENDS_ON_LIBCHARSET
> ++ libcharset_set_relocation_prefix (orig_prefix_arg, curr_prefix_arg);
> ++#endif
> ++#if DEPENDS_ON_LIBICONV && HAVE_ICONV && _LIBICONV_VERSION >= 0x0109
> ++ libiconv_set_relocation_prefix (orig_prefix_arg, curr_prefix_arg);
> ++#endif
> ++#if DEPENDS_ON_LIBINTL && ENABLE_NLS && defined libintl_set_relocation_prefix
> ++ libintl_set_relocation_prefix (orig_prefix_arg, curr_prefix_arg);
> ++#endif
> ++}
> ++
> ++#if !defined IN_LIBRARY || (defined PIC && defined INSTALLDIR)
> ++
> ++/* Convenience function:
> ++ Computes the current installation prefix, based on the original
> ++ installation prefix, the original installation directory of a particular
> ++ file, and the current pathname of this file. Returns NULL upon failure. */
> ++#ifdef IN_LIBRARY
> ++#define compute_curr_prefix local_compute_curr_prefix
> ++static
> ++#endif
> ++const char *
> ++compute_curr_prefix (const char *orig_installprefix,
> ++ const char *orig_installdir,
> ++ const char *curr_pathname)
> ++{
> ++ const char *curr_installdir;
> ++ const char *rel_installdir;
> ++
> ++ if (curr_pathname == NULL)
> ++ return NULL;
> ++
> ++ /* Determine the relative installation directory, relative to the prefix.
> ++ This is simply the difference between orig_installprefix and
> ++ orig_installdir. */
> ++ if (strncmp (orig_installprefix, orig_installdir, strlen (orig_installprefix))
> ++ != 0)
> ++ /* Shouldn't happen - nothing should be installed outside $(prefix). */
> ++ return NULL;
> ++ rel_installdir = orig_installdir + strlen (orig_installprefix);
> ++
> ++ /* Determine the current installation directory. */
> ++ {
> ++ const char *p_base = curr_pathname + FILESYSTEM_PREFIX_LEN (curr_pathname);
> ++ const char *p = curr_pathname + strlen (curr_pathname);
> ++ char *q;
> ++
> ++ while (p > p_base)
> ++ {
> ++ p--;
> ++ if (ISSLASH (*p))
> ++ break;
> ++ }
> ++
> ++ q = (char *) xmalloc (p - curr_pathname + 1);
> ++#ifdef NO_XMALLOC
> ++ if (q == NULL)
> ++ return NULL;
> ++#endif
> ++ memcpy (q, curr_pathname, p - curr_pathname);
> ++ q[p - curr_pathname] = '\0';
> ++ curr_installdir = q;
> ++ }
> ++
> ++ /* Compute the current installation prefix by removing the trailing
> ++ rel_installdir from it. */
> ++ {
> ++ const char *rp = rel_installdir + strlen (rel_installdir);
> ++ const char *cp = curr_installdir + strlen (curr_installdir);
> ++ const char *cp_base =
> ++ curr_installdir + FILESYSTEM_PREFIX_LEN (curr_installdir);
> ++
> ++ while (rp > rel_installdir && cp > cp_base)
> ++ {
> ++ bool same = false;
> ++ const char *rpi = rp;
> ++ const char *cpi = cp;
> ++
> ++ while (rpi > rel_installdir && cpi > cp_base)
> ++ {
> ++ rpi--;
> ++ cpi--;
> ++ if (ISSLASH (*rpi) || ISSLASH (*cpi))
> ++ {
> ++ if (ISSLASH (*rpi) && ISSLASH (*cpi))
> ++ same = true;
> ++ break;
> ++ }
> ++#if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__
> ++ /* Win32, OS/2, DOS - case insignificant filesystem */
> ++ if ((*rpi >= 'a' && *rpi <= 'z' ? *rpi - 'a' + 'A' : *rpi)
> ++ != (*cpi >= 'a' && *cpi <= 'z' ? *cpi - 'a' + 'A' : *cpi))
> ++ break;
> ++#else
> ++ if (*rpi != *cpi)
> ++ break;
> ++#endif
> ++ }
> ++ if (!same)
> ++ break;
> ++ /* The last pathname component was the same. opi and cpi now point
> ++ to the slash before it. */
> ++ rp = rpi;
> ++ cp = cpi;
> ++ }
> ++
> ++ if (rp > rel_installdir)
> ++ /* Unexpected: The curr_installdir does not end with rel_installdir. */
> ++ return NULL;
> ++
> ++ {
> ++ size_t curr_prefix_len = cp - curr_installdir;
> ++ char *curr_prefix;
> ++
> ++ curr_prefix = (char *) xmalloc (curr_prefix_len + 1);
> ++#ifdef NO_XMALLOC
> ++ if (curr_prefix == NULL)
> ++ return NULL;
> ++#endif
> ++ memcpy (curr_prefix, curr_installdir, curr_prefix_len);
> ++ curr_prefix[curr_prefix_len] = '\0';
> ++
> ++ return curr_prefix;
> ++ }
> ++ }
> ++}
> ++
> ++#endif /* !IN_LIBRARY || PIC */
> ++
> ++#if defined PIC && defined INSTALLDIR
> ++
> ++/* Full pathname of shared library, or NULL. */
> ++static char *shared_library_fullname;
> ++
> ++#if defined _WIN32 || defined __WIN32__
> ++
> ++/* Determine the full pathname of the shared library when it is loaded. */
> ++
> ++BOOL WINAPI
> ++DllMain (HINSTANCE module_handle, DWORD event, LPVOID reserved)
> ++{
> ++ (void) reserved;
> ++
> ++ if (event == DLL_PROCESS_ATTACH)
> ++ {
> ++ /* The DLL is being loaded into an application's address range. */
> ++ static char location[MAX_PATH];
> ++
> ++ if (!GetModuleFileName (module_handle, location, sizeof (location)))
> ++ /* Shouldn't happen. */
> ++ return FALSE;
> ++
> ++ if (!IS_PATH_WITH_DIR (location))
> ++ /* Shouldn't happen. */
> ++ return FALSE;
> ++
> ++ shared_library_fullname = strdup (location);
> ++ }
> ++
> ++ return TRUE;
> ++}
> ++
> ++#else /* Unix */
> ++
> ++static void
> ++find_shared_library_fullname ()
> ++{
> ++#if defined __linux__ && __GLIBC__ >= 2
> ++ /* Linux has /proc/self/maps. glibc 2 has the getline() function. */
> ++ FILE *fp;
> ++
> ++ /* Open the current process' maps file. It describes one VMA per line. */
> ++ fp = fopen ("/proc/self/maps", "r");
> ++ if (fp)
> ++ {
> ++ unsigned long address = (unsigned long) &find_shared_library_fullname;
> ++ for (;;)
> ++ {
> ++ unsigned long start, end;
> ++ int c;
> ++
> ++ if (fscanf (fp, "%lx-%lx", &start, &end) != 2)
> ++ break;
> ++ if (address >= start && address <= end - 1)
> ++ {
> ++ /* Found it. Now see if this line contains a filename. */
> ++ while (c = getc (fp), c != EOF && c != '\n' && c != '/')
> ++ continue;
> ++ if (c == '/')
> ++ {
> ++ size_t size;
> ++ int len;
> ++
> ++ ungetc (c, fp);
> ++ shared_library_fullname = NULL; size = 0;
> ++ len = getline (&shared_library_fullname, &size, fp);
> ++ if (len >= 0)
> ++ {
> ++ /* Success: filled shared_library_fullname. */
> ++ if (len > 0 && shared_library_fullname[len - 1] == '\n')
> ++ shared_library_fullname[len - 1] = '\0';
> ++ }
> ++ }
> ++ break;
> ++ }
> ++ while (c = getc (fp), c != EOF && c != '\n')
> ++ continue;
> ++ }
> ++ fclose (fp);
> ++ }
> ++#endif
> ++}
> ++
> ++#endif /* WIN32 / Unix */
> ++
> ++/* Return the full pathname of the current shared library.
> ++ Return NULL if unknown.
> ++ Guaranteed to work only on Linux and Woe32. */
> ++static char *
> ++get_shared_library_fullname ()
> ++{
> ++#if !(defined _WIN32 || defined __WIN32__)
> ++ static bool tried_find_shared_library_fullname;
> ++ if (!tried_find_shared_library_fullname)
> ++ {
> ++ find_shared_library_fullname ();
> ++ tried_find_shared_library_fullname = true;
> ++ }
> ++#endif
> ++ return shared_library_fullname;
> ++}
> ++
> ++#endif /* PIC */
> ++
> ++/* Returns the pathname, relocated according to the current installation
> ++ directory. */
> ++const char *
> ++relocate (const char *pathname)
> ++{
> ++#if defined PIC && defined INSTALLDIR
> ++ static int initialized;
> ++
> ++ /* Initialization code for a shared library. */
> ++ if (!initialized)
> ++ {
> ++ /* At this point, orig_prefix and curr_prefix likely have already been
> ++ set through the main program's set_program_name_and_installdir
> ++ function. This is sufficient in the case that the library has
> ++ initially been installed in the same orig_prefix. But we can do
> ++ better, to also cover the cases that 1. it has been installed
> ++ in a different prefix before being moved to orig_prefix and (later)
> ++ to curr_prefix, 2. unlike the program, it has not moved away from
> ++ orig_prefix. */
> ++ const char *orig_installprefix = INSTALLPREFIX;
> ++ const char *orig_installdir = INSTALLDIR;
> ++ const char *curr_prefix_better;
> ++
> ++ curr_prefix_better =
> ++ compute_curr_prefix (orig_installprefix, orig_installdir,
> ++ get_shared_library_fullname ());
> ++ if (curr_prefix_better == NULL)
> ++ curr_prefix_better = curr_prefix;
> ++
> ++ set_relocation_prefix (orig_installprefix, curr_prefix_better);
> ++
> ++ initialized = 1;
> ++ }
> ++#endif
> ++
> ++ /* Note: It is not necessary to perform case insensitive comparison here,
> ++ even for DOS-like filesystems, because the pathname argument was
> ++ typically created from the same Makefile variable as orig_prefix came
> ++ from. */
> ++ if (orig_prefix != NULL && curr_prefix != NULL
> ++ && strncmp (pathname, orig_prefix, orig_prefix_len) == 0)
> ++ {
> ++ if (pathname[orig_prefix_len] == '\0')
> ++ /* pathname equals orig_prefix. */
> ++ return curr_prefix;
> ++ if (ISSLASH (pathname[orig_prefix_len]))
> ++ {
> ++ /* pathname starts with orig_prefix. */
> ++ const char *pathname_tail = &pathname[orig_prefix_len];
> ++ char *result =
> ++ (char *) xmalloc (curr_prefix_len + strlen (pathname_tail) + 1);
> ++
> ++#ifdef NO_XMALLOC
> ++ if (result != NULL)
> ++#endif
> ++ {
> ++ memcpy (result, curr_prefix, curr_prefix_len);
> ++ strcpy (result + curr_prefix_len, pathname_tail);
> ++ return result;
> ++ }
> ++ }
> ++ }
> ++ /* Nothing to relocate. */
> ++ return pathname;
> ++}
> ++
> ++#endif
> +--- lrzsz-0.12.20.safe/intl/relocatable.h 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/intl/relocatable.h 2004-09-12 14:40:34.651703096 -0400
> +@@ -0,0 +1,77 @@
> ++/* Provide relocatable packages.
> ++ Copyright (C) 2003 Free Software Foundation, Inc.
> ++ Written by Bruno Haible <bruno at clisp.org>, 2003.
> ++
> ++ This program is free software; you can redistribute it and/or modify it
> ++ under the terms of the GNU Library General Public License as published
> ++ by the Free Software Foundation; either version 2, or (at your option)
> ++ any later version.
> ++
> ++ This program is distributed in the hope that it will be useful,
> ++ but WITHOUT ANY WARRANTY; without even the implied warranty of
> ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> ++ Library General Public License for more details.
> ++
> ++ You should have received a copy of the GNU Library General Public
> ++ License along with this program; if not, write to the Free Software
> ++ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
> ++ USA. */
> ++
> ++#ifndef _RELOCATABLE_H
> ++#define _RELOCATABLE_H
> ++
> ++#ifdef __cplusplus
> ++extern "C" {
> ++#endif
> ++
> ++
> ++/* This can be enabled through the configure --enable-relocatable option. */
> ++#if ENABLE_RELOCATABLE
> ++
> ++/* When building a DLL, we must export some functions. Note that because
> ++ this is a private .h file, we don't need to use __declspec(dllimport)
> ++ in any case. */
> ++#if defined _MSC_VER && BUILDING_DLL
> ++# define RELOCATABLE_DLL_EXPORTED __declspec(dllexport)
> ++#else
> ++# define RELOCATABLE_DLL_EXPORTED
> ++#endif
> ++
> ++/* Sets the original and the current installation prefix of the package.
> ++ Relocation simply replaces a pathname starting with the original prefix
> ++ by the corresponding pathname with the current prefix instead. Both
> ++ prefixes should be directory names without trailing slash (i.e. use ""
> ++ instead of "/"). */
> ++extern RELOCATABLE_DLL_EXPORTED void
> ++ set_relocation_prefix (const char *orig_prefix,
> ++ const char *curr_prefix);
> ++
> ++/* Returns the pathname, relocated according to the current installation
> ++ directory. */
> ++extern const char * relocate (const char *pathname);
> ++
> ++/* Memory management: relocate() leaks memory, because it has to construct
> ++ a fresh pathname. If this is a problem because your program calls
> ++ relocate() frequently, think about caching the result. */
> ++
> ++/* Convenience function:
> ++ Computes the current installation prefix, based on the original
> ++ installation prefix, the original installation directory of a particular
> ++ file, and the current pathname of this file. Returns NULL upon failure. */
> ++extern const char * compute_curr_prefix (const char *orig_installprefix,
> ++ const char *orig_installdir,
> ++ const char *curr_pathname);
> ++
> ++#else
> ++
> ++/* By default, we use the hardwired pathnames. */
> ++#define relocate(pathname) (pathname)
> ++
> ++#endif
> ++
> ++
> ++#ifdef __cplusplus
> ++}
> ++#endif
> ++
> ++#endif /* _RELOCATABLE_H */
> +--- lrzsz-0.12.20.safe/intl/textdomain.c 1998-04-26 09:22:37.000000000 -0400
> ++++ lrzsz-0.12.20/intl/textdomain.c 2004-09-12 14:40:34.656702336 -0400
> +@@ -1,51 +1,60 @@
> +-/* Implementation of the textdomain(3) function
> +- Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
> +- Written by Ulrich Drepper <drepper at gnu.ai.mit.edu>, 1995.
> ++/* Implementation of the textdomain(3) function.
> ++ Copyright (C) 1995-1998, 2000-2003 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
> +- the Free Software Foundation; either version 2, or (at your option)
> ++ This program is free software; you can redistribute it and/or modify it
> ++ under the terms of the GNU Library General Public License as published
> ++ by the Free Software Foundation; either version 2, or (at your option)
> + any later version.
> +
> + This program is distributed in the hope that it will be useful,
> + but WITHOUT ANY WARRANTY; without even the implied warranty of
> +- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> +- GNU General Public License for more details.
> ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> ++ Library General Public License for more details.
> +
> +- You should have received a copy of the GNU 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. */
> ++ You should have received a copy of the GNU Library General Public
> ++ License along with this program; if not, write to the Free Software
> ++ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
> ++ USA. */
> +
> + #ifdef HAVE_CONFIG_H
> + # include <config.h>
> + #endif
> +
> +-#if defined STDC_HEADERS || defined _LIBC
> +-# include <stdlib.h>
> +-#endif
> ++#include <stdlib.h>
> ++#include <string.h>
> +
> +-#if defined STDC_HEADERS || 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_default_domain libintl_nl_default_default_domain
> ++# define _nl_current_default_domain libintl_nl_current_default_domain
> + #endif
> +
> + /* @@ end of prolog @@ */
> +
> + /* Name of the default text domain. */
> +-extern const char _nl_default_default_domain[];
> ++extern const char _nl_default_default_domain[] attribute_hidden;
> +
> + /* Default text domain in which entries for gettext(3) are to be found. */
> +-extern const char *_nl_current_default_domain;
> ++extern const char *_nl_current_default_domain attribute_hidden;
> +
> +
> + /* Names for the libintl functions are a problem. They must not clash
> +@@ -54,50 +63,76 @@
> + prefix. So we have to make a difference here. */
> + #ifdef _LIBC
> + # define TEXTDOMAIN __textdomain
> +-# define strdup(str) __strdup (str)
> ++# ifndef strdup
> ++# define strdup(str) __strdup (str)
> ++# endif
> + #else
> +-# define TEXTDOMAIN textdomain__
> ++# define TEXTDOMAIN libintl_textdomain
> + #endif
> +
> ++/* Lock variable to protect the global data in the gettext implementation. */
> ++__libc_rwlock_define (extern, _nl_state_lock attribute_hidden)
> ++
> + /* Set the current default message catalog to DOMAINNAME.
> + If DOMAINNAME is null, return the current default.
> + If DOMAINNAME is "", reset to the default of "messages". */
> + char *
> +-TEXTDOMAIN (domainname)
> +- const char *domainname;
> ++TEXTDOMAIN (const char *domainname)
> + {
> +- char *old;
> ++ char *new_domain;
> ++ char *old_domain;
> +
> + /* A NULL pointer requests the current setting. */
> + if (domainname == NULL)
> + return (char *) _nl_current_default_domain;
> +
> +- old = (char *) _nl_current_default_domain;
> ++ __libc_rwlock_wrlock (_nl_state_lock);
> ++
> ++ old_domain = (char *) _nl_current_default_domain;
> +
> + /* If domain name is the null string set to default domain "messages". */
> + if (domainname[0] == '\0'
> + || strcmp (domainname, _nl_default_default_domain) == 0)
> +- _nl_current_default_domain = _nl_default_default_domain;
> ++ {
> ++ _nl_current_default_domain = _nl_default_default_domain;
> ++ new_domain = (char *) _nl_current_default_domain;
> ++ }
> ++ else if (strcmp (domainname, old_domain) == 0)
> ++ /* This can happen and people will use it to signal that some
> ++ environment variable changed. */
> ++ new_domain = old_domain;
> + else
> + {
> + /* If the following malloc fails `_nl_current_default_domain'
> + will be NULL. This value will be returned and so signals we
> + are out of core. */
> + #if defined _LIBC || defined HAVE_STRDUP
> +- _nl_current_default_domain = strdup (domainname);
> ++ new_domain = strdup (domainname);
> + #else
> + size_t len = strlen (domainname) + 1;
> +- char *cp = (char *) malloc (len);
> +- if (cp != NULL)
> +- memcpy (cp, domainname, len);
> +- _nl_current_default_domain = cp;
> ++ new_domain = (char *) malloc (len);
> ++ if (new_domain != NULL)
> ++ memcpy (new_domain, domainname, len);
> + #endif
> ++
> ++ if (new_domain != NULL)
> ++ _nl_current_default_domain = new_domain;
> + }
> +
> +- if (old != _nl_default_default_domain)
> +- free (old);
> ++ /* We use this possibility to signal a change of the loaded catalogs
> ++ since this is most likely the case and there is no other easy we
> ++ to do it. Do it only when the call was successful. */
> ++ if (new_domain != NULL)
> ++ {
> ++ ++_nl_msg_cat_cntr;
> +
> +- return (char *) _nl_current_default_domain;
> ++ if (old_domain != new_domain && old_domain != _nl_default_default_domain)
> ++ free (old_domain);
> ++ }
> ++
> ++ __libc_rwlock_unlock (_nl_state_lock);
> ++
> ++ return new_domain;
> + }
> +
> + #ifdef _LIBC
> +--- lrzsz-0.12.20.safe/intl/vasnprintf.c 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/intl/vasnprintf.c 2004-09-12 14:40:34.662701424 -0400
> +@@ -0,0 +1,887 @@
> ++/* vsprintf with automatic memory allocation.
> ++ Copyright (C) 1999, 2002-2003 Free Software Foundation, Inc.
> ++
> ++ This program is free software; you can redistribute it and/or modify it
> ++ under the terms of the GNU Library General Public License as published
> ++ by the Free Software Foundation; either version 2, or (at your option)
> ++ any later version.
> ++
> ++ This program is distributed in the hope that it will be useful,
> ++ but WITHOUT ANY WARRANTY; without even the implied warranty of
> ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> ++ Library General Public License for more details.
> ++
> ++ You should have received a copy of the GNU Library General Public
> ++ License along with this program; if not, write to the Free Software
> ++ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
> ++ USA. */
> ++
> ++/* Tell glibc's <stdio.h> to provide a prototype for snprintf().
> ++ This must come before <config.h> because <config.h> may include
> ++ <features.h>, and once <features.h> has been included, it's too late. */
> ++#ifndef _GNU_SOURCE
> ++# define _GNU_SOURCE 1
> ++#endif
> ++
> ++#ifdef HAVE_CONFIG_H
> ++# include <config.h>
> ++#endif
> ++#ifndef IN_LIBINTL
> ++# include <alloca.h>
> ++#endif
> ++
> ++/* Specification. */
> ++#if WIDE_CHAR_VERSION
> ++# include "vasnwprintf.h"
> ++#else
> ++# include "vasnprintf.h"
> ++#endif
> ++
> ++#include <stdio.h> /* snprintf(), sprintf() */
> ++#include <stdlib.h> /* abort(), malloc(), realloc(), free() */
> ++#include <string.h> /* memcpy(), strlen() */
> ++#include <errno.h> /* errno */
> ++#include <limits.h> /* CHAR_BIT */
> ++#include <float.h> /* DBL_MAX_EXP, LDBL_MAX_EXP */
> ++#if WIDE_CHAR_VERSION
> ++# include "wprintf-parse.h"
> ++#else
> ++# include "printf-parse.h"
> ++#endif
> ++
> ++/* Checked size_t computations. */
> ++#include "xsize.h"
> ++
> ++#ifdef HAVE_WCHAR_T
> ++# ifdef HAVE_WCSLEN
> ++# define local_wcslen wcslen
> ++# else
> ++ /* Solaris 2.5.1 has wcslen() in a separate library libw.so. To avoid
> ++ a dependency towards this library, here is a local substitute.
> ++ Define this substitute only once, even if this file is included
> ++ twice in the same compilation unit. */
> ++# ifndef local_wcslen_defined
> ++# define local_wcslen_defined 1
> ++static size_t
> ++local_wcslen (const wchar_t *s)
> ++{
> ++ const wchar_t *ptr;
> ++
> ++ for (ptr = s; *ptr != (wchar_t) 0; ptr++)
> ++ ;
> ++ return ptr - s;
> ++}
> ++# endif
> ++# endif
> ++#endif
> ++
> ++#if WIDE_CHAR_VERSION
> ++# define VASNPRINTF vasnwprintf
> ++# define CHAR_T wchar_t
> ++# define DIRECTIVE wchar_t_directive
> ++# define DIRECTIVES wchar_t_directives
> ++# define PRINTF_PARSE wprintf_parse
> ++# define USE_SNPRINTF 1
> ++# if HAVE_DECL__SNWPRINTF
> ++ /* On Windows, the function swprintf() has a different signature than
> ++ on Unix; we use the _snwprintf() function instead. */
> ++# define SNPRINTF _snwprintf
> ++# else
> ++ /* Unix. */
> ++# define SNPRINTF swprintf
> ++# endif
> ++#else
> ++# define VASNPRINTF vasnprintf
> ++# define CHAR_T char
> ++# define DIRECTIVE char_directive
> ++# define DIRECTIVES char_directives
> ++# define PRINTF_PARSE printf_parse
> ++# define USE_SNPRINTF (HAVE_DECL__SNPRINTF || HAVE_SNPRINTF)
> ++# if HAVE_DECL__SNPRINTF
> ++ /* Windows. */
> ++# define SNPRINTF _snprintf
> ++# else
> ++ /* Unix. */
> ++# define SNPRINTF snprintf
> ++# endif
> ++#endif
> ++
> ++CHAR_T *
> ++VASNPRINTF (CHAR_T *resultbuf, size_t *lengthp, const CHAR_T *format, va_list args)
> ++{
> ++ DIRECTIVES d;
> ++ arguments a;
> ++
> ++ if (PRINTF_PARSE (format, &d, &a) < 0)
> ++ {
> ++ errno = EINVAL;
> ++ return NULL;
> ++ }
> ++
> ++#define CLEANUP() \
> ++ free (d.dir); \
> ++ if (a.arg) \
> ++ free (a.arg);
> ++
> ++ if (printf_fetchargs (args, &a) < 0)
> ++ {
> ++ CLEANUP ();
> ++ errno = EINVAL;
> ++ return NULL;
> ++ }
> ++
> ++ {
> ++ size_t buf_neededlength;
> ++ CHAR_T *buf;
> ++ CHAR_T *buf_malloced;
> ++ const CHAR_T *cp;
> ++ size_t i;
> ++ DIRECTIVE *dp;
> ++ /* Output string accumulator. */
> ++ CHAR_T *result;
> ++ size_t allocated;
> ++ size_t length;
> ++
> ++ /* Allocate a small buffer that will hold a directive passed to
> ++ sprintf or snprintf. */
> ++ buf_neededlength =
> ++ xsum4 (7, d.max_width_length, d.max_precision_length, 6);
> ++#if HAVE_ALLOCA
> ++ if (buf_neededlength < 4000 / sizeof (CHAR_T))
> ++ {
> ++ buf = (CHAR_T *) alloca (buf_neededlength * sizeof (CHAR_T));
> ++ buf_malloced = NULL;
> ++ }
> ++ else
> ++#endif
> ++ {
> ++ size_t buf_memsize = xtimes (buf_neededlength, sizeof (CHAR_T));
> ++ if (size_overflow_p (buf_memsize))
> ++ goto out_of_memory_1;
> ++ buf = (CHAR_T *) malloc (buf_memsize);
> ++ if (buf == NULL)
> ++ goto out_of_memory_1;
> ++ buf_malloced = buf;
> ++ }
> ++
> ++ if (resultbuf != NULL)
> ++ {
> ++ result = resultbuf;
> ++ allocated = *lengthp;
> ++ }
> ++ else
> ++ {
> ++ result = NULL;
> ++ allocated = 0;
> ++ }
> ++ length = 0;
> ++ /* Invariants:
> ++ result is either == resultbuf or == NULL or malloc-allocated.
> ++ If length > 0, then result != NULL. */
> ++
> ++ /* Ensures that allocated >= needed. Aborts through a jump to
> ++ out_of_memory if needed is SIZE_MAX or otherwise too big. */
> ++#define ENSURE_ALLOCATION(needed) \
> ++ if ((needed) > allocated) \
> ++ { \
> ++ size_t memory_size; \
> ++ CHAR_T *memory; \
> ++ \
> ++ allocated = (allocated > 0 ? xtimes (allocated, 2) : 12); \
> ++ if ((needed) > allocated) \
> ++ allocated = (needed); \
> ++ memory_size = xtimes (allocated, sizeof (CHAR_T)); \
> ++ if (size_overflow_p (memory_size)) \
> ++ goto out_of_memory; \
> ++ if (result == resultbuf || result == NULL) \
> ++ memory = (CHAR_T *) malloc (memory_size); \
> ++ else \
> ++ memory = (CHAR_T *) realloc (result, memory_size); \
> ++ if (memory == NULL) \
> ++ goto out_of_memory; \
> ++ if (result == resultbuf && length > 0) \
> ++ memcpy (memory, result, length * sizeof (CHAR_T)); \
> ++ result = memory; \
> ++ }
> ++
> ++ for (cp = format, i = 0, dp = &d.dir[0]; ; cp = dp->dir_end, i++, dp++)
> ++ {
> ++ if (cp != dp->dir_start)
> ++ {
> ++ size_t n = dp->dir_start - cp;
> ++ size_t augmented_length = xsum (length, n);
> ++
> ++ ENSURE_ALLOCATION (augmented_length);
> ++ memcpy (result + length, cp, n * sizeof (CHAR_T));
> ++ length = augmented_length;
> ++ }
> ++ if (i == d.count)
> ++ break;
> ++
> ++ /* Execute a single directive. */
> ++ if (dp->conversion == '%')
> ++ {
> ++ size_t augmented_length;
> ++
> ++ if (!(dp->arg_index == ARG_NONE))
> ++ abort ();
> ++ augmented_length = xsum (length, 1);
> ++ ENSURE_ALLOCATION (augmented_length);
> ++ result[length] = '%';
> ++ length = augmented_length;
> ++ }
> ++ else
> ++ {
> ++ if (!(dp->arg_index != ARG_NONE))
> ++ abort ();
> ++
> ++ if (dp->conversion == 'n')
> ++ {
> ++ switch (a.arg[dp->arg_index].type)
> ++ {
> ++ case TYPE_COUNT_SCHAR_POINTER:
> ++ *a.arg[dp->arg_index].a.a_count_schar_pointer = length;
> ++ break;
> ++ case TYPE_COUNT_SHORT_POINTER:
> ++ *a.arg[dp->arg_index].a.a_count_short_pointer = length;
> ++ break;
> ++ case TYPE_COUNT_INT_POINTER:
> ++ *a.arg[dp->arg_index].a.a_count_int_pointer = length;
> ++ break;
> ++ case TYPE_COUNT_LONGINT_POINTER:
> ++ *a.arg[dp->arg_index].a.a_count_longint_pointer = length;
> ++ break;
> ++#ifdef HAVE_LONG_LONG
> ++ case TYPE_COUNT_LONGLONGINT_POINTER:
> ++ *a.arg[dp->arg_index].a.a_count_longlongint_pointer = length;
> ++ break;
> ++#endif
> ++ default:
> ++ abort ();
> ++ }
> ++ }
> ++ else
> ++ {
> ++ arg_type type = a.arg[dp->arg_index].type;
> ++ CHAR_T *p;
> ++ unsigned int prefix_count;
> ++ int prefixes[2];
> ++#if !USE_SNPRINTF
> ++ size_t tmp_length;
> ++ CHAR_T tmpbuf[700];
> ++ CHAR_T *tmp;
> ++
> ++ /* Allocate a temporary buffer of sufficient size for calling
> ++ sprintf. */
> ++ {
> ++ size_t width;
> ++ size_t precision;
> ++
> ++ width = 0;
> ++ if (dp->width_start != dp->width_end)
> ++ {
> ++ if (dp->width_arg_index != ARG_NONE)
> ++ {
> ++ int arg;
> ++
> ++ if (!(a.arg[dp->width_arg_index].type == TYPE_INT))
> ++ abort ();
> ++ arg = a.arg[dp->width_arg_index].a.a_int;
> ++ width = (arg < 0 ? (unsigned int) (-arg) : arg);
> ++ }
> ++ else
> ++ {
> ++ const CHAR_T *digitp = dp->width_start;
> ++
> ++ do
> ++ width = xsum (xtimes (width, 10), *digitp++ - '0');
> ++ while (digitp != dp->width_end);
> ++ }
> ++ }
> ++
> ++ precision = 6;
> ++ if (dp->precision_start != dp->precision_end)
> ++ {
> ++ if (dp->precision_arg_index != ARG_NONE)
> ++ {
> ++ int arg;
> ++
> ++ if (!(a.arg[dp->precision_arg_index].type == TYPE_INT))
> ++ abort ();
> ++ arg = a.arg[dp->precision_arg_index].a.a_int;
> ++ precision = (arg < 0 ? 0 : arg);
> ++ }
> ++ else
> ++ {
> ++ const CHAR_T *digitp = dp->precision_start + 1;
> ++
> ++ precision = 0;
> ++ do
> ++ precision = xsum (xtimes (precision, 10), *digitp++ - '0');
> ++ while (digitp != dp->precision_end);
> ++ }
> ++ }
> ++
> ++ switch (dp->conversion)
> ++ {
> ++
> ++ case 'd': case 'i': case 'u':
> ++# ifdef HAVE_LONG_LONG
> ++ if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT)
> ++ tmp_length =
> ++ (unsigned int) (sizeof (unsigned long long) * CHAR_BIT
> ++ * 0.30103 /* binary -> decimal */
> ++ * 2 /* estimate for FLAG_GROUP */
> ++ )
> ++ + 1 /* turn floor into ceil */
> ++ + 1; /* account for leading sign */
> ++ else
> ++# endif
> ++ if (type == TYPE_LONGINT || type == TYPE_ULONGINT)
> ++ tmp_length =
> ++ (unsigned int) (sizeof (unsigned long) * CHAR_BIT
> ++ * 0.30103 /* binary -> decimal */
> ++ * 2 /* estimate for FLAG_GROUP */
> ++ )
> ++ + 1 /* turn floor into ceil */
> ++ + 1; /* account for leading sign */
> ++ else
> ++ tmp_length =
> ++ (unsigned int) (sizeof (unsigned int) * CHAR_BIT
> ++ * 0.30103 /* binary -> decimal */
> ++ * 2 /* estimate for FLAG_GROUP */
> ++ )
> ++ + 1 /* turn floor into ceil */
> ++ + 1; /* account for leading sign */
> ++ break;
> ++
> ++ case 'o':
> ++# ifdef HAVE_LONG_LONG
> ++ if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT)
> ++ tmp_length =
> ++ (unsigned int) (sizeof (unsigned long long) * CHAR_BIT
> ++ * 0.333334 /* binary -> octal */
> ++ )
> ++ + 1 /* turn floor into ceil */
> ++ + 1; /* account for leading sign */
> ++ else
> ++# endif
> ++ if (type == TYPE_LONGINT || type == TYPE_ULONGINT)
> ++ tmp_length =
> ++ (unsigned int) (sizeof (unsigned long) * CHAR_BIT
> ++ * 0.333334 /* binary -> octal */
> ++ )
> ++ + 1 /* turn floor into ceil */
> ++ + 1; /* account for leading sign */
> ++ else
> ++ tmp_length =
> ++ (unsigned int) (sizeof (unsigned int) * CHAR_BIT
> ++ * 0.333334 /* binary -> octal */
> ++ )
> ++ + 1 /* turn floor into ceil */
> ++ + 1; /* account for leading sign */
> ++ break;
> ++
> ++ case 'x': case 'X':
> ++# ifdef HAVE_LONG_LONG
> ++ if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT)
> ++ tmp_length =
> ++ (unsigned int) (sizeof (unsigned long long) * CHAR_BIT
> ++ * 0.25 /* binary -> hexadecimal */
> ++ )
> ++ + 1 /* turn floor into ceil */
> ++ + 2; /* account for leading sign or alternate form */
> ++ else
> ++# endif
> ++ if (type == TYPE_LONGINT || type == TYPE_ULONGINT)
> ++ tmp_length =
> ++ (unsigned int) (sizeof (unsigned long) * CHAR_BIT
> ++ * 0.25 /* binary -> hexadecimal */
> ++ )
> ++ + 1 /* turn floor into ceil */
> ++ + 2; /* account for leading sign or alternate form */
> ++ else
> ++ tmp_length =
> ++ (unsigned int) (sizeof (unsigned int) * CHAR_BIT
> ++ * 0.25 /* binary -> hexadecimal */
> ++ )
> ++ + 1 /* turn floor into ceil */
> ++ + 2; /* account for leading sign or alternate form */
> ++ break;
> ++
> ++ case 'f': case 'F':
> ++# ifdef HAVE_LONG_DOUBLE
> ++ if (type == TYPE_LONGDOUBLE)
> ++ tmp_length =
> ++ (unsigned int) (LDBL_MAX_EXP
> ++ * 0.30103 /* binary -> decimal */
> ++ * 2 /* estimate for FLAG_GROUP */
> ++ )
> ++ + 1 /* turn floor into ceil */
> ++ + 10; /* sign, decimal point etc. */
> ++ else
> ++# endif
> ++ tmp_length =
> ++ (unsigned int) (DBL_MAX_EXP
> ++ * 0.30103 /* binary -> decimal */
> ++ * 2 /* estimate for FLAG_GROUP */
> ++ )
> ++ + 1 /* turn floor into ceil */
> ++ + 10; /* sign, decimal point etc. */
> ++ tmp_length = xsum (tmp_length, precision);
> ++ break;
> ++
> ++ case 'e': case 'E': case 'g': case 'G':
> ++ case 'a': case 'A':
> ++ tmp_length =
> ++ 12; /* sign, decimal point, exponent etc. */
> ++ tmp_length = xsum (tmp_length, precision);
> ++ break;
> ++
> ++ case 'c':
> ++# if defined HAVE_WINT_T && !WIDE_CHAR_VERSION
> ++ if (type == TYPE_WIDE_CHAR)
> ++ tmp_length = MB_CUR_MAX;
> ++ else
> ++# endif
> ++ tmp_length = 1;
> ++ break;
> ++
> ++ case 's':
> ++# ifdef HAVE_WCHAR_T
> ++ if (type == TYPE_WIDE_STRING)
> ++ {
> ++ tmp_length =
> ++ local_wcslen (a.arg[dp->arg_index].a.a_wide_string);
> ++
> ++# if !WIDE_CHAR_VERSION
> ++ tmp_length = xtimes (tmp_length, MB_CUR_MAX);
> ++# endif
> ++ }
> ++ else
> ++# endif
> ++ tmp_length = strlen (a.arg[dp->arg_index].a.a_string);
> ++ break;
> ++
> ++ case 'p':
> ++ tmp_length =
> ++ (unsigned int) (sizeof (void *) * CHAR_BIT
> ++ * 0.25 /* binary -> hexadecimal */
> ++ )
> ++ + 1 /* turn floor into ceil */
> ++ + 2; /* account for leading 0x */
> ++ break;
> ++
> ++ default:
> ++ abort ();
> ++ }
> ++
> ++ if (tmp_length < width)
> ++ tmp_length = width;
> ++
> ++ tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */
> ++ }
> ++
> ++ if (tmp_length <= sizeof (tmpbuf) / sizeof (CHAR_T))
> ++ tmp = tmpbuf;
> ++ else
> ++ {
> ++ size_t tmp_memsize = xtimes (tmp_length, sizeof (CHAR_T));
> ++
> ++ if (size_overflow_p (tmp_memsize))
> ++ /* Overflow, would lead to out of memory. */
> ++ goto out_of_memory;
> ++ tmp = (CHAR_T *) malloc (tmp_memsize);
> ++ if (tmp == NULL)
> ++ /* Out of memory. */
> ++ goto out_of_memory;
> ++ }
> ++#endif
> ++
> ++ /* Construct the format string for calling snprintf or
> ++ sprintf. */
> ++ p = buf;
> ++ *p++ = '%';
> ++ if (dp->flags & FLAG_GROUP)
> ++ *p++ = '\'';
> ++ if (dp->flags & FLAG_LEFT)
> ++ *p++ = '-';
> ++ if (dp->flags & FLAG_SHOWSIGN)
> ++ *p++ = '+';
> ++ if (dp->flags & FLAG_SPACE)
> ++ *p++ = ' ';
> ++ if (dp->flags & FLAG_ALT)
> ++ *p++ = '#';
> ++ if (dp->flags & FLAG_ZERO)
> ++ *p++ = '0';
> ++ if (dp->width_start != dp->width_end)
> ++ {
> ++ size_t n = dp->width_end - dp->width_start;
> ++ memcpy (p, dp->width_start, n * sizeof (CHAR_T));
> ++ p += n;
> ++ }
> ++ if (dp->precision_start != dp->precision_end)
> ++ {
> ++ size_t n = dp->precision_end - dp->precision_start;
> ++ memcpy (p, dp->precision_start, n * sizeof (CHAR_T));
> ++ p += n;
> ++ }
> ++
> ++ switch (type)
> ++ {
> ++#ifdef HAVE_LONG_LONG
> ++ case TYPE_LONGLONGINT:
> ++ case TYPE_ULONGLONGINT:
> ++ *p++ = 'l';
> ++ /*FALLTHROUGH*/
> ++#endif
> ++ case TYPE_LONGINT:
> ++ case TYPE_ULONGINT:
> ++#ifdef HAVE_WINT_T
> ++ case TYPE_WIDE_CHAR:
> ++#endif
> ++#ifdef HAVE_WCHAR_T
> ++ case TYPE_WIDE_STRING:
> ++#endif
> ++ *p++ = 'l';
> ++ break;
> ++#ifdef HAVE_LONG_DOUBLE
> ++ case TYPE_LONGDOUBLE:
> ++ *p++ = 'L';
> ++ break;
> ++#endif
> ++ default:
> ++ break;
> ++ }
> ++ *p = dp->conversion;
> ++#if USE_SNPRINTF
> ++ p[1] = '%';
> ++ p[2] = 'n';
> ++ p[3] = '\0';
> ++#else
> ++ p[1] = '\0';
> ++#endif
> ++
> ++ /* Construct the arguments for calling snprintf or sprintf. */
> ++ prefix_count = 0;
> ++ if (dp->width_arg_index != ARG_NONE)
> ++ {
> ++ if (!(a.arg[dp->width_arg_index].type == TYPE_INT))
> ++ abort ();
> ++ prefixes[prefix_count++] = a.arg[dp->width_arg_index].a.a_int;
> ++ }
> ++ if (dp->precision_arg_index != ARG_NONE)
> ++ {
> ++ if (!(a.arg[dp->precision_arg_index].type == TYPE_INT))
> ++ abort ();
> ++ prefixes[prefix_count++] = a.arg[dp->precision_arg_index].a.a_int;
> ++ }
> ++
> ++#if USE_SNPRINTF
> ++ /* Prepare checking whether snprintf returns the count
> ++ via %n. */
> ++ ENSURE_ALLOCATION (xsum (length, 1));
> ++ result[length] = '\0';
> ++#endif
> ++
> ++ for (;;)
> ++ {
> ++ size_t maxlen;
> ++ int count;
> ++ int retcount;
> ++
> ++ maxlen = allocated - length;
> ++ count = -1;
> ++ retcount = 0;
> ++
> ++#if USE_SNPRINTF
> ++# define SNPRINTF_BUF(arg) \
> ++ switch (prefix_count) \
> ++ { \
> ++ case 0: \
> ++ retcount = SNPRINTF (result + length, maxlen, buf, \
> ++ arg, &count); \
> ++ break; \
> ++ case 1: \
> ++ retcount = SNPRINTF (result + length, maxlen, buf, \
> ++ prefixes[0], arg, &count); \
> ++ break; \
> ++ case 2: \
> ++ retcount = SNPRINTF (result + length, maxlen, buf, \
> ++ prefixes[0], prefixes[1], arg, \
> ++ &count); \
> ++ break; \
> ++ default: \
> ++ abort (); \
> ++ }
> ++#else
> ++# define SNPRINTF_BUF(arg) \
> ++ switch (prefix_count) \
> ++ { \
> ++ case 0: \
> ++ count = sprintf (tmp, buf, arg); \
> ++ break; \
> ++ case 1: \
> ++ count = sprintf (tmp, buf, prefixes[0], arg); \
> ++ break; \
> ++ case 2: \
> ++ count = sprintf (tmp, buf, prefixes[0], prefixes[1],\
> ++ arg); \
> ++ break; \
> ++ default: \
> ++ abort (); \
> ++ }
> ++#endif
> ++
> ++ switch (type)
> ++ {
> ++ case TYPE_SCHAR:
> ++ {
> ++ int arg = a.arg[dp->arg_index].a.a_schar;
> ++ SNPRINTF_BUF (arg);
> ++ }
> ++ break;
> ++ case TYPE_UCHAR:
> ++ {
> ++ unsigned int arg = a.arg[dp->arg_index].a.a_uchar;
> ++ SNPRINTF_BUF (arg);
> ++ }
> ++ break;
> ++ case TYPE_SHORT:
> ++ {
> ++ int arg = a.arg[dp->arg_index].a.a_short;
> ++ SNPRINTF_BUF (arg);
> ++ }
> ++ break;
> ++ case TYPE_USHORT:
> ++ {
> ++ unsigned int arg = a.arg[dp->arg_index].a.a_ushort;
> ++ SNPRINTF_BUF (arg);
> ++ }
> ++ break;
> ++ case TYPE_INT:
> ++ {
> ++ int arg = a.arg[dp->arg_index].a.a_int;
> ++ SNPRINTF_BUF (arg);
> ++ }
> ++ break;
> ++ case TYPE_UINT:
> ++ {
> ++ unsigned int arg = a.arg[dp->arg_index].a.a_uint;
> ++ SNPRINTF_BUF (arg);
> ++ }
> ++ break;
> ++ case TYPE_LONGINT:
> ++ {
> ++ long int arg = a.arg[dp->arg_index].a.a_longint;
> ++ SNPRINTF_BUF (arg);
> ++ }
> ++ break;
> ++ case TYPE_ULONGINT:
> ++ {
> ++ unsigned long int arg = a.arg[dp->arg_index].a.a_ulongint;
> ++ SNPRINTF_BUF (arg);
> ++ }
> ++ break;
> ++#ifdef HAVE_LONG_LONG
> ++ case TYPE_LONGLONGINT:
> ++ {
> ++ long long int arg = a.arg[dp->arg_index].a.a_longlongint;
> ++ SNPRINTF_BUF (arg);
> ++ }
> ++ break;
> ++ case TYPE_ULONGLONGINT:
> ++ {
> ++ unsigned long long int arg = a.arg[dp->arg_index].a.a_ulonglongint;
> ++ SNPRINTF_BUF (arg);
> ++ }
> ++ break;
> ++#endif
> ++ case TYPE_DOUBLE:
> ++ {
> ++ double arg = a.arg[dp->arg_index].a.a_double;
> ++ SNPRINTF_BUF (arg);
> ++ }
> ++ break;
> ++#ifdef HAVE_LONG_DOUBLE
> ++ case TYPE_LONGDOUBLE:
> ++ {
> ++ long double arg = a.arg[dp->arg_index].a.a_longdouble;
> ++ SNPRINTF_BUF (arg);
> ++ }
> ++ break;
> ++#endif
> ++ case TYPE_CHAR:
> ++ {
> ++ int arg = a.arg[dp->arg_index].a.a_char;
> ++ SNPRINTF_BUF (arg);
> ++ }
> ++ break;
> ++#ifdef HAVE_WINT_T
> ++ case TYPE_WIDE_CHAR:
> ++ {
> ++ wint_t arg = a.arg[dp->arg_index].a.a_wide_char;
> ++ SNPRINTF_BUF (arg);
> ++ }
> ++ break;
> ++#endif
> ++ case TYPE_STRING:
> ++ {
> ++ const char *arg = a.arg[dp->arg_index].a.a_string;
> ++ SNPRINTF_BUF (arg);
> ++ }
> ++ break;
> ++#ifdef HAVE_WCHAR_T
> ++ case TYPE_WIDE_STRING:
> ++ {
> ++ const wchar_t *arg = a.arg[dp->arg_index].a.a_wide_string;
> ++ SNPRINTF_BUF (arg);
> ++ }
> ++ break;
> ++#endif
> ++ case TYPE_POINTER:
> ++ {
> ++ void *arg = a.arg[dp->arg_index].a.a_pointer;
> ++ SNPRINTF_BUF (arg);
> ++ }
> ++ break;
> ++ default:
> ++ abort ();
> ++ }
> ++
> ++#if USE_SNPRINTF
> ++ /* Portability: Not all implementations of snprintf()
> ++ are ISO C 99 compliant. Determine the number of
> ++ bytes that snprintf() has produced or would have
> ++ produced. */
> ++ if (count >= 0)
> ++ {
> ++ /* Verify that snprintf() has NUL-terminated its
> ++ result. */
> ++ if (count < maxlen && result[length + count] != '\0')
> ++ abort ();
> ++ /* Portability hack. */
> ++ if (retcount > count)
> ++ count = retcount;
> ++ }
> ++ else
> ++ {
> ++ /* snprintf() doesn't understand the '%n'
> ++ directive. */
> ++ if (p[1] != '\0')
> ++ {
> ++ /* Don't use the '%n' directive; instead, look
> ++ at the snprintf() return value. */
> ++ p[1] = '\0';
> ++ continue;
> ++ }
> ++ else
> ++ {
> ++ /* Look at the snprintf() return value. */
> ++ if (retcount < 0)
> ++ {
> ++ /* HP-UX 10.20 snprintf() is doubly deficient:
> ++ It doesn't understand the '%n' directive,
> ++ *and* it returns -1 (rather than the length
> ++ that would have been required) when the
> ++ buffer is too small. */
> ++ size_t bigger_need =
> ++ xsum (xtimes (allocated, 2), 12);
> ++ ENSURE_ALLOCATION (bigger_need);
> ++ continue;
> ++ }
> ++ else
> ++ count = retcount;
> ++ }
> ++ }
> ++#endif
> ++
> ++ /* Attempt to handle failure. */
> ++ if (count < 0)
> ++ {
> ++ if (!(result == resultbuf || result == NULL))
> ++ free (result);
> ++ if (buf_malloced != NULL)
> ++ free (buf_malloced);
> ++ CLEANUP ();
> ++ errno = EINVAL;
> ++ return NULL;
> ++ }
> ++
> ++#if !USE_SNPRINTF
> ++ if (count >= tmp_length)
> ++ /* tmp_length was incorrectly calculated - fix the
> ++ code above! */
> ++ abort ();
> ++#endif
> ++
> ++ /* Make room for the result. */
> ++ if (count >= maxlen)
> ++ {
> ++ /* Need at least count bytes. But allocate
> ++ proportionally, to avoid looping eternally if
> ++ snprintf() reports a too small count. */
> ++ size_t n =
> ++ xmax (xsum (length, count), xtimes (allocated, 2));
> ++
> ++ ENSURE_ALLOCATION (n);
> ++#if USE_SNPRINTF
> ++ continue;
> ++#endif
> ++ }
> ++
> ++#if USE_SNPRINTF
> ++ /* The snprintf() result did fit. */
> ++#else
> ++ /* Append the sprintf() result. */
> ++ memcpy (result + length, tmp, count * sizeof (CHAR_T));
> ++ if (tmp != tmpbuf)
> ++ free (tmp);
> ++#endif
> ++
> ++ length += count;
> ++ break;
> ++ }
> ++ }
> ++ }
> ++ }
> ++
> ++ /* Add the final NUL. */
> ++ ENSURE_ALLOCATION (xsum (length, 1));
> ++ result[length] = '\0';
> ++
> ++ if (result != resultbuf && length + 1 < allocated)
> ++ {
> ++ /* Shrink the allocated memory if possible. */
> ++ CHAR_T *memory;
> ++
> ++ memory = (CHAR_T *) realloc (result, (length + 1) * sizeof (CHAR_T));
> ++ if (memory != NULL)
> ++ result = memory;
> ++ }
> ++
> ++ if (buf_malloced != NULL)
> ++ free (buf_malloced);
> ++ CLEANUP ();
> ++ *lengthp = length;
> ++ return result;
> ++
> ++ out_of_memory:
> ++ if (!(result == resultbuf || result == NULL))
> ++ free (result);
> ++ if (buf_malloced != NULL)
> ++ free (buf_malloced);
> ++ out_of_memory_1:
> ++ CLEANUP ();
> ++ errno = ENOMEM;
> ++ return NULL;
> ++ }
> ++}
> ++
> ++#undef SNPRINTF
> ++#undef USE_SNPRINTF
> ++#undef PRINTF_PARSE
> ++#undef DIRECTIVES
> ++#undef DIRECTIVE
> ++#undef CHAR_T
> ++#undef VASNPRINTF
> +--- lrzsz-0.12.20.safe/intl/vasnprintf.h 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/intl/vasnprintf.h 2004-09-12 14:40:34.667700664 -0400
> +@@ -0,0 +1,61 @@
> ++/* vsprintf with automatic memory allocation.
> ++ Copyright (C) 2002-2003 Free Software Foundation, Inc.
> ++
> ++ This program is free software; you can redistribute it and/or modify it
> ++ under the terms of the GNU Library General Public License as published
> ++ by the Free Software Foundation; either version 2, or (at your option)
> ++ any later version.
> ++
> ++ This program is distributed in the hope that it will be useful,
> ++ but WITHOUT ANY WARRANTY; without even the implied warranty of
> ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> ++ Library General Public License for more details.
> ++
> ++ You should have received a copy of the GNU Library General Public
> ++ License along with this program; if not, write to the Free Software
> ++ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
> ++ USA. */
> ++
> ++#ifndef _VASNPRINTF_H
> ++#define _VASNPRINTF_H
> ++
> ++/* Get va_list. */
> ++#include <stdarg.h>
> ++
> ++/* Get size_t. */
> ++#include <stddef.h>
> ++
> ++#ifndef __attribute__
> ++/* This feature is available in gcc versions 2.5 and later. */
> ++# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || __STRICT_ANSI__
> ++# define __attribute__(Spec) /* empty */
> ++# endif
> ++/* The __-protected variants of `format' and `printf' attributes
> ++ are accepted by gcc versions 2.6.4 (effectively 2.7) and later. */
> ++# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7)
> ++# define __format__ format
> ++# define __printf__ printf
> ++# endif
> ++#endif
> ++
> ++#ifdef __cplusplus
> ++extern "C" {
> ++#endif
> ++
> ++/* Write formatted output to a string dynamically allocated with malloc().
> ++ You can pass a preallocated buffer for the result in RESULTBUF and its
> ++ size in *LENGTHP; otherwise you pass RESULTBUF = NULL.
> ++ If successful, return the address of the string (this may be = RESULTBUF
> ++ if no dynamic memory allocation was necessary) and set *LENGTHP to the
> ++ number of resulting bytes, excluding the trailing NUL. Upon error, set
> ++ errno and return NULL. */
> ++extern char * asnprintf (char *resultbuf, size_t *lengthp, const char *format, ...)
> ++ __attribute__ ((__format__ (__printf__, 3, 4)));
> ++extern char * vasnprintf (char *resultbuf, size_t *lengthp, const char *format, va_list args)
> ++ __attribute__ ((__format__ (__printf__, 3, 0)));
> ++
> ++#ifdef __cplusplus
> ++}
> ++#endif
> ++
> ++#endif /* _VASNPRINTF_H */
> +--- lrzsz-0.12.20.safe/intl/vasnwprintf.h 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/intl/vasnwprintf.h 2004-09-12 14:40:34.673699752 -0400
> +@@ -0,0 +1,46 @@
> ++/* vswprintf with automatic memory allocation.
> ++ Copyright (C) 2002-2003 Free Software Foundation, Inc.
> ++
> ++ This program is free software; you can redistribute it and/or modify it
> ++ under the terms of the GNU Library General Public License as published
> ++ by the Free Software Foundation; either version 2, or (at your option)
> ++ any later version.
> ++
> ++ This program is distributed in the hope that it will be useful,
> ++ but WITHOUT ANY WARRANTY; without even the implied warranty of
> ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> ++ Library General Public License for more details.
> ++
> ++ You should have received a copy of the GNU Library General Public
> ++ License along with this program; if not, write to the Free Software
> ++ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
> ++ USA. */
> ++
> ++#ifndef _VASNWPRINTF_H
> ++#define _VASNWPRINTF_H
> ++
> ++/* Get va_list. */
> ++#include <stdarg.h>
> ++
> ++/* Get wchar_t, size_t. */
> ++#include <stddef.h>
> ++
> ++#ifdef __cplusplus
> ++extern "C" {
> ++#endif
> ++
> ++/* Write formatted output to a string dynamically allocated with malloc().
> ++ You can pass a preallocated buffer for the result in RESULTBUF and its
> ++ size in *LENGTHP; otherwise you pass RESULTBUF = NULL.
> ++ If successful, return the address of the string (this may be = RESULTBUF
> ++ if no dynamic memory allocation was necessary) and set *LENGTHP to the
> ++ number of resulting bytes, excluding the trailing NUL. Upon error, set
> ++ errno and return NULL. */
> ++extern wchar_t * asnwprintf (wchar_t *resultbuf, size_t *lengthp, const wchar_t *format, ...);
> ++extern wchar_t * vasnwprintf (wchar_t *resultbuf, size_t *lengthp, const wchar_t *format, va_list args);
> ++
> ++#ifdef __cplusplus
> ++}
> ++#endif
> ++
> ++#endif /* _VASNWPRINTF_H */
> +--- lrzsz-0.12.20.safe/intl/VERSION 1998-04-26 09:22:37.000000000 -0400
> ++++ lrzsz-0.12.20/intl/VERSION 2004-09-12 14:40:34.679698840 -0400
> +@@ -1 +1 @@
> +-GNU gettext library from gettext-0.10.32
> ++GNU gettext library from gettext-0.14.1
> +--- lrzsz-0.12.20.safe/intl/wprintf-parse.h 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/intl/wprintf-parse.h 2004-09-12 14:40:34.695696408 -0400
> +@@ -0,0 +1,75 @@
> ++/* Parse printf format string.
> ++ Copyright (C) 1999, 2002-2003 Free Software Foundation, Inc.
> ++
> ++ This program is free software; you can redistribute it and/or modify it
> ++ under the terms of the GNU Library General Public License as published
> ++ by the Free Software Foundation; either version 2, or (at your option)
> ++ any later version.
> ++
> ++ This program is distributed in the hope that it will be useful,
> ++ but WITHOUT ANY WARRANTY; without even the implied warranty of
> ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> ++ Library General Public License for more details.
> ++
> ++ You should have received a copy of the GNU Library General Public
> ++ License along with this program; if not, write to the Free Software
> ++ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
> ++ USA. */
> ++
> ++#ifndef _WPRINTF_PARSE_H
> ++#define _WPRINTF_PARSE_H
> ++
> ++#include "printf-args.h"
> ++
> ++
> ++/* Flags */
> ++#define FLAG_GROUP 1 /* ' flag */
> ++#define FLAG_LEFT 2 /* - flag */
> ++#define FLAG_SHOWSIGN 4 /* + flag */
> ++#define FLAG_SPACE 8 /* space flag */
> ++#define FLAG_ALT 16 /* # flag */
> ++#define FLAG_ZERO 32
> ++
> ++/* arg_index value indicating that no argument is consumed. */
> ++#define ARG_NONE (~(size_t)0)
> ++
> ++/* A parsed directive. */
> ++typedef struct
> ++{
> ++ const wchar_t* dir_start;
> ++ const wchar_t* dir_end;
> ++ int flags;
> ++ const wchar_t* width_start;
> ++ const wchar_t* width_end;
> ++ size_t width_arg_index;
> ++ const wchar_t* precision_start;
> ++ const wchar_t* precision_end;
> ++ size_t precision_arg_index;
> ++ wchar_t conversion; /* d i o u x X f e E g G c s p n U % but not C S */
> ++ size_t arg_index;
> ++}
> ++wchar_t_directive;
> ++
> ++/* A parsed format string. */
> ++typedef struct
> ++{
> ++ size_t count;
> ++ wchar_t_directive *dir;
> ++ size_t max_width_length;
> ++ size_t max_precision_length;
> ++}
> ++wchar_t_directives;
> ++
> ++
> ++/* Parses the format string. Fills in the number N of directives, and fills
> ++ in directives[0], ..., directives[N-1], and sets directives[N].dir_start
> ++ to the end of the format string. Also fills in the arg_type fields of the
> ++ arguments and the needed count of arguments. */
> ++#ifdef STATIC
> ++STATIC
> ++#else
> ++extern
> ++#endif
> ++int wprintf_parse (const wchar_t *format, wchar_t_directives *d, arguments *a);
> ++
> ++#endif /* _WPRINTF_PARSE_H */
> +--- lrzsz-0.12.20.safe/intl/xopen-msg.sed 1998-04-26 09:20:52.000000000 -0400
> ++++ lrzsz-0.12.20/intl/xopen-msg.sed 1969-12-31 19:00:00.000000000 -0500
> +@@ -1,104 +0,0 @@
> +-# po2msg.sed - Convert Uniforum style .po file to X/Open style .msg file
> +-# Copyright (C) 1995 Free Software Foundation, Inc.
> +-# Ulrich Drepper <drepper at gnu.ai.mit.edu>, 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
> +-# the Free Software Foundation; either version 2, or (at your option)
> +-# any later version.
> +-#
> +-# This program is distributed in the hope that it will be useful,
> +-# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> +-# GNU General Public License for more details.
> +-#
> +-# 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.
> +-#
> +-#
> +-# The first directive in the .msg should be the definition of the
> +-# message set number. We use always set number 1.
> +-#
> +-1 {
> +- i\
> +-$set 1 # Automatically created by po2msg.sed
> +- h
> +- s/.*/0/
> +- x
> +-}
> +-#
> +-# We copy all comments into the .msg file. Perhaps they can help.
> +-#
> +-/^#/ s/^#[ ]*/$ /p
> +-#
> +-# We copy the original message as a comment into the .msg file.
> +-#
> +-/^msgid/ {
> +-# Does not work now
> +-# /"$/! {
> +-# s/\\$//
> +-# s/$/ ... (more lines following)"/
> +-# }
> +- s/^msgid[ ]*"\(.*\)"$/$ Original Message: \1/
> +- p
> +-}
> +-#
> +-# The .msg file contains, other then the .po file, only the translations
> +-# but each given a unique ID. Starting from 1 and incrementing by 1 for
> +-# each message we assign them to the messages.
> +-# It is important that the .po file used to generate the cat-id-tbl.c file
> +-# (with po-to-tbl) is the same as the one used here. (At least the order
> +-# of declarations must not be changed.)
> +-#
> +-/^msgstr/ {
> +- s/msgstr[ ]*"\(.*\)"/\1/
> +- x
> +-# The following nice solution is by
> +-# Bruno <Haible at ma2s2.mathematik.uni-karlsruhe.de>
> +- td
> +-# Increment a decimal number in pattern space.
> +-# First hide trailing `9' digits.
> +- :d
> +- s/9\(_*\)$/_\1/
> +- td
> +-# Assure at least one digit is available.
> +- s/^\(_*\)$/0\1/
> +-# Increment the last digit.
> +- s/8\(_*\)$/9\1/
> +- s/7\(_*\)$/8\1/
> +- s/6\(_*\)$/7\1/
> +- s/5\(_*\)$/6\1/
> +- s/4\(_*\)$/5\1/
> +- s/3\(_*\)$/4\1/
> +- s/2\(_*\)$/3\1/
> +- s/1\(_*\)$/2\1/
> +- s/0\(_*\)$/1\1/
> +-# Convert the hidden `9' digits to `0's.
> +- s/_/0/g
> +- x
> +-# Bring the line in the format `<number> <message>'
> +- G
> +- s/^[^\n]*$/& /
> +- s/\(.*\)\n\([0-9]*\)/\2 \1/
> +-# Clear flag from last substitution.
> +- tb
> +-# Append the next line.
> +- :b
> +- N
> +-# Look whether second part is a continuation line.
> +- s/\(.*\n\)"\(.*\)"/\1\2/
> +-# Yes, then branch.
> +- ta
> +- P
> +- D
> +-# Note that `D' includes a jump to the start!!
> +-# We found a continuation line. But before printing insert '\'.
> +- :a
> +- s/\(.*\)\(\n.*\)/\1\\\2/
> +- P
> +-# We cannot use the sed command `D' here
> +- s/.*\n\(.*\)/\1/
> +- tb
> +-}
> +-d
> +--- lrzsz-0.12.20.safe/intl/xsize.h 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/intl/xsize.h 2004-09-12 14:40:34.700695648 -0400
> +@@ -0,0 +1,109 @@
> ++/* xsize.h -- Checked size_t computations.
> ++
> ++ Copyright (C) 2003 Free Software Foundation, Inc.
> ++
> ++ This program is free software; you can redistribute it and/or modify it
> ++ under the terms of the GNU Library General Public License as published
> ++ by the Free Software Foundation; either version 2, or (at your option)
> ++ any later version.
> ++
> ++ This program is distributed in the hope that it will be useful,
> ++ but WITHOUT ANY WARRANTY; without even the implied warranty of
> ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> ++ Library General Public License for more details.
> ++
> ++ You should have received a copy of the GNU Library General Public
> ++ License along with this program; if not, write to the Free Software
> ++ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
> ++ USA. */
> ++
> ++#ifndef _XSIZE_H
> ++#define _XSIZE_H
> ++
> ++/* Get size_t. */
> ++#include <stddef.h>
> ++
> ++/* Get SIZE_MAX. */
> ++#include <limits.h>
> ++#if HAVE_STDINT_H
> ++# include <stdint.h>
> ++#endif
> ++
> ++/* The size of memory objects is often computed through expressions of
> ++ type size_t. Example:
> ++ void* p = malloc (header_size + n * element_size).
> ++ These computations can lead to overflow. When this happens, malloc()
> ++ returns a piece of memory that is way too small, and the program then
> ++ crashes while attempting to fill the memory.
> ++ To avoid this, the functions and macros in this file check for overflow.
> ++ The convention is that SIZE_MAX represents overflow.
> ++ malloc (SIZE_MAX) is not guaranteed to fail -- think of a malloc
> ++ implementation that uses mmap --, it's recommended to use size_overflow_p()
> ++ or size_in_bounds_p() before invoking malloc().
> ++ The example thus becomes:
> ++ size_t size = xsum (header_size, xtimes (n, element_size));
> ++ void *p = (size_in_bounds_p (size) ? malloc (size) : NULL);
> ++*/
> ++
> ++/* Convert an arbitrary value >= 0 to type size_t. */
> ++#define xcast_size_t(N) \
> ++ ((N) <= SIZE_MAX ? (size_t) (N) : SIZE_MAX)
> ++
> ++/* Sum of two sizes, with overflow check. */
> ++static inline size_t
> ++#if __GNUC__ >= 3
> ++__attribute__ ((__pure__))
> ++#endif
> ++xsum (size_t size1, size_t size2)
> ++{
> ++ size_t sum = size1 + size2;
> ++ return (sum >= size1 ? sum : SIZE_MAX);
> ++}
> ++
> ++/* Sum of three sizes, with overflow check. */
> ++static inline size_t
> ++#if __GNUC__ >= 3
> ++__attribute__ ((__pure__))
> ++#endif
> ++xsum3 (size_t size1, size_t size2, size_t size3)
> ++{
> ++ return xsum (xsum (size1, size2), size3);
> ++}
> ++
> ++/* Sum of four sizes, with overflow check. */
> ++static inline size_t
> ++#if __GNUC__ >= 3
> ++__attribute__ ((__pure__))
> ++#endif
> ++xsum4 (size_t size1, size_t size2, size_t size3, size_t size4)
> ++{
> ++ return xsum (xsum (xsum (size1, size2), size3), size4);
> ++}
> ++
> ++/* Maximum of two sizes, with overflow check. */
> ++static inline size_t
> ++#if __GNUC__ >= 3
> ++__attribute__ ((__pure__))
> ++#endif
> ++xmax (size_t size1, size_t size2)
> ++{
> ++ /* No explicit check is needed here, because for any n:
> ++ max (SIZE_MAX, n) == SIZE_MAX and max (n, SIZE_MAX) == SIZE_MAX. */
> ++ return (size1 >= size2 ? size1 : size2);
> ++}
> ++
> ++/* Multiplication of a count with an element size, with overflow check.
> ++ The count must be >= 0 and the element size must be > 0.
> ++ This is a macro, not an inline function, so that it works correctly even
> ++ when N is of a wider tupe and N > SIZE_MAX. */
> ++#define xtimes(N, ELSIZE) \
> ++ ((N) <= SIZE_MAX / (ELSIZE) ? (size_t) (N) * (ELSIZE) : SIZE_MAX)
> ++
> ++/* Check for overflow. */
> ++#define size_overflow_p(SIZE) \
> ++ ((SIZE) == SIZE_MAX)
> ++/* Check against overflow. */
> ++#define size_in_bounds_p(SIZE) \
> ++ ((SIZE) != SIZE_MAX)
> ++
> ++#endif /* _XSIZE_H */
> +--- lrzsz-0.12.20.safe/m4/ChangeLog 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/m4/ChangeLog 2004-09-12 14:40:35.054641840 -0400
> +@@ -0,0 +1,32 @@
> ++2004-09-12 gettextize <bug-gnu-gettext at gnu.org>
> ++
> ++ * codeset.m4: New file, from gettext-0.14.1.
> ++ * gettext.m4: New file, from gettext-0.14.1.
> ++ * glibc21.m4: New file, from gettext-0.14.1.
> ++ * iconv.m4: New file, from gettext-0.14.1.
> ++ * intdiv0.m4: New file, from gettext-0.14.1.
> ++ * intmax.m4: New file, from gettext-0.14.1.
> ++ * inttypes.m4: New file, from gettext-0.14.1.
> ++ * inttypes_h.m4: New file, from gettext-0.14.1.
> ++ * inttypes-pri.m4: New file, from gettext-0.14.1.
> ++ * isc-posix.m4: New file, from gettext-0.14.1.
> ++ * lcmessage.m4: New file, from gettext-0.14.1.
> ++ * lib-ld.m4: New file, from gettext-0.14.1.
> ++ * lib-link.m4: New file, from gettext-0.14.1.
> ++ * lib-prefix.m4: New file, from gettext-0.14.1.
> ++ * longdouble.m4: New file, from gettext-0.14.1.
> ++ * longlong.m4: New file, from gettext-0.14.1.
> ++ * nls.m4: New file, from gettext-0.14.1.
> ++ * po.m4: New file, from gettext-0.14.1.
> ++ * printf-posix.m4: New file, from gettext-0.14.1.
> ++ * progtest.m4: New file, from gettext-0.14.1.
> ++ * signed.m4: New file, from gettext-0.14.1.
> ++ * size_max.m4: New file, from gettext-0.14.1.
> ++ * stdint_h.m4: New file, from gettext-0.14.1.
> ++ * uintmax_t.m4: New file, from gettext-0.14.1.
> ++ * ulonglong.m4: New file, from gettext-0.14.1.
> ++ * wchar_t.m4: New file, from gettext-0.14.1.
> ++ * wint_t.m4: New file, from gettext-0.14.1.
> ++ * xsize.m4: New file, from gettext-0.14.1.
> ++ * Makefile.am: New file.
> ++
> +--- lrzsz-0.12.20.safe/m4/codeset.m4 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/m4/codeset.m4 2004-09-12 14:40:34.820677408 -0400
> +@@ -0,0 +1,23 @@
> ++# codeset.m4 serial AM1 (gettext-0.10.40)
> ++dnl Copyright (C) 2000-2002 Free Software Foundation, Inc.
> ++dnl This file is free software, distributed under the terms of the GNU
> ++dnl General Public License. As a special exception to the GNU General
> ++dnl Public License, this file may be distributed as part of a program
> ++dnl that contains a configuration script generated by Autoconf, under
> ++dnl the same distribution terms as the rest of that program.
> ++
> ++dnl From Bruno Haible.
> ++
> ++AC_DEFUN([AM_LANGINFO_CODESET],
> ++[
> ++ AC_CACHE_CHECK([for nl_langinfo and CODESET], am_cv_langinfo_codeset,
> ++ [AC_TRY_LINK([#include <langinfo.h>],
> ++ [char* cs = nl_langinfo(CODESET);],
> ++ am_cv_langinfo_codeset=yes,
> ++ am_cv_langinfo_codeset=no)
> ++ ])
> ++ if test $am_cv_langinfo_codeset = yes; then
> ++ AC_DEFINE(HAVE_LANGINFO_CODESET, 1,
> ++ [Define if you have <langinfo.h> and nl_langinfo(CODESET).])
> ++ fi
> ++])
> +--- lrzsz-0.12.20.safe/m4/gettext.m4 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/m4/gettext.m4 2004-09-12 14:40:34.826676496 -0400
> +@@ -0,0 +1,487 @@
> ++# gettext.m4 serial 28 (gettext-0.13)
> ++dnl Copyright (C) 1995-2003 Free Software Foundation, Inc.
> ++dnl This file is free software, distributed under the terms of the GNU
> ++dnl General Public License. As a special exception to the GNU General
> ++dnl Public License, this file may be distributed as part of a program
> ++dnl that contains a configuration script generated by Autoconf, under
> ++dnl the same distribution terms as the rest of that program.
> ++dnl
> ++dnl This file can can be used in projects which are not available under
> ++dnl the GNU General Public License or the GNU Library General Public
> ++dnl License but which still want to provide support for the GNU gettext
> ++dnl functionality.
> ++dnl Please note that the actual code of the GNU gettext library is covered
> ++dnl by the GNU Library General Public License, and the rest of the GNU
> ++dnl gettext package package is covered by the GNU General Public License.
> ++dnl They are *not* in the public domain.
> ++
> ++dnl Authors:
> ++dnl Ulrich Drepper <drepper at cygnus.com>, 1995-2000.
> ++dnl Bruno Haible <haible at clisp.cons.org>, 2000-2003.
> ++
> ++dnl Macro to add for using GNU gettext.
> ++
> ++dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]).
> ++dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The
> ++dnl default (if it is not specified or empty) is 'no-libtool'.
> ++dnl INTLSYMBOL should be 'external' for packages with no intl directory,
> ++dnl and 'no-libtool' or 'use-libtool' for packages with an intl directory.
> ++dnl If INTLSYMBOL is 'use-libtool', then a libtool library
> ++dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static,
> ++dnl depending on --{enable,disable}-{shared,static} and on the presence of
> ++dnl AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library
> ++dnl $(top_builddir)/intl/libintl.a will be created.
> ++dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext
> ++dnl implementations (in libc or libintl) without the ngettext() function
> ++dnl will be ignored. If NEEDSYMBOL is specified and is
> ++dnl 'need-formatstring-macros', then GNU gettext implementations that don't
> ++dnl support the ISO C 99 <inttypes.h> formatstring macros will be ignored.
> ++dnl INTLDIR is used to find the intl libraries. If empty,
> ++dnl the value `$(top_builddir)/intl/' is used.
> ++dnl
> ++dnl The result of the configuration is one of three cases:
> ++dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled
> ++dnl and used.
> ++dnl Catalog format: GNU --> install in $(datadir)
> ++dnl Catalog extension: .mo after installation, .gmo in source tree
> ++dnl 2) GNU gettext has been found in the system's C library.
> ++dnl Catalog format: GNU --> install in $(datadir)
> ++dnl Catalog extension: .mo after installation, .gmo in source tree
> ++dnl 3) No internationalization, always use English msgid.
> ++dnl Catalog format: none
> ++dnl Catalog extension: none
> ++dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur.
> ++dnl The use of .gmo is historical (it was needed to avoid overwriting the
> ++dnl GNU format catalogs when building on a platform with an X/Open gettext),
> ++dnl but we keep it in order not to force irrelevant filename changes on the
> ++dnl maintainers.
> ++dnl
> ++AC_DEFUN([AM_GNU_GETTEXT],
> ++[
> ++ dnl Argument checking.
> ++ ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], ,
> ++ [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT
> ++])])])])])
> ++ ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], ,
> ++ [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT
> ++])])])])
> ++ define(gt_included_intl, ifelse([$1], [external], [no], [yes]))
> ++ define(gt_libtool_suffix_prefix, ifelse([$1], [use-libtool], [l], []))
> ++
> ++ AC_REQUIRE([AM_PO_SUBDIRS])dnl
> ++ ifelse(gt_included_intl, yes, [
> ++ AC_REQUIRE([AM_INTL_SUBDIR])dnl
> ++ ])
> ++
> ++ dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
> ++ AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
> ++ AC_REQUIRE([AC_LIB_RPATH])
> ++
> ++ dnl Sometimes libintl requires libiconv, so first search for libiconv.
> ++ dnl Ideally we would do this search only after the
> ++ dnl if test "$USE_NLS" = "yes"; then
> ++ dnl if test "$gt_cv_func_gnugettext_libc" != "yes"; then
> ++ dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT
> ++ dnl the configure script would need to contain the same shell code
> ++ dnl again, outside any 'if'. There are two solutions:
> ++ dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'.
> ++ dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE.
> ++ dnl Since AC_PROVIDE_IFELSE is only in autoconf >= 2.52 and not
> ++ dnl documented, we avoid it.
> ++ ifelse(gt_included_intl, yes, , [
> ++ AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
> ++ ])
> ++
> ++ dnl Set USE_NLS.
> ++ AM_NLS
> ++
> ++ ifelse(gt_included_intl, yes, [
> ++ BUILD_INCLUDED_LIBINTL=no
> ++ USE_INCLUDED_LIBINTL=no
> ++ ])
> ++ LIBINTL=
> ++ LTLIBINTL=
> ++ POSUB=
> ++
> ++ dnl If we use NLS figure out what method
> ++ if test "$USE_NLS" = "yes"; then
> ++ gt_use_preinstalled_gnugettext=no
> ++ ifelse(gt_included_intl, yes, [
> ++ AC_MSG_CHECKING([whether included gettext is requested])
> ++ AC_ARG_WITH(included-gettext,
> ++ [ --with-included-gettext use the GNU gettext library included here],
> ++ nls_cv_force_use_gnu_gettext=$withval,
> ++ nls_cv_force_use_gnu_gettext=no)
> ++ AC_MSG_RESULT($nls_cv_force_use_gnu_gettext)
> ++
> ++ nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext"
> ++ if test "$nls_cv_force_use_gnu_gettext" != "yes"; then
> ++ ])
> ++ dnl User does not insist on using GNU NLS library. Figure out what
> ++ dnl to use. If GNU gettext is available we use this. Else we have
> ++ dnl to fall back to GNU NLS library.
> ++
> ++ dnl Add a version number to the cache macros.
> ++ define([gt_api_version], ifelse([$2], [need-formatstring-macros], 3, ifelse([$2], [need-ngettext], 2, 1)))
> ++ define([gt_cv_func_gnugettext_libc], [gt_cv_func_gnugettext]gt_api_version[_libc])
> ++ define([gt_cv_func_gnugettext_libintl], [gt_cv_func_gnugettext]gt_api_version[_libintl])
> ++
> ++ AC_CACHE_CHECK([for GNU gettext in libc], gt_cv_func_gnugettext_libc,
> ++ [AC_TRY_LINK([#include <libintl.h>
> ++]ifelse([$2], [need-formatstring-macros],
> ++[#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
> ++#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
> ++#endif
> ++changequote(,)dnl
> ++typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
> ++changequote([,])dnl
> ++], [])[extern int _nl_msg_cat_cntr;
> ++extern int *_nl_domain_bindings;],
> ++ [bindtextdomain ("", "");
> ++return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_domain_bindings],
> ++ gt_cv_func_gnugettext_libc=yes,
> ++ gt_cv_func_gnugettext_libc=no)])
> ++
> ++ if test "$gt_cv_func_gnugettext_libc" != "yes"; then
> ++ dnl Sometimes libintl requires libiconv, so first search for libiconv.
> ++ ifelse(gt_included_intl, yes, , [
> ++ AM_ICONV_LINK
> ++ ])
> ++ dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL
> ++ dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv])
> ++ dnl because that would add "-liconv" to LIBINTL and LTLIBINTL
> ++ dnl even if libiconv doesn't exist.
> ++ AC_LIB_LINKFLAGS_BODY([intl])
> ++ AC_CACHE_CHECK([for GNU gettext in libintl],
> ++ gt_cv_func_gnugettext_libintl,
> ++ [gt_save_CPPFLAGS="$CPPFLAGS"
> ++ CPPFLAGS="$CPPFLAGS $INCINTL"
> ++ gt_save_LIBS="$LIBS"
> ++ LIBS="$LIBS $LIBINTL"
> ++ dnl Now see whether libintl exists and does not depend on libiconv.
> ++ AC_TRY_LINK([#include <libintl.h>
> ++]ifelse([$2], [need-formatstring-macros],
> ++[#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
> ++#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
> ++#endif
> ++changequote(,)dnl
> ++typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
> ++changequote([,])dnl
> ++], [])[extern int _nl_msg_cat_cntr;
> ++extern
> ++#ifdef __cplusplus
> ++"C"
> ++#endif
> ++const char *_nl_expand_alias ();],
> ++ [bindtextdomain ("", "");
> ++return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_expand_alias (0)],
> ++ gt_cv_func_gnugettext_libintl=yes,
> ++ gt_cv_func_gnugettext_libintl=no)
> ++ dnl Now see whether libintl exists and depends on libiconv.
> ++ if test "$gt_cv_func_gnugettext_libintl" != yes && test -n "$LIBICONV"; then
> ++ LIBS="$LIBS $LIBICONV"
> ++ AC_TRY_LINK([#include <libintl.h>
> ++]ifelse([$2], [need-formatstring-macros],
> ++[#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
> ++#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
> ++#endif
> ++changequote(,)dnl
> ++typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
> ++changequote([,])dnl
> ++], [])[extern int _nl_msg_cat_cntr;
> ++extern
> ++#ifdef __cplusplus
> ++"C"
> ++#endif
> ++const char *_nl_expand_alias ();],
> ++ [bindtextdomain ("", "");
> ++return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_expand_alias (0)],
> ++ [LIBINTL="$LIBINTL $LIBICONV"
> ++ LTLIBINTL="$LTLIBINTL $LTLIBICONV"
> ++ gt_cv_func_gnugettext_libintl=yes
> ++ ])
> ++ fi
> ++ CPPFLAGS="$gt_save_CPPFLAGS"
> ++ LIBS="$gt_save_LIBS"])
> ++ fi
> ++
> ++ dnl If an already present or preinstalled GNU gettext() is found,
> ++ dnl use it. But if this macro is used in GNU gettext, and GNU
> ++ dnl gettext is already preinstalled in libintl, we update this
> ++ dnl libintl. (Cf. the install rule in intl/Makefile.in.)
> ++ if test "$gt_cv_func_gnugettext_libc" = "yes" \
> ++ || { test "$gt_cv_func_gnugettext_libintl" = "yes" \
> ++ && test "$PACKAGE" != gettext-runtime \
> ++ && test "$PACKAGE" != gettext-tools; }; then
> ++ gt_use_preinstalled_gnugettext=yes
> ++ else
> ++ dnl Reset the values set by searching for libintl.
> ++ LIBINTL=
> ++ LTLIBINTL=
> ++ INCINTL=
> ++ fi
> ++
> ++ ifelse(gt_included_intl, yes, [
> ++ if test "$gt_use_preinstalled_gnugettext" != "yes"; then
> ++ dnl GNU gettext is not found in the C library.
> ++ dnl Fall back on included GNU gettext library.
> ++ nls_cv_use_gnu_gettext=yes
> ++ fi
> ++ fi
> ++
> ++ if test "$nls_cv_use_gnu_gettext" = "yes"; then
> ++ dnl Mark actions used to generate GNU NLS library.
> ++ BUILD_INCLUDED_LIBINTL=yes
> ++ USE_INCLUDED_LIBINTL=yes
> ++ LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV"
> ++ LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV"
> ++ LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'`
> ++ fi
> ++
> ++ if test "$gt_use_preinstalled_gnugettext" = "yes" \
> ++ || test "$nls_cv_use_gnu_gettext" = "yes"; then
> ++ dnl Mark actions to use GNU gettext tools.
> ++ CATOBJEXT=.gmo
> ++ fi
> ++ ])
> ++
> ++ if test "$gt_use_preinstalled_gnugettext" = "yes" \
> ++ || test "$nls_cv_use_gnu_gettext" = "yes"; then
> ++ AC_DEFINE(ENABLE_NLS, 1,
> ++ [Define to 1 if translation of program messages to the user's native language
> ++ is requested.])
> ++ else
> ++ USE_NLS=no
> ++ fi
> ++ fi
> ++
> ++ AC_MSG_CHECKING([whether to use NLS])
> ++ AC_MSG_RESULT([$USE_NLS])
> ++ if test "$USE_NLS" = "yes"; then
> ++ AC_MSG_CHECKING([where the gettext function comes from])
> ++ if test "$gt_use_preinstalled_gnugettext" = "yes"; then
> ++ if test "$gt_cv_func_gnugettext_libintl" = "yes"; then
> ++ gt_source="external libintl"
> ++ else
> ++ gt_source="libc"
> ++ fi
> ++ else
> ++ gt_source="included intl directory"
> ++ fi
> ++ AC_MSG_RESULT([$gt_source])
> ++ fi
> ++
> ++ if test "$USE_NLS" = "yes"; then
> ++
> ++ if test "$gt_use_preinstalled_gnugettext" = "yes"; then
> ++ if test "$gt_cv_func_gnugettext_libintl" = "yes"; then
> ++ AC_MSG_CHECKING([how to link with libintl])
> ++ AC_MSG_RESULT([$LIBINTL])
> ++ AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL])
> ++ fi
> ++
> ++ dnl For backward compatibility. Some packages may be using this.
> ++ AC_DEFINE(HAVE_GETTEXT, 1,
> ++ [Define if the GNU gettext() function is already present or preinstalled.])
> ++ AC_DEFINE(HAVE_DCGETTEXT, 1,
> ++ [Define if the GNU dcgettext() function is already present or preinstalled.])
> ++ fi
> ++
> ++ dnl We need to process the po/ directory.
> ++ POSUB=po
> ++ fi
> ++
> ++ ifelse(gt_included_intl, yes, [
> ++ dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL
> ++ dnl to 'yes' because some of the testsuite requires it.
> ++ if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then
> ++ BUILD_INCLUDED_LIBINTL=yes
> ++ fi
> ++
> ++ dnl Make all variables we use known to autoconf.
> ++ AC_SUBST(BUILD_INCLUDED_LIBINTL)
> ++ AC_SUBST(USE_INCLUDED_LIBINTL)
> ++ AC_SUBST(CATOBJEXT)
> ++
> ++ dnl For backward compatibility. Some configure.ins may be using this.
> ++ nls_cv_header_intl=
> ++ nls_cv_header_libgt=
> ++
> ++ dnl For backward compatibility. Some Makefiles may be using this.
> ++ DATADIRNAME=share
> ++ AC_SUBST(DATADIRNAME)
> ++
> ++ dnl For backward compatibility. Some Makefiles may be using this.
> ++ INSTOBJEXT=.mo
> ++ AC_SUBST(INSTOBJEXT)
> ++
> ++ dnl For backward compatibility. Some Makefiles may be using this.
> ++ GENCAT=gencat
> ++ AC_SUBST(GENCAT)
> ++
> ++ dnl For backward compatibility. Some Makefiles may be using this.
> ++ if test "$USE_INCLUDED_LIBINTL" = yes; then
> ++ INTLOBJS="\$(GETTOBJS)"
> ++ fi
> ++ AC_SUBST(INTLOBJS)
> ++
> ++ dnl Enable libtool support if the surrounding package wishes it.
> ++ INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix
> ++ AC_SUBST(INTL_LIBTOOL_SUFFIX_PREFIX)
> ++ ])
> ++
> ++ dnl For backward compatibility. Some Makefiles may be using this.
> ++ INTLLIBS="$LIBINTL"
> ++ AC_SUBST(INTLLIBS)
> ++
> ++ dnl Make all documented variables known to autoconf.
> ++ AC_SUBST(LIBINTL)
> ++ AC_SUBST(LTLIBINTL)
> ++ AC_SUBST(POSUB)
> ++])
> ++
> ++
> ++dnl Checks for all prerequisites of the intl subdirectory,
> ++dnl except for INTL_LIBTOOL_SUFFIX_PREFIX (and possibly LIBTOOL), INTLOBJS,
> ++dnl USE_INCLUDED_LIBINTL, BUILD_INCLUDED_LIBINTL.
> ++AC_DEFUN([AM_INTL_SUBDIR],
> ++[
> ++ AC_REQUIRE([AC_PROG_INSTALL])dnl
> ++ AC_REQUIRE([AM_MKINSTALLDIRS])dnl
> ++ AC_REQUIRE([AC_PROG_CC])dnl
> ++ AC_REQUIRE([AC_CANONICAL_HOST])dnl
> ++ AC_REQUIRE([AC_PROG_RANLIB])dnl
> ++ AC_REQUIRE([AC_ISC_POSIX])dnl
> ++ AC_REQUIRE([AC_HEADER_STDC])dnl
> ++ AC_REQUIRE([AC_C_CONST])dnl
> ++ AC_REQUIRE([bh_C_SIGNED])dnl
> ++ AC_REQUIRE([AC_C_INLINE])dnl
> ++ AC_REQUIRE([AC_TYPE_OFF_T])dnl
> ++ AC_REQUIRE([AC_TYPE_SIZE_T])dnl
> ++ AC_REQUIRE([jm_AC_TYPE_LONG_LONG])dnl
> ++ AC_REQUIRE([gt_TYPE_LONGDOUBLE])dnl
> ++ AC_REQUIRE([gt_TYPE_WCHAR_T])dnl
> ++ AC_REQUIRE([gt_TYPE_WINT_T])dnl
> ++ AC_REQUIRE([jm_AC_HEADER_INTTYPES_H])
> ++ AC_REQUIRE([jm_AC_HEADER_STDINT_H])
> ++ AC_REQUIRE([gt_TYPE_INTMAX_T])
> ++ AC_REQUIRE([gt_PRINTF_POSIX])
> ++ AC_REQUIRE([AC_FUNC_ALLOCA])dnl
> ++ AC_REQUIRE([AC_FUNC_MMAP])dnl
> ++ AC_REQUIRE([jm_GLIBC21])dnl
> ++ AC_REQUIRE([gt_INTDIV0])dnl
> ++ AC_REQUIRE([jm_AC_TYPE_UINTMAX_T])dnl
> ++ AC_REQUIRE([gt_HEADER_INTTYPES_H])dnl
> ++ AC_REQUIRE([gt_INTTYPES_PRI])dnl
> ++ AC_REQUIRE([gl_XSIZE])dnl
> ++
> ++ AC_CHECK_TYPE([ptrdiff_t], ,
> ++ [AC_DEFINE([ptrdiff_t], [long],
> ++ [Define as the type of the result of subtracting two pointers, if the system doesn't define it.])
> ++ ])
> ++ AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h stddef.h \
> ++stdlib.h string.h unistd.h sys/param.h])
> ++ AC_CHECK_FUNCS([asprintf fwprintf getcwd getegid geteuid getgid getuid \
> ++mempcpy munmap putenv setenv setlocale snprintf stpcpy strcasecmp strdup \
> ++strtoul tsearch wcslen __argz_count __argz_stringify __argz_next \
> ++__fsetlocking])
> ++
> ++ dnl Use the _snprintf function only if it is declared (because on NetBSD it
> ++ dnl is defined as a weak alias of snprintf; we prefer to use the latter).
> ++ gt_CHECK_DECL(_snprintf, [#include <stdio.h>])
> ++ gt_CHECK_DECL(_snwprintf, [#include <stdio.h>])
> ++
> ++ dnl Use the *_unlocked functions only if they are declared.
> ++ dnl (because some of them were defined without being declared in Solaris
> ++ dnl 2.5.1 but were removed in Solaris 2.6, whereas we want binaries built
> ++ dnl on Solaris 2.5.1 to run on Solaris 2.6).
> ++ dnl Don't use AC_CHECK_DECLS because it isn't supported in autoconf-2.13.
> ++ gt_CHECK_DECL(feof_unlocked, [#include <stdio.h>])
> ++ gt_CHECK_DECL(fgets_unlocked, [#include <stdio.h>])
> ++ gt_CHECK_DECL(getc_unlocked, [#include <stdio.h>])
> ++
> ++ case $gt_cv_func_printf_posix in
> ++ *yes) HAVE_POSIX_PRINTF=1 ;;
> ++ *) HAVE_POSIX_PRINTF=0 ;;
> ++ esac
> ++ AC_SUBST([HAVE_POSIX_PRINTF])
> ++ if test "$ac_cv_func_asprintf" = yes; then
> ++ HAVE_ASPRINTF=1
> ++ else
> ++ HAVE_ASPRINTF=0
> ++ fi
> ++ AC_SUBST([HAVE_ASPRINTF])
> ++ if test "$ac_cv_func_snprintf" = yes; then
> ++ HAVE_SNPRINTF=1
> ++ else
> ++ HAVE_SNPRINTF=0
> ++ fi
> ++ AC_SUBST([HAVE_SNPRINTF])
> ++ if test "$ac_cv_func_wprintf" = yes; then
> ++ HAVE_WPRINTF=1
> ++ else
> ++ HAVE_WPRINTF=0
> ++ fi
> ++ AC_SUBST([HAVE_WPRINTF])
> ++
> ++ AM_ICONV
> ++ AM_LANGINFO_CODESET
> ++ if test $ac_cv_header_locale_h = yes; then
> ++ AM_LC_MESSAGES
> ++ fi
> ++
> ++ dnl intl/plural.c is generated from intl/plural.y. It requires bison,
> ++ dnl because plural.y uses bison specific features. It requires at least
> ++ dnl bison-1.26 because earlier versions generate a plural.c that doesn't
> ++ dnl compile.
> ++ dnl bison is only needed for the maintainer (who touches plural.y). But in
> ++ dnl order to avoid separate Makefiles or --enable-maintainer-mode, we put
> ++ dnl the rule in general Makefile. Now, some people carelessly touch the
> ++ dnl files or have a broken "make" program, hence the plural.c rule will
> ++ dnl sometimes fire. To avoid an error, defines BISON to ":" if it is not
> ++ dnl present or too old.
> ++ AC_CHECK_PROGS([INTLBISON], [bison])
> ++ if test -z "$INTLBISON"; then
> ++ ac_verc_fail=yes
> ++ else
> ++ dnl Found it, now check the version.
> ++ AC_MSG_CHECKING([version of bison])
> ++changequote(<<,>>)dnl
> ++ ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'`
> ++ case $ac_prog_version in
> ++ '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
> ++ 1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*)
> ++changequote([,])dnl
> ++ ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
> ++ *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
> ++ esac
> ++ AC_MSG_RESULT([$ac_prog_version])
> ++ fi
> ++ if test $ac_verc_fail = yes; then
> ++ INTLBISON=:
> ++ fi
> ++])
> ++
> ++
> ++dnl gt_CHECK_DECL(FUNC, INCLUDES)
> ++dnl Check whether a function is declared.
> ++AC_DEFUN([gt_CHECK_DECL],
> ++[
> ++ AC_CACHE_CHECK([whether $1 is declared], ac_cv_have_decl_$1,
> ++ [AC_TRY_COMPILE([$2], [
> ++#ifndef $1
> ++ char *p = (char *) $1;
> ++#endif
> ++], ac_cv_have_decl_$1=yes, ac_cv_have_decl_$1=no)])
> ++ if test $ac_cv_have_decl_$1 = yes; then
> ++ gt_value=1
> ++ else
> ++ gt_value=0
> ++ fi
> ++ AC_DEFINE_UNQUOTED([HAVE_DECL_]translit($1, [a-z], [A-Z]), [$gt_value],
> ++ [Define to 1 if you have the declaration of `$1', and to 0 if you don't.])
> ++])
> ++
> ++
> ++dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version])
> ++AC_DEFUN([AM_GNU_GETTEXT_VERSION], [])
> +--- lrzsz-0.12.20.safe/m4/glibc21.m4 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/m4/glibc21.m4 2004-09-12 14:40:34.833675432 -0400
> +@@ -0,0 +1,32 @@
> ++# glibc21.m4 serial 2 (fileutils-4.1.3, gettext-0.10.40)
> ++dnl Copyright (C) 2000-2002 Free Software Foundation, Inc.
> ++dnl This file is free software, distributed under the terms of the GNU
> ++dnl General Public License. As a special exception to the GNU General
> ++dnl Public License, this file may be distributed as part of a program
> ++dnl that contains a configuration script generated by Autoconf, under
> ++dnl the same distribution terms as the rest of that program.
> ++
> ++# Test for the GNU C Library, version 2.1 or newer.
> ++# From Bruno Haible.
> ++
> ++AC_DEFUN([jm_GLIBC21],
> ++ [
> ++ AC_CACHE_CHECK(whether we are using the GNU C Library 2.1 or newer,
> ++ ac_cv_gnu_library_2_1,
> ++ [AC_EGREP_CPP([Lucky GNU user],
> ++ [
> ++#include <features.h>
> ++#ifdef __GNU_LIBRARY__
> ++ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2)
> ++ Lucky GNU user
> ++ #endif
> ++#endif
> ++ ],
> ++ ac_cv_gnu_library_2_1=yes,
> ++ ac_cv_gnu_library_2_1=no)
> ++ ]
> ++ )
> ++ AC_SUBST(GLIBC21)
> ++ GLIBC21="$ac_cv_gnu_library_2_1"
> ++ ]
> ++)
> +--- lrzsz-0.12.20.safe/m4/iconv.m4 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/m4/iconv.m4 2004-09-12 14:40:34.839674520 -0400
> +@@ -0,0 +1,103 @@
> ++# iconv.m4 serial AM4 (gettext-0.11.3)
> ++dnl Copyright (C) 2000-2002 Free Software Foundation, Inc.
> ++dnl This file is free software, distributed under the terms of the GNU
> ++dnl General Public License. As a special exception to the GNU General
> ++dnl Public License, this file may be distributed as part of a program
> ++dnl that contains a configuration script generated by Autoconf, under
> ++dnl the same distribution terms as the rest of that program.
> ++
> ++dnl From Bruno Haible.
> ++
> ++AC_DEFUN([AM_ICONV_LINKFLAGS_BODY],
> ++[
> ++ dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
> ++ AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
> ++ AC_REQUIRE([AC_LIB_RPATH])
> ++
> ++ dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
> ++ dnl accordingly.
> ++ AC_LIB_LINKFLAGS_BODY([iconv])
> ++])
> ++
> ++AC_DEFUN([AM_ICONV_LINK],
> ++[
> ++ dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and
> ++ dnl those with the standalone portable GNU libiconv installed).
> ++
> ++ dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
> ++ dnl accordingly.
> ++ AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
> ++
> ++ dnl Add $INCICONV to CPPFLAGS before performing the following checks,
> ++ dnl because if the user has installed libiconv and not disabled its use
> ++ dnl via --without-libiconv-prefix, he wants to use it. The first
> ++ dnl AC_TRY_LINK will then fail, the second AC_TRY_LINK will succeed.
> ++ am_save_CPPFLAGS="$CPPFLAGS"
> ++ AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV])
> ++
> ++ AC_CACHE_CHECK(for iconv, am_cv_func_iconv, [
> ++ am_cv_func_iconv="no, consider installing GNU libiconv"
> ++ am_cv_lib_iconv=no
> ++ AC_TRY_LINK([#include <stdlib.h>
> ++#include <iconv.h>],
> ++ [iconv_t cd = iconv_open("","");
> ++ iconv(cd,NULL,NULL,NULL,NULL);
> ++ iconv_close(cd);],
> ++ am_cv_func_iconv=yes)
> ++ if test "$am_cv_func_iconv" != yes; then
> ++ am_save_LIBS="$LIBS"
> ++ LIBS="$LIBS $LIBICONV"
> ++ AC_TRY_LINK([#include <stdlib.h>
> ++#include <iconv.h>],
> ++ [iconv_t cd = iconv_open("","");
> ++ iconv(cd,NULL,NULL,NULL,NULL);
> ++ iconv_close(cd);],
> ++ am_cv_lib_iconv=yes
> ++ am_cv_func_iconv=yes)
> ++ LIBS="$am_save_LIBS"
> ++ fi
> ++ ])
> ++ if test "$am_cv_func_iconv" = yes; then
> ++ AC_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function.])
> ++ fi
> ++ if test "$am_cv_lib_iconv" = yes; then
> ++ AC_MSG_CHECKING([how to link with libiconv])
> ++ AC_MSG_RESULT([$LIBICONV])
> ++ else
> ++ dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV
> ++ dnl either.
> ++ CPPFLAGS="$am_save_CPPFLAGS"
> ++ LIBICONV=
> ++ LTLIBICONV=
> ++ fi
> ++ AC_SUBST(LIBICONV)
> ++ AC_SUBST(LTLIBICONV)
> ++])
> ++
> ++AC_DEFUN([AM_ICONV],
> ++[
> ++ AM_ICONV_LINK
> ++ if test "$am_cv_func_iconv" = yes; then
> ++ AC_MSG_CHECKING([for iconv declaration])
> ++ AC_CACHE_VAL(am_cv_proto_iconv, [
> ++ AC_TRY_COMPILE([
> ++#include <stdlib.h>
> ++#include <iconv.h>
> ++extern
> ++#ifdef __cplusplus
> ++"C"
> ++#endif
> ++#if defined(__STDC__) || defined(__cplusplus)
> ++size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
> ++#else
> ++size_t iconv();
> ++#endif
> ++], [], am_cv_proto_iconv_arg1="", am_cv_proto_iconv_arg1="const")
> ++ am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"])
> ++ am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
> ++ AC_MSG_RESULT([$]{ac_t:-
> ++ }[$]am_cv_proto_iconv)
> ++ AC_DEFINE_UNQUOTED(ICONV_CONST, $am_cv_proto_iconv_arg1,
> ++ [Define as const if the declaration of iconv() needs const.])
> ++ fi
> ++])
> +--- lrzsz-0.12.20.safe/m4/intdiv0.m4 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/m4/intdiv0.m4 2004-09-12 14:40:34.845673608 -0400
> +@@ -0,0 +1,72 @@
> ++# intdiv0.m4 serial 1 (gettext-0.11.3)
> ++dnl Copyright (C) 2002 Free Software Foundation, Inc.
> ++dnl This file is free software, distributed under the terms of the GNU
> ++dnl General Public License. As a special exception to the GNU General
> ++dnl Public License, this file may be distributed as part of a program
> ++dnl that contains a configuration script generated by Autoconf, under
> ++dnl the same distribution terms as the rest of that program.
> ++
> ++dnl From Bruno Haible.
> ++
> ++AC_DEFUN([gt_INTDIV0],
> ++[
> ++ AC_REQUIRE([AC_PROG_CC])dnl
> ++ AC_REQUIRE([AC_CANONICAL_HOST])dnl
> ++
> ++ AC_CACHE_CHECK([whether integer division by zero raises SIGFPE],
> ++ gt_cv_int_divbyzero_sigfpe,
> ++ [
> ++ AC_TRY_RUN([
> ++#include <stdlib.h>
> ++#include <signal.h>
> ++
> ++static void
> ++#ifdef __cplusplus
> ++sigfpe_handler (int sig)
> ++#else
> ++sigfpe_handler (sig) int sig;
> ++#endif
> ++{
> ++ /* Exit with code 0 if SIGFPE, with code 1 if any other signal. */
> ++ exit (sig != SIGFPE);
> ++}
> ++
> ++int x = 1;
> ++int y = 0;
> ++int z;
> ++int nan;
> ++
> ++int main ()
> ++{
> ++ signal (SIGFPE, sigfpe_handler);
> ++/* IRIX and AIX (when "xlc -qcheck" is used) yield signal SIGTRAP. */
> ++#if (defined (__sgi) || defined (_AIX)) && defined (SIGTRAP)
> ++ signal (SIGTRAP, sigfpe_handler);
> ++#endif
> ++/* Linux/SPARC yields signal SIGILL. */
> ++#if defined (__sparc__) && defined (__linux__)
> ++ signal (SIGILL, sigfpe_handler);
> ++#endif
> ++
> ++ z = x / y;
> ++ nan = y / y;
> ++ exit (1);
> ++}
> ++], gt_cv_int_divbyzero_sigfpe=yes, gt_cv_int_divbyzero_sigfpe=no,
> ++ [
> ++ # Guess based on the CPU.
> ++ case "$host_cpu" in
> ++ alpha* | i[34567]86 | m68k | s390*)
> ++ gt_cv_int_divbyzero_sigfpe="guessing yes";;
> ++ *)
> ++ gt_cv_int_divbyzero_sigfpe="guessing no";;
> ++ esac
> ++ ])
> ++ ])
> ++ case "$gt_cv_int_divbyzero_sigfpe" in
> ++ *yes) value=1;;
> ++ *) value=0;;
> ++ esac
> ++ AC_DEFINE_UNQUOTED(INTDIV0_RAISES_SIGFPE, $value,
> ++ [Define if integer division by zero raises signal SIGFPE.])
> ++])
> +--- lrzsz-0.12.20.safe/m4/intmax.m4 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/m4/intmax.m4 2004-09-12 14:40:34.855672088 -0400
> +@@ -0,0 +1,32 @@
> ++# intmax.m4 serial 1 (gettext-0.12)
> ++dnl Copyright (C) 2002-2003 Free Software Foundation, Inc.
> ++dnl This file is free software, distributed under the terms of the GNU
> ++dnl General Public License. As a special exception to the GNU General
> ++dnl Public License, this file may be distributed as part of a program
> ++dnl that contains a configuration script generated by Autoconf, under
> ++dnl the same distribution terms as the rest of that program.
> ++
> ++dnl From Bruno Haible.
> ++dnl Test whether the system has the 'intmax_t' type, but don't attempt to
> ++dnl find a replacement if it is lacking.
> ++
> ++AC_DEFUN([gt_TYPE_INTMAX_T],
> ++[
> ++ AC_REQUIRE([jm_AC_HEADER_INTTYPES_H])
> ++ AC_REQUIRE([jm_AC_HEADER_STDINT_H])
> ++ AC_CACHE_CHECK(for intmax_t, gt_cv_c_intmax_t,
> ++ [AC_TRY_COMPILE([
> ++#include <stddef.h>
> ++#include <stdlib.h>
> ++#if HAVE_STDINT_H_WITH_UINTMAX
> ++#include <stdint.h>
> ++#endif
> ++#if HAVE_INTTYPES_H_WITH_UINTMAX
> ++#include <inttypes.h>
> ++#endif
> ++], [intmax_t x = -1;], gt_cv_c_intmax_t=yes, gt_cv_c_intmax_t=no)])
> ++ if test $gt_cv_c_intmax_t = yes; then
> ++ AC_DEFINE(HAVE_INTMAX_T, 1,
> ++ [Define if you have the 'intmax_t' type in <stdint.h> or <inttypes.h>.])
> ++ fi
> ++])
> +--- lrzsz-0.12.20.safe/m4/inttypes_h.m4 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/m4/inttypes_h.m4 2004-09-12 14:40:34.868670112 -0400
> +@@ -0,0 +1,28 @@
> ++# inttypes_h.m4 serial 5 (gettext-0.12)
> ++dnl Copyright (C) 1997-2003 Free Software Foundation, Inc.
> ++dnl This file is free software, distributed under the terms of the GNU
> ++dnl General Public License. As a special exception to the GNU General
> ++dnl Public License, this file may be distributed as part of a program
> ++dnl that contains a configuration script generated by Autoconf, under
> ++dnl the same distribution terms as the rest of that program.
> ++
> ++dnl From Paul Eggert.
> ++
> ++# Define HAVE_INTTYPES_H_WITH_UINTMAX if <inttypes.h> exists,
> ++# doesn't clash with <sys/types.h>, and declares uintmax_t.
> ++
> ++AC_DEFUN([jm_AC_HEADER_INTTYPES_H],
> ++[
> ++ AC_CACHE_CHECK([for inttypes.h], jm_ac_cv_header_inttypes_h,
> ++ [AC_TRY_COMPILE(
> ++ [#include <sys/types.h>
> ++#include <inttypes.h>],
> ++ [uintmax_t i = (uintmax_t) -1;],
> ++ jm_ac_cv_header_inttypes_h=yes,
> ++ jm_ac_cv_header_inttypes_h=no)])
> ++ if test $jm_ac_cv_header_inttypes_h = yes; then
> ++ AC_DEFINE_UNQUOTED(HAVE_INTTYPES_H_WITH_UINTMAX, 1,
> ++ [Define if <inttypes.h> exists, doesn't clash with <sys/types.h>,
> ++ and declares uintmax_t. ])
> ++ fi
> ++])
> +--- lrzsz-0.12.20.safe/m4/inttypes.m4 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/m4/inttypes.m4 2004-09-12 14:40:34.861671176 -0400
> +@@ -0,0 +1,27 @@
> ++# inttypes.m4 serial 1 (gettext-0.11.4)
> ++dnl Copyright (C) 1997-2002 Free Software Foundation, Inc.
> ++dnl This file is free software, distributed under the terms of the GNU
> ++dnl General Public License. As a special exception to the GNU General
> ++dnl Public License, this file may be distributed as part of a program
> ++dnl that contains a configuration script generated by Autoconf, under
> ++dnl the same distribution terms as the rest of that program.
> ++
> ++dnl From Paul Eggert.
> ++
> ++# Define HAVE_INTTYPES_H if <inttypes.h> exists and doesn't clash with
> ++# <sys/types.h>.
> ++
> ++AC_DEFUN([gt_HEADER_INTTYPES_H],
> ++[
> ++ AC_CACHE_CHECK([for inttypes.h], gt_cv_header_inttypes_h,
> ++ [
> ++ AC_TRY_COMPILE(
> ++ [#include <sys/types.h>
> ++#include <inttypes.h>],
> ++ [], gt_cv_header_inttypes_h=yes, gt_cv_header_inttypes_h=no)
> ++ ])
> ++ if test $gt_cv_header_inttypes_h = yes; then
> ++ AC_DEFINE_UNQUOTED(HAVE_INTTYPES_H, 1,
> ++ [Define if <inttypes.h> exists and doesn't clash with <sys/types.h>.])
> ++ fi
> ++])
> +--- lrzsz-0.12.20.safe/m4/inttypes-pri.m4 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/m4/inttypes-pri.m4 2004-09-12 14:40:34.874669200 -0400
> +@@ -0,0 +1,32 @@
> ++# inttypes-pri.m4 serial 1 (gettext-0.11.4)
> ++dnl Copyright (C) 1997-2002 Free Software Foundation, Inc.
> ++dnl This file is free software, distributed under the terms of the GNU
> ++dnl General Public License. As a special exception to the GNU General
> ++dnl Public License, this file may be distributed as part of a program
> ++dnl that contains a configuration script generated by Autoconf, under
> ++dnl the same distribution terms as the rest of that program.
> ++
> ++dnl From Bruno Haible.
> ++
> ++# Define PRI_MACROS_BROKEN if <inttypes.h> exists and defines the PRI*
> ++# macros to non-string values. This is the case on AIX 4.3.3.
> ++
> ++AC_DEFUN([gt_INTTYPES_PRI],
> ++[
> ++ AC_REQUIRE([gt_HEADER_INTTYPES_H])
> ++ if test $gt_cv_header_inttypes_h = yes; then
> ++ AC_CACHE_CHECK([whether the inttypes.h PRIxNN macros are broken],
> ++ gt_cv_inttypes_pri_broken,
> ++ [
> ++ AC_TRY_COMPILE([#include <inttypes.h>
> ++#ifdef PRId32
> ++char *p = PRId32;
> ++#endif
> ++], [], gt_cv_inttypes_pri_broken=no, gt_cv_inttypes_pri_broken=yes)
> ++ ])
> ++ fi
> ++ if test "$gt_cv_inttypes_pri_broken" = yes; then
> ++ AC_DEFINE_UNQUOTED(PRI_MACROS_BROKEN, 1,
> ++ [Define if <inttypes.h> exists and defines unusable PRI* macros.])
> ++ fi
> ++])
> +--- lrzsz-0.12.20.safe/m4/isc-posix.m4 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/m4/isc-posix.m4 2004-09-12 14:40:34.885667528 -0400
> +@@ -0,0 +1,26 @@
> ++# isc-posix.m4 serial 2 (gettext-0.11.2)
> ++dnl Copyright (C) 1995-2002 Free Software Foundation, Inc.
> ++dnl This file is free software, distributed under the terms of the GNU
> ++dnl General Public License. As a special exception to the GNU General
> ++dnl Public License, this file may be distributed as part of a program
> ++dnl that contains a configuration script generated by Autoconf, under
> ++dnl the same distribution terms as the rest of that program.
> ++
> ++# This file is not needed with autoconf-2.53 and newer. Remove it in 2005.
> ++
> ++# This test replaces the one in autoconf.
> ++# Currently this macro should have the same name as the autoconf macro
> ++# because gettext's gettext.m4 (distributed in the automake package)
> ++# still uses it. Otherwise, the use in gettext.m4 makes autoheader
> ++# give these diagnostics:
> ++# configure.in:556: AC_TRY_COMPILE was called before AC_ISC_POSIX
> ++# configure.in:556: AC_TRY_RUN was called before AC_ISC_POSIX
> ++
> ++undefine([AC_ISC_POSIX])
> ++
> ++AC_DEFUN([AC_ISC_POSIX],
> ++ [
> ++ dnl This test replaces the obsolescent AC_ISC_POSIX kludge.
> ++ AC_CHECK_LIB(cposix, strerror, [LIBS="$LIBS -lcposix"])
> ++ ]
> ++)
> +--- lrzsz-0.12.20.safe/m4/lcmessage.m4 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/m4/lcmessage.m4 2004-09-12 14:40:34.902664944 -0400
> +@@ -0,0 +1,32 @@
> ++# lcmessage.m4 serial 3 (gettext-0.11.3)
> ++dnl Copyright (C) 1995-2002 Free Software Foundation, Inc.
> ++dnl This file is free software, distributed under the terms of the GNU
> ++dnl General Public License. As a special exception to the GNU General
> ++dnl Public License, this file may be distributed as part of a program
> ++dnl that contains a configuration script generated by Autoconf, under
> ++dnl the same distribution terms as the rest of that program.
> ++dnl
> ++dnl This file can can be used in projects which are not available under
> ++dnl the GNU General Public License or the GNU Library General Public
> ++dnl License but which still want to provide support for the GNU gettext
> ++dnl functionality.
> ++dnl Please note that the actual code of the GNU gettext library is covered
> ++dnl by the GNU Library General Public License, and the rest of the GNU
> ++dnl gettext package package is covered by the GNU General Public License.
> ++dnl They are *not* in the public domain.
> ++
> ++dnl Authors:
> ++dnl Ulrich Drepper <drepper at cygnus.com>, 1995.
> ++
> ++# Check whether LC_MESSAGES is available in <locale.h>.
> ++
> ++AC_DEFUN([AM_LC_MESSAGES],
> ++[
> ++ AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES,
> ++ [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES],
> ++ am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)])
> ++ if test $am_cv_val_LC_MESSAGES = yes; then
> ++ AC_DEFINE(HAVE_LC_MESSAGES, 1,
> ++ [Define if your <locale.h> file defines LC_MESSAGES.])
> ++ fi
> ++])
> +--- lrzsz-0.12.20.safe/m4/lib-ld.m4 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/m4/lib-ld.m4 2004-09-12 14:40:34.908664032 -0400
> +@@ -0,0 +1,112 @@
> ++# lib-ld.m4 serial 3 (gettext-0.13)
> ++dnl Copyright (C) 1996-2003 Free Software Foundation, Inc.
> ++dnl This file is free software, distributed under the terms of the GNU
> ++dnl General Public License. As a special exception to the GNU General
> ++dnl Public License, this file may be distributed as part of a program
> ++dnl that contains a configuration script generated by Autoconf, under
> ++dnl the same distribution terms as the rest of that program.
> ++
> ++dnl Subroutines of libtool.m4,
> ++dnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision
> ++dnl with libtool.m4.
> ++
> ++dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no.
> ++AC_DEFUN([AC_LIB_PROG_LD_GNU],
> ++[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], acl_cv_prog_gnu_ld,
> ++[# I'd rather use --version here, but apparently some GNU ld's only accept -v.
> ++case `$LD -v 2>&1 </dev/null` in
> ++*GNU* | *'with BFD'*)
> ++ acl_cv_prog_gnu_ld=yes ;;
> ++*)
> ++ acl_cv_prog_gnu_ld=no ;;
> ++esac])
> ++with_gnu_ld=$acl_cv_prog_gnu_ld
> ++])
> ++
> ++dnl From libtool-1.4. Sets the variable LD.
> ++AC_DEFUN([AC_LIB_PROG_LD],
> ++[AC_ARG_WITH(gnu-ld,
> ++[ --with-gnu-ld assume the C compiler uses GNU ld [default=no]],
> ++test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no)
> ++AC_REQUIRE([AC_PROG_CC])dnl
> ++AC_REQUIRE([AC_CANONICAL_HOST])dnl
> ++# Prepare PATH_SEPARATOR.
> ++# The user is always right.
> ++if test "${PATH_SEPARATOR+set}" != set; then
> ++ echo "#! /bin/sh" >conf$$.sh
> ++ echo "exit 0" >>conf$$.sh
> ++ chmod +x conf$$.sh
> ++ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
> ++ PATH_SEPARATOR=';'
> ++ else
> ++ PATH_SEPARATOR=:
> ++ fi
> ++ rm -f conf$$.sh
> ++fi
> ++ac_prog=ld
> ++if test "$GCC" = yes; then
> ++ # Check if gcc -print-prog-name=ld gives a path.
> ++ AC_MSG_CHECKING([for ld used by GCC])
> ++ case $host in
> ++ *-*-mingw*)
> ++ # gcc leaves a trailing carriage return which upsets mingw
> ++ ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
> ++ *)
> ++ ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
> ++ esac
> ++ case $ac_prog in
> ++ # Accept absolute paths.
> ++ [[\\/]* | [A-Za-z]:[\\/]*)]
> ++ [re_direlt='/[^/][^/]*/\.\./']
> ++ # Canonicalize the path of ld
> ++ ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
> ++ while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
> ++ ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
> ++ done
> ++ test -z "$LD" && LD="$ac_prog"
> ++ ;;
> ++ "")
> ++ # If it fails, then pretend we aren't using GCC.
> ++ ac_prog=ld
> ++ ;;
> ++ *)
> ++ # If it is relative, then search for the first ld in PATH.
> ++ with_gnu_ld=unknown
> ++ ;;
> ++ esac
> ++elif test "$with_gnu_ld" = yes; then
> ++ AC_MSG_CHECKING([for GNU ld])
> ++else
> ++ AC_MSG_CHECKING([for non-GNU ld])
> ++fi
> ++AC_CACHE_VAL(acl_cv_path_LD,
> ++[if test -z "$LD"; then
> ++ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
> ++ for ac_dir in $PATH; do
> ++ test -z "$ac_dir" && ac_dir=.
> ++ if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
> ++ acl_cv_path_LD="$ac_dir/$ac_prog"
> ++ # Check to see if the program is GNU ld. I'd rather use --version,
> ++ # but apparently some GNU ld's only accept -v.
> ++ # Break only if it was the GNU/non-GNU ld that we prefer.
> ++ case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in
> ++ *GNU* | *'with BFD'*)
> ++ test "$with_gnu_ld" != no && break ;;
> ++ *)
> ++ test "$with_gnu_ld" != yes && break ;;
> ++ esac
> ++ fi
> ++ done
> ++ IFS="$ac_save_ifs"
> ++else
> ++ acl_cv_path_LD="$LD" # Let the user override the test with a path.
> ++fi])
> ++LD="$acl_cv_path_LD"
> ++if test -n "$LD"; then
> ++ AC_MSG_RESULT($LD)
> ++else
> ++ AC_MSG_RESULT(no)
> ++fi
> ++test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
> ++AC_LIB_PROG_LD_GNU
> ++])
> +--- lrzsz-0.12.20.safe/m4/lib-link.m4 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/m4/lib-link.m4 2004-09-12 14:40:34.914663120 -0400
> +@@ -0,0 +1,551 @@
> ++# lib-link.m4 serial 4 (gettext-0.12)
> ++dnl Copyright (C) 2001-2003 Free Software Foundation, Inc.
> ++dnl This file is free software, distributed under the terms of the GNU
> ++dnl General Public License. As a special exception to the GNU General
> ++dnl Public License, this file may be distributed as part of a program
> ++dnl that contains a configuration script generated by Autoconf, under
> ++dnl the same distribution terms as the rest of that program.
> ++
> ++dnl From Bruno Haible.
> ++
> ++dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and
> ++dnl the libraries corresponding to explicit and implicit dependencies.
> ++dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and
> ++dnl augments the CPPFLAGS variable.
> ++AC_DEFUN([AC_LIB_LINKFLAGS],
> ++[
> ++ AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
> ++ AC_REQUIRE([AC_LIB_RPATH])
> ++ define([Name],[translit([$1],[./-], [___])])
> ++ define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
> ++ [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
> ++ AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [
> ++ AC_LIB_LINKFLAGS_BODY([$1], [$2])
> ++ ac_cv_lib[]Name[]_libs="$LIB[]NAME"
> ++ ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME"
> ++ ac_cv_lib[]Name[]_cppflags="$INC[]NAME"
> ++ ])
> ++ LIB[]NAME="$ac_cv_lib[]Name[]_libs"
> ++ LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs"
> ++ INC[]NAME="$ac_cv_lib[]Name[]_cppflags"
> ++ AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
> ++ AC_SUBST([LIB]NAME)
> ++ AC_SUBST([LTLIB]NAME)
> ++ dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the
> ++ dnl results of this search when this library appears as a dependency.
> ++ HAVE_LIB[]NAME=yes
> ++ undefine([Name])
> ++ undefine([NAME])
> ++])
> ++
> ++dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode)
> ++dnl searches for libname and the libraries corresponding to explicit and
> ++dnl implicit dependencies, together with the specified include files and
> ++dnl the ability to compile and link the specified testcode. If found, it
> ++dnl sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} and
> ++dnl LTLIB${NAME} variables and augments the CPPFLAGS variable, and
> ++dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs
> ++dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty.
> ++AC_DEFUN([AC_LIB_HAVE_LINKFLAGS],
> ++[
> ++ AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
> ++ AC_REQUIRE([AC_LIB_RPATH])
> ++ define([Name],[translit([$1],[./-], [___])])
> ++ define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
> ++ [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
> ++
> ++ dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME
> ++ dnl accordingly.
> ++ AC_LIB_LINKFLAGS_BODY([$1], [$2])
> ++
> ++ dnl Add $INC[]NAME to CPPFLAGS before performing the following checks,
> ++ dnl because if the user has installed lib[]Name and not disabled its use
> ++ dnl via --without-lib[]Name-prefix, he wants to use it.
> ++ ac_save_CPPFLAGS="$CPPFLAGS"
> ++ AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
> ++
> ++ AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [
> ++ ac_save_LIBS="$LIBS"
> ++ LIBS="$LIBS $LIB[]NAME"
> ++ AC_TRY_LINK([$3], [$4], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name=no])
> ++ LIBS="$ac_save_LIBS"
> ++ ])
> ++ if test "$ac_cv_lib[]Name" = yes; then
> ++ HAVE_LIB[]NAME=yes
> ++ AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the $1 library.])
> ++ AC_MSG_CHECKING([how to link with lib[]$1])
> ++ AC_MSG_RESULT([$LIB[]NAME])
> ++ else
> ++ HAVE_LIB[]NAME=no
> ++ dnl If $LIB[]NAME didn't lead to a usable library, we don't need
> ++ dnl $INC[]NAME either.
> ++ CPPFLAGS="$ac_save_CPPFLAGS"
> ++ LIB[]NAME=
> ++ LTLIB[]NAME=
> ++ fi
> ++ AC_SUBST([HAVE_LIB]NAME)
> ++ AC_SUBST([LIB]NAME)
> ++ AC_SUBST([LTLIB]NAME)
> ++ undefine([Name])
> ++ undefine([NAME])
> ++])
> ++
> ++dnl Determine the platform dependent parameters needed to use rpath:
> ++dnl libext, shlibext, hardcode_libdir_flag_spec, hardcode_libdir_separator,
> ++dnl hardcode_direct, hardcode_minus_L.
> ++AC_DEFUN([AC_LIB_RPATH],
> ++[
> ++ AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS
> ++ AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld
> ++ AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host
> ++ AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir
> ++ AC_CACHE_CHECK([for shared library run path origin], acl_cv_rpath, [
> ++ CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
> ++ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
> ++ . ./conftest.sh
> ++ rm -f ./conftest.sh
> ++ acl_cv_rpath=done
> ++ ])
> ++ wl="$acl_cv_wl"
> ++ libext="$acl_cv_libext"
> ++ shlibext="$acl_cv_shlibext"
> ++ hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
> ++ hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
> ++ hardcode_direct="$acl_cv_hardcode_direct"
> ++ hardcode_minus_L="$acl_cv_hardcode_minus_L"
> ++ dnl Determine whether the user wants rpath handling at all.
> ++ AC_ARG_ENABLE(rpath,
> ++ [ --disable-rpath do not hardcode runtime library paths],
> ++ :, enable_rpath=yes)
> ++])
> ++
> ++dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and
> ++dnl the libraries corresponding to explicit and implicit dependencies.
> ++dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables.
> ++AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
> ++[
> ++ define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
> ++ [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
> ++ dnl By default, look in $includedir and $libdir.
> ++ use_additional=yes
> ++ AC_LIB_WITH_FINAL_PREFIX([
> ++ eval additional_includedir=\"$includedir\"
> ++ eval additional_libdir=\"$libdir\"
> ++ ])
> ++ AC_LIB_ARG_WITH([lib$1-prefix],
> ++[ --with-lib$1-prefix[=DIR] search for lib$1 in DIR/include and DIR/lib
> ++ --without-lib$1-prefix don't search for lib$1 in includedir and libdir],
> ++[
> ++ if test "X$withval" = "Xno"; then
> ++ use_additional=no
> ++ else
> ++ if test "X$withval" = "X"; then
> ++ AC_LIB_WITH_FINAL_PREFIX([
> ++ eval additional_includedir=\"$includedir\"
> ++ eval additional_libdir=\"$libdir\"
> ++ ])
> ++ else
> ++ additional_includedir="$withval/include"
> ++ additional_libdir="$withval/lib"
> ++ fi
> ++ fi
> ++])
> ++ dnl Search the library and its dependencies in $additional_libdir and
> ++ dnl $LDFLAGS. Using breadth-first-seach.
> ++ LIB[]NAME=
> ++ LTLIB[]NAME=
> ++ INC[]NAME=
> ++ rpathdirs=
> ++ ltrpathdirs=
> ++ names_already_handled=
> ++ names_next_round='$1 $2'
> ++ while test -n "$names_next_round"; do
> ++ names_this_round="$names_next_round"
> ++ names_next_round=
> ++ for name in $names_this_round; do
> ++ already_handled=
> ++ for n in $names_already_handled; do
> ++ if test "$n" = "$name"; then
> ++ already_handled=yes
> ++ break
> ++ fi
> ++ done
> ++ if test -z "$already_handled"; then
> ++ names_already_handled="$names_already_handled $name"
> ++ dnl See if it was already located by an earlier AC_LIB_LINKFLAGS
> ++ dnl or AC_LIB_HAVE_LINKFLAGS call.
> ++ uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
> ++ eval value=\"\$HAVE_LIB$uppername\"
> ++ if test -n "$value"; then
> ++ if test "$value" = yes; then
> ++ eval value=\"\$LIB$uppername\"
> ++ test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value"
> ++ eval value=\"\$LTLIB$uppername\"
> ++ test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value"
> ++ else
> ++ dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined
> ++ dnl that this library doesn't exist. So just drop it.
> ++ :
> ++ fi
> ++ else
> ++ dnl Search the library lib$name in $additional_libdir and $LDFLAGS
> ++ dnl and the already constructed $LIBNAME/$LTLIBNAME.
> ++ found_dir=
> ++ found_la=
> ++ found_so=
> ++ found_a=
> ++ if test $use_additional = yes; then
> ++ if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then
> ++ found_dir="$additional_libdir"
> ++ found_so="$additional_libdir/lib$name.$shlibext"
> ++ if test -f "$additional_libdir/lib$name.la"; then
> ++ found_la="$additional_libdir/lib$name.la"
> ++ fi
> ++ else
> ++ if test -f "$additional_libdir/lib$name.$libext"; then
> ++ found_dir="$additional_libdir"
> ++ found_a="$additional_libdir/lib$name.$libext"
> ++ if test -f "$additional_libdir/lib$name.la"; then
> ++ found_la="$additional_libdir/lib$name.la"
> ++ fi
> ++ fi
> ++ fi
> ++ fi
> ++ if test "X$found_dir" = "X"; then
> ++ for x in $LDFLAGS $LTLIB[]NAME; do
> ++ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
> ++ case "$x" in
> ++ -L*)
> ++ dir=`echo "X$x" | sed -e 's/^X-L//'`
> ++ if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then
> ++ found_dir="$dir"
> ++ found_so="$dir/lib$name.$shlibext"
> ++ if test -f "$dir/lib$name.la"; then
> ++ found_la="$dir/lib$name.la"
> ++ fi
> ++ else
> ++ if test -f "$dir/lib$name.$libext"; then
> ++ found_dir="$dir"
> ++ found_a="$dir/lib$name.$libext"
> ++ if test -f "$dir/lib$name.la"; then
> ++ found_la="$dir/lib$name.la"
> ++ fi
> ++ fi
> ++ fi
> ++ ;;
> ++ esac
> ++ if test "X$found_dir" != "X"; then
> ++ break
> ++ fi
> ++ done
> ++ fi
> ++ if test "X$found_dir" != "X"; then
> ++ dnl Found the library.
> ++ LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name"
> ++ if test "X$found_so" != "X"; then
> ++ dnl Linking with a shared library. We attempt to hardcode its
> ++ dnl directory into the executable's runpath, unless it's the
> ++ dnl standard /usr/lib.
> ++ if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then
> ++ dnl No hardcoding is needed.
> ++ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
> ++ else
> ++ dnl Use an explicit option to hardcode DIR into the resulting
> ++ dnl binary.
> ++ dnl Potentially add DIR to ltrpathdirs.
> ++ dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
> ++ haveit=
> ++ for x in $ltrpathdirs; do
> ++ if test "X$x" = "X$found_dir"; then
> ++ haveit=yes
> ++ break
> ++ fi
> ++ done
> ++ if test -z "$haveit"; then
> ++ ltrpathdirs="$ltrpathdirs $found_dir"
> ++ fi
> ++ dnl The hardcoding into $LIBNAME is system dependent.
> ++ if test "$hardcode_direct" = yes; then
> ++ dnl Using DIR/libNAME.so during linking hardcodes DIR into the
> ++ dnl resulting binary.
> ++ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
> ++ else
> ++ if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then
> ++ dnl Use an explicit option to hardcode DIR into the resulting
> ++ dnl binary.
> ++ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
> ++ dnl Potentially add DIR to rpathdirs.
> ++ dnl The rpathdirs will be appended to $LIBNAME at the end.
> ++ haveit=
> ++ for x in $rpathdirs; do
> ++ if test "X$x" = "X$found_dir"; then
> ++ haveit=yes
> ++ break
> ++ fi
> ++ done
> ++ if test -z "$haveit"; then
> ++ rpathdirs="$rpathdirs $found_dir"
> ++ fi
> ++ else
> ++ dnl Rely on "-L$found_dir".
> ++ dnl But don't add it if it's already contained in the LDFLAGS
> ++ dnl or the already constructed $LIBNAME
> ++ haveit=
> ++ for x in $LDFLAGS $LIB[]NAME; do
> ++ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
> ++ if test "X$x" = "X-L$found_dir"; then
> ++ haveit=yes
> ++ break
> ++ fi
> ++ done
> ++ if test -z "$haveit"; then
> ++ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir"
> ++ fi
> ++ if test "$hardcode_minus_L" != no; then
> ++ dnl FIXME: Not sure whether we should use
> ++ dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
> ++ dnl here.
> ++ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
> ++ else
> ++ dnl We cannot use $hardcode_runpath_var and LD_RUN_PATH
> ++ dnl here, because this doesn't fit in flags passed to the
> ++ dnl compiler. So give up. No hardcoding. This affects only
> ++ dnl very old systems.
> ++ dnl FIXME: Not sure whether we should use
> ++ dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
> ++ dnl here.
> ++ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
> ++ fi
> ++ fi
> ++ fi
> ++ fi
> ++ else
> ++ if test "X$found_a" != "X"; then
> ++ dnl Linking with a static library.
> ++ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a"
> ++ else
> ++ dnl We shouldn't come here, but anyway it's good to have a
> ++ dnl fallback.
> ++ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name"
> ++ fi
> ++ fi
> ++ dnl Assume the include files are nearby.
> ++ additional_includedir=
> ++ case "$found_dir" in
> ++ */lib | */lib/)
> ++ basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'`
> ++ additional_includedir="$basedir/include"
> ++ ;;
> ++ esac
> ++ if test "X$additional_includedir" != "X"; then
> ++ dnl Potentially add $additional_includedir to $INCNAME.
> ++ dnl But don't add it
> ++ dnl 1. if it's the standard /usr/include,
> ++ dnl 2. if it's /usr/local/include and we are using GCC on Linux,
> ++ dnl 3. if it's already present in $CPPFLAGS or the already
> ++ dnl constructed $INCNAME,
> ++ dnl 4. if it doesn't exist as a directory.
> ++ if test "X$additional_includedir" != "X/usr/include"; then
> ++ haveit=
> ++ if test "X$additional_includedir" = "X/usr/local/include"; then
> ++ if test -n "$GCC"; then
> ++ case $host_os in
> ++ linux*) haveit=yes;;
> ++ esac
> ++ fi
> ++ fi
> ++ if test -z "$haveit"; then
> ++ for x in $CPPFLAGS $INC[]NAME; do
> ++ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
> ++ if test "X$x" = "X-I$additional_includedir"; then
> ++ haveit=yes
> ++ break
> ++ fi
> ++ done
> ++ if test -z "$haveit"; then
> ++ if test -d "$additional_includedir"; then
> ++ dnl Really add $additional_includedir to $INCNAME.
> ++ INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir"
> ++ fi
> ++ fi
> ++ fi
> ++ fi
> ++ fi
> ++ dnl Look for dependencies.
> ++ if test -n "$found_la"; then
> ++ dnl Read the .la file. It defines the variables
> ++ dnl dlname, library_names, old_library, dependency_libs, current,
> ++ dnl age, revision, installed, dlopen, dlpreopen, libdir.
> ++ save_libdir="$libdir"
> ++ case "$found_la" in
> ++ */* | *\\*) . "$found_la" ;;
> ++ *) . "./$found_la" ;;
> ++ esac
> ++ libdir="$save_libdir"
> ++ dnl We use only dependency_libs.
> ++ for dep in $dependency_libs; do
> ++ case "$dep" in
> ++ -L*)
> ++ additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
> ++ dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME.
> ++ dnl But don't add it
> ++ dnl 1. if it's the standard /usr/lib,
> ++ dnl 2. if it's /usr/local/lib and we are using GCC on Linux,
> ++ dnl 3. if it's already present in $LDFLAGS or the already
> ++ dnl constructed $LIBNAME,
> ++ dnl 4. if it doesn't exist as a directory.
> ++ if test "X$additional_libdir" != "X/usr/lib"; then
> ++ haveit=
> ++ if test "X$additional_libdir" = "X/usr/local/lib"; then
> ++ if test -n "$GCC"; then
> ++ case $host_os in
> ++ linux*) haveit=yes;;
> ++ esac
> ++ fi
> ++ fi
> ++ if test -z "$haveit"; then
> ++ haveit=
> ++ for x in $LDFLAGS $LIB[]NAME; do
> ++ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
> ++ if test "X$x" = "X-L$additional_libdir"; then
> ++ haveit=yes
> ++ break
> ++ fi
> ++ done
> ++ if test -z "$haveit"; then
> ++ if test -d "$additional_libdir"; then
> ++ dnl Really add $additional_libdir to $LIBNAME.
> ++ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir"
> ++ fi
> ++ fi
> ++ haveit=
> ++ for x in $LDFLAGS $LTLIB[]NAME; do
> ++ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
> ++ if test "X$x" = "X-L$additional_libdir"; then
> ++ haveit=yes
> ++ break
> ++ fi
> ++ done
> ++ if test -z "$haveit"; then
> ++ if test -d "$additional_libdir"; then
> ++ dnl Really add $additional_libdir to $LTLIBNAME.
> ++ LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir"
> ++ fi
> ++ fi
> ++ fi
> ++ fi
> ++ ;;
> ++ -R*)
> ++ dir=`echo "X$dep" | sed -e 's/^X-R//'`
> ++ if test "$enable_rpath" != no; then
> ++ dnl Potentially add DIR to rpathdirs.
> ++ dnl The rpathdirs will be appended to $LIBNAME at the end.
> ++ haveit=
> ++ for x in $rpathdirs; do
> ++ if test "X$x" = "X$dir"; then
> ++ haveit=yes
> ++ break
> ++ fi
> ++ done
> ++ if test -z "$haveit"; then
> ++ rpathdirs="$rpathdirs $dir"
> ++ fi
> ++ dnl Potentially add DIR to ltrpathdirs.
> ++ dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
> ++ haveit=
> ++ for x in $ltrpathdirs; do
> ++ if test "X$x" = "X$dir"; then
> ++ haveit=yes
> ++ break
> ++ fi
> ++ done
> ++ if test -z "$haveit"; then
> ++ ltrpathdirs="$ltrpathdirs $dir"
> ++ fi
> ++ fi
> ++ ;;
> ++ -l*)
> ++ dnl Handle this in the next round.
> ++ names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
> ++ ;;
> ++ *.la)
> ++ dnl Handle this in the next round. Throw away the .la's
> ++ dnl directory; it is already contained in a preceding -L
> ++ dnl option.
> ++ names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
> ++ ;;
> ++ *)
> ++ dnl Most likely an immediate library name.
> ++ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep"
> ++ LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep"
> ++ ;;
> ++ esac
> ++ done
> ++ fi
> ++ else
> ++ dnl Didn't find the library; assume it is in the system directories
> ++ dnl known to the linker and runtime loader. (All the system
> ++ dnl directories known to the linker should also be known to the
> ++ dnl runtime loader, otherwise the system is severely misconfigured.)
> ++ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
> ++ LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name"
> ++ fi
> ++ fi
> ++ fi
> ++ done
> ++ done
> ++ if test "X$rpathdirs" != "X"; then
> ++ if test -n "$hardcode_libdir_separator"; then
> ++ dnl Weird platform: only the last -rpath option counts, the user must
> ++ dnl pass all path elements in one option. We can arrange that for a
> ++ dnl single library, but not when more than one $LIBNAMEs are used.
> ++ alldirs=
> ++ for found_dir in $rpathdirs; do
> ++ alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir"
> ++ done
> ++ dnl Note: hardcode_libdir_flag_spec uses $libdir and $wl.
> ++ acl_save_libdir="$libdir"
> ++ libdir="$alldirs"
> ++ eval flag=\"$hardcode_libdir_flag_spec\"
> ++ libdir="$acl_save_libdir"
> ++ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
> ++ else
> ++ dnl The -rpath options are cumulative.
> ++ for found_dir in $rpathdirs; do
> ++ acl_save_libdir="$libdir"
> ++ libdir="$found_dir"
> ++ eval flag=\"$hardcode_libdir_flag_spec\"
> ++ libdir="$acl_save_libdir"
> ++ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
> ++ done
> ++ fi
> ++ fi
> ++ if test "X$ltrpathdirs" != "X"; then
> ++ dnl When using libtool, the option that works for both libraries and
> ++ dnl executables is -R. The -R options are cumulative.
> ++ for found_dir in $ltrpathdirs; do
> ++ LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir"
> ++ done
> ++ fi
> ++])
> ++
> ++dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR,
> ++dnl unless already present in VAR.
> ++dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes
> ++dnl contains two or three consecutive elements that belong together.
> ++AC_DEFUN([AC_LIB_APPENDTOVAR],
> ++[
> ++ for element in [$2]; do
> ++ haveit=
> ++ for x in $[$1]; do
> ++ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
> ++ if test "X$x" = "X$element"; then
> ++ haveit=yes
> ++ break
> ++ fi
> ++ done
> ++ if test -z "$haveit"; then
> ++ [$1]="${[$1]}${[$1]:+ }$element"
> ++ fi
> ++ done
> ++])
> +--- lrzsz-0.12.20.safe/m4/lib-prefix.m4 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/m4/lib-prefix.m4 2004-09-12 14:40:34.921662056 -0400
> +@@ -0,0 +1,155 @@
> ++# lib-prefix.m4 serial 3 (gettext-0.13)
> ++dnl Copyright (C) 2001-2003 Free Software Foundation, Inc.
> ++dnl This file is free software, distributed under the terms of the GNU
> ++dnl General Public License. As a special exception to the GNU General
> ++dnl Public License, this file may be distributed as part of a program
> ++dnl that contains a configuration script generated by Autoconf, under
> ++dnl the same distribution terms as the rest of that program.
> ++
> ++dnl From Bruno Haible.
> ++
> ++dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and
> ++dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't
> ++dnl require excessive bracketing.
> ++ifdef([AC_HELP_STRING],
> ++[AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])],
> ++[AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])])
> ++
> ++dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed
> ++dnl to access previously installed libraries. The basic assumption is that
> ++dnl a user will want packages to use other packages he previously installed
> ++dnl with the same --prefix option.
> ++dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate
> ++dnl libraries, but is otherwise very convenient.
> ++AC_DEFUN([AC_LIB_PREFIX],
> ++[
> ++ AC_BEFORE([$0], [AC_LIB_LINKFLAGS])
> ++ AC_REQUIRE([AC_PROG_CC])
> ++ AC_REQUIRE([AC_CANONICAL_HOST])
> ++ AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
> ++ dnl By default, look in $includedir and $libdir.
> ++ use_additional=yes
> ++ AC_LIB_WITH_FINAL_PREFIX([
> ++ eval additional_includedir=\"$includedir\"
> ++ eval additional_libdir=\"$libdir\"
> ++ ])
> ++ AC_LIB_ARG_WITH([lib-prefix],
> ++[ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib
> ++ --without-lib-prefix don't search for libraries in includedir and libdir],
> ++[
> ++ if test "X$withval" = "Xno"; then
> ++ use_additional=no
> ++ else
> ++ if test "X$withval" = "X"; then
> ++ AC_LIB_WITH_FINAL_PREFIX([
> ++ eval additional_includedir=\"$includedir\"
> ++ eval additional_libdir=\"$libdir\"
> ++ ])
> ++ else
> ++ additional_includedir="$withval/include"
> ++ additional_libdir="$withval/lib"
> ++ fi
> ++ fi
> ++])
> ++ if test $use_additional = yes; then
> ++ dnl Potentially add $additional_includedir to $CPPFLAGS.
> ++ dnl But don't add it
> ++ dnl 1. if it's the standard /usr/include,
> ++ dnl 2. if it's already present in $CPPFLAGS,
> ++ dnl 3. if it's /usr/local/include and we are using GCC on Linux,
> ++ dnl 4. if it doesn't exist as a directory.
> ++ if test "X$additional_includedir" != "X/usr/include"; then
> ++ haveit=
> ++ for x in $CPPFLAGS; do
> ++ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
> ++ if test "X$x" = "X-I$additional_includedir"; then
> ++ haveit=yes
> ++ break
> ++ fi
> ++ done
> ++ if test -z "$haveit"; then
> ++ if test "X$additional_includedir" = "X/usr/local/include"; then
> ++ if test -n "$GCC"; then
> ++ case $host_os in
> ++ linux*) haveit=yes;;
> ++ esac
> ++ fi
> ++ fi
> ++ if test -z "$haveit"; then
> ++ if test -d "$additional_includedir"; then
> ++ dnl Really add $additional_includedir to $CPPFLAGS.
> ++ CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir"
> ++ fi
> ++ fi
> ++ fi
> ++ fi
> ++ dnl Potentially add $additional_libdir to $LDFLAGS.
> ++ dnl But don't add it
> ++ dnl 1. if it's the standard /usr/lib,
> ++ dnl 2. if it's already present in $LDFLAGS,
> ++ dnl 3. if it's /usr/local/lib and we are using GCC on Linux,
> ++ dnl 4. if it doesn't exist as a directory.
> ++ if test "X$additional_libdir" != "X/usr/lib"; then
> ++ haveit=
> ++ for x in $LDFLAGS; do
> ++ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
> ++ if test "X$x" = "X-L$additional_libdir"; then
> ++ haveit=yes
> ++ break
> ++ fi
> ++ done
> ++ if test -z "$haveit"; then
> ++ if test "X$additional_libdir" = "X/usr/local/lib"; then
> ++ if test -n "$GCC"; then
> ++ case $host_os in
> ++ linux*) haveit=yes;;
> ++ esac
> ++ fi
> ++ fi
> ++ if test -z "$haveit"; then
> ++ if test -d "$additional_libdir"; then
> ++ dnl Really add $additional_libdir to $LDFLAGS.
> ++ LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir"
> ++ fi
> ++ fi
> ++ fi
> ++ fi
> ++ fi
> ++])
> ++
> ++dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix,
> ++dnl acl_final_exec_prefix, containing the values to which $prefix and
> ++dnl $exec_prefix will expand at the end of the configure script.
> ++AC_DEFUN([AC_LIB_PREPARE_PREFIX],
> ++[
> ++ dnl Unfortunately, prefix and exec_prefix get only finally determined
> ++ dnl at the end of configure.
> ++ if test "X$prefix" = "XNONE"; then
> ++ acl_final_prefix="$ac_default_prefix"
> ++ else
> ++ acl_final_prefix="$prefix"
> ++ fi
> ++ if test "X$exec_prefix" = "XNONE"; then
> ++ acl_final_exec_prefix='${prefix}'
> ++ else
> ++ acl_final_exec_prefix="$exec_prefix"
> ++ fi
> ++ acl_save_prefix="$prefix"
> ++ prefix="$acl_final_prefix"
> ++ eval acl_final_exec_prefix=\"$acl_final_exec_prefix\"
> ++ prefix="$acl_save_prefix"
> ++])
> ++
> ++dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the
> ++dnl variables prefix and exec_prefix bound to the values they will have
> ++dnl at the end of the configure script.
> ++AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX],
> ++[
> ++ acl_save_prefix="$prefix"
> ++ prefix="$acl_final_prefix"
> ++ acl_save_exec_prefix="$exec_prefix"
> ++ exec_prefix="$acl_final_exec_prefix"
> ++ $1
> ++ exec_prefix="$acl_save_exec_prefix"
> ++ prefix="$acl_save_prefix"
> ++])
> +--- lrzsz-0.12.20.safe/m4/longdouble.m4 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/m4/longdouble.m4 2004-09-12 14:40:34.942658864 -0400
> +@@ -0,0 +1,30 @@
> ++# longdouble.m4 serial 1 (gettext-0.12)
> ++dnl Copyright (C) 2002-2003 Free Software Foundation, Inc.
> ++dnl This file is free software, distributed under the terms of the GNU
> ++dnl General Public License. As a special exception to the GNU General
> ++dnl Public License, this file may be distributed as part of a program
> ++dnl that contains a configuration script generated by Autoconf, under
> ++dnl the same distribution terms as the rest of that program.
> ++
> ++dnl From Bruno Haible.
> ++dnl Test whether the compiler supports the 'long double' type.
> ++dnl Prerequisite: AC_PROG_CC
> ++
> ++AC_DEFUN([gt_TYPE_LONGDOUBLE],
> ++[
> ++ AC_CACHE_CHECK([for long double], gt_cv_c_long_double,
> ++ [if test "$GCC" = yes; then
> ++ gt_cv_c_long_double=yes
> ++ else
> ++ AC_TRY_COMPILE([
> ++ /* The Stardent Vistra knows sizeof(long double), but does not support it. */
> ++ long double foo = 0.0;
> ++ /* On Ultrix 4.3 cc, long double is 4 and double is 8. */
> ++ int array [2*(sizeof(long double) >= sizeof(double)) - 1];
> ++ ], ,
> ++ gt_cv_c_long_double=yes, gt_cv_c_long_double=no)
> ++ fi])
> ++ if test $gt_cv_c_long_double = yes; then
> ++ AC_DEFINE(HAVE_LONG_DOUBLE, 1, [Define if you have the 'long double' type.])
> ++ fi
> ++])
> +--- lrzsz-0.12.20.safe/m4/longlong.m4 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/m4/longlong.m4 2004-09-12 14:40:34.949657800 -0400
> +@@ -0,0 +1,25 @@
> ++# longlong.m4 serial 4
> ++dnl Copyright (C) 1999-2003 Free Software Foundation, Inc.
> ++dnl This file is free software, distributed under the terms of the GNU
> ++dnl General Public License. As a special exception to the GNU General
> ++dnl Public License, this file may be distributed as part of a program
> ++dnl that contains a configuration script generated by Autoconf, under
> ++dnl the same distribution terms as the rest of that program.
> ++
> ++dnl From Paul Eggert.
> ++
> ++# Define HAVE_LONG_LONG if 'long long' works.
> ++
> ++AC_DEFUN([jm_AC_TYPE_LONG_LONG],
> ++[
> ++ AC_CACHE_CHECK([for long long], ac_cv_type_long_long,
> ++ [AC_TRY_LINK([long long ll = 1LL; int i = 63;],
> ++ [long long llmax = (long long) -1;
> ++ return ll << i | ll >> i | llmax / ll | llmax % ll;],
> ++ ac_cv_type_long_long=yes,
> ++ ac_cv_type_long_long=no)])
> ++ if test $ac_cv_type_long_long = yes; then
> ++ AC_DEFINE(HAVE_LONG_LONG, 1,
> ++ [Define if you have the 'long long' type.])
> ++ fi
> ++])
> +--- lrzsz-0.12.20.safe/m4/Makefile.am 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/m4/Makefile.am 2004-09-12 14:40:35.048642752 -0400
> +@@ -0,0 +1 @@
> ++EXTRA_DIST = codeset.m4 gettext.m4 glibc21.m4 iconv.m4 intdiv0.m4 intmax.m4 inttypes.m4 inttypes_h.m4 inttypes-pri.m4 isc-posix.m4 lcmessage.m4 lib-ld.m4 lib-link.m4 lib-prefix.m4 longdouble.m4 longlong.m4 nls.m4 po.m4 printf-posix.m4 progtest.m4 signed.m4 size_max.m4 stdint_h.m4 uintmax_t.m4 ulonglong.m4 wchar_t.m4 wint_t.m4 xsize.m4
> +--- lrzsz-0.12.20.safe/m4/nls.m4 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/m4/nls.m4 2004-09-12 14:40:34.955656888 -0400
> +@@ -0,0 +1,49 @@
> ++# nls.m4 serial 1 (gettext-0.12)
> ++dnl Copyright (C) 1995-2003 Free Software Foundation, Inc.
> ++dnl This file is free software, distributed under the terms of the GNU
> ++dnl General Public License. As a special exception to the GNU General
> ++dnl Public License, this file may be distributed as part of a program
> ++dnl that contains a configuration script generated by Autoconf, under
> ++dnl the same distribution terms as the rest of that program.
> ++dnl
> ++dnl This file can can be used in projects which are not available under
> ++dnl the GNU General Public License or the GNU Library General Public
> ++dnl License but which still want to provide support for the GNU gettext
> ++dnl functionality.
> ++dnl Please note that the actual code of the GNU gettext library is covered
> ++dnl by the GNU Library General Public License, and the rest of the GNU
> ++dnl gettext package package is covered by the GNU General Public License.
> ++dnl They are *not* in the public domain.
> ++
> ++dnl Authors:
> ++dnl Ulrich Drepper <drepper at cygnus.com>, 1995-2000.
> ++dnl Bruno Haible <haible at clisp.cons.org>, 2000-2003.
> ++
> ++AC_DEFUN([AM_NLS],
> ++[
> ++ AC_MSG_CHECKING([whether NLS is requested])
> ++ dnl Default is enabled NLS
> ++ AC_ARG_ENABLE(nls,
> ++ [ --disable-nls do not use Native Language Support],
> ++ USE_NLS=$enableval, USE_NLS=yes)
> ++ AC_MSG_RESULT($USE_NLS)
> ++ AC_SUBST(USE_NLS)
> ++])
> ++
> ++AC_DEFUN([AM_MKINSTALLDIRS],
> ++[
> ++ dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly
> ++ dnl find the mkinstalldirs script in another subdir but $(top_srcdir).
> ++ dnl Try to locate it.
> ++ MKINSTALLDIRS=
> ++ if test -n "$ac_aux_dir"; then
> ++ case "$ac_aux_dir" in
> ++ /*) MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" ;;
> ++ *) MKINSTALLDIRS="\$(top_builddir)/$ac_aux_dir/mkinstalldirs" ;;
> ++ esac
> ++ fi
> ++ if test -z "$MKINSTALLDIRS"; then
> ++ MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs"
> ++ fi
> ++ AC_SUBST(MKINSTALLDIRS)
> ++])
> +--- lrzsz-0.12.20.safe/m4/po.m4 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/m4/po.m4 2004-09-12 14:40:34.961655976 -0400
> +@@ -0,0 +1,426 @@
> ++# po.m4 serial 3 (gettext-0.14)
> ++dnl Copyright (C) 1995-2003 Free Software Foundation, Inc.
> ++dnl This file is free software, distributed under the terms of the GNU
> ++dnl General Public License. As a special exception to the GNU General
> ++dnl Public License, this file may be distributed as part of a program
> ++dnl that contains a configuration script generated by Autoconf, under
> ++dnl the same distribution terms as the rest of that program.
> ++dnl
> ++dnl This file can can be used in projects which are not available under
> ++dnl the GNU General Public License or the GNU Library General Public
> ++dnl License but which still want to provide support for the GNU gettext
> ++dnl functionality.
> ++dnl Please note that the actual code of the GNU gettext library is covered
> ++dnl by the GNU Library General Public License, and the rest of the GNU
> ++dnl gettext package package is covered by the GNU General Public License.
> ++dnl They are *not* in the public domain.
> ++
> ++dnl Authors:
> ++dnl Ulrich Drepper <drepper at cygnus.com>, 1995-2000.
> ++dnl Bruno Haible <haible at clisp.cons.org>, 2000-2003.
> ++
> ++dnl Checks for all prerequisites of the po subdirectory.
> ++AC_DEFUN([AM_PO_SUBDIRS],
> ++[
> ++ AC_REQUIRE([AC_PROG_MAKE_SET])dnl
> ++ AC_REQUIRE([AC_PROG_INSTALL])dnl
> ++ AC_REQUIRE([AM_MKINSTALLDIRS])dnl
> ++ AC_REQUIRE([AM_NLS])dnl
> ++
> ++ dnl Perform the following tests also if --disable-nls has been given,
> ++ dnl because they are needed for "make dist" to work.
> ++
> ++ dnl Search for GNU msgfmt in the PATH.
> ++ dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions.
> ++ dnl The second test excludes FreeBSD msgfmt.
> ++ AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
> ++ [$ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1 &&
> ++ (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)],
> ++ :)
> ++ AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
> ++
> ++ dnl Search for GNU xgettext 0.12 or newer in the PATH.
> ++ dnl The first test excludes Solaris xgettext and early GNU xgettext versions.
> ++ dnl The second test excludes FreeBSD xgettext.
> ++ AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
> ++ [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 &&
> ++ (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)],
> ++ :)
> ++ dnl Remove leftover from FreeBSD xgettext call.
> ++ rm -f messages.po
> ++
> ++ dnl Search for GNU msgmerge 0.11 or newer in the PATH.
> ++ AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge,
> ++ [$ac_dir/$ac_word --update -q /dev/null /dev/null >/dev/null 2>&1], :)
> ++
> ++ dnl This could go away some day; the PATH_PROG_WITH_TEST already does it.
> ++ dnl Test whether we really found GNU msgfmt.
> ++ if test "$GMSGFMT" != ":"; then
> ++ dnl If it is no GNU msgfmt we define it as : so that the
> ++ dnl Makefiles still can work.
> ++ if $GMSGFMT --statistics /dev/null >/dev/null 2>&1 &&
> ++ (if $GMSGFMT --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
> ++ : ;
> ++ else
> ++ GMSGFMT=`echo "$GMSGFMT" | sed -e 's,^.*/,,'`
> ++ AC_MSG_RESULT(
> ++ [found $GMSGFMT program is not GNU msgfmt; ignore it])
> ++ GMSGFMT=":"
> ++ fi
> ++ fi
> ++
> ++ dnl This could go away some day; the PATH_PROG_WITH_TEST already does it.
> ++ dnl Test whether we really found GNU xgettext.
> ++ if test "$XGETTEXT" != ":"; then
> ++ dnl If it is no GNU xgettext we define it as : so that the
> ++ dnl Makefiles still can work.
> ++ if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 &&
> ++ (if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
> ++ : ;
> ++ else
> ++ AC_MSG_RESULT(
> ++ [found xgettext program is not GNU xgettext; ignore it])
> ++ XGETTEXT=":"
> ++ fi
> ++ dnl Remove leftover from FreeBSD xgettext call.
> ++ rm -f messages.po
> ++ fi
> ++
> ++ AC_OUTPUT_COMMANDS([
> ++ for ac_file in $CONFIG_FILES; do
> ++ # Support "outfile[:infile[:infile...]]"
> ++ case "$ac_file" in
> ++ *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
> ++ esac
> ++ # PO directories have a Makefile.in generated from Makefile.in.in.
> ++ case "$ac_file" in */Makefile.in)
> ++ # Adjust a relative srcdir.
> ++ ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
> ++ ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
> ++ ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
> ++ # In autoconf-2.13 it is called $ac_given_srcdir.
> ++ # In autoconf-2.50 it is called $srcdir.
> ++ test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
> ++ case "$ac_given_srcdir" in
> ++ .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
> ++ /*) top_srcdir="$ac_given_srcdir" ;;
> ++ *) top_srcdir="$ac_dots$ac_given_srcdir" ;;
> ++ esac
> ++ if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
> ++ rm -f "$ac_dir/POTFILES"
> ++ test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
> ++ cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES"
> ++ POMAKEFILEDEPS="POTFILES.in"
> ++ # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend
> ++ # on $ac_dir but don't depend on user-specified configuration
> ++ # parameters.
> ++ if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
> ++ # The LINGUAS file contains the set of available languages.
> ++ if test -n "$OBSOLETE_ALL_LINGUAS"; then
> ++ test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
> ++ fi
> ++ ALL_LINGUAS_=`sed -e "/^#/d" "$ac_given_srcdir/$ac_dir/LINGUAS"`
> ++ # Hide the ALL_LINGUAS assigment from automake.
> ++ eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
> ++ POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
> ++ else
> ++ # The set of available languages was given in configure.in.
> ++ eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS'
> ++ fi
> ++ # Compute POFILES
> ++ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)
> ++ # Compute UPDATEPOFILES
> ++ # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update)
> ++ # Compute DUMMYPOFILES
> ++ # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop)
> ++ # Compute GMOFILES
> ++ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo)
> ++ case "$ac_given_srcdir" in
> ++ .) srcdirpre= ;;
> ++ *) srcdirpre='$(srcdir)/' ;;
> ++ esac
> ++ POFILES=
> ++ UPDATEPOFILES=
> ++ DUMMYPOFILES=
> ++ GMOFILES=
> ++ for lang in $ALL_LINGUAS; do
> ++ POFILES="$POFILES $srcdirpre$lang.po"
> ++ UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
> ++ DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
> ++ GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
> ++ done
> ++ # CATALOGS depends on both $ac_dir and the user's LINGUAS
> ++ # environment variable.
> ++ INST_LINGUAS=
> ++ if test -n "$ALL_LINGUAS"; then
> ++ for presentlang in $ALL_LINGUAS; do
> ++ useit=no
> ++ if test "%UNSET%" != "$LINGUAS"; then
> ++ desiredlanguages="$LINGUAS"
> ++ else
> ++ desiredlanguages="$ALL_LINGUAS"
> ++ fi
> ++ for desiredlang in $desiredlanguages; do
> ++ # Use the presentlang catalog if desiredlang is
> ++ # a. equal to presentlang, or
> ++ # b. a variant of presentlang (because in this case,
> ++ # presentlang can be used as a fallback for messages
> ++ # which are not translated in the desiredlang catalog).
> ++ case "$desiredlang" in
> ++ "$presentlang"*) useit=yes;;
> ++ esac
> ++ done
> ++ if test $useit = yes; then
> ++ INST_LINGUAS="$INST_LINGUAS $presentlang"
> ++ fi
> ++ done
> ++ fi
> ++ CATALOGS=
> ++ if test -n "$INST_LINGUAS"; then
> ++ for lang in $INST_LINGUAS; do
> ++ CATALOGS="$CATALOGS $lang.gmo"
> ++ done
> ++ fi
> ++ test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile"
> ++ sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile"
> ++ for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do
> ++ if test -f "$f"; then
> ++ case "$f" in
> ++ *.orig | *.bak | *~) ;;
> ++ *) cat "$f" >> "$ac_dir/Makefile" ;;
> ++ esac
> ++ fi
> ++ done
> ++ fi
> ++ ;;
> ++ esac
> ++ done],
> ++ [# Capture the value of obsolete ALL_LINGUAS because we need it to compute
> ++ # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it
> ++ # from automake.
> ++ eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"'
> ++ # Capture the value of LINGUAS because we need it to compute CATALOGS.
> ++ LINGUAS="${LINGUAS-%UNSET%}"
> ++ ])
> ++])
> ++
> ++dnl Postprocesses a Makefile in a directory containing PO files.
> ++AC_DEFUN([AM_POSTPROCESS_PO_MAKEFILE],
> ++[
> ++ # When this code is run, in config.status, two variables have already been
> ++ # set:
> ++ # - OBSOLETE_ALL_LINGUAS is the value of LINGUAS set in configure.in,
> ++ # - LINGUAS is the value of the environment variable LINGUAS at configure
> ++ # time.
> ++
> ++changequote(,)dnl
> ++ # Adjust a relative srcdir.
> ++ ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
> ++ ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
> ++ ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
> ++ # In autoconf-2.13 it is called $ac_given_srcdir.
> ++ # In autoconf-2.50 it is called $srcdir.
> ++ test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
> ++ case "$ac_given_srcdir" in
> ++ .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
> ++ /*) top_srcdir="$ac_given_srcdir" ;;
> ++ *) top_srcdir="$ac_dots$ac_given_srcdir" ;;
> ++ esac
> ++
> ++ # Find a way to echo strings without interpreting backslash.
> ++ if test "X`(echo '\t') 2>/dev/null`" = 'X\t'; then
> ++ gt_echo='echo'
> ++ else
> ++ if test "X`(printf '%s\n' '\t') 2>/dev/null`" = 'X\t'; then
> ++ gt_echo='printf %s\n'
> ++ else
> ++ echo_func () {
> ++ cat <<EOT
> ++$*
> ++EOT
> ++ }
> ++ gt_echo='echo_func'
> ++ fi
> ++ fi
> ++
> ++ # A sed script that extracts the value of VARIABLE from a Makefile.
> ++ sed_x_variable='
> ++# Test if the hold space is empty.
> ++x
> ++s/P/P/
> ++x
> ++ta
> ++# Yes it was empty. Look if we have the expected variable definition.
> ++/^[ ]*VARIABLE[ ]*=/{
> ++ # Seen the first line of the variable definition.
> ++ s/^[ ]*VARIABLE[ ]*=//
> ++ ba
> ++}
> ++bd
> ++:a
> ++# Here we are processing a line from the variable definition.
> ++# Remove comment, more precisely replace it with a space.
> ++s/#.*$/ /
> ++# See if the line ends in a backslash.
> ++tb
> ++:b
> ++s/\\$//
> ++# Print the line, without the trailing backslash.
> ++p
> ++tc
> ++# There was no trailing backslash. The end of the variable definition is
> ++# reached. Clear the hold space.
> ++s/^.*$//
> ++x
> ++bd
> ++:c
> ++# A trailing backslash means that the variable definition continues in the
> ++# next line. Put a nonempty string into the hold space to indicate this.
> ++s/^.*$/P/
> ++x
> ++:d
> ++'
> ++changequote([,])dnl
> ++
> ++ # Set POTFILES to the value of the Makefile variable POTFILES.
> ++ sed_x_POTFILES="`$gt_echo \"$sed_x_variable\" | sed -e '/^ *#/d' -e 's/VARIABLE/POTFILES/g'`"
> ++ POTFILES=`sed -n -e "$sed_x_POTFILES" < "$ac_file"`
> ++ # Compute POTFILES_DEPS as
> ++ # $(foreach file, $(POTFILES), $(top_srcdir)/$(file))
> ++ POTFILES_DEPS=
> ++ for file in $POTFILES; do
> ++ POTFILES_DEPS="$POTFILES_DEPS "'$(top_srcdir)/'"$file"
> ++ done
> ++ POMAKEFILEDEPS=""
> ++
> ++ if test -n "$OBSOLETE_ALL_LINGUAS"; then
> ++ test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
> ++ fi
> ++ if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
> ++ # The LINGUAS file contains the set of available languages.
> ++ ALL_LINGUAS_=`sed -e "/^#/d" "$ac_given_srcdir/$ac_dir/LINGUAS"`
> ++ POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
> ++ else
> ++ # Set ALL_LINGUAS to the value of the Makefile variable LINGUAS.
> ++ sed_x_LINGUAS="`$gt_echo \"$sed_x_variable\" | sed -e '/^ *#/d' -e 's/VARIABLE/LINGUAS/g'`"
> ++ ALL_LINGUAS_=`sed -n -e "$sed_x_LINGUAS" < "$ac_file"`
> ++ fi
> ++ # Hide the ALL_LINGUAS assigment from automake.
> ++ eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
> ++ # Compute POFILES
> ++ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)
> ++ # Compute UPDATEPOFILES
> ++ # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update)
> ++ # Compute DUMMYPOFILES
> ++ # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop)
> ++ # Compute GMOFILES
> ++ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo)
> ++ # Compute PROPERTIESFILES
> ++ # as $(foreach lang, $(ALL_LINGUAS), $(top_srcdir)/$(DOMAIN)_$(lang).properties)
> ++ # Compute CLASSFILES
> ++ # as $(foreach lang, $(ALL_LINGUAS), $(top_srcdir)/$(DOMAIN)_$(lang).class)
> ++ # Compute QMFILES
> ++ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).qm)
> ++ # Compute MSGFILES
> ++ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang)).msg)
> ++ # Compute RESOURCESDLLFILES
> ++ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang))/$(DOMAIN).resources.dll)
> ++ case "$ac_given_srcdir" in
> ++ .) srcdirpre= ;;
> ++ *) srcdirpre='$(srcdir)/' ;;
> ++ esac
> ++ POFILES=
> ++ UPDATEPOFILES=
> ++ DUMMYPOFILES=
> ++ GMOFILES=
> ++ PROPERTIESFILES=
> ++ CLASSFILES=
> ++ QMFILES=
> ++ MSGFILES=
> ++ RESOURCESDLLFILES=
> ++ for lang in $ALL_LINGUAS; do
> ++ POFILES="$POFILES $srcdirpre$lang.po"
> ++ UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
> ++ DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
> ++ GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
> ++ PROPERTIESFILES="$PROPERTIESFILES \$(top_srcdir)/\$(DOMAIN)_$lang.properties"
> ++ CLASSFILES="$CLASSFILES \$(top_srcdir)/\$(DOMAIN)_$lang.class"
> ++ QMFILES="$QMFILES $srcdirpre$lang.qm"
> ++ frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
> ++ MSGFILES="$MSGFILES $srcdirpre$frobbedlang.msg"
> ++ frobbedlang=`echo $lang | sed -e 's/_/-/g'`
> ++ RESOURCESDLLFILES="$RESOURCESDLLFILES $srcdirpre$frobbedlang/\$(DOMAIN).resources.dll"
> ++ done
> ++ # CATALOGS depends on both $ac_dir and the user's LINGUAS
> ++ # environment variable.
> ++ INST_LINGUAS=
> ++ if test -n "$ALL_LINGUAS"; then
> ++ for presentlang in $ALL_LINGUAS; do
> ++ useit=no
> ++ if test "%UNSET%" != "$LINGUAS"; then
> ++ desiredlanguages="$LINGUAS"
> ++ else
> ++ desiredlanguages="$ALL_LINGUAS"
> ++ fi
> ++ for desiredlang in $desiredlanguages; do
> ++ # Use the presentlang catalog if desiredlang is
> ++ # a. equal to presentlang, or
> ++ # b. a variant of presentlang (because in this case,
> ++ # presentlang can be used as a fallback for messages
> ++ # which are not translated in the desiredlang catalog).
> ++ case "$desiredlang" in
> ++ "$presentlang"*) useit=yes;;
> ++ esac
> ++ done
> ++ if test $useit = yes; then
> ++ INST_LINGUAS="$INST_LINGUAS $presentlang"
> ++ fi
> ++ done
> ++ fi
> ++ CATALOGS=
> ++ JAVACATALOGS=
> ++ QTCATALOGS=
> ++ TCLCATALOGS=
> ++ CSHARPCATALOGS=
> ++ if test -n "$INST_LINGUAS"; then
> ++ for lang in $INST_LINGUAS; do
> ++ CATALOGS="$CATALOGS $lang.gmo"
> ++ JAVACATALOGS="$JAVACATALOGS \$(DOMAIN)_$lang.properties"
> ++ QTCATALOGS="$QTCATALOGS $lang.qm"
> ++ frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
> ++ TCLCATALOGS="$TCLCATALOGS $frobbedlang.msg"
> ++ frobbedlang=`echo $lang | sed -e 's/_/-/g'`
> ++ CSHARPCATALOGS="$CSHARPCATALOGS $frobbedlang/\$(DOMAIN).resources.dll"
> ++ done
> ++ fi
> ++
> ++ sed -e "s|@POTFILES_DEPS@|$POTFILES_DEPS|g" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@PROPERTIESFILES@|$PROPERTIESFILES|g" -e "s|@CLASSFILES@|$CLASSFILES|g" -e "s|@QMFILES@|$QMFILES|g" -e "s|@MSGFILES@|$MSGFILES|g" -e "s|@RESOURCESDLLFILES@|$RESOURCESDLLFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@JAVACATALOGS@|$JAVACATALOGS|g" -e "s|@QTCATALOGS@|$QTCATALOGS|g" -e "s|@TCLCATALOGS@|$TCLCATALOGS|g" -e "s|@CSHARPCATALOGS@|$CSHARPCATALOGS|g" -e 's,^#distdir:,distdir:,' < "$ac_file" > "$ac_file.tmp"
> ++ if grep -l '@TCLCATALOGS@' "$ac_file" > /dev/null; then
> ++ # Add dependencies that cannot be formulated as a simple suffix rule.
> ++ for lang in $ALL_LINGUAS; do
> ++ frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
> ++ cat >> "$ac_file.tmp" <<EOF
> ++$frobbedlang.msg: $lang.po
> ++ @echo "\$(MSGFMT) -c --tcl -d \$(srcdir) -l $lang $srcdirpre$lang.po"; \
> ++ \$(MSGFMT) -c --tcl -d "\$(srcdir)" -l $lang $srcdirpre$lang.po || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; }
> ++EOF
> ++ done
> ++ fi
> ++ if grep -l '@CSHARPCATALOGS@' "$ac_file" > /dev/null; then
> ++ # Add dependencies that cannot be formulated as a simple suffix rule.
> ++ for lang in $ALL_LINGUAS; do
> ++ frobbedlang=`echo $lang | sed -e 's/_/-/g'`
> ++ cat >> "$ac_file.tmp" <<EOF
> ++$frobbedlang/\$(DOMAIN).resources.dll: $lang.po
> ++ @echo "\$(MSGFMT) -c --csharp -d \$(srcdir) -l $lang $srcdirpre$lang.po -r \$(DOMAIN)"; \
> ++ \$(MSGFMT) -c --csharp -d "\$(srcdir)" -l $lang $srcdirpre$lang.po -r "\$(DOMAIN)" || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; }
> ++EOF
> ++ done
> ++ fi
> ++ if test -n "$POMAKEFILEDEPS"; then
> ++ cat >> "$ac_file.tmp" <<EOF
> ++Makefile: $POMAKEFILEDEPS
> ++EOF
> ++ fi
> ++ mv "$ac_file.tmp" "$ac_file"
> ++])
> +--- lrzsz-0.12.20.safe/m4/printf-posix.m4 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/m4/printf-posix.m4 2004-09-12 14:40:34.974654000 -0400
> +@@ -0,0 +1,46 @@
> ++# printf-posix.m4 serial 2 (gettext-0.13.1)
> ++dnl Copyright (C) 2003 Free Software Foundation, Inc.
> ++dnl This file is free software, distributed under the terms of the GNU
> ++dnl General Public License. As a special exception to the GNU General
> ++dnl Public License, this file may be distributed as part of a program
> ++dnl that contains a configuration script generated by Autoconf, under
> ++dnl the same distribution terms as the rest of that program.
> ++
> ++dnl From Bruno Haible.
> ++dnl Test whether the printf() function supports POSIX/XSI format strings with
> ++dnl positions.
> ++
> ++AC_DEFUN([gt_PRINTF_POSIX],
> ++[
> ++ AC_REQUIRE([AC_PROG_CC])
> ++ AC_CACHE_CHECK([whether printf() supports POSIX/XSI format strings],
> ++ gt_cv_func_printf_posix,
> ++ [
> ++ AC_TRY_RUN([
> ++#include <stdio.h>
> ++#include <string.h>
> ++/* The string "%2$d %1$d", with dollar characters protected from the shell's
> ++ dollar expansion (possibly an autoconf bug). */
> ++static char format[] = { '%', '2', '$', 'd', ' ', '%', '1', '$', 'd', '\0' };
> ++static char buf[100];
> ++int main ()
> ++{
> ++ sprintf (buf, format, 33, 55);
> ++ return (strcmp (buf, "55 33") != 0);
> ++}], gt_cv_func_printf_posix=yes, gt_cv_func_printf_posix=no,
> ++ [
> ++ AC_EGREP_CPP(notposix, [
> ++#if defined __NetBSD__ || defined _MSC_VER || defined __MINGW32__ || defined __CYGWIN__
> ++ notposix
> ++#endif
> ++ ], gt_cv_func_printf_posix="guessing no",
> ++ gt_cv_func_printf_posix="guessing yes")
> ++ ])
> ++ ])
> ++ case $gt_cv_func_printf_posix in
> ++ *yes)
> ++ AC_DEFINE(HAVE_POSIX_PRINTF, 1,
> ++ [Define if your printf() function supports format strings with positions.])
> ++ ;;
> ++ esac
> ++])
> +--- lrzsz-0.12.20.safe/m4/progtest.m4 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/m4/progtest.m4 2004-09-12 14:40:34.990651568 -0400
> +@@ -0,0 +1,91 @@
> ++# progtest.m4 serial 3 (gettext-0.12)
> ++dnl Copyright (C) 1996-2003 Free Software Foundation, Inc.
> ++dnl This file is free software, distributed under the terms of the GNU
> ++dnl General Public License. As a special exception to the GNU General
> ++dnl Public License, this file may be distributed as part of a program
> ++dnl that contains a configuration script generated by Autoconf, under
> ++dnl the same distribution terms as the rest of that program.
> ++dnl
> ++dnl This file can can be used in projects which are not available under
> ++dnl the GNU General Public License or the GNU Library General Public
> ++dnl License but which still want to provide support for the GNU gettext
> ++dnl functionality.
> ++dnl Please note that the actual code of the GNU gettext library is covered
> ++dnl by the GNU Library General Public License, and the rest of the GNU
> ++dnl gettext package package is covered by the GNU General Public License.
> ++dnl They are *not* in the public domain.
> ++
> ++dnl Authors:
> ++dnl Ulrich Drepper <drepper at cygnus.com>, 1996.
> ++
> ++# Search path for a program which passes the given test.
> ++
> ++dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR,
> ++dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]])
> ++AC_DEFUN([AM_PATH_PROG_WITH_TEST],
> ++[
> ++# Prepare PATH_SEPARATOR.
> ++# The user is always right.
> ++if test "${PATH_SEPARATOR+set}" != set; then
> ++ echo "#! /bin/sh" >conf$$.sh
> ++ echo "exit 0" >>conf$$.sh
> ++ chmod +x conf$$.sh
> ++ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
> ++ PATH_SEPARATOR=';'
> ++ else
> ++ PATH_SEPARATOR=:
> ++ fi
> ++ rm -f conf$$.sh
> ++fi
> ++
> ++# Find out how to test for executable files. Don't use a zero-byte file,
> ++# as systems may use methods other than mode bits to determine executability.
> ++cat >conf$$.file <<_ASEOF
> ++#! /bin/sh
> ++exit 0
> ++_ASEOF
> ++chmod +x conf$$.file
> ++if test -x conf$$.file >/dev/null 2>&1; then
> ++ ac_executable_p="test -x"
> ++else
> ++ ac_executable_p="test -f"
> ++fi
> ++rm -f conf$$.file
> ++
> ++# Extract the first word of "$2", so it can be a program name with args.
> ++set dummy $2; ac_word=[$]2
> ++AC_MSG_CHECKING([for $ac_word])
> ++AC_CACHE_VAL(ac_cv_path_$1,
> ++[case "[$]$1" in
> ++ [[\\/]]* | ?:[[\\/]]*)
> ++ ac_cv_path_$1="[$]$1" # Let the user override the test with a path.
> ++ ;;
> ++ *)
> ++ ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
> ++ for ac_dir in ifelse([$5], , $PATH, [$5]); do
> ++ IFS="$ac_save_IFS"
> ++ test -z "$ac_dir" && ac_dir=.
> ++ for ac_exec_ext in '' $ac_executable_extensions; do
> ++ if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
> ++ if [$3]; then
> ++ ac_cv_path_$1="$ac_dir/$ac_word$ac_exec_ext"
> ++ break 2
> ++ fi
> ++ fi
> ++ done
> ++ done
> ++ IFS="$ac_save_IFS"
> ++dnl If no 4th arg is given, leave the cache variable unset,
> ++dnl so AC_PATH_PROGS will keep looking.
> ++ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4"
> ++])dnl
> ++ ;;
> ++esac])dnl
> ++$1="$ac_cv_path_$1"
> ++if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then
> ++ AC_MSG_RESULT([$]$1)
> ++else
> ++ AC_MSG_RESULT(no)
> ++fi
> ++AC_SUBST($1)dnl
> ++])
> +--- lrzsz-0.12.20.safe/m4/signed.m4 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/m4/signed.m4 2004-09-12 14:40:34.996650656 -0400
> +@@ -0,0 +1,19 @@
> ++# signed.m4 serial 1 (gettext-0.10.40)
> ++dnl Copyright (C) 2001-2002 Free Software Foundation, Inc.
> ++dnl This file is free software, distributed under the terms of the GNU
> ++dnl General Public License. As a special exception to the GNU General
> ++dnl Public License, this file may be distributed as part of a program
> ++dnl that contains a configuration script generated by Autoconf, under
> ++dnl the same distribution terms as the rest of that program.
> ++
> ++dnl From Bruno Haible.
> ++
> ++AC_DEFUN([bh_C_SIGNED],
> ++[
> ++ AC_CACHE_CHECK([for signed], bh_cv_c_signed,
> ++ [AC_TRY_COMPILE(, [signed char x;], bh_cv_c_signed=yes, bh_cv_c_signed=no)])
> ++ if test $bh_cv_c_signed = no; then
> ++ AC_DEFINE(signed, ,
> ++ [Define to empty if the C compiler doesn't support this keyword.])
> ++ fi
> ++])
> +--- lrzsz-0.12.20.safe/m4/size_max.m4 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/m4/size_max.m4 2004-09-12 14:40:35.003649592 -0400
> +@@ -0,0 +1,61 @@
> ++# size_max.m4 serial 2
> ++dnl Copyright (C) 2003 Free Software Foundation, Inc.
> ++dnl This file is free software, distributed under the terms of the GNU
> ++dnl General Public License. As a special exception to the GNU General
> ++dnl Public License, this file may be distributed as part of a program
> ++dnl that contains a configuration script generated by Autoconf, under
> ++dnl the same distribution terms as the rest of that program.
> ++
> ++dnl From Bruno Haible.
> ++
> ++AC_DEFUN([gl_SIZE_MAX],
> ++[
> ++ AC_CHECK_HEADERS(stdint.h)
> ++ dnl First test whether the system already has SIZE_MAX.
> ++ AC_MSG_CHECKING([for SIZE_MAX])
> ++ result=
> ++ AC_EGREP_CPP([Found it], [
> ++#include <limits.h>
> ++#if HAVE_STDINT_H
> ++#include <stdint.h>
> ++#endif
> ++#ifdef SIZE_MAX
> ++Found it
> ++#endif
> ++], result=yes)
> ++ if test -z "$result"; then
> ++ dnl Define it ourselves. Here we assume that the type 'size_t' is not wider
> ++ dnl than the type 'unsigned long'.
> ++ dnl The _AC_COMPUTE_INT macro works up to LONG_MAX, since it uses 'expr',
> ++ dnl which is guaranteed to work from LONG_MIN to LONG_MAX.
> ++ _AC_COMPUTE_INT([~(size_t)0 / 10], res_hi,
> ++ [#include <stddef.h>], result=?)
> ++ _AC_COMPUTE_INT([~(size_t)0 % 10], res_lo,
> ++ [#include <stddef.h>], result=?)
> ++ _AC_COMPUTE_INT([sizeof (size_t) <= sizeof (unsigned int)], fits_in_uint,
> ++ [#include <stddef.h>], result=?)
> ++ if test "$fits_in_uint" = 1; then
> ++ dnl Even though SIZE_MAX fits in an unsigned int, it must be of type
> ++ dnl 'unsigned long' if the type 'size_t' is the same as 'unsigned long'.
> ++ AC_TRY_COMPILE([#include <stddef.h>
> ++ extern size_t foo;
> ++ extern unsigned long foo;
> ++ ], [], fits_in_uint=0)
> ++ fi
> ++ if test -z "$result"; then
> ++ if test "$fits_in_uint" = 1; then
> ++ result="$res_hi$res_lo"U
> ++ else
> ++ result="$res_hi$res_lo"UL
> ++ fi
> ++ else
> ++ dnl Shouldn't happen, but who knows...
> ++ result='~(size_t)0'
> ++ fi
> ++ fi
> ++ AC_MSG_RESULT([$result])
> ++ if test "$result" != yes; then
> ++ AC_DEFINE_UNQUOTED([SIZE_MAX], [$result],
> ++ [Define as the maximum value of type 'size_t', if the system doesn't define it.])
> ++ fi
> ++])
> +--- lrzsz-0.12.20.safe/m4/stdint_h.m4 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/m4/stdint_h.m4 2004-09-12 14:40:35.009648680 -0400
> +@@ -0,0 +1,28 @@
> ++# stdint_h.m4 serial 3 (gettext-0.12)
> ++dnl Copyright (C) 1997-2003 Free Software Foundation, Inc.
> ++dnl This file is free software, distributed under the terms of the GNU
> ++dnl General Public License. As a special exception to the GNU General
> ++dnl Public License, this file may be distributed as part of a program
> ++dnl that contains a configuration script generated by Autoconf, under
> ++dnl the same distribution terms as the rest of that program.
> ++
> ++dnl From Paul Eggert.
> ++
> ++# Define HAVE_STDINT_H_WITH_UINTMAX if <stdint.h> exists,
> ++# doesn't clash with <sys/types.h>, and declares uintmax_t.
> ++
> ++AC_DEFUN([jm_AC_HEADER_STDINT_H],
> ++[
> ++ AC_CACHE_CHECK([for stdint.h], jm_ac_cv_header_stdint_h,
> ++ [AC_TRY_COMPILE(
> ++ [#include <sys/types.h>
> ++#include <stdint.h>],
> ++ [uintmax_t i = (uintmax_t) -1;],
> ++ jm_ac_cv_header_stdint_h=yes,
> ++ jm_ac_cv_header_stdint_h=no)])
> ++ if test $jm_ac_cv_header_stdint_h = yes; then
> ++ AC_DEFINE_UNQUOTED(HAVE_STDINT_H_WITH_UINTMAX, 1,
> ++ [Define if <stdint.h> exists, doesn't clash with <sys/types.h>,
> ++ and declares uintmax_t. ])
> ++ fi
> ++])
> +--- lrzsz-0.12.20.safe/m4/uintmax_t.m4 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/m4/uintmax_t.m4 2004-09-12 14:40:35.021646856 -0400
> +@@ -0,0 +1,32 @@
> ++# uintmax_t.m4 serial 7 (gettext-0.12)
> ++dnl Copyright (C) 1997-2003 Free Software Foundation, Inc.
> ++dnl This file is free software, distributed under the terms of the GNU
> ++dnl General Public License. As a special exception to the GNU General
> ++dnl Public License, this file may be distributed as part of a program
> ++dnl that contains a configuration script generated by Autoconf, under
> ++dnl the same distribution terms as the rest of that program.
> ++
> ++dnl From Paul Eggert.
> ++
> ++AC_PREREQ(2.13)
> ++
> ++# Define uintmax_t to 'unsigned long' or 'unsigned long long'
> ++# if it is not already defined in <stdint.h> or <inttypes.h>.
> ++
> ++AC_DEFUN([jm_AC_TYPE_UINTMAX_T],
> ++[
> ++ AC_REQUIRE([jm_AC_HEADER_INTTYPES_H])
> ++ AC_REQUIRE([jm_AC_HEADER_STDINT_H])
> ++ if test $jm_ac_cv_header_inttypes_h = no && test $jm_ac_cv_header_stdint_h = no; then
> ++ AC_REQUIRE([jm_AC_TYPE_UNSIGNED_LONG_LONG])
> ++ test $ac_cv_type_unsigned_long_long = yes \
> ++ && ac_type='unsigned long long' \
> ++ || ac_type='unsigned long'
> ++ AC_DEFINE_UNQUOTED(uintmax_t, $ac_type,
> ++ [Define to unsigned long or unsigned long long
> ++ if <stdint.h> and <inttypes.h> don't define.])
> ++ else
> ++ AC_DEFINE(HAVE_UINTMAX_T, 1,
> ++ [Define if you have the 'uintmax_t' type in <stdint.h> or <inttypes.h>.])
> ++ fi
> ++])
> +--- lrzsz-0.12.20.safe/m4/ulonglong.m4 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/m4/ulonglong.m4 2004-09-12 14:40:35.028645792 -0400
> +@@ -0,0 +1,25 @@
> ++# ulonglong.m4 serial 3
> ++dnl Copyright (C) 1999-2003 Free Software Foundation, Inc.
> ++dnl This file is free software, distributed under the terms of the GNU
> ++dnl General Public License. As a special exception to the GNU General
> ++dnl Public License, this file may be distributed as part of a program
> ++dnl that contains a configuration script generated by Autoconf, under
> ++dnl the same distribution terms as the rest of that program.
> ++
> ++dnl From Paul Eggert.
> ++
> ++# Define HAVE_UNSIGNED_LONG_LONG if 'unsigned long long' works.
> ++
> ++AC_DEFUN([jm_AC_TYPE_UNSIGNED_LONG_LONG],
> ++[
> ++ AC_CACHE_CHECK([for unsigned long long], ac_cv_type_unsigned_long_long,
> ++ [AC_TRY_LINK([unsigned long long ull = 1ULL; int i = 63;],
> ++ [unsigned long long ullmax = (unsigned long long) -1;
> ++ return ull << i | ull >> i | ullmax / ull | ullmax % ull;],
> ++ ac_cv_type_unsigned_long_long=yes,
> ++ ac_cv_type_unsigned_long_long=no)])
> ++ if test $ac_cv_type_unsigned_long_long = yes; then
> ++ AC_DEFINE(HAVE_UNSIGNED_LONG_LONG, 1,
> ++ [Define if you have the 'unsigned long long' type.])
> ++ fi
> ++])
> +--- lrzsz-0.12.20.safe/m4/wchar_t.m4 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/m4/wchar_t.m4 2004-09-12 14:40:35.034644880 -0400
> +@@ -0,0 +1,22 @@
> ++# wchar_t.m4 serial 1 (gettext-0.12)
> ++dnl Copyright (C) 2002-2003 Free Software Foundation, Inc.
> ++dnl This file is free software, distributed under the terms of the GNU
> ++dnl General Public License. As a special exception to the GNU General
> ++dnl Public License, this file may be distributed as part of a program
> ++dnl that contains a configuration script generated by Autoconf, under
> ++dnl the same distribution terms as the rest of that program.
> ++
> ++dnl From Bruno Haible.
> ++dnl Test whether <stddef.h> has the 'wchar_t' type.
> ++dnl Prerequisite: AC_PROG_CC
> ++
> ++AC_DEFUN([gt_TYPE_WCHAR_T],
> ++[
> ++ AC_CACHE_CHECK([for wchar_t], gt_cv_c_wchar_t,
> ++ [AC_TRY_COMPILE([#include <stddef.h>
> ++ wchar_t foo = (wchar_t)'\0';], ,
> ++ gt_cv_c_wchar_t=yes, gt_cv_c_wchar_t=no)])
> ++ if test $gt_cv_c_wchar_t = yes; then
> ++ AC_DEFINE(HAVE_WCHAR_T, 1, [Define if you have the 'wchar_t' type.])
> ++ fi
> ++])
> +--- lrzsz-0.12.20.safe/m4/wint_t.m4 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/m4/wint_t.m4 2004-09-12 14:40:35.040643968 -0400
> +@@ -0,0 +1,22 @@
> ++# wint_t.m4 serial 1 (gettext-0.12)
> ++dnl Copyright (C) 2003 Free Software Foundation, Inc.
> ++dnl This file is free software, distributed under the terms of the GNU
> ++dnl General Public License. As a special exception to the GNU General
> ++dnl Public License, this file may be distributed as part of a program
> ++dnl that contains a configuration script generated by Autoconf, under
> ++dnl the same distribution terms as the rest of that program.
> ++
> ++dnl From Bruno Haible.
> ++dnl Test whether <wchar.h> has the 'wint_t' type.
> ++dnl Prerequisite: AC_PROG_CC
> ++
> ++AC_DEFUN([gt_TYPE_WINT_T],
> ++[
> ++ AC_CACHE_CHECK([for wint_t], gt_cv_c_wint_t,
> ++ [AC_TRY_COMPILE([#include <wchar.h>
> ++ wint_t foo = (wchar_t)'\0';], ,
> ++ gt_cv_c_wint_t=yes, gt_cv_c_wint_t=no)])
> ++ if test $gt_cv_c_wint_t = yes; then
> ++ AC_DEFINE(HAVE_WINT_T, 1, [Define if you have the 'wint_t' type.])
> ++ fi
> ++])
> +--- lrzsz-0.12.20.safe/m4/xsize.m4 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/m4/xsize.m4 2004-09-12 14:40:35.047642904 -0400
> +@@ -0,0 +1,14 @@
> ++# xsize.m4 serial 2
> ++dnl Copyright (C) 2003 Free Software Foundation, Inc.
> ++dnl This file is free software, distributed under the terms of the GNU
> ++dnl General Public License. As a special exception to the GNU General
> ++dnl Public License, this file may be distributed as part of a program
> ++dnl that contains a configuration script generated by Autoconf, under
> ++dnl the same distribution terms as the rest of that program.
> ++
> ++AC_DEFUN([gl_XSIZE],
> ++[
> ++ dnl Prerequisites of lib/xsize.h.
> ++ AC_REQUIRE([gl_SIZE_MAX])
> ++ AC_CHECK_HEADERS(stdint.h)
> ++])
> +--- lrzsz-0.12.20.safe/Makefile.am 1998-12-30 06:19:40.000000000 -0500
> ++++ lrzsz-0.12.20/Makefile.am 2004-09-12 14:40:35.121631656 -0400
> +@@ -1,5 +1,5 @@
> + SUBDIRS = lib intl src po man testsuite
> +-EXTRA_DIST = check.lrzsz COMPATABILITY README.cvs README.isdn4linux \
> ++EXTRA_DIST = config.rpath check.lrzsz COMPATABILITY README.cvs README.isdn4linux \
> + README.gettext rpmrc buildrpm systype.in fastcheck.sh README.tests \
> + beos-runpiped.c fastcheck.beos
> + noinst_SCRIPTS=systype
> +@@ -83,3 +83,5 @@
> + rpm: $(PR).tar.gz Specfile
> + $(srcdir)/buildrpm $(srcdir)
> +
> ++
> ++ACLOCAL_AMFLAGS = -I m4
> +--- lrzsz-0.12.20.safe/Makefile.in 1998-12-30 11:31:40.000000000 -0500
> ++++ lrzsz-0.12.20/Makefile.in 2004-09-12 14:40:35.109633480 -0400
> +@@ -125,7 +125,7 @@
> + && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status
> +
> + $(ACLOCAL_M4): configure.in acinclude.m4
> +- cd $(srcdir) && $(ACLOCAL)
> ++ cd $(srcdir) && $(ACLOCAL) -I m4
> +
> + config.status: $(srcdir)/configure
> + $(SHELL) ./config.status --recheck
> +--- lrzsz-0.12.20.safe/mkinstalldirs 1998-04-26 09:20:52.000000000 -0400
> ++++ lrzsz-0.12.20/mkinstalldirs 2004-09-12 14:40:34.337750824 -0400
> +@@ -1,34 +1,150 @@
> + #! /bin/sh
> + # mkinstalldirs --- make directory hierarchy
> +-# Author: Noah Friedman <friedman at prep.ai.mit.edu>
> ++
> ++scriptversion=2004-02-15.20
> ++
> ++# Original author: Noah Friedman <friedman at prep.ai.mit.edu>
> + # Created: 1993-05-16
> +-# Last modified: 1995-03-05
> +-# Public domain
> ++# Public domain.
> ++#
> ++# This file is maintained in Automake, please report
> ++# bugs to <bug-automake at gnu.org> or send patches to
> ++# <automake-patches at gnu.org>.
> +
> + errstatus=0
> ++dirmode=""
> +
> +-for file in ${1+"$@"} ; do
> +- set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
> +- shift
> ++usage="\
> ++Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ...
> +
> +- pathcomp=
> +- for d in ${1+"$@"} ; do
> +- pathcomp="$pathcomp$d"
> +- case "$pathcomp" in
> +- -* ) pathcomp=./$pathcomp ;;
> +- esac
> ++Create each directory DIR (with mode MODE, if specified), including all
> ++leading file name components.
> +
> +- if test ! -d "$pathcomp"; then
> +- echo "mkdir $pathcomp" 1>&2
> +- mkdir "$pathcomp" > /dev/null 2>&1 || lasterr=$?
> +- fi
> ++Report bugs to <bug-automake at gnu.org>."
> +
> +- if test ! -d "$pathcomp"; then
> ++# process command line arguments
> ++while test $# -gt 0 ; do
> ++ case $1 in
> ++ -h | --help | --h*) # -h for help
> ++ echo "$usage"
> ++ exit 0
> ++ ;;
> ++ -m) # -m PERM arg
> ++ shift
> ++ test $# -eq 0 && { echo "$usage" 1>&2; exit 1; }
> ++ dirmode=$1
> ++ shift
> ++ ;;
> ++ --version)
> ++ echo "$0 $scriptversion"
> ++ exit 0
> ++ ;;
> ++ --) # stop option processing
> ++ shift
> ++ break
> ++ ;;
> ++ -*) # unknown option
> ++ echo "$usage" 1>&2
> ++ exit 1
> ++ ;;
> ++ *) # first non-opt arg
> ++ break
> ++ ;;
> ++ esac
> ++done
> ++
> ++for file
> ++do
> ++ if test -d "$file"; then
> ++ shift
> ++ else
> ++ break
> ++ fi
> ++done
> ++
> ++case $# in
> ++ 0) exit 0 ;;
> ++esac
> ++
> ++# Solaris 8's mkdir -p isn't thread-safe. If you mkdir -p a/b and
> ++# mkdir -p a/c at the same time, both will detect that a is missing,
> ++# one will create a, then the other will try to create a and die with
> ++# a "File exists" error. This is a problem when calling mkinstalldirs
> ++# from a parallel make. We use --version in the probe to restrict
> ++# ourselves to GNU mkdir, which is thread-safe.
> ++case $dirmode in
> ++ '')
> ++ if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
> ++ echo "mkdir -p -- $*"
> ++ exec mkdir -p -- "$@"
> ++ else
> ++ # On NextStep and OpenStep, the `mkdir' command does not
> ++ # recognize any option. It will interpret all options as
> ++ # directories to create, and then abort because `.' already
> ++ # exists.
> ++ test -d ./-p && rmdir ./-p
> ++ test -d ./--version && rmdir ./--version
> ++ fi
> ++ ;;
> ++ *)
> ++ if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 &&
> ++ test ! -d ./--version; then
> ++ echo "mkdir -m $dirmode -p -- $*"
> ++ exec mkdir -m "$dirmode" -p -- "$@"
> ++ else
> ++ # Clean up after NextStep and OpenStep mkdir.
> ++ for d in ./-m ./-p ./--version "./$dirmode";
> ++ do
> ++ test -d $d && rmdir $d
> ++ done
> ++ fi
> ++ ;;
> ++esac
> ++
> ++for file
> ++do
> ++ set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
> ++ shift
> ++
> ++ pathcomp=
> ++ for d
> ++ do
> ++ pathcomp="$pathcomp$d"
> ++ case $pathcomp in
> ++ -*) pathcomp=./$pathcomp ;;
> ++ esac
> ++
> ++ if test ! -d "$pathcomp"; then
> ++ echo "mkdir $pathcomp"
> ++
> ++ mkdir "$pathcomp" || lasterr=$?
> ++
> ++ if test ! -d "$pathcomp"; then
> + errstatus=$lasterr
> +- fi
> ++ else
> ++ if test ! -z "$dirmode"; then
> ++ echo "chmod $dirmode $pathcomp"
> ++ lasterr=""
> ++ chmod "$dirmode" "$pathcomp" || lasterr=$?
> +
> +- pathcomp="$pathcomp/"
> +- done
> ++ if test ! -z "$lasterr"; then
> ++ errstatus=$lasterr
> ++ fi
> ++ fi
> ++ fi
> ++ fi
> ++
> ++ pathcomp="$pathcomp/"
> ++ done
> + done
> +
> + exit $errstatus
> ++
> ++# Local Variables:
> ++# mode: shell-script
> ++# sh-indentation: 2
> ++# eval: (add-hook 'write-file-hooks 'time-stamp)
> ++# time-stamp-start: "scriptversion="
> ++# time-stamp-format: "%:y-%02m-%02d.%02H"
> ++# time-stamp-end: "$"
> ++# End:
> +--- lrzsz-0.12.20.safe/po/boldquot.sed 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/po/boldquot.sed 2004-09-12 14:40:34.723692152 -0400
> +@@ -0,0 +1,10 @@
> ++s/"\([^"]*\)"/“\1”/g
> ++s/`\([^`']*\)'/‘\1’/g
> ++s/ '\([^`']*\)' / ‘\1’ /g
> ++s/ '\([^`']*\)'$/ ‘\1’/g
> ++s/^'\([^`']*\)' /‘\1’ /g
> ++s/“”/""/g
> ++s/“/“[1m/g
> ++s/”/[0m”/g
> ++s/‘/‘[1m/g
> ++s/’/[0m’/g
> +--- lrzsz-0.12.20.safe/po/cat-id-tbl.c 1998-12-29 04:24:24.000000000 -0500
> ++++ lrzsz-0.12.20/po/cat-id-tbl.c 1969-12-31 19:00:00.000000000 -0500
> +@@ -1,234 +0,0 @@
> +-/* Automatically generated by po2tbl.sed from lrzsz.pot. */
> +-
> +-#if HAVE_CONFIG_H
> +-# include <config.h>
> +-#endif
> +-
> +-#include "libgettext.h"
> +-
> +-const struct _msg_ent _msg_tbl[] = {
> +- {"", 1},
> +- {"io_mode(,2) in rbsb.c not implemented\n", 2},
> +- {"caught signal %d; exiting", 3},
> +- {"command tries", 4},
> +- {"packetlength", 5},
> +- {"packetlength out of range 24..%ld", 6},
> +- {"framelength", 7},
> +- {"framelength out of range 32..%ld", 8},
> +- {"min_bps", 9},
> +- {"min_bps must be >= 0", 10},
> +- {"min_bps_time", 11},
> +- {"min_bps_time must be > 1", 12},
> +- {"hour to large (0..23)", 13},
> +- {"unparsable stop time\n", 14},
> +- {"minute to large (0..59)", 15},
> +- {"stop time to small", 16},
> +- {"stop-at", 17},
> +- {"timeout", 18},
> +- {"timeout out of range 10..1000", 19},
> +- {"security violation: can't do that under restricted shell\n", 20},
> +- {"window size", 21},
> +- {"cannot turnoff syslog", 22},
> +- {"startup delay", 23},
> +- {"out of memory", 24},
> +- {"this program was never intended to be used setuid\n", 25},
> +- {"need at least one file to send", 26},
> +- {"Can't send command in restricted mode\n", 27},
> +- {"hostname too long\n", 28},
> +- {"illegal server address\n", 29},
> +- {"can read only one file from stdin", 30},
> +- {"Transfer incomplete\n", 31},
> +- {"Transfer complete\n", 32},
> +- {"send_pseudo %s: cannot open tmpfile %s: %s", 33},
> +- {"send_pseudo %s: cannot lstat tmpfile %s: %s", 34},
> +- {"send_pseudo %s: avoiding symlink trap", 35},
> +- {"send_pseudo %s: cannot write to tmpfile %s: %s", 36},
> +- {"send_pseudo %s: failed", 37},
> +- {"send_pseudo %s: ok", 38},
> +- {"tcp protocol init failed\n", 39},
> +- {"Answering TIMESYNC at %s", 40},
> +- {"timezone", 41},
> +- {"timezone unknown", 42},
> +- {"Can't open any requested files.", 43},
> +- {"security violation: not allowed to upload from %s", 44},
> +- {"cannot open %s", 45},
> +- {"is not a file: %s", 46},
> +- {"%s/%s: error occured", 47},
> +- {"skipped: %s", 48},
> +- {"%s/%s: skipped", 49},
> +- {"Bytes Sent:%7ld BPS:%-8ld \n", 50},
> +- {"Sending %s, %ld blocks: ", 51},
> +- {"Give your local XMODEM receive command now.", 52},
> +- {"Sending: %s\n", 53},
> +- {"Timeout on pathname", 54},
> +- {"Receiver Cancelled", 55},
> +- {"No ACK on EOT", 56},
> +- {"Xmodem sectors/kbytes sent: %3d/%2dk", 57},
> +- {"Ymodem sectors/kbytes sent: %3d/%2dk", 58},
> +- {"Cancelled", 59},
> +- {"Timeout on sector ACK", 60},
> +- {"NAK on sector", 61},
> +- {"Got burst for sector ACK", 62},
> +- {"Got %02x for sector ACK", 63},
> +- {"Retry Count Exceeded", 64},
> +- {"Try `%s --help' for more information.\n", 65},
> +- {"%s version %s\n", 66},
> +- {"Usage: %s [options] file ...\n", 67},
> +- {" or: %s [options] -{c|i} COMMAND\n", 68},
> +- {"Send file(s) with ZMODEM/YMODEM/XMODEM protocol\n", 69},
> +- {"\
> +- (X) = option applies to XMODEM only\n\
> +- (Y) = option applies to YMODEM only\n\
> +- (Z) = option applies to ZMODEM only\n", 70},
> +- {"\
> +- -+, --append append to existing destination file (Z)\n\
> +- -2, --twostop use 2 stop bits\n\
> +- -4, --try-4k go up to 4K blocksize\n\
> +- --start-4k start with 4K blocksize (doesn't try 8)\n\
> +- -8, --try-8k go up to 8K blocksize\n\
> +- --start-8k start with 8K blocksize\n\
> +- -a, --ascii ASCII transfer (change CR/LF to LF)\n\
> +- -b, --binary binary transfer\n\
> +- -B, --bufsize N buffer N bytes (N==auto: buffer whole file)\n\
> +- -c, --command COMMAND execute remote command COMMAND (Z)\n\
> +- -C, --command-tries N try N times to execute a command (Z)\n\
> +- -d, --dot-to-slash change '.' to '/' in pathnames (Y/Z)\n\
> +- --delay-startup N sleep N seconds before doing anything\n\
> +- -e, --escape escape all control characters (Z)\n\
> +- -E, --rename force receiver to rename files it already has\n\
> +- -f, --full-path send full pathname (Y/Z)\n\
> +- -i, --immediate-command CMD send remote CMD, return immediately (Z)\n\
> +- -h, --help print this usage message\n\
> +- -k, --1k send 1024 byte packets (X)\n\
> +- -L, --packetlen N limit subpacket length to N bytes (Z)\n\
> +- -l, --framelen N limit frame length to N bytes (l>=L) (Z)\n\
> +- -m, --min-bps N stop transmission if BPS below N\n\
> +- -M, --min-bps-time N for at least N seconds (default: 120)\n", 71},
> +- {"\
> +- -n, --newer send file if source newer (Z)\n\
> +- -N, --newer-or-longer send file if source newer or longer (Z)\n\
> +- -o, --16-bit-crc use 16 bit CRC instead of 32 bit CRC (Z)\n\
> +- -O, --disable-timeouts disable timeout code, wait forever\n\
> +- -p, --protect protect existing destination file (Z)\n\
> +- -r, --resume resume interrupted file transfer (Z)\n\
> +- -R, --restricted restricted, more secure mode\n\
> +- -q, --quiet quiet (no progress reports)\n\
> +- -s, --stop-at {HH:MM|+N} stop transmission at HH:MM or in N seconds\n\
> +- --tcp build a TCP connection to transmit files\n\
> +- --tcp-server open socket, wait for connection\n\
> +- -u, --unlink unlink file after transmission\n\
> +- -U, --unrestrict turn off restricted mode (if allowed to)\n\
> +- -v, --verbose be verbose, provide debugging information\n\
> +- -w, --windowsize N Window is N bytes (Z)\n\
> +- -X, --xmodem use XMODEM protocol\n\
> +- -y, --overwrite overwrite existing files\n\
> +- -Y, --overwrite-or-skip overwrite existing files, else skip\n\
> +- --ymodem use YMODEM protocol\n\
> +- -Z, --zmodem use ZMODEM protocol\n\
> +-\n\
> +-short options use the same arguments as the long ones\n", 72},
> +- {"got ZRQINIT", 73},
> +- {"got ZCAN", 74},
> +- {"blklen now %d\n", 75},
> +- {"zsendfdata: bps rate %ld below min %ld", 76},
> +- {"zsendfdata: reached stop time", 77},
> +- {"Bytes Sent:%7ld/%7ld BPS:%-8ld ETA %02d:%02d ", 78},
> +- {"calc_blklen: reduced to %d due to error\n", 79},
> +- {"calc_blklen: returned old value %d due to low bpe diff\n", 80},
> +- {"calc_blklen: old %ld, new %ld, d %ld\n", 81},
> +- {"calc_blklen: calc total_bytes=%ld, bpe=%ld, ec=%ld\n", 82},
> +- {"calc_blklen: blklen %d, ok %ld, failed %ld -> %lu\n", 83},
> +- {"calc_blklen: returned %d as best\n", 84},
> +- {"\
> +-\n\
> +-countem: Total %d %ld\n", 85},
> +- {"Bad escape sequence %x", 86},
> +- {"Sender Canceled", 87},
> +- {"TIMEOUT", 88},
> +- {"Bad data subpacket", 89},
> +- {"Data subpacket too long", 90},
> +- {"Garbage count exceeded", 91},
> +- {"Got %s", 92},
> +- {"Retry %d: ", 93},
> +- {"don't have settimeofday, will not set time\n", 94},
> +- {"not running as root (this is good!), can not set time\n", 95},
> +- {"bytes_per_error", 96},
> +- {"bytes-per-error should be >100", 97},
> +- {"O_SYNC not supported by the kernel", 98},
> +- {"garbage on commandline", 99},
> +- {"Usage: %s [options] [filename.if.xmodem]\n", 100},
> +- {"Receive files with ZMODEM/YMODEM/XMODEM protocol\n", 101},
> +- {"\
> +- -+, --append append to existing files\n\
> +- -a, --ascii ASCII transfer (change CR/LF to LF)\n\
> +- -b, --binary binary transfer\n\
> +- -B, --bufsize N buffer N bytes (N==auto: buffer whole file)\n\
> +- -c, --with-crc Use 16 bit CRC (X)\n\
> +- -C, --allow-remote-commands allow execution of remote commands (Z)\n\
> +- -D, --null write all received data to /dev/null\n\
> +- --delay-startup N sleep N seconds before doing anything\n\
> +- -e, --escape Escape control characters (Z)\n\
> +- -E, --rename rename any files already existing\n\
> +- --errors N generate CRC error every N bytes (debugging)\n\
> +- -h, --help Help, print this usage message\n\
> +- -m, --min-bps N stop transmission if BPS below N\n\
> +- -M, --min-bps-time N for at least N seconds (default: 120)\n\
> +- -O, --disable-timeouts disable timeout code, wait forever for data\n\
> +- --o-sync open output file(s) in synchronous write mode\n\
> +- -p, --protect protect existing files\n\
> +- -q, --quiet quiet, no progress reports\n\
> +- -r, --resume try to resume interrupted file transfer (Z)\n\
> +- -R, --restricted restricted, more secure mode\n\
> +- -s, --stop-at {HH:MM|+N} stop transmission at HH:MM or in N seconds\n\
> +- -S, --timesync request remote time (twice: set local time)\n\
> +- --syslog[=off] turn syslog on or off, if possible\n\
> +- -t, --timeout N set timeout to N tenths of a second\n\
> +- -u, --keep-uppercase keep upper case filenames\n\
> +- -U, --unrestrict disable restricted mode (if allowed to)\n\
> +- -v, --verbose be verbose, provide debugging information\n\
> +- -w, --windowsize N Window is N bytes (Z)\n\
> +- -X --xmodem use XMODEM protocol\n\
> +- -y, --overwrite Yes, clobber existing file if any\n\
> +- --ymodem use YMODEM protocol\n\
> +- -Z, --zmodem use ZMODEM protocol\n\
> +-\n\
> +-short options use the same arguments as the long ones\n", 102},
> +- {"%s waiting to receive.", 103},
> +- {"\rBytes received: %7ld/%7ld BPS:%-6ld \r\n", 104},
> +- {"%s: ready to receive %s", 105},
> +- {"\rBytes received: %7ld BPS:%-6ld \r\n", 106},
> +- {"\
> +-\r\n\
> +-%s: %s removed.\r\n", 107},
> +- {"Pathname fetch returned EOT", 108},
> +- {"Received dup Sector", 109},
> +- {"Sync Error", 110},
> +- {"CRC", 111},
> +- {"Checksum", 112},
> +- {"Sector number garbled", 113},
> +- {"Sender Cancelled", 114},
> +- {"Got 0%o sector header", 115},
> +- {"file name ends with a /, skipped: %s\n", 116},
> +- {"zmanag=%d, Lzmanag=%d\n", 117},
> +- {"zconv=%d\n", 118},
> +- {"file exists, skipped: %s\n", 119},
> +- {"TIMESYNC: here %ld, remote %ld, diff %ld seconds\n", 120},
> +- {"TIMESYNC: cannot set time: %s\n", 121},
> +- {"cannot tmpfile() for tcp protocol synchronization", 122},
> +- {"Topipe", 123},
> +- {"Receiving: %s\n", 124},
> +- {"Blocks received: %d", 125},
> +- {"%s: %s exists\n", 126},
> +- {"%s:\tSecurity Violation", 127},
> +- {"remote command execution requested", 128},
> +- {"not executed", 129},
> +- {"got ZRINIT", 130},
> +- {"Skipped", 131},
> +- {"rzfile: bps rate %ld below min %ld", 132},
> +- {"rzfile: reached stop time", 133},
> +- {"\rBytes received: %7ld/%7ld BPS:%-6ld ETA %02d:%02d ", 134},
> +- {"fgets for tcp protocol synchronization failed: ", 135},
> +- {"file close error", 136},
> +-};
> +-
> +-int _msg_tbl_length = 136;
> +--- lrzsz-0.12.20.safe/po/ChangeLog 1998-04-26 09:20:52.000000000 -0400
> ++++ lrzsz-0.12.20/po/ChangeLog 2004-09-12 14:40:34.793681512 -0400
> +@@ -1,3 +1,15 @@
> ++2004-09-12 gettextize <bug-gnu-gettext at gnu.org>
> ++
> ++ * boldquot.sed: New file, from gettext-0.14.1.
> ++ * en at boldquot.header: New file, from gettext-0.14.1.
> ++ * en at quot.header: New file, from gettext-0.14.1.
> ++ * insert-header.sin: New file, from gettext-0.14.1.
> ++ * quot.sed: New file, from gettext-0.14.1.
> ++ * remove-potcdate.sin: New file, from gettext-0.14.1.
> ++ * Rules-quot: New file, from gettext-0.14.1.
> ++ * cat-id-tbl.c: Remove file.
> ++ * stamp-cat-id: Remove file.
> ++
> + /* Automatically generated by po2tbl.sed from lrzsz.pot. */
> +
> + #if HAVE_CONFIG_H
> +--- lrzsz-0.12.20.safe/po/en at boldquot.header 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/po/en at boldquot.header 2004-09-12 14:40:34.731690936 -0400
> +@@ -0,0 +1,25 @@
> ++# All this catalog "translates" are quotation characters.
> ++# The msgids must be ASCII and therefore cannot contain real quotation
> ++# characters, only substitutes like grave accent (0x60), apostrophe (0x27)
> ++# and double quote (0x22). These substitutes look strange; see
> ++# http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html
> ++#
> ++# This catalog translates grave accent (0x60) and apostrophe (0x27) to
> ++# left single quotation mark (U+2018) and right single quotation mark (U+2019).
> ++# It also translates pairs of apostrophe (0x27) to
> ++# left single quotation mark (U+2018) and right single quotation mark (U+2019)
> ++# and pairs of quotation mark (0x22) to
> ++# left double quotation mark (U+201C) and right double quotation mark (U+201D).
> ++#
> ++# When output to an UTF-8 terminal, the quotation characters appear perfectly.
> ++# When output to an ISO-8859-1 terminal, the single quotation marks are
> ++# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to
> ++# grave/acute accent (by libiconv), and the double quotation marks are
> ++# transliterated to 0x22.
> ++# When output to an ASCII terminal, the single quotation marks are
> ++# transliterated to apostrophes, and the double quotation marks are
> ++# transliterated to 0x22.
> ++#
> ++# This catalog furthermore displays the text between the quotation marks in
> ++# bold face, assuming the VT100/XTerm escape sequences.
> ++#
> +--- lrzsz-0.12.20.safe/po/en at quot.header 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/po/en at quot.header 2004-09-12 14:40:34.737690024 -0400
> +@@ -0,0 +1,22 @@
> ++# All this catalog "translates" are quotation characters.
> ++# The msgids must be ASCII and therefore cannot contain real quotation
> ++# characters, only substitutes like grave accent (0x60), apostrophe (0x27)
> ++# and double quote (0x22). These substitutes look strange; see
> ++# http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html
> ++#
> ++# This catalog translates grave accent (0x60) and apostrophe (0x27) to
> ++# left single quotation mark (U+2018) and right single quotation mark (U+2019).
> ++# It also translates pairs of apostrophe (0x27) to
> ++# left single quotation mark (U+2018) and right single quotation mark (U+2019)
> ++# and pairs of quotation mark (0x22) to
> ++# left double quotation mark (U+201C) and right double quotation mark (U+201D).
> ++#
> ++# When output to an UTF-8 terminal, the quotation characters appear perfectly.
> ++# When output to an ISO-8859-1 terminal, the single quotation marks are
> ++# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to
> ++# grave/acute accent (by libiconv), and the double quotation marks are
> ++# transliterated to 0x22.
> ++# When output to an ASCII terminal, the single quotation marks are
> ++# transliterated to apostrophes, and the double quotation marks are
> ++# transliterated to 0x22.
> ++#
> +--- lrzsz-0.12.20.safe/po/insert-header.sin 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/po/insert-header.sin 2004-09-12 14:40:34.743689112 -0400
> +@@ -0,0 +1,23 @@
> ++# Sed script that inserts the file called HEADER before the header entry.
> ++#
> ++# At each occurrence of a line starting with "msgid ", we execute the following
> ++# commands. At the first occurrence, insert the file. At the following
> ++# occurrences, do nothing. The distinction between the first and the following
> ++# occurrences is achieved by looking at the hold space.
> ++/^msgid /{
> ++x
> ++# Test if the hold space is empty.
> ++s/m/m/
> ++ta
> ++# Yes it was empty. First occurrence. Read the file.
> ++r HEADER
> ++# Output the file's contents by reading the next line. But don't lose the
> ++# current line while doing this.
> ++g
> ++N
> ++bb
> ++:a
> ++# The hold space was nonempty. Following occurrences. Do nothing.
> ++x
> ++:b
> ++}
> +--- lrzsz-0.12.20.safe/po/Makevars 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/po/Makevars 2004-09-12 14:40:34.748688352 -0400
> +@@ -0,0 +1,41 @@
> ++# Makefile variables for PO directory in any package using GNU gettext.
> ++
> ++# Usually the message domain is the same as the package name.
> ++DOMAIN = $(PACKAGE)
> ++
> ++# These two variables depend on the location of this directory.
> ++subdir = po
> ++top_builddir = ..
> ++
> ++# These options get passed to xgettext.
> ++XGETTEXT_OPTIONS = --keyword=_ --keyword=N_
> ++
> ++# This is the copyright holder that gets inserted into the header of the
> ++# $(DOMAIN).pot file. Set this to the copyright holder of the surrounding
> ++# package. (Note that the msgstr strings, extracted from the package's
> ++# sources, belong to the copyright holder of the package.) Translators are
> ++# expected to transfer the copyright for their translations to this person
> ++# or entity, or to disclaim their copyright. The empty string stands for
> ++# the public domain; in this case the translators are expected to disclaim
> ++# their copyright.
> ++COPYRIGHT_HOLDER = Free Software Foundation, Inc.
> ++
> ++# This is the email address or URL to which the translators shall report
> ++# bugs in the untranslated strings:
> ++# - Strings which are not entire sentences, see the maintainer guidelines
> ++# in the GNU gettext documentation, section 'Preparing Strings'.
> ++# - Strings which use unclear terms or require additional context to be
> ++# understood.
> ++# - Strings which make invalid assumptions about notation of date, time or
> ++# money.
> ++# - Pluralisation problems.
> ++# - Incorrect English spelling.
> ++# - Incorrect formatting.
> ++# It can be your email address, or a mailing list address where translators
> ++# can write to without being subscribed, or the URL of a web page through
> ++# which the translators can contact you.
> ++MSGID_BUGS_ADDRESS =
> ++
> ++# This is the list of locale categories, beyond LC_MESSAGES, for which the
> ++# message catalogs shall be used. It is usually empty.
> ++EXTRA_LOCALE_CATEGORIES =
> +--- lrzsz-0.12.20.safe/po/quot.sed 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/po/quot.sed 2004-09-12 14:40:34.754687440 -0400
> +@@ -0,0 +1,6 @@
> ++s/"\([^"]*\)"/“\1”/g
> ++s/`\([^`']*\)'/‘\1’/g
> ++s/ '\([^`']*\)' / ‘\1’ /g
> ++s/ '\([^`']*\)'$/ ‘\1’/g
> ++s/^'\([^`']*\)' /‘\1’ /g
> ++s/“”/""/g
> +--- lrzsz-0.12.20.safe/po/remove-potcdate.sin 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/po/remove-potcdate.sin 2004-09-12 14:40:34.762686224 -0400
> +@@ -0,0 +1,19 @@
> ++# Sed script that remove the POT-Creation-Date line in the header entry
> ++# from a POT file.
> ++#
> ++# The distinction between the first and the following occurrences of the
> ++# pattern is achieved by looking at the hold space.
> ++/^"POT-Creation-Date: .*"$/{
> ++x
> ++# Test if the hold space is empty.
> ++s/P/P/
> ++ta
> ++# Yes it was empty. First occurrence. Remove the line.
> ++g
> ++d
> ++bb
> ++:a
> ++# The hold space was nonempty. Following occurrences. Do nothing.
> ++x
> ++:b
> ++}
> +--- lrzsz-0.12.20.safe/po/Rules-quot 1969-12-31 19:00:00.000000000 -0500
> ++++ lrzsz-0.12.20/po/Rules-quot 2004-09-12 14:40:34.778683792 -0400
> +@@ -0,0 +1,47 @@
> ++# Special Makefile rules for English message catalogs with quotation marks.
> ++
> ++DISTFILES.common.extra1 = quot.sed boldquot.sed en at quot.header en at boldquot.header insert-header.sin Rules-quot
> ++
> ++.SUFFIXES: .insert-header .po-update-en
> ++
> ++en at quot.po-create:
> ++ $(MAKE) en at quot.po-update
> ++en at boldquot.po-create:
> ++ $(MAKE) en at boldquot.po-update
> ++
> ++en at quot.po-update: en at quot.po-update-en
> ++en at boldquot.po-update: en at boldquot.po-update-en
> ++
> ++.insert-header.po-update-en:
> ++ @lang=`echo $@ | sed -e 's/\.po-update-en$$//'`; \
> ++ if test "$(PACKAGE)" = "gettext"; then PATH=`pwd`/../src:$$PATH; GETTEXTLIBDIR=`cd $(top_srcdir)/src && pwd`; export GETTEXTLIBDIR; fi; \
> ++ tmpdir=`pwd`; \
> ++ echo "$$lang:"; \
> ++ ll=`echo $$lang | sed -e 's/@.*//'`; \
> ++ LC_ALL=C; export LC_ALL; \
> ++ cd $(srcdir); \
> ++ if $(MSGINIT) -i $(DOMAIN).pot --no-translator -l $$ll -o - 2>/dev/null | sed -f $$tmpdir/$$lang.insert-header | $(MSGCONV) -t UTF-8 | $(MSGFILTER) sed -f `echo $$lang | sed -e 's/.*@//'`.sed 2>/dev/null > $$tmpdir/$$lang.new.po; then \
> ++ if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
> ++ rm -f $$tmpdir/$$lang.new.po; \
> ++ else \
> ++ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
> ++ :; \
> ++ else \
> ++ echo "creation of $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
> ++ exit 1; \
> ++ fi; \
> ++ fi; \
> ++ else \
> ++ echo "creation of $$lang.po failed!" 1>&2; \
> ++ rm -f $$tmpdir/$$lang.new.po; \
> ++ fi
> ++
> ++en at quot.insert-header: insert-header.sin
> ++ sed -e '/^#/d' -e 's/HEADER/en at quot.header/g' $(srcdir)/insert-header.sin > en at quot.insert-header
> ++
> ++en at boldquot.insert-header: insert-header.sin
> ++ sed -e '/^#/d' -e 's/HEADER/en at boldquot.header/g' $(srcdir)/insert-header.sin > en at boldquot.insert-header
> ++
> ++mostlyclean: mostlyclean-quot
> ++mostlyclean-quot:
> ++ rm -f *.insert-header
> +--- lrzsz-0.12.20.safe/po/stamp-cat-id 1998-12-30 02:50:01.000000000 -0500
> ++++ lrzsz-0.12.20/po/stamp-cat-id 1969-12-31 19:00:00.000000000 -0500
> +@@ -1 +0,0 @@
> +-timestamp
> +--- lrzsz-0.12.20.safe/src/Makefile.am 1998-12-28 03:38:47.000000000 -0500
> ++++ lrzsz-0.12.20/src/Makefile.am 2004-09-12 14:40:53.665812512 -0400
> +@@ -2,12 +2,12 @@
> + lrz_SOURCES=lrz.c timing.c zperr.c zreadline.c crctab.c rbsb.c zm.c protname.c tcp.c lsyslog.c canit.c
> + lsz_SOURCES=lsz.c timing.c zperr.c zreadline.c crctab.c rbsb.c zm.c protname.c tcp.c lsyslog.c canit.c
> + noinst_HEADERS = timing.h zglobal.h zmodem.h
> +-datadir = $(prefix)/@DATADIRNAME@
> ++datadir = $(prefix)/share
> + localedir = $(datadir)/locale
> + CFLAGS=@CFLAGS@
> + DISTCLEAN_FILES=lrzszbug
> +
> +-LDADD = ../lib/libzmodem.a @INTLLIBS@
> ++LDADD = ../lib/libzmodem.a @LIBINTL@
> + AUTOMAKE_OPTIONS=ansi2knr
> + EXTRA_DIST = ansi2knr.1 ansi2knr.c lrzszbug.in
> + INCLUDES = -I.. -I$(srcdir) -I$(top_srcdir)/src -I../intl -I$(top_srcdir)/lib
> diff --git a/meta/recipes-bsp/lrzsz/lrzsz-0.12.20/include.patch b/meta/recipes-bsp/lrzsz/lrzsz-0.12.20/include.patch
> new file mode 100644
> index 00000000000..5fcb3aa92b5
> --- /dev/null
> +++ b/meta/recipes-bsp/lrzsz/lrzsz-0.12.20/include.patch
> @@ -0,0 +1,25 @@
> +Implicit declaration compile warning fixes from Debian
> +
> +Signed-off-by: Adrian Bunk <bunk at stusta.de>
> +Upstream-Status: Inappropriate [upstream is dead]
> +
> +--- lrzsz-0.12.21.orig/lib/long-options.c
> ++++ lrzsz-0.12.21/lib/long-options.c
> +@@ -22,6 +22,7 @@
> + #endif
> +
> + #include <stdio.h>
> ++#include <stdlib.h>
> + #include <getopt.h>
> + #include "long-options.h"
> +
> +--- lrzsz-0.12.21.orig/src/lsyslog.c
> ++++ lrzsz-0.12.21/src/lsyslog.c
> +@@ -22,6 +22,7 @@
> + #ifdef ENABLE_SYSLOG
> + #include "zglobal.h"
> + #include <pwd.h>
> ++#include <stdio.h>
> + #include <stdlib.h>
> + #include <string.h>
> + #endif
> diff --git a/meta/recipes-bsp/lrzsz/lrzsz-0.12.20/lrzsz-check-locale.h.patch b/meta/recipes-bsp/lrzsz/lrzsz-0.12.20/lrzsz-check-locale.h.patch
> new file mode 100644
> index 00000000000..9e46dfa070f
> --- /dev/null
> +++ b/meta/recipes-bsp/lrzsz/lrzsz-0.12.20/lrzsz-check-locale.h.patch
> @@ -0,0 +1,32 @@
> +From 28b473c3c96682a820e292cc1be006e19aee11bc Mon Sep 17 00:00:00 2001
> +From: Jackie Huang <jackie.huang at windriver.com>
> +Date: Fri, 24 May 2013 01:07:24 -0400
> +Subject: [PATCH] lrzsz check locale.h
> +
> +fix the build failure when using -O0 in a debug build:
> +lrz.c:284:13: error: 'LC_ALL' undeclared (first use in this function)
> +
> +Upstream-Status: Submitted [uwe at ohse.de]
> +
> +Signed-off-by: Jackie Huang <jackie.huang at windriver.com>
> +Signed-off-by: Mark Hatle <mark.hatle at windriver.com>
> +---
> + configure.in | 2 +-
> + 1 file changed, 1 insertion(+), 1 deletion(-)
> +
> +diff --git a/configure.in b/configure.in
> +index 6e2064c..c10460c 100644
> +--- a/configure.in
> ++++ b/configure.in
> +@@ -130,7 +130,7 @@ AC_CHECK_HEADERS(fcntl.h limits.h sys/ioctl.h sys/time.h unistd.h sys/times.h)
> + LRZSZ_HEADERS_TERM_IO
> + AC_CHECK_HEADERS(termios.h sys/termios.h termio.h sys/termio.h sgtty.h)
> + AC_CHECK_HEADERS(sys/mman.h utime.h syslog.h sys/syslog.h sys/param.h)
> +-AC_CHECK_HEADERS(sys/select.h strings.h arpa/inet.h)
> ++AC_CHECK_HEADERS(sys/select.h strings.h locale.h arpa/inet.h)
> +
> + dnl Checks for typedefs, structures, and compiler characteristics.
> + AC_TYPE_SIZE_T
> +--
> +1.7.9.5
> +
> diff --git a/meta/recipes-bsp/lrzsz/lrzsz-0.12.20/lrzsz_fix_for_automake-1.12.patch b/meta/recipes-bsp/lrzsz/lrzsz-0.12.20/lrzsz_fix_for_automake-1.12.patch
> new file mode 100644
> index 00000000000..682f1c9c8de
> --- /dev/null
> +++ b/meta/recipes-bsp/lrzsz/lrzsz-0.12.20/lrzsz_fix_for_automake-1.12.patch
> @@ -0,0 +1,49 @@
> +Upstream-Status: Pending
> +
> +This patch fixes following issue with automake 1.12
> +
> +| configure.in:95: error: automatic de-ANSI-fication support has been removed
> +...
> +| lib/Makefile.am:3: error: automatic de-ANSI-fication support has been removed
> +| lib/Makefile.am: installing './depcomp'
> +| src/Makefile.am:11: error: automatic de-ANSI-fication support has been removed
> +
> +
> +Signed-off-by: Nitin A Kamble <nitin.a.kamble at intel.com>
> +2012/05/03
> +
> +Index: lrzsz-0.12.20/configure.in
> +===================================================================
> +--- lrzsz-0.12.20.orig/configure.in
> ++++ lrzsz-0.12.20/configure.in
> +@@ -92,7 +92,6 @@ AC_PROG_RANLIB
> + AC_ISC_POSIX
> + AC_AIX
> + AC_MINIX
> +-AM_C_PROTOTYPES
> + AC_C_CONST
> + AC_C_INLINE
> +
> +Index: lrzsz-0.12.20/lib/Makefile.am
> +===================================================================
> +--- lrzsz-0.12.20.orig/lib/Makefile.am
> ++++ lrzsz-0.12.20/lib/Makefile.am
> +@@ -1,6 +1,5 @@
> + noinst_LIBRARIES=libzmodem.a
> + CFLAGS=@CFLAGS@
> +-AUTOMAKE_OPTIONS=ansi2knr
> +
> + EXTRA_DIST = alloca.c ansi2knr.1 ansi2knr.c \
> + getopt.c getopt1.c mkdir.c mktime.c \
> +Index: lrzsz-0.12.20/src/Makefile.am
> +===================================================================
> +--- lrzsz-0.12.20.orig/src/Makefile.am
> ++++ lrzsz-0.12.20/src/Makefile.am
> +@@ -8,7 +8,6 @@ CFLAGS=@CFLAGS@
> + DISTCLEAN_FILES=lrzszbug
> +
> + LDADD = ../lib/libzmodem.a @LIBINTL@
> +-AUTOMAKE_OPTIONS=ansi2knr
> + EXTRA_DIST = ansi2knr.1 ansi2knr.c lrzszbug.in
> + INCLUDES = -I.. -I$(srcdir) -I$(top_srcdir)/src -I../intl -I$(top_srcdir)/lib
> + #DEFS = -DLOCALEDIR=\"$(localedir)\" -DOS=\"@host_os@\" -DCPU=\"@host_cpu@\"
> diff --git a/meta/recipes-bsp/lrzsz/lrzsz-0.12.20/makefile.patch b/meta/recipes-bsp/lrzsz/lrzsz-0.12.20/makefile.patch
> new file mode 100644
> index 00000000000..ace592c8f26
> --- /dev/null
> +++ b/meta/recipes-bsp/lrzsz/lrzsz-0.12.20/makefile.patch
> @@ -0,0 +1,22 @@
> +Upstream-Status: Inappropriate [configuration]
> +
> +diff -ruN lrzsz-0.12.20_org/src/Makefile.in lrzsz-0.12.20_patch/src/Makefile.in
> +--- lrzsz-0.12.20_org/src/Makefile.in 1998-12-30 17:31:46.000000000 +0100
> ++++ lrzsz-0.12.20_patch/src/Makefile.in 2004-04-29 13:57:33.434909656 +0200
> +@@ -372,13 +372,13 @@
> + rm -f $(DESTDIR)/$(bindir)/`echo lsb | sed -e '$(transform)'`
> + ln $(DESTDIR)/$(bindir)/`echo lsz |sed -e '$(transform)'` \
> + $(DESTDIR)/$(bindir)/`echo lsb |sed -e '$(transform)'`
> +- rm -f $(bindir)/`echo lsx | sed -e '$(transform)'`
> ++ rm -f $(DESTDIR)/$(bindir)/`echo lsx | sed -e '$(transform)'`
> + ln $(DESTDIR)/$(bindir)/`echo lsz |sed -e '$(transform)'` \
> + $(DESTDIR)/$(bindir)/`echo lsx |sed -e '$(transform)'`
> +- rm -f $(bindir)/`echo lrb | sed -e '$(transform)'`
> ++ rm -f $(DESTDIR)/$(bindir)/`echo lrb | sed -e '$(transform)'`
> + ln $(DESTDIR)/$(bindir)/`echo lrz |sed -e '$(transform)'` \
> + $(DESTDIR)/$(bindir)/`echo lrb |sed -e '$(transform)'`
> +- rm -f $(bindir)/`echo lrx | sed -e '$(transform)'`
> ++ rm -f $(DESTDIR)/$(bindir)/`echo lrx | sed -e '$(transform)'`
> + ln $(DESTDIR)/$(bindir)/`echo lrz |sed -e '$(transform)'` \
> + $(DESTDIR)/$(bindir)/`echo lrx |sed -e '$(transform)'`
> + # rm -f $(bindir)/`echo lrzszbug | sed -e '$(transform)'`
> diff --git a/meta/recipes-bsp/lrzsz/lrzsz_0.12.20.bb b/meta/recipes-bsp/lrzsz/lrzsz_0.12.20.bb
> new file mode 100644
> index 00000000000..34556b2c294
> --- /dev/null
> +++ b/meta/recipes-bsp/lrzsz/lrzsz_0.12.20.bb
> @@ -0,0 +1,50 @@
> +SUMMARY = "Tools for zmodem/xmodem/ymodem file transfer"
> +DESCRIPTION = "Lrzsz is a cosmetically modified zmodem/ymodem/xmodem package built from \
> +the public-domain version of Chuck Forsberg's rzsz package. \
> +These programs use error correcting protocols ({z,x,y}modem) to send (sz, sx, sb) and \
> +receive (rz, rx, rb) files over a dial-in serial port from a variety of programs \
> +running under various operating systems. "
> +HOMEPAGE = "http://www.ohse.de/uwe/software/lrzsz.html"
> +LICENSE = "GPLv2+"
> +LIC_FILES_CHKSUM = "file://COPYING;md5=0636e73ff0215e8d672dc4c32c317bb3 \
> + file://src/lrz.c;beginline=1;endline=10;md5=5276956373ff7d8758837f6399a1045f"
> +SECTION = "console/network"
> +DEPENDS = ""
> +PR = "r6"
> +
> +SRC_URI = "http://www.ohse.de/uwe/releases/lrzsz-${PV}.tar.gz \
> + file://autotools.patch \
> + file://makefile.patch \
> + file://gettext.patch \
> + file://acdefine.patch \
> + file://lrzsz_fix_for_automake-1.12.patch \
> + file://lrzsz-check-locale.h.patch \
> + file://cve-2018-10195.patch \
> + file://include.patch \
> + "
> +
> +SRC_URI[md5sum] = "b5ce6a74abc9b9eb2af94dffdfd372a4"
> +SRC_URI[sha256sum] = "c28b36b14bddb014d9e9c97c52459852f97bd405f89113f30bee45ed92728ff1"
> +
> +UPSTREAM_CHECK_URI = "http://ohse.de/uwe/software/lrzsz.html"
> +
> +inherit autotools gettext
> +
> +do_install() {
> + install -d ${D}${bindir}/
> + install -m 0755 src/lrz src/lsz ${D}${bindir}/
> +}
> +
> +inherit update-alternatives
> +
> +ALTERNATIVE_PRIORITY = "100"
> +
> +ALTERNATIVE_${PN} = "rz rx rb sz sx sb"
> +
> +ALTERNATIVE_TARGET[rz] = "${bindir}/lrz"
> +ALTERNATIVE_TARGET[rx] = "${bindir}/lrz"
> +ALTERNATIVE_TARGET[rb] = "${bindir}/lrz"
> +
> +ALTERNATIVE_TARGET[sz] = "${bindir}/lsz"
> +ALTERNATIVE_TARGET[sx] = "${bindir}/lsz"
> +ALTERNATIVE_TARGET[sb] = "${bindir}/lsz"
> diff --git a/meta/recipes-core/packagegroups/packagegroup-base.bb b/meta/recipes-core/packagegroups/packagegroup-base.bb
> index 610b1e0216e..1f802da09b7 100644
> --- a/meta/recipes-core/packagegroups/packagegroup-base.bb
> +++ b/meta/recipes-core/packagegroups/packagegroup-base.bb
> @@ -337,7 +337,7 @@ RRECOMMENDS_packagegroup-base-ipv6 = "\
> SUMMARY_packagegroup-base-serial = "Serial port support"
> RDEPENDS_packagegroup-base-serial = "\
> setserial \
> - "
> + lrzsz "
>
> SUMMARY_packagegroup-base-phone = "Cellular telephony (voice) support"
> RDEPENDS_packagegroup-base-phone = "\
> diff --git a/meta/recipes-extended/minicom/minicom_2.7.1.bb b/meta/recipes-extended/minicom/minicom_2.7.1.bb
> index 1dbb8c0316b..1e6f1317ebe 100644
> --- a/meta/recipes-extended/minicom/minicom_2.7.1.bb
> +++ b/meta/recipes-extended/minicom/minicom_2.7.1.bb
> @@ -24,3 +24,5 @@ inherit autotools gettext pkgconfig
> do_install() {
> for d in doc extras man lib src; do make -C $d DESTDIR=${D} install; done
> }
> +
> +RRECOMMENDS_${PN} += "lrzsz"
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openembedded.org/pipermail/openembedded-core/attachments/20191127/eb0a8367/attachment-0001.html>
More information about the Openembedded-core
mailing list