aboutsummaryrefslogtreecommitdiffstats
path: root/recipes/lrzsz
diff options
context:
space:
mode:
authorDenys Dmytriyenko <denis@denix.org>2009-03-17 14:32:59 -0400
committerDenys Dmytriyenko <denis@denix.org>2009-03-17 14:32:59 -0400
commit709c4d66e0b107ca606941b988bad717c0b45d9b (patch)
tree37ee08b1eb308f3b2b6426d5793545c38396b838 /recipes/lrzsz
parentfa6cd5a3b993f16c27de4ff82b42684516d433ba (diff)
downloadopenembedded-709c4d66e0b107ca606941b988bad717c0b45d9b.tar.gz
openembedded-709c4d66e0b107ca606941b988bad717c0b45d9b.tar.bz2
openembedded-709c4d66e0b107ca606941b988bad717c0b45d9b.zip
rename packages/ to recipes/ per earlier agreement
See links below for more details: http://thread.gmane.org/gmane.comp.handhelds.openembedded/21326 http://thread.gmane.org/gmane.comp.handhelds.openembedded/21816 Signed-off-by: Denys Dmytriyenko <denis@denix.org> Acked-by: Mike Westerhof <mwester@dls.net> Acked-by: Philip Balister <philip@balister.org> Acked-by: Khem Raj <raj.khem@gmail.com> Acked-by: Marcin Juszkiewicz <hrw@openembedded.org> Acked-by: Koen Kooi <koen@openembedded.org> Acked-by: Frans Meulenbroeks <fransmeulenbroeks@gmail.com>
Diffstat (limited to 'recipes/lrzsz')
-rw-r--r--recipes/lrzsz/lrzsz-0.12.20/autotools.patch37
-rw-r--r--recipes/lrzsz/lrzsz-0.12.20/gettext.patch21882
-rw-r--r--recipes/lrzsz/lrzsz-0.12.20/makefile.patch20
-rw-r--r--recipes/lrzsz/lrzsz_0.12.20.bb36
4 files changed, 21975 insertions, 0 deletions
diff --git a/recipes/lrzsz/lrzsz-0.12.20/autotools.patch b/recipes/lrzsz/lrzsz-0.12.20/autotools.patch
new file mode 100644
index 0000000000..73f5a062ef
--- /dev/null
+++ b/recipes/lrzsz/lrzsz-0.12.20/autotools.patch
@@ -0,0 +1,37 @@
+--- 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/recipes/lrzsz/lrzsz-0.12.20/gettext.patch b/recipes/lrzsz/lrzsz-0.12.20/gettext.patch
new file mode 100644
index 0000000000..241ffd90ba
--- /dev/null
+++ b/recipes/lrzsz/lrzsz-0.12.20/gettext.patch
@@ -0,0 +1,21882 @@
+--- 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@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@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@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@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@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@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@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@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@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@cygnus.com>
+-
+- * intlh.inst.in: Reformat copyright.
+-
+-1997-08-19 15:22 Ulrich Drepper <drepper@cygnus.com>
+-
+- * dcgettext.c (DCGETTEXT): Remove wrong comment.
+-
+-1997-08-16 00:13 Ulrich Drepper <drepper@cygnus.com>
+-
+- * Makefile.in (install-data): Don't change directory to install.
+-
+-1997-08-01 14:30 Ulrich Drepper <drepper@cygnus.com>
+-
+- * cat-compat.c: Fix copyright.
+-
+- * localealias.c: Don't define strchr unless !HAVE_STRCHR.
+-
+- * loadmsgcat.c: Update copyright. Fix typos.
+-
+- * l10nflist.c: Don't define strchr unless !HAVE_STRCHR.
+- (_nl_make_l10nflist): Handle sponsor and revision correctly.
+-
+- * gettext.c: Update copyright.
+- * gettext.h: Likewise.
+- * hash-string.h: Likewise.
+-
+- * finddomain.c: Remoave dead code. Define strchr only if
+- !HAVE_STRCHR.
+-
+- * explodename.c: Include <sys/types.h>.
+-
+- * explodename.c: Reformat copyright text.
+- (_nl_explode_name): Fix typo.
+-
+- * dcgettext.c: Define and use __set_errno.
+- (guess_category_value): Don't use setlocale if HAVE_LC_MESSAGES is
+- not defined.
+-
+- * bindtextdom.c: Pretty printing.
+-
+-1997-05-01 02:25 Ulrich Drepper <drepper@cygnus.com>
+-
+- * dcgettext.c (guess_category_value): Don't depend on
+- HAVE_LC_MESSAGES. We don't need the macro here.
+- Patch by Bruno Haible <haible@ilog.fr>.
+-
+- * cat-compat.c (textdomain): DoN't refer to HAVE_SETLOCALE_NULL
+- macro. Instead use HAVE_LOCALE_NULL and define it when using
+- glibc, as in dcgettext.c.
+- Patch by Bruno Haible <haible@ilog.fr>.
+-
+- * Makefile.in (CPPFLAGS): New variable. Reported by Franc,ois
+- Pinard.
+-
+-Mon Mar 10 06:51:17 1997 Ulrich Drepper <drepper@cygnus.com>
+-
+- * Makefile.in: Implement handling of libtool.
+-
+- * gettextP.h: Change data structures for use of generic lowlevel
+- i18n file handling.
+-
+-Wed Dec 4 20:21:18 1996 Ulrich Drepper <drepper@cygnus.com>
+-
+- * textdomain.c: Put parentheses around arguments of memcpy macro
+- definition.
+- * localealias.c: Likewise.
+- * l10nflist.c: Likewise.
+- * finddomain.c: Likewise.
+- * bindtextdom.c: Likewise.
+- Reported by Thomas Esken.
+-
+-Mon Nov 25 22:57:51 1996 Ulrich Drepper <drepper@cygnus.com>
+-
+- * textdomain.c: Move definition of `memcpy` macro to right
+- position.
+-
+-Fri Nov 22 04:01:58 1996 Ulrich Drepper <drepper@cygnus.com>
+-
+- * finddomain.c [!HAVE_STRING_H && !_LIBC]: Define memcpy using
+- bcopy if not already defined. Reported by Thomas Esken.
+- * bindtextdom.c: Likewise.
+- * l10nflist.c: Likewise.
+- * localealias.c: Likewise.
+- * textdomain.c: Likewise.
+-
+-Tue Oct 29 11:10:27 1996 Ulrich Drepper <drepper@cygnus.com>
+-
+- * Makefile.in (libdir): Change to use exec_prefix instead of
+- prefix. Reported by Knut-HåvardAksnes <etokna@eto.ericsson.se>.
+-
+-Sat Aug 31 03:07:09 1996 Ulrich Drepper <drepper@cygnus.com>
+-
+- * l10nflist.c (_nl_normalize_codeset): We convert to lower case,
+- so don't prepend uppercase `ISO' for only numeric arg.
+-
+-Fri Jul 19 00:15:46 1996 Ulrich Drepper <drepper@cygnus.com>
+-
+- * l10nflist.c: Move inclusion of argz.h, ctype.h, stdlib.h after
+- definition of _GNU_SOURCE. Patch by Roland McGrath.
+-
+- * Makefile.in (uninstall): Fix another bug with `for' loop and
+- empty arguments. Patch by Jim Meyering. Correct name os
+- uninstalled files: no intl- prefix anymore.
+-
+- * Makefile.in (install-data): Again work around shells which
+- cannot handle mpty for list. Reported by Jim Meyering.
+-
+-Sat Jul 13 18:11:35 1996 Ulrich Drepper <drepper@cygnus.com>
+-
+- * Makefile.in (install): Split goal. Now depend on install-exec
+- and install-data.
+- (install-exec, install-data): New goals. Created from former
+- install goal.
+- Reported by Karl Berry.
+-
+-Sat Jun 22 04:58:14 1996 Ulrich Drepper <drepper@cygnus.com>
+-
+- * Makefile.in (MKINSTALLDIRS): New variable. Path to
+- mkinstalldirs script.
+- (install): use MKINSTALLDIRS variable or if the script is not present
+- try to find it in the $top_scrdir).
+-
+-Wed Jun 19 02:56:56 1996 Ulrich Drepper <drepper@cygnus.com>
+-
+- * l10nflist.c: Linux libc *partly* includes the argz_* functions.
+- Grr. Work around by renaming the static version and use macros
+- for renaming.
+-
+-Tue Jun 18 20:11:17 1996 Ulrich Drepper <drepper@cygnus.com>
+-
+- * l10nflist.c: Correct presence test macros of __argz_* functions.
+-
+- * l10nflist.c: Include <argz.h> based on test of it instead when
+- __argz_* functions are available.
+- Reported by Andreas Schwab.
+-
+-Thu Jun 13 15:17:44 1996 Ulrich Drepper <drepper@cygnus.com>
+-
+- * explodename.c, l10nflist.c: Define NULL for dumb systems.
+-
+-Tue Jun 11 17:05:13 1996 Ulrich Drepper <drepper@cygnus.com>
+-
+- * intlh.inst.in, libgettext.h (dcgettext): Rename local variable
+- result to __result to prevent name clash.
+-
+- * l10nflist.c, localealias.c, dcgettext.c: Define _GNU_SOURCE to
+- get prototype for stpcpy and strcasecmp.
+-
+- * intlh.inst.in, libgettext.h: Move declaration of
+- `_nl_msg_cat_cntr' outside __extension__ block to prevent warning
+- from gcc's -Wnested-extern option.
+-
+-Fri Jun 7 01:58:00 1996 Ulrich Drepper <drepper@cygnus.com>
+-
+- * Makefile.in (install): Remove comment.
+-
+-Thu Jun 6 17:28:17 1996 Ulrich Drepper <drepper@cygnus.com>
+-
+- * Makefile.in (install): Work around for another Buglix stupidity.
+- Always use an `else' close for `if's. Reported by Nelson Beebe.
+-
+- * Makefile.in (intlh.inst): Correct typo in phony rule.
+- Reported by Nelson Beebe.
+-
+-Thu Jun 6 01:49:52 1996 Ulrich Drepper <drepper@cygnus.com>
+-
+- * dcgettext.c (read_alias_file): Rename variable alloca_list to
+- block_list as the macro calls assume.
+- Patch by Eric Backus.
+-
+- * localealias.c [!HAVE_ALLOCA]: Define alloca as macro using
+- malloc.
+- (read_alias_file): Rename varriabe alloca_list to block_list as the
+- macro calls assume.
+- Patch by Eric Backus.
+-
+- * l10nflist.c: Correct conditional for <argz.h> inclusion.
+- Reported by Roland McGrath.
+-
+- * Makefile.in (all): Depend on all-@USE_INCLUDED_LIBINTL@, not
+- all-@USE_NLS@.
+-
+- * Makefile.in (install): intlh.inst comes from local dir, not
+- $(srcdir).
+-
+- * Makefile.in (intlh.inst): Special handling of this goal. If
+- used in gettext, this is really a rul to construct this file. If
+- used in any other package it is defined as a .PHONY rule with
+- empty body.
+-
+- * finddomain.c: Extract locale file information handling into
+- l10nfile.c. Rename local stpcpy__ function to stpcpy.
+-
+- * dcgettext.c (stpcpy): Add local definition.
+-
+- * l10nflist.c: Solve some portability problems. Patches partly by
+- Thomas Esken. Add local definition of stpcpy.
+-
+-Tue Jun 4 02:47:49 1996 Ulrich Drepper <drepper@cygnus.com>
+-
+- * intlh.inst.in: Don't depend including <locale.h> on
+- HAVE_LOCALE_H. Instead configure must rewrite this fiile
+- depending on the result of the configure run.
+-
+- * Makefile.in (install): libintl.inst is now called intlh.inst.
+- Add rules for updating intlh.inst from intlh.inst.in.
+-
+- * libintl.inst: Renamed to intlh.inst.in.
+-
+- * localealias.c, dcgettext.c [__GNUC__]: Define HAVE_ALLOCA to 1
+- because gcc has __buitlin_alloca.
+- Reported by Roland McGrath.
+-
+-Mon Jun 3 00:32:16 1996 Ulrich Drepper <drepper@cygnus.com>
+-
+- * Makefile.in (installcheck): New goal to fulfill needs of
+- automake's distcheck.
+-
+- * Makefile.in (install): Reorder commands so that VERSION is
+- found.
+-
+- * Makefile.in (gettextsrcdir): Now use subdirectory intl/ in
+- @datadir@/gettext.
+- (COMSRCS): Add l10nfile.c.
+- (OBJECTS): Add l10nfile.o.
+- (DISTFILES): Rename to DISTFILE.normal. Remove $(DISTFILES.common).
+- (DISTFILE.gettext): Remove $(DISTFILES.common).
+- (all-gettext): Remove goal.
+- (install): If $(PACKAGE) = gettext install, otherwose do nothing. No
+- package but gettext itself should install libintl.h + headers.
+- (dist): Extend goal to work for gettext, too.
+- (dist-gettext): Remove goal.
+-
+- * dcgettext.c [!HAVE_ALLOCA]: Define macro alloca by using malloc.
+-
+-Sun Jun 2 17:33:06 1996 Ulrich Drepper <drepper@cygnus.com>
+-
+- * loadmsgcat.c (_nl_load_domain): Parameter is now comes from
+- find_l10nfile.
+-
+-Sat Jun 1 02:23:03 1996 Ulrich Drepper <drepper@cygnus.com>
+-
+- * l10nflist.c (__argz_next): Add definition.
+-
+- * dcgettext.c [!HAVE_ALLOCA]: Add code for handling missing alloca
+- code. Use new l10nfile handling.
+-
+- * localealias.c [!HAVE_ALLOCA]: Add code for handling missing
+- alloca code.
+-
+- * l10nflist.c: Initial revision.
+-
+-Tue Apr 2 18:51:18 1996 Ulrich Drepper <drepper@myware>
+-
+- * Makefile.in (all-gettext): New goal. Same as all-yes.
+-
+-Thu Mar 28 23:01:22 1996 Karl Eichwalder <ke@ke.central.de>
+-
+- * Makefile.in (gettextsrcdir): Define using @datadir@.
+-
+-Tue Mar 26 12:39:14 1996 Ulrich Drepper <drepper@myware>
+-
+- * finddomain.c: Include <ctype.h>. Reported by Roland McGrath.
+-
+-Sat Mar 23 02:00:35 1996 Ulrich Drepper <drepper@myware>
+-
+- * finddomain.c (stpcpy): Rename to stpcpy__ to prevent clashing
+- with external declaration.
+-
+-Sat Mar 2 00:47:09 1996 Ulrich Drepper <drepper@myware>
+-
+- * Makefile.in (all-no): Rename from all_no.
+-
+-Sat Feb 17 00:25:59 1996 Ulrich Drepper <drepper@myware>
+-
+- * gettextP.h [loaded_domain]: Array `successor' must now contain up
+- to 63 elements (because of codeset name normalization).
+-
+- * finddomain.c: Implement codeset name normalization.
+-
+-Thu Feb 15 04:39:09 1996 Ulrich Drepper <drepper@myware>
+-
+- * Makefile.in (all): Define to `all-@USE_NLS@'.
+- (all-yes, all_no): New goals. `all-no' is noop, `all-yes'
+- is former all.
+-
+-Mon Jan 15 21:46:01 1996 Howard Gayle <howard@hal.com>
+-
+- * localealias.c (alias_compare): Increment string pointers in loop
+- of strcasecmp replacement.
+-
+-Fri Dec 29 21:16:34 1995 Ulrich Drepper <drepper@myware>
+-
+- * Makefile.in (install-src): Who commented this goal out ? :-)
+-
+-Fri Dec 29 15:08:16 1995 Ulrich Drepper <drepper@myware>
+-
+- * dcgettext.c (DCGETTEXT): Save `errno'. Failing system calls
+- should not effect it because a missing catalog is no error.
+- Reported by Harald K<o:>nig <koenig@tat.physik.uni-tuebingen.de>.
+-
+-Tue Dec 19 22:09:13 1995 Ulrich Drepper <drepper@myware>
+-
+- * Makefile.in (Makefile): Explicitly use $(SHELL) for running
+- shell scripts.
+-
+-Fri Dec 15 17:34:59 1995 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+-
+- * Makefile.in (install-src): Only install library and header when
+- we use the own implementation. Don't do it when using the
+- system's gettext or catgets functions.
+-
+- * dcgettext.c (find_msg): Must not swap domain->hash_size here.
+-
+-Sat Dec 9 16:24:37 1995 Ulrich Drepper <drepper@myware>
+-
+- * localealias.c, libintl.inst, libgettext.h, hash-string.h,
+- gettextP.h, finddomain.c, dcgettext.c, cat-compat.c:
+- Use PARAMS instead of __P. Suggested by Roland McGrath.
+-
+-Tue Dec 5 11:39:14 1995 Larry Schwimmer <rosebud@cyclone.stanford.edu>
+-
+- * libgettext.h: Use `#if !defined (_LIBINTL_H)' instead of `#if
+- !_LIBINTL_H' because Solaris defines _LIBINTL_H as empty.
+-
+-Mon Dec 4 15:42:07 1995 Ulrich Drepper <drepper@myware>
+-
+- * Makefile.in (install-src):
+- Install libintl.inst instead of libintl.h.install.
+-
+-Sat Dec 2 22:51:38 1995 Marcus Daniels <marcus@sysc.pdx.edu>
+-
+- * cat-compat.c (textdomain):
+- Reverse order in which files are tried you load. First
+- try local file, when this failed absolute path.
+-
+-Wed Nov 29 02:03:53 1995 Nelson H. F. Beebe <beebe@math.utah.edu>
+-
+- * cat-compat.c (bindtextdomain): Add missing { }.
+-
+-Sun Nov 26 18:21:41 1995 Ulrich Drepper <drepper@myware>
+-
+- * libintl.inst: Add missing __P definition. Reported by Nelson Beebe.
+-
+- * Makefile.in:
+- Add dummy `all' and `dvi' goals. Reported by Tom Tromey.
+-
+-Sat Nov 25 16:12:01 1995 Franc,ois Pinard <pinard@iro.umontreal.ca>
+-
+- * hash-string.h: Capitalize arguments of macros.
+-
+-Sat Nov 25 12:01:36 1995 Ulrich Drepper <drepper@myware>
+-
+- * Makefile.in (DISTFILES): Prevent files names longer than 13
+- characters. libintl.h.glibc->libintl.glibc,
+- libintl.h.install->libintl.inst. Reported by Joshua R. Poulson.
+-
+-Sat Nov 25 11:31:12 1995 Eric Backus <ericb@lsid.hp.com>
+-
+- * dcgettext.c: Fix bug in preprocessor conditionals.
+-
+-Sat Nov 25 02:35:27 1995 Nelson H. F. Beebe <beebe@math.utah.edu>
+-
+- * libgettext.h: Solaris cc does not understand
+- #if !SYMBOL1 && !SYMBOL2. Sad but true.
+-
+-Thu Nov 23 16:22:14 1995 Ulrich Drepper <drepper@myware>
+-
+- * hash-string.h (hash_string):
+- Fix for machine with >32 bit `unsigned long's.
+-
+- * dcgettext.c (DCGETTEXT):
+- Fix horrible bug in loop for alternative translation.
+-
+-Thu Nov 23 01:45:29 1995 Ulrich Drepper <drepper@myware>
+-
+- * po2tbl.sed.in, linux-msg.sed, xopen-msg.sed:
+- Some further simplifications in message number generation.
+-
+-Mon Nov 20 21:08:43 1995 Ulrich Drepper <drepper@myware>
+-
+- * libintl.h.glibc: Use __const instead of const in prototypes.
+-
+- * Makefile.in (install-src):
+- Install libintl.h.install instead of libintl.h. This
+- is a stripped-down version. Suggested by Peter Miller.
+-
+- * libintl.h.install, libintl.h.glibc: Initial revision.
+-
+- * localealias.c (_nl_expand_alias, read_alias_file):
+- Protect prototypes in type casts by __P.
+-
+-Tue Nov 14 16:43:58 1995 Ulrich Drepper <drepper@myware>
+-
+- * hash-string.h: Correct prototype for hash_string.
+-
+-Sun Nov 12 12:42:30 1995 Ulrich Drepper <drepper@myware>
+-
+- * hash-string.h (hash_string): Add prototype.
+-
+- * gettextP.h: Fix copyright.
+- (SWAP): Add prototype.
+-
+-Wed Nov 8 22:56:33 1995 Ulrich Drepper <drepper@myware>
+-
+- * localealias.c (read_alias_file): Forgot sizeof.
+- Avoid calling *printf function. This introduces a big overhead.
+- Patch by Roland McGrath.
+-
+-Tue Nov 7 14:21:08 1995 Ulrich Drepper <drepper@myware>
+-
+- * finddomain.c, cat-compat.c: Wrong indentation in #if for stpcpy.
+-
+- * finddomain.c (stpcpy):
+- Define substitution function local. The macro was to flaky.
+-
+- * cat-compat.c: Fix typo.
+-
+- * xopen-msg.sed, linux-msg.sed:
+- While bringing message number to right place only accept digits.
+-
+- * linux-msg.sed, xopen-msg.sed: Now that the counter does not have
+- leading 0s we don't need to remove them. Reported by Marcus
+- Daniels.
+-
+- * Makefile.in (../po/cat-id-tbl.o): Use $(top_srdir) in
+- dependency. Reported by Marcus Daniels.
+-
+- * cat-compat.c: (stpcpy) [!_LIBC && !HAVE_STPCPY]: Define replacement.
+- Generally cleanup using #if instead of #ifndef.
+-
+- * Makefile.in: Correct typos in comment. By Franc,ois Pinard.
+-
+-Mon Nov 6 00:27:02 1995 Ulrich Drepper <drepper@myware>
+-
+- * Makefile.in (install-src): Don't install libintl.h and libintl.a
+- if we use an available gettext implementation.
+-
+-Sun Nov 5 22:02:08 1995 Ulrich Drepper <drepper@myware>
+-
+- * libgettext.h: Fix typo: HAVE_CATGETTS -> HAVE_CATGETS. Reported
+- by Franc,ois Pinard.
+-
+- * libgettext.h: Use #if instead of #ifdef/#ifndef.
+-
+- * finddomain.c:
+- Comments describing what has to be done should start with FIXME.
+-
+-Sun Nov 5 19:38:01 1995 Ulrich Drepper <drepper@myware>
+-
+- * Makefile.in (DISTFILES): Split. Use DISTFILES with normal meaning.
+- DISTFILES.common names the files common to both dist goals.
+- DISTFILES.gettext are the files only distributed in GNU gettext.
+-
+-Sun Nov 5 17:32:54 1995 Ulrich Drepper <drepper@myware>
+-
+- * dcgettext.c (DCGETTEXT): Correct searching in derived locales.
+- This was necessary since a change in _nl_find_msg several weeks
+- ago. I really don't know this is still not fixed.
+-
+-Sun Nov 5 12:43:12 1995 Ulrich Drepper <drepper@myware>
+-
+- * loadmsgcat.c (_nl_load_domain): Test for FILENAME == NULL. This
+- might mark a special condition.
+-
+- * finddomain.c (make_entry_rec): Don't make illegal entry as decided.
+-
+- * Makefile.in (dist): Suppress error message when ln failed.
+- Get files from $(srcdir) explicitly.
+-
+- * libgettext.h (gettext_const): Rename to gettext_noop.
+-
+-Fri Nov 3 07:36:50 1995 Ulrich Drepper <drepper@myware>
+-
+- * finddomain.c (make_entry_rec):
+- Protect against wrong locale names by testing mask.
+-
+- * libgettext.h (gettext_const): Add macro definition.
+- Capitalize macro arguments.
+-
+-Thu Nov 2 23:15:51 1995 Ulrich Drepper <drepper@myware>
+-
+- * finddomain.c (_nl_find_domain):
+- Test for pointer != NULL before accessing value.
+- Reported by Tom Tromey.
+-
+- * gettext.c (NULL):
+- Define as (void*)0 instad of 0. Reported by Franc,ois Pinard.
+-
+-Mon Oct 30 21:28:52 1995 Ulrich Drepper <drepper@myware>
+-
+- * po2tbl.sed.in: Serious typo bug fixed by Jim Meyering.
+-
+-Sat Oct 28 23:20:47 1995 Ulrich Drepper <drepper@myware>
+-
+- * libgettext.h: Disable dcgettext optimization for Solaris 2.3.
+-
+- * localealias.c (alias_compare):
+- Peter Miller reported that tolower in some systems is
+- even dumber than I thought. Protect call by `isupper'.
+-
+-Fri Oct 27 22:22:51 1995 Ulrich Drepper <drepper@myware>
+-
+- * Makefile.in (libdir, includedir): New variables.
+- (install-src): Install libintl.a and libintl.h in correct dirs.
+-
+-Fri Oct 27 22:07:29 1995 Ulrich Drepper <drepper@myware>
+-
+- * Makefile.in (SOURCES): Fix typo: intrl.compat.c -> intl-compat.c.
+-
+- * po2tbl.sed.in: Patch for buggy SEDs by Christian von Roques.
+-
+- * localealias.c:
+- Fix typo and superflous test. Reported by Christian von Roques.
+-
+-Fri Oct 6 11:52:05 1995 Ulrich Drepper <drepper@myware>
+-
+- * finddomain.c (_nl_find_domain):
+- Correct some remainder from the pre-CEN syntax. Now
+- we don't have a constant number of successors anymore.
+-
+-Wed Sep 27 21:41:13 1995 Ulrich Drepper <drepper@myware>
+-
+- * Makefile.in (DISTFILES): Add libintl.h.glibc.
+-
+- * Makefile.in (dist-libc): Add goal for packing sources for glibc.
+- (COMSRCS, COMHDRS): Splitted to separate sources shared with glibc.
+-
+- * loadmsgcat.c: Forget to continue #if line.
+-
+- * localealias.c:
+- [_LIBC]: Rename strcasecmp to __strcasecmp to keep ANSI C name
+- space clean.
+-
+- * dcgettext.c, finddomain.c: Better comment to last change.
+-
+- * loadmsgcat.c:
+- [_LIBC]: Rename fstat, open, close, read, mmap, and munmap to
+- __fstat, __open, __close, __read, __mmap, and __munmap resp
+- to keep ANSI C name space clean.
+-
+- * finddomain.c:
+- [_LIBC]: Rename stpcpy to __stpcpy to keep ANSI C name space clean.
+-
+- * dcgettext.c:
+- [_LIBC]: Rename getced and stpcpy to __getcwd and __stpcpy resp to
+- keep ANSI C name space clean.
+-
+- * libgettext.h:
+- Include sys/types.h for those old SysV systems out there.
+- Reported by Francesco Potorti`.
+-
+- * loadmsgcat.c (use_mmap): Define if compiled for glibc.
+-
+- * bindtextdom.c: Include all those standard headers
+- unconditionally if _LIBC is defined.
+-
+- * finddomain.c: Fix 2 times defiend -> defined.
+-
+- * textdomain.c: Include libintl.h instead of libgettext.h when
+- compiling for glibc. Include all those standard headers
+- unconditionally if _LIBC is defined.
+-
+- * localealias.c, loadmsgcat.c: Prepare to be compiled in glibc.
+-
+- * gettext.c:
+- Include libintl.h instead of libgettext.h when compiling for glibc.
+- Get NULL from stddef.h if we compile for glibc.
+-
+- * finddomain.c: Include libintl.h instead of libgettext.h when
+- compiling for glibc. Include all those standard headers
+- unconditionally if _LIBC is defined.
+-
+- * dcgettext.c: Include all those standard headers unconditionally
+- if _LIBC is defined.
+-
+- * dgettext.c: If compiled in glibc include libintl.h instead of
+- libgettext.h.
+- (locale.h): Don't rely on HAVE_LOCALE_H when compiling for glibc.
+-
+- * dcgettext.c: If compiled in glibc include libintl.h instead of
+- libgettext.h.
+- (getcwd): Don't rely on HAVE_GETCWD when compiling for glibc.
+-
+- * bindtextdom.c:
+- If compiled in glibc include libintl.h instead of libgettext.h.
+-
+-Mon Sep 25 22:23:06 1995 Ulrich Drepper <drepper@myware>
+-
+- * localealias.c (_nl_expand_alias): Don't call bsearch if NMAP <= 0.
+- Reported by Marcus Daniels.
+-
+- * cat-compat.c (bindtextdomain):
+- String used in putenv must not be recycled.
+- Reported by Marcus Daniels.
+-
+- * libgettext.h (__USE_GNU_GETTEXT):
+- Additional symbol to signal that we use GNU gettext
+- library.
+-
+- * cat-compat.c (bindtextdomain):
+- Fix bug with the strange stpcpy replacement.
+- Reported by Nelson Beebe.
+-
+-Sat Sep 23 08:23:51 1995 Ulrich Drepper <drepper@myware>
+-
+- * cat-compat.c: Include <string.h> for stpcpy prototype.
+-
+- * localealias.c (read_alias_file):
+- While expand strdup code temporary variable `cp' hided
+- higher level variable with same name. Rename to `tp'.
+-
+- * textdomain.c (textdomain):
+- Avoid warning by using temporary variable in strdup code.
+-
+- * finddomain.c (_nl_find_domain): Remove unused variable `application'.
+-
+-Thu Sep 21 15:51:44 1995 Ulrich Drepper <drepper@myware>
+-
+- * localealias.c (alias_compare):
+- Use strcasecmp() only if available. Else use
+- implementation in place.
+-
+- * intl-compat.c:
+- Wrapper functions now call *__ functions instead of __*.
+-
+- * libgettext.h: Declare prototypes for *__ functions instead for __*.
+-
+- * cat-compat.c, loadmsgcat.c:
+- Don't use xmalloc, xstrdup, and stpcpy. These functions are not part
+- of the standard libc and so prevent libintl.a from being used
+- standalone.
+-
+- * bindtextdom.c:
+- Don't use xmalloc, xstrdup, and stpcpy. These functions are not part
+- of the standard libc and so prevent libintl.a from being used
+- standalone.
+- Rename to bindtextdomain__ if not used in GNU C Library.
+-
+- * dgettext.c:
+- Rename function to dgettext__ if not used in GNU C Library.
+-
+- * gettext.c:
+- Don't use xmalloc, xstrdup, and stpcpy. These functions are not part
+- of the standard libc and so prevent libintl.a from being used
+- standalone.
+- Functions now called gettext__ if not used in GNU C Library.
+-
+- * dcgettext.c, localealias.c, textdomain.c, finddomain.c:
+- Don't use xmalloc, xstrdup, and stpcpy. These functions are not part
+- of the standard libc and so prevent libintl.a from being used
+- standalone.
+-
+-Sun Sep 17 23:14:49 1995 Ulrich Drepper <drepper@myware>
+-
+- * finddomain.c: Correct some bugs in handling of CEN standard
+- locale definitions.
+-
+-Thu Sep 7 01:49:28 1995 Ulrich Drepper <drepper@myware>
+-
+- * finddomain.c: Implement CEN syntax.
+-
+- * gettextP.h (loaded_domain): Extend number of successors to 31.
+-
+-Sat Aug 19 19:25:29 1995 Ulrich Drepper <drepper@myware>
+-
+- * Makefile.in (aliaspath): Remove path to X11 locale dir.
+-
+- * Makefile.in: Make install-src depend on install. This helps
+- gettext to install the sources and other packages can use the
+- install goal.
+-
+-Sat Aug 19 15:19:33 1995 Ulrich Drepper <drepper@myware>
+-
+- * Makefile.in (uninstall): Remove stuff installed by install-src.
+-
+-Tue Aug 15 13:13:53 1995 Ulrich Drepper <drepper@myware>
+-
+- * VERSION.in: Initial revision.
+-
+- * Makefile.in (DISTFILES):
+- Add VERSION file. This is not necessary for gettext, but
+- for other packages using this library.
+-
+-Tue Aug 15 06:16:44 1995 Ulrich Drepper <drepper@myware>
+-
+- * gettextP.h (_nl_find_domain):
+- New prototype after changing search strategy.
+-
+- * finddomain.c (_nl_find_domain):
+- We now try only to find a specified catalog. Fall back to other
+- catalogs listed in the locale list is now done in __dcgettext.
+-
+- * dcgettext.c (__dcgettext):
+- Now we provide message fall back even to different languages.
+- I.e. if a message is not available in one language all the other
+- in the locale list a tried. Formerly fall back was only possible
+- within one language. Implemented by moving one loop from
+- _nl_find_domain to here.
+-
+-Mon Aug 14 23:45:50 1995 Ulrich Drepper <drepper@myware>
+-
+- * Makefile.in (gettextsrcdir):
+- Directory where source of GNU gettext library are made
+- available.
+- (INSTALL, INSTALL_DATA): Programs used for installing sources.
+- (gettext-src): New. Rule to install GNU gettext sources for use in
+- gettextize shell script.
+-
+-Sun Aug 13 14:40:48 1995 Ulrich Drepper <drepper@myware>
+-
+- * loadmsgcat.c (_nl_load_domain):
+- Use mmap for loading only when munmap function is
+- also available.
+-
+- * Makefile.in (install): Depend on `all' goal.
+-
+-Wed Aug 9 11:04:33 1995 Ulrich Drepper <drepper@myware>
+-
+- * localealias.c (read_alias_file):
+- Do not overwrite '\n' when terminating alias value string.
+-
+- * localealias.c (read_alias_file):
+- Handle long lines. Ignore the rest not fitting in
+- the buffer after the initial `fgets' call.
+-
+-Wed Aug 9 00:54:29 1995 Ulrich Drepper <drepper@myware>
+-
+- * gettextP.h (_nl_load_domain):
+- Add prototype, replacing prototype for _nl_load_msg_cat.
+-
+- * finddomain.c (_nl_find_domain):
+- Remove unneeded variable filename and filename_len.
+- (expand_alias): Remove prototype because functions does not
+- exist anymore.
+-
+- * localealias.c (read_alias_file):
+- Change type of fname_len parameter to int.
+- (xmalloc): Add prototype.
+-
+- * loadmsgcat.c: Better prototypes for xmalloc.
+-
+-Tue Aug 8 22:30:39 1995 Ulrich Drepper <drepper@myware>
+-
+- * finddomain.c (_nl_find_domain):
+- Allow alias name to be constructed from the four components.
+-
+- * Makefile.in (aliaspath): New variable. Set to preliminary value.
+- (SOURCES): Add localealias.c.
+- (OBJECTS): Add localealias.o.
+-
+- * gettextP.h: Add prototype for _nl_expand_alias.
+-
+- * finddomain.c: Aliasing handled in intl/localealias.c.
+-
+- * localealias.c: Aliasing for locale names.
+-
+- * bindtextdom.c: Better prototypes for xmalloc and xstrdup.
+-
+-Mon Aug 7 23:47:42 1995 Ulrich Drepper <drepper@myware>
+-
+- * Makefile.in (DISTFILES): gettext.perl is now found in misc/.
+-
+- * cat-compat.c (bindtextdomain):
+- Correct implementation. dirname parameter was not used.
+- Reported by Marcus Daniels.
+-
+- * gettextP.h (loaded_domain):
+- New fields `successor' and `decided' for oo, lazy
+- message handling implementation.
+-
+- * dcgettext.c:
+- Adopt for oo, lazy message handliing.
+- Now we can inherit translations from less specific locales.
+- (find_msg): New function.
+-
+- * loadmsgcat.c, finddomain.c:
+- Complete rewrite. Implement oo, lazy message handling :-).
+- We now have an additional environment variable `LANGUAGE' with
+- a higher priority than LC_ALL for the LC_MESSAGE locale.
+- Here we can set a colon separated list of specifications each
+- of the form `language[_territory[.codeset]][@modifier]'.
+-
+-Sat Aug 5 09:55:42 1995 Ulrich Drepper <drepper@myware>
+-
+- * finddomain.c (unistd.h):
+- Include to get _PC_PATH_MAX defined on system having it.
+-
+-Fri Aug 4 22:42:00 1995 Ulrich Drepper <drepper@myware>
+-
+- * finddomain.c (stpcpy): Include prototype.
+-
+- * Makefile.in (dist): Remove `copying instead' message.
+-
+-Wed Aug 2 18:52:03 1995 Ulrich Drepper <drepper@myware>
+-
+- * Makefile.in (ID, TAGS): Do not use $^.
+-
+-Tue Aug 1 20:07:11 1995 Ulrich Drepper <drepper@myware>
+-
+- * Makefile.in (TAGS, ID): Use $^ as command argument.
+- (TAGS): Give etags -o option t write to current directory,
+- not $(srcdir).
+- (ID): Use $(srcdir) instead os $(top_srcdir)/src.
+- (distclean): Remove ID.
+-
+-Sun Jul 30 11:51:46 1995 Ulrich Drepper <drepper@myware>
+-
+- * Makefile.in (gnulocaledir):
+- New variable, always using share/ for data directory.
+- (DEFS): Add GNULOCALEDIR, used in finddomain.c.
+-
+- * finddomain.c (_nl_default_dirname):
+- Set to GNULOCALEDIR, because it always has to point
+- to the directory where GNU gettext Library writes it to.
+-
+- * intl-compat.c (textdomain, bindtextdomain):
+- Undefine macros before function definition.
+-
+-Sat Jul 22 01:10:02 1995 Ulrich Drepper <drepper@myware>
+-
+- * libgettext.h (_LIBINTL_H):
+- Protect definition in case where this file is included as
+- libgettext.h on Solaris machines. Add comment about this.
+-
+-Wed Jul 19 02:36:42 1995 Ulrich Drepper <drepper@myware>
+-
+- * intl-compat.c (textdomain): Correct typo.
+-
+-Wed Jul 19 01:51:35 1995 Ulrich Drepper <drepper@myware>
+-
+- * dcgettext.c (dcgettext): Function now called __dcgettext.
+-
+- * dgettext.c (dgettext): Now called __dgettext and calls
+- __dcgettext.
+-
+- * gettext.c (gettext):
+- Function now called __gettext and calls __dgettext.
+-
+- * textdomain.c (textdomain): Function now called __textdomain.
+-
+- * bindtextdom.c (bindtextdomain): Function now called
+- __bindtextdomain.
+-
+- * intl-compat.c: Initial revision.
+-
+- * Makefile.in (SOURCES): Add intl-compat.c.
+- (OBJECTS): We always compile the GNU gettext library functions.
+- OBJECTS contains all objects but cat-compat.o, ../po/cat-if-tbl.o,
+- and intl-compat.o.
+- (GETTOBJS): Contains now only intl-compat.o.
+-
+- * libgettext.h:
+- Re-include protection matches dualistic character of libgettext.h.
+- For all functions in GNU gettext library define __ counter part.
+-
+- * finddomain.c (strchr): Define as index if not found in C library.
+- (_nl_find_domain): For relative paths paste / in between.
+-
+-Tue Jul 18 16:37:45 1995 Ulrich Drepper <drepper@myware>
+-
+- * loadmsgcat.c, finddomain.c: Add inclusion of sys/types.h.
+-
+- * xopen-msg.sed: Fix bug with `msgstr ""' lines.
+- A little bit better comments.
+-
+-Tue Jul 18 01:18:27 1995 Ulrich Drepper <drepper@myware>
+-
+- * Makefile.in:
+- po-mode.el, makelinks, combine-sh are now found in ../misc.
+-
+- * po-mode.el, makelinks, combine-sh, elisp-comp:
+- Moved to ../misc/.
+-
+- * libgettext.h, gettextP.h, gettext.h: Uniform test for __STDC__.
+-
+-Sun Jul 16 22:33:02 1995 Ulrich Drepper <drepper@myware>
+-
+- * Makefile.in (INSTALL, INSTALL_DATA): New variables.
+- (install-data, uninstall): Install/uninstall .elc file.
+-
+- * po-mode.el (Installation comment):
+- Add .pox as possible extension of .po files.
+-
+-Sun Jul 16 13:23:27 1995 Ulrich Drepper <drepper@myware>
+-
+- * elisp-comp: Complete new version by Franc,ois: This does not
+- fail when not compiling in the source directory.
+-
+-Sun Jul 16 00:12:17 1995 Ulrich Drepper <drepper@myware>
+-
+- * Makefile.in (../po/cat-id-tbl.o):
+- Use $(MAKE) instead of make for recursive make.
+-
+- * Makefile.in (.el.elc): Use $(SHELL) instead of /bin/sh.
+- (install-exec): Add missing dummy goal.
+- (install-data, uninstall): @ in multi-line shell command at
+- beginning, not in front of echo. Reported by Eric Backus.
+-
+-Sat Jul 15 00:21:28 1995 Ulrich Drepper <drepper@myware>
+-
+- * Makefile.in (DISTFILES):
+- Rename libgettext.perl to gettext.perl to fit in 14 chars
+- file systems.
+-
+- * gettext.perl:
+- Rename to gettext.perl to fit in 14 chars file systems.
+-
+-Thu Jul 13 23:17:20 1995 Ulrich Drepper <drepper@myware>
+-
+- * cat-compat.c: If !STDC_HEADERS try to include malloc.h.
+-
+-Thu Jul 13 20:55:02 1995 Ulrich Drepper <drepper@myware>
+-
+- * po2tbl.sed.in: Pretty printing.
+-
+- * linux-msg.sed, xopen-msg.sed:
+- Correct bugs with handling substitute flags in branches.
+-
+- * hash-string.h (hash_string):
+- Old K&R compilers don't under stand `unsigned char'.
+-
+- * gettext.h (nls_uint32):
+- Some old K&R compilers (eg HP) don't understand `unsigned int'.
+-
+- * cat-compat.c (msg_to_cat_id): De-ANSI-fy prototypes.
+-
+-Thu Jul 13 01:34:33 1995 Ulrich Drepper <drepper@myware>
+-
+- * Makefile.in (ELCFILES): New variable.
+- (DISTFILES): Add elisp-comp.
+- Add implicit rule for .el -> .elc compilation.
+- (install-data): install $ELCFILES
+- (clean): renamed po-to-tbl and po-to-msg to po2tbl and po2msg resp.
+-
+- * elisp-comp: Initial revision
+-
+-Wed Jul 12 16:14:52 1995 Ulrich Drepper <drepper@myware>
+-
+- * Makefile.in:
+- cat-id-tbl.c is now found in po/. This enables us to use an identical
+- intl/ directory in all packages.
+-
+- * dcgettext.c (dcgettext): hashing does not work for table size <= 2.
+-
+- * textdomain.c: fix typo (#if def -> #if defined)
+-
+-Tue Jul 11 18:44:43 1995 Ulrich Drepper <drepper@myware>
+-
+- * Makefile.in (stamp-cat-id): use top_srcdir to address source files
+- (DISTFILES,distclean): move tupdate.perl to src/
+-
+- * po-to-tbl.sed.in:
+- add additional jump to clear change flag to recognize multiline strings
+-
+-Tue Jul 11 01:32:50 1995 Ulrich Drepper <drepper@myware>
+-
+- * textdomain.c: Protect inclusion of stdlib.h and string.h.
+-
+- * loadmsgcat.c: Protect inclusion of stdlib.h.
+-
+- * libgettext.h: Protect inclusion of locale.h.
+- Allow use in C++ programs.
+- Define NULL is not happened already.
+-
+- * Makefile.in (DISTFILES): ship po-to-tbl.sed.in instead of
+- po-to-tbl.sed.
+- (distclean): remove po-to-tbl.sed and tupdate.perl.
+-
+- * tupdate.perl.in: Substitute Perl path even in exec line.
+- Don't include entries without translation from old .po file.
+-
+-Tue Jul 4 00:41:51 1995 Ulrich Drepper <drepper@myware>
+-
+- * tupdate.perl.in: use "Updated: " in msgid "".
+-
+- * cat-compat.c: Fix typo (LOCALDIR -> LOCALEDIR).
+- Define getenv if !__STDC__.
+-
+- * bindtextdom.c: Protect stdlib.h and string.h inclusion.
+- Define free if !__STDC__.
+-
+- * finddomain.c: Change DEF_MSG_DOM_DIR to LOCALEDIR.
+- Define free if !__STDC__.
+-
+- * cat-compat.c: Change DEF_MSG_DOM_DIR to LOCALEDIR.
+-
+-Mon Jul 3 23:56:30 1995 Ulrich Drepper <drepper@myware>
+-
+- * Makefile.in: Use LOCALEDIR instead of DEF_MSG_DOM_DIR.
+- Remove unneeded $(srcdir) from Makefile.in dependency.
+-
+- * makelinks: Add copyright and short description.
+-
+- * po-mode.el: Last version for 0.7.
+-
+- * tupdate.perl.in: Fix die message.
+-
+- * dcgettext.c: Protect include of string.h.
+-
+- * gettext.c: Protect include of stdlib.h and further tries to get NULL.
+-
+- * finddomain.c: Some corrections in includes.
+-
+- * Makefile.in (INCLUDES): Prune list correct path to Makefile.in.
+-
+- * po-to-tbl.sed: Adopt for new .po file format.
+-
+- * linux-msg.sed, xopen-msg.sed: Adopt for new .po file format.
+-
+-Sun Jul 2 23:55:03 1995 Ulrich Drepper <drepper@myware>
+-
+- * tupdate.perl.in: Complete rewrite for new .po file format.
++2004-01-29 GNU <bug-gnu-gettext@gnu.org>
+
+-Sun Jul 2 02:06:50 1995 Ulrich Drepper <drepper@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@euro ISO-8859-15"
++ echo "$l@euro ISO-8859-15"
++ echo "$l.cp-437 CP437"
++ echo "$l.cp-850 CP850"
++ echo "$l.cp-1252 CP1252"
++ echo "$l.cp-1252@euro CP1252"
++ #echo "$l.atari-st ATARI-ST" # not a commonly used encoding
++ echo "$l.utf-8 UTF-8"
++ echo "$l.utf-8@euro UTF-8"
++ done
++ for l in cs cs_CZ hr hr_HR hu hu_HU pl pl_PL ro ro_RO sk sk_SK sl \
++ sl_SI sr sr_CS sr_YU; do
++ echo "$l ISO-8859-2"
++ echo "$l.iso-8859-2 ISO-8859-2"
++ echo "$l.cp-852 CP852"
++ echo "$l.cp-1250 CP1250"
++ echo "$l.utf-8 UTF-8"
++ done
++ for l in mk mk_MK ru ru_RU; do
++ echo "$l ISO-8859-5"
++ echo "$l.iso-8859-5 ISO-8859-5"
++ echo "$l.koi8-r KOI8-R"
++ echo "$l.cp-866 CP866"
++ echo "$l.cp-1251 CP1251"
++ echo "$l.utf-8 UTF-8"
++ done
++ for l in ar ar_SA; do
++ echo "$l ISO-8859-6"
++ echo "$l.iso-8859-6 ISO-8859-6"
++ echo "$l.cp-864 CP864"
++ #echo "$l.cp-868 CP868" # not a commonly used encoding
++ echo "$l.cp-1256 CP1256"
++ echo "$l.utf-8 UTF-8"
++ done
++ for l in el el_GR gr gr_GR; do
++ echo "$l ISO-8859-7"
++ echo "$l.iso-8859-7 ISO-8859-7"
++ echo "$l.cp-869 CP869"
++ echo "$l.cp-1253 CP1253"
++ echo "$l.cp-1253@euro CP1253"
++ echo "$l.utf-8 UTF-8"
++ echo "$l.utf-8@euro UTF-8"
++ done
++ for l in he he_IL iw iw_IL; do
++ echo "$l ISO-8859-8"
++ echo "$l.iso-8859-8 ISO-8859-8"
++ echo "$l.cp-862 CP862"
++ echo "$l.cp-1255 CP1255"
++ echo "$l.utf-8 UTF-8"
++ done
++ for l in tr tr_TR; do
++ echo "$l ISO-8859-9"
++ echo "$l.iso-8859-9 ISO-8859-9"
++ echo "$l.cp-857 CP857"
++ echo "$l.cp-1254 CP1254"
++ echo "$l.utf-8 UTF-8"
++ done
++ for l in lt lt_LT lv lv_LV; do
++ #echo "$l BALTIC" # not a commonly used encoding, wrong encoding name
++ echo "$l ISO-8859-13"
++ done
++ for l in ru_UA uk uk_UA; do
++ echo "$l KOI8-U"
++ done
++ for l in zh zh_CN; do
++ #echo "$l GB_2312-80" # not a commonly used encoding, wrong encoding name
++ echo "$l GB2312"
++ done
++ for l in ja ja_JP ja_JP.EUC; do
++ echo "$l EUC-JP"
++ done
++ for l in ko ko_KR; do
++ echo "$l EUC-KR"
++ done
++ for l in th th_TH; do
++ echo "$l TIS-620"
++ done
++ for l in fa fa_IR; do
++ #echo "$l ISIRI-3342" # a broken encoding
++ echo "$l.utf-8 UTF-8"
++ done
++ ;;
++ linux* | *-gnu*)
++ # 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@hrz1.hrz.tu-darmstadt.de>"
++ echo "# and Bruno Haible <bruno@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@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@gnu.ai.mit.edu>, 1995.
++ Copyright (C) 1995-1999, 2000-2001, 2003 Free Software Foundation, Inc.
++ Written by Ulrich Drepper <drepper@gnu.org>, 1995.
+
+- This program is free software; you can redistribute it and/or modify
+- it under the terms of the GNU General Public License as published by
+- 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@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@gnu.ai.mit.edu>, 1995.
++/* Copyright (C) 1995-1999, 2000-2003 Free Software Foundation, Inc.
++ Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
+
+- This program is free software; you can redistribute it and/or modify
+- 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@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@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@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@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@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@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@gnu.org>, 1995. */
++/* Win32 code written by Tor Lillqvist <tml@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@latin";
++ case SUBLANG_AZERI_CYRILLIC: return "az_AZ@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@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@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@arabic";
++ case SUBLANG_TAMAZIGHT_LATIN: return "ber_MA@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@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@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-@USE_INCLUDED_LIBINTL@
++all-yes: libintl.$la libintl.h charset.alias ref-add.sed ref-del.sed
++all-no: all-no-@BUILD_INCLUDED_LIBINTL@
++all-no-yes: libgnuintl.$la
++all-no-no:
++
++libintl.a 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-@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''@,@HAVE_POSIX_PRINTF@,g' \
++ -e 's,@''HAVE_ASPRINTF''@,@HAVE_ASPRINTF@,g' \
++ -e 's,@''HAVE_SNPRINTF''@,@HAVE_SNPRINTF@,g' \
++ -e 's,@''HAVE_WPRINTF''@,@HAVE_WPRINTF@,g' \
++ < $(srcdir)/libgnuintl.h.in > libgnuintl.h
+
+-../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.
+-@GT_YES@intlh.inst: intlh.inst.in ../config.status
+-@GT_YES@ cd .. \
+-@GT_YES@ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= \
+-@GT_YES@ $(SHELL) ./config.status
+-@GT_NO@.PHONY: intlh.inst
+-@GT_NO@intlh.inst:
++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@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@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@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@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@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@.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@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@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@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@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@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@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@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@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@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@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@cygnus.com>, 1995-2000.
++dnl Bruno Haible <haible@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 translati