| Upstream-Status: Inappropriate [configuration] |
| |
| --- lrzsz-0.12.20.safe/ABOUT-NLS 1998-04-26 09:22:30.000000000 -0400 |
| +++ lrzsz-0.12.20/ABOUT-NLS 2004-09-12 14:40:34.323752952 -0400 |
| @@ -1,14 +1,14 @@ |
| Notes on the Free Translation Project |
| ************************************* |
| |
| - Free software is going international! The Free Translation Project |
| -is a way to get maintainers of free software, translators, and users all |
| +Free software is going international! The Free Translation Project is |
| +a way to get maintainers of free software, translators, and users all |
| together, so that will gradually become able to speak many languages. |
| A few packages already provide translations for their messages. |
| |
| If you found this `ABOUT-NLS' file inside a distribution, you may |
| assume that the distributed package does use GNU `gettext' internally, |
| -itself available at your nearest GNU archive site. But you do *not* |
| +itself available at your nearest GNU archive site. But you do _not_ |
| need to install GNU `gettext' prior to configuring, installing or using |
| this package with messages translated. |
| |
| @@ -22,10 +22,10 @@ |
| `gettext' which is used. The information can be found in the |
| `intl/VERSION' file, in internationalized packages. |
| |
| -One advise in advance |
| -===================== |
| +Quick configuration advice |
| +========================== |
| |
| - If you want to exploit the full power of internationalization, you |
| +If you want to exploit the full power of internationalization, you |
| should configure it using |
| |
| ./configure --with-included-gettext |
| @@ -34,42 +34,40 @@ |
| package, despite the existence of internationalizing capabilities in the |
| operating system where this package is being installed. So far, only |
| the `gettext' implementation in the GNU C library version 2 provides as |
| -many features (such as locale alias or message inheritance) as the |
| -implementation here. It is also not possible to offer this additional |
| -functionality on top of a `catgets' implementation. Future versions of |
| -GNU `gettext' will very likely convey even more functionality. So it |
| -might be a good idea to change to GNU `gettext' as soon as possible. |
| +many features (such as locale alias, message inheritance, automatic |
| +charset conversion or plural form handling) as the implementation here. |
| +It is also not possible to offer this additional functionality on top |
| +of a `catgets' implementation. Future versions of GNU `gettext' will |
| +very likely convey even more functionality. So it might be a good idea |
| +to change to GNU `gettext' as soon as possible. |
| |
| - So you need not provide this option if you are using GNU libc 2 or |
| + So you need _not_ provide this option if you are using GNU libc 2 or |
| you have installed a recent copy of the GNU gettext package with the |
| included `libintl'. |
| |
| INSTALL Matters |
| =============== |
| |
| - Some packages are "localizable" when properly installed; the |
| -programs they contain can be made to speak your own native language. |
| -Most such packages use GNU `gettext'. Other packages have their own |
| -ways to internationalization, predating GNU `gettext'. |
| +Some packages are "localizable" when properly installed; the programs |
| +they contain can be made to speak your own native language. Most such |
| +packages use GNU `gettext'. Other packages have their own ways to |
| +internationalization, predating GNU `gettext'. |
| |
| By default, this package will be installed to allow translation of |
| -messages. It will automatically detect whether the system provides |
| -usable `catgets' (if using this is selected by the installer) or |
| -`gettext' functions. If neither is available, the GNU `gettext' own |
| +messages. It will automatically detect whether the system already |
| +provides the GNU `gettext' functions. If not, the GNU `gettext' own |
| library will be used. This library is wholly contained within this |
| package, usually in the `intl/' subdirectory, so prior installation of |
| -the GNU `gettext' package is *not* required. Installers may use |
| +the GNU `gettext' package is _not_ required. Installers may use |
| special options at configuration time for changing the default |
| behaviour. The commands: |
| |
| ./configure --with-included-gettext |
| - ./configure --with-catgets |
| ./configure --disable-nls |
| |
| -will respectively bypass any pre-existing `catgets' or `gettext' to use |
| -the internationalizing routines provided within this package, enable |
| -the use of the `catgets' functions (if found on the locale system), or |
| -else, *totally* disable translation of messages. |
| +will respectively bypass any pre-existing `gettext' to use the |
| +internationalizing routines provided within this package, or else, |
| +_totally_ disable translation of messages. |
| |
| When you already have GNU `gettext' installed on your system and run |
| configure without an option for your new package, `configure' will |
| @@ -83,18 +81,10 @@ |
| |
| to prevent auto-detection. |
| |
| - By default the configuration process will not test for the `catgets' |
| -function and therefore they will not be used. The reasons are already |
| -given above: the emulation on top of `catgets' cannot provide all the |
| -extensions provided by the GNU `gettext' library. If you nevertheless |
| -want to use the `catgets' functions use |
| - |
| - ./configure --with-catgets |
| - |
| -to enable the test for `catgets' (this causes no harm if `catgets' is |
| -not available on your system). If you really select this option we |
| -would like to hear about the reasons because we cannot think of any |
| -good one ourself. |
| + The configuration process will not test for the `catgets' function |
| +and therefore it will not be used. The reason is that even an |
| +emulation of `gettext' on top of `catgets' could not provide all the |
| +extensions of the GNU `gettext' library. |
| |
| Internationalized packages have usually many `po/LL.po' files, where |
| LL gives an ISO 639 two-letter code identifying the language. Unless |
| @@ -108,57 +98,73 @@ |
| Using This Package |
| ================== |
| |
| - As a user, if your language has been installed for this package, you |
| +As a user, if your language has been installed for this package, you |
| only have to set the `LANG' environment variable to the appropriate |
| -ISO 639 `LL' two-letter code prior to using the programs in the |
| -package. For example, let's suppose that you speak German. At the |
| -shell prompt, merely execute `setenv LANG de' (in `csh'), |
| -`export LANG; LANG=de' (in `sh') or `export LANG=de' (in `bash'). This |
| -can be done from your `.login' or `.profile' file, once and for all. |
| +`LL_CC' combination. Here `LL' is an ISO 639 two-letter language code, |
| +and `CC' is an ISO 3166 two-letter country code. For example, let's |
| +suppose that you speak German and live in Germany. At the shell |
| +prompt, merely execute `setenv LANG de_DE' (in `csh'), |
| +`export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash'). |
| +This can be done from your `.login' or `.profile' file, once and for |
| +all. |
| |
| - An operating system might already offer message localization for |
| -many of its programs, while other programs have been installed locally |
| -with the full capabilities of GNU `gettext'. Just using `gettext' |
| -extended syntax for `LANG' would break proper localization of already |
| -available operating system programs. In this case, users should set |
| -both `LANGUAGE' and `LANG' variables in their environment, as programs |
| -using GNU `gettext' give preference to `LANGUAGE'. For example, some |
| -Swedish users would rather read translations in German than English for |
| -when Swedish is not available. This is easily accomplished by setting |
| -`LANGUAGE' to `sv:de' while leaving `LANG' to `sv'. |
| + You might think that the country code specification is redundant. |
| +But in fact, some languages have dialects in different countries. For |
| +example, `de_AT' is used for Austria, and `pt_BR' for Brazil. The |
| +country code serves to distinguish the dialects. |
| + |
| + The locale naming convention of `LL_CC', with `LL' denoting the |
| +language and `CC' denoting the country, is the one use on systems based |
| +on GNU libc. On other systems, some variations of this scheme are |
| +used, such as `LL' or `LL_CC.ENCODING'. You can get the list of |
| +locales supported by your system for your country by running the command |
| +`locale -a | grep '^LL''. |
| + |
| + Not all programs have translations for all languages. By default, an |
| +English message is shown in place of a nonexistent translation. If you |
| +understand other languages, you can set up a priority list of languages. |
| +This is done through a different environment variable, called |
| +`LANGUAGE'. GNU `gettext' gives preference to `LANGUAGE' over `LANG' |
| +for the purpose of message handling, but you still need to have `LANG' |
| +set to the primary language; this is required by other parts of the |
| +system libraries. For example, some Swedish users who would rather |
| +read translations in German than English for when Swedish is not |
| +available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'. |
| + |
| + Special advice for Norwegian users: The language code for Norwegian |
| +bokma*l changed from `no' to `nb' recently (in 2003). During the |
| +transition period, while some message catalogs for this language are |
| +installed under `nb' and some older ones under `no', it's recommended |
| +for Norwegian users to set `LANGUAGE' to `nb:no' so that both newer and |
| +older translations are used. |
| + |
| + In the `LANGUAGE' environment variable, but not in the `LANG' |
| +environment variable, `LL_CC' combinations can be abbreviated as `LL' |
| +to denote the language's main dialect. For example, `de' is equivalent |
| +to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT' |
| +(Portuguese as spoken in Portugal) in this context. |
| |
| Translating Teams |
| ================= |
| |
| - For the Free Translation Project to be a success, we need interested |
| +For the Free Translation Project to be a success, we need interested |
| people who like their own language and write it well, and who are also |
| able to synergize with other translators speaking the same language. |
| -Each translation team has its own mailing list, courtesy of Linux |
| -International. You may reach your translation team at the address |
| -`LL@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 translation of program messages to the user's native language |
| + is requested.]) |
| + else |
| + USE_NLS=no |
| + fi |
| + fi |
| + |
| + AC_MSG_CHECKING([whether to use NLS]) |
| + AC_MSG_RESULT([$USE_NLS]) |
| + if test "$USE_NLS" = "yes"; then |
| + AC_MSG_CHECKING([where the gettext function comes from]) |
| + if test "$gt_use_preinstalled_gnugettext" = "yes"; then |
| + if test "$gt_cv_func_gnugettext_libintl" = "yes"; then |
| + gt_source="external libintl" |
| + else |
| + gt_source="libc" |
| + fi |
| + else |
| + gt_source="included intl directory" |
| + fi |
| + AC_MSG_RESULT([$gt_source]) |
| + fi |
| + |
| + if test "$USE_NLS" = "yes"; then |
| + |
| + if test "$gt_use_preinstalled_gnugettext" = "yes"; then |
| + if test "$gt_cv_func_gnugettext_libintl" = "yes"; then |
| + AC_MSG_CHECKING([how to link with libintl]) |
| + AC_MSG_RESULT([$LIBINTL]) |
| + AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL]) |
| + fi |
| + |
| + dnl For backward compatibility. Some packages may be using this. |
| + AC_DEFINE(HAVE_GETTEXT, 1, |
| + [Define if the GNU gettext() function is already present or preinstalled.]) |
| + AC_DEFINE(HAVE_DCGETTEXT, 1, |
| + [Define if the GNU dcgettext() function is already present or preinstalled.]) |
| + fi |
| + |
| + dnl We need to process the po/ directory. |
| + POSUB=po |
| + fi |
| + |
| + ifelse(gt_included_intl, yes, [ |
| + dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL |
| + dnl to 'yes' because some of the testsuite requires it. |
| + if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then |
| + BUILD_INCLUDED_LIBINTL=yes |
| + fi |
| + |
| + dnl Make all variables we use known to autoconf. |
| + AC_SUBST(BUILD_INCLUDED_LIBINTL) |
| + AC_SUBST(USE_INCLUDED_LIBINTL) |
| + AC_SUBST(CATOBJEXT) |
| + |
| + dnl For backward compatibility. Some configure.ins may be using this. |
| + nls_cv_header_intl= |
| + nls_cv_header_libgt= |
| + |
| + dnl For backward compatibility. Some Makefiles may be using this. |
| + DATADIRNAME=share |
| + AC_SUBST(DATADIRNAME) |
| + |
| + dnl For backward compatibility. Some Makefiles may be using this. |
| + INSTOBJEXT=.mo |
| + AC_SUBST(INSTOBJEXT) |
| + |
| + dnl For backward compatibility. Some Makefiles may be using this. |
| + GENCAT=gencat |
| + AC_SUBST(GENCAT) |
| + |
| + dnl For backward compatibility. Some Makefiles may be using this. |
| + if test "$USE_INCLUDED_LIBINTL" = yes; then |
| + INTLOBJS="\$(GETTOBJS)" |
| + fi |
| + AC_SUBST(INTLOBJS) |
| + |
| + dnl Enable libtool support if the surrounding package wishes it. |
| + INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix |
| + AC_SUBST(INTL_LIBTOOL_SUFFIX_PREFIX) |
| + ]) |
| + |
| + dnl For backward compatibility. Some Makefiles may be using this. |
| + INTLLIBS="$LIBINTL" |
| + AC_SUBST(INTLLIBS) |
| + |
| + dnl Make all documented variables known to autoconf. |
| + AC_SUBST(LIBINTL) |
| + AC_SUBST(LTLIBINTL) |
| + AC_SUBST(POSUB) |
| +]) |
| + |
| + |
| +dnl Checks for all prerequisites of the intl subdirectory, |
| +dnl except for INTL_LIBTOOL_SUFFIX_PREFIX (and possibly LIBTOOL), INTLOBJS, |
| +dnl USE_INCLUDED_LIBINTL, BUILD_INCLUDED_LIBINTL. |
| +AC_DEFUN([AM_INTL_SUBDIR], |
| +[ |
| + AC_REQUIRE([AC_PROG_INSTALL])dnl |
| + AC_REQUIRE([AM_MKINSTALLDIRS])dnl |
| + AC_REQUIRE([AC_PROG_CC])dnl |
| + AC_REQUIRE([AC_CANONICAL_HOST])dnl |
| + AC_REQUIRE([AC_PROG_RANLIB])dnl |
| + AC_REQUIRE([AC_ISC_POSIX])dnl |
| + AC_REQUIRE([AC_HEADER_STDC])dnl |
| + AC_REQUIRE([AC_C_CONST])dnl |
| + AC_REQUIRE([bh_C_SIGNED])dnl |
| + AC_REQUIRE([AC_C_INLINE])dnl |
| + AC_REQUIRE([AC_TYPE_OFF_T])dnl |
| + AC_REQUIRE([AC_TYPE_SIZE_T])dnl |
| + AC_REQUIRE([jm_AC_TYPE_LONG_LONG])dnl |
| + AC_REQUIRE([gt_TYPE_LONGDOUBLE])dnl |
| + AC_REQUIRE([gt_TYPE_WCHAR_T])dnl |
| + AC_REQUIRE([gt_TYPE_WINT_T])dnl |
| + AC_REQUIRE([jm_AC_HEADER_INTTYPES_H]) |
| + AC_REQUIRE([jm_AC_HEADER_STDINT_H]) |
| + AC_REQUIRE([gt_TYPE_INTMAX_T]) |
| + AC_REQUIRE([gt_PRINTF_POSIX]) |
| + AC_REQUIRE([AC_FUNC_ALLOCA])dnl |
| + AC_REQUIRE([AC_FUNC_MMAP])dnl |
| + AC_REQUIRE([jm_GLIBC21])dnl |
| + AC_REQUIRE([gt_INTDIV0])dnl |
| + AC_REQUIRE([jm_AC_TYPE_UINTMAX_T])dnl |
| + AC_REQUIRE([gt_HEADER_INTTYPES_H])dnl |
| + AC_REQUIRE([gt_INTTYPES_PRI])dnl |
| + AC_REQUIRE([gl_XSIZE])dnl |
| + |
| + AC_CHECK_TYPE([ptrdiff_t], , |
| + [AC_DEFINE([ptrdiff_t], [long], |
| + [Define as the type of the result of subtracting two pointers, if the system doesn't define it.]) |
| + ]) |
| + AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h stddef.h \ |
| +stdlib.h string.h unistd.h sys/param.h]) |
| + AC_CHECK_FUNCS([asprintf fwprintf getcwd getegid geteuid getgid getuid \ |
| +mempcpy munmap putenv setenv setlocale snprintf stpcpy strcasecmp strdup \ |
| +strtoul tsearch wcslen __argz_count __argz_stringify __argz_next \ |
| +__fsetlocking]) |
| + |
| + dnl Use the _snprintf function only if it is declared (because on NetBSD it |
| + dnl is defined as a weak alias of snprintf; we prefer to use the latter). |
| + gt_CHECK_DECL(_snprintf, [#include <stdio.h>]) |
| + gt_CHECK_DECL(_snwprintf, [#include <stdio.h>]) |
| + |
| + dnl Use the *_unlocked functions only if they are declared. |
| + dnl (because some of them were defined without being declared in Solaris |
| + dnl 2.5.1 but were removed in Solaris 2.6, whereas we want binaries built |
| + dnl on Solaris 2.5.1 to run on Solaris 2.6). |
| + dnl Don't use AC_CHECK_DECLS because it isn't supported in autoconf-2.13. |
| + gt_CHECK_DECL(feof_unlocked, [#include <stdio.h>]) |
| + gt_CHECK_DECL(fgets_unlocked, [#include <stdio.h>]) |
| + gt_CHECK_DECL(getc_unlocked, [#include <stdio.h>]) |
| + |
| + case $gt_cv_func_printf_posix in |
| + *yes) HAVE_POSIX_PRINTF=1 ;; |
| + *) HAVE_POSIX_PRINTF=0 ;; |
| + esac |
| + AC_SUBST([HAVE_POSIX_PRINTF]) |
| + if test "$ac_cv_func_asprintf" = yes; then |
| + HAVE_ASPRINTF=1 |
| + else |
| + HAVE_ASPRINTF=0 |
| + fi |
| + AC_SUBST([HAVE_ASPRINTF]) |
| + if test "$ac_cv_func_snprintf" = yes; then |
| + HAVE_SNPRINTF=1 |
| + else |
| + HAVE_SNPRINTF=0 |
| + fi |
| + AC_SUBST([HAVE_SNPRINTF]) |
| + if test "$ac_cv_func_wprintf" = yes; then |
| + HAVE_WPRINTF=1 |
| + else |
| + HAVE_WPRINTF=0 |
| + fi |
| + AC_SUBST([HAVE_WPRINTF]) |
| + |
| + AM_ICONV |
| + AM_LANGINFO_CODESET |
| + if test $ac_cv_header_locale_h = yes; then |
| + AM_LC_MESSAGES |
| + fi |
| + |
| + dnl intl/plural.c is generated from intl/plural.y. It requires bison, |
| + dnl because plural.y uses bison specific features. It requires at least |
| + dnl bison-1.26 because earlier versions generate a plural.c that doesn't |
| + dnl compile. |
| + dnl bison is only needed for the maintainer (who touches plural.y). But in |
| + dnl order to avoid separate Makefiles or --enable-maintainer-mode, we put |
| + dnl the rule in general Makefile. Now, some people carelessly touch the |
| + dnl files or have a broken "make" program, hence the plural.c rule will |
| + dnl sometimes fire. To avoid an error, defines BISON to ":" if it is not |
| + dnl present or too old. |
| + AC_CHECK_PROGS([INTLBISON], [bison]) |
| + if test -z "$INTLBISON"; then |
| + ac_verc_fail=yes |
| + else |
| + dnl Found it, now check the version. |
| + AC_MSG_CHECKING([version of bison]) |
| +changequote(<<,>>)dnl |
| + ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'` |
| + case $ac_prog_version in |
| + '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; |
| + 1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*) |
| +changequote([,])dnl |
| + ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;; |
| + *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;; |
| + esac |
| + AC_MSG_RESULT([$ac_prog_version]) |
| + fi |
| + if test $ac_verc_fail = yes; then |
| + INTLBISON=: |
| + fi |
| +]) |
| + |
| + |
| +dnl gt_CHECK_DECL(FUNC, INCLUDES) |
| +dnl Check whether a function is declared. |
| +AC_DEFUN([gt_CHECK_DECL], |
| +[ |
| + AC_CACHE_CHECK([whether $1 is declared], ac_cv_have_decl_$1, |
| + [AC_TRY_COMPILE([$2], [ |
| +#ifndef $1 |
| + char *p = (char *) $1; |
| +#endif |
| +], ac_cv_have_decl_$1=yes, ac_cv_have_decl_$1=no)]) |
| + if test $ac_cv_have_decl_$1 = yes; then |
| + gt_value=1 |
| + else |
| + gt_value=0 |
| + fi |
| + AC_DEFINE_UNQUOTED([HAVE_DECL_]translit($1, [a-z], [A-Z]), [$gt_value], |
| + [Define to 1 if you have the declaration of `$1', and to 0 if you don't.]) |
| +]) |
| + |
| + |
| +dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version]) |
| +AC_DEFUN([AM_GNU_GETTEXT_VERSION], []) |
| --- lrzsz-0.12.20.safe/m4/glibc21.m4 1969-12-31 19:00:00.000000000 -0500 |
| +++ lrzsz-0.12.20/m4/glibc21.m4 2004-09-12 14:40:34.833675432 -0400 |
| @@ -0,0 +1,32 @@ |
| +# glibc21.m4 serial 2 (fileutils-4.1.3, gettext-0.10.40) |
| +dnl Copyright (C) 2000-2002 Free Software Foundation, Inc. |
| +dnl This file is free software, distributed under the terms of the GNU |
| +dnl General Public License. As a special exception to the GNU General |
| +dnl Public License, this file may be distributed as part of a program |
| +dnl that contains a configuration script generated by Autoconf, under |
| +dnl the same distribution terms as the rest of that program. |
| + |
| +# Test for the GNU C Library, version 2.1 or newer. |
| +# From Bruno Haible. |
| + |
| +AC_DEFUN([jm_GLIBC21], |
| + [ |
| + AC_CACHE_CHECK(whether we are using the GNU C Library 2.1 or newer, |
| + ac_cv_gnu_library_2_1, |
| + [AC_EGREP_CPP([Lucky GNU user], |
| + [ |
| +#include <features.h> |
| +#ifdef __GNU_LIBRARY__ |
| + #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2) |
| + Lucky GNU user |
| + #endif |
| +#endif |
| + ], |
| + ac_cv_gnu_library_2_1=yes, |
| + ac_cv_gnu_library_2_1=no) |
| + ] |
| + ) |
| + AC_SUBST(GLIBC21) |
| + GLIBC21="$ac_cv_gnu_library_2_1" |
| + ] |
| +) |
| --- lrzsz-0.12.20.safe/m4/iconv.m4 1969-12-31 19:00:00.000000000 -0500 |
| +++ lrzsz-0.12.20/m4/iconv.m4 2004-09-12 14:40:34.839674520 -0400 |
| @@ -0,0 +1,103 @@ |
| +# iconv.m4 serial AM4 (gettext-0.11.3) |
| +dnl Copyright (C) 2000-2002 Free Software Foundation, Inc. |
| +dnl This file is free software, distributed under the terms of the GNU |
| +dnl General Public License. As a special exception to the GNU General |
| +dnl Public License, this file may be distributed as part of a program |
| +dnl that contains a configuration script generated by Autoconf, under |
| +dnl the same distribution terms as the rest of that program. |
| + |
| +dnl From Bruno Haible. |
| + |
| +AC_DEFUN([AM_ICONV_LINKFLAGS_BODY], |
| +[ |
| + dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. |
| + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) |
| + AC_REQUIRE([AC_LIB_RPATH]) |
| + |
| + dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV |
| + dnl accordingly. |
| + AC_LIB_LINKFLAGS_BODY([iconv]) |
| +]) |
| + |
| +AC_DEFUN([AM_ICONV_LINK], |
| +[ |
| + dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and |
| + dnl those with the standalone portable GNU libiconv installed). |
| + |
| + dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV |
| + dnl accordingly. |
| + AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) |
| + |
| + dnl Add $INCICONV to CPPFLAGS before performing the following checks, |
| + dnl because if the user has installed libiconv and not disabled its use |
| + dnl via --without-libiconv-prefix, he wants to use it. The first |
| + dnl AC_TRY_LINK will then fail, the second AC_TRY_LINK will succeed. |
| + am_save_CPPFLAGS="$CPPFLAGS" |
| + AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV]) |
| + |
| + AC_CACHE_CHECK(for iconv, am_cv_func_iconv, [ |
| + am_cv_func_iconv="no, consider installing GNU libiconv" |
| + am_cv_lib_iconv=no |
| + AC_TRY_LINK([#include <stdlib.h> |
| +#include <iconv.h>], |
| + [iconv_t cd = iconv_open("",""); |
| + iconv(cd,NULL,NULL,NULL,NULL); |
| + iconv_close(cd);], |
| + am_cv_func_iconv=yes) |
| + if test "$am_cv_func_iconv" != yes; then |
| + am_save_LIBS="$LIBS" |
| + LIBS="$LIBS $LIBICONV" |
| + AC_TRY_LINK([#include <stdlib.h> |
| +#include <iconv.h>], |
| + [iconv_t cd = iconv_open("",""); |
| + iconv(cd,NULL,NULL,NULL,NULL); |
| + iconv_close(cd);], |
| + am_cv_lib_iconv=yes |
| + am_cv_func_iconv=yes) |
| + LIBS="$am_save_LIBS" |
| + fi |
| + ]) |
| + if test "$am_cv_func_iconv" = yes; then |
| + AC_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function.]) |
| + fi |
| + if test "$am_cv_lib_iconv" = yes; then |
| + AC_MSG_CHECKING([how to link with libiconv]) |
| + AC_MSG_RESULT([$LIBICONV]) |
| + else |
| + dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV |
| + dnl either. |
| + CPPFLAGS="$am_save_CPPFLAGS" |
| + LIBICONV= |
| + LTLIBICONV= |
| + fi |
| + AC_SUBST(LIBICONV) |
| + AC_SUBST(LTLIBICONV) |
| +]) |
| + |
| +AC_DEFUN([AM_ICONV], |
| +[ |
| + AM_ICONV_LINK |
| + if test "$am_cv_func_iconv" = yes; then |
| + AC_MSG_CHECKING([for iconv declaration]) |
| + AC_CACHE_VAL(am_cv_proto_iconv, [ |
| + AC_TRY_COMPILE([ |
| +#include <stdlib.h> |
| +#include <iconv.h> |
| +extern |
| +#ifdef __cplusplus |
| +"C" |
| +#endif |
| +#if defined(__STDC__) || defined(__cplusplus) |
| +size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); |
| +#else |
| +size_t iconv(); |
| +#endif |
| +], [], am_cv_proto_iconv_arg1="", am_cv_proto_iconv_arg1="const") |
| + am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"]) |
| + am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` |
| + AC_MSG_RESULT([$]{ac_t:- |
| + }[$]am_cv_proto_iconv) |
| + AC_DEFINE_UNQUOTED(ICONV_CONST, $am_cv_proto_iconv_arg1, |
| + [Define as const if the declaration of iconv() needs const.]) |
| + fi |
| +]) |
| --- lrzsz-0.12.20.safe/m4/intdiv0.m4 1969-12-31 19:00:00.000000000 -0500 |
| +++ lrzsz-0.12.20/m4/intdiv0.m4 2004-09-12 14:40:34.845673608 -0400 |
| @@ -0,0 +1,72 @@ |
| +# intdiv0.m4 serial 1 (gettext-0.11.3) |
| +dnl Copyright (C) 2002 Free Software Foundation, Inc. |
| +dnl This file is free software, distributed under the terms of the GNU |
| +dnl General Public License. As a special exception to the GNU General |
| +dnl Public License, this file may be distributed as part of a program |
| +dnl that contains a configuration script generated by Autoconf, under |
| +dnl the same distribution terms as the rest of that program. |
| + |
| +dnl From Bruno Haible. |
| + |
| +AC_DEFUN([gt_INTDIV0], |
| +[ |
| + AC_REQUIRE([AC_PROG_CC])dnl |
| + AC_REQUIRE([AC_CANONICAL_HOST])dnl |
| + |
| + AC_CACHE_CHECK([whether integer division by zero raises SIGFPE], |
| + gt_cv_int_divbyzero_sigfpe, |
| + [ |
| + AC_TRY_RUN([ |
| +#include <stdlib.h> |
| +#include <signal.h> |
| + |
| +static void |
| +#ifdef __cplusplus |
| +sigfpe_handler (int sig) |
| +#else |
| +sigfpe_handler (sig) int sig; |
| +#endif |
| +{ |
| + /* Exit with code 0 if SIGFPE, with code 1 if any other signal. */ |
| + exit (sig != SIGFPE); |
| +} |
| + |
| +int x = 1; |
| +int y = 0; |
| +int z; |
| +int nan; |
| + |
| +int main () |
| +{ |
| + signal (SIGFPE, sigfpe_handler); |
| +/* IRIX and AIX (when "xlc -qcheck" is used) yield signal SIGTRAP. */ |
| +#if (defined (__sgi) || defined (_AIX)) && defined (SIGTRAP) |
| + signal (SIGTRAP, sigfpe_handler); |
| +#endif |
| +/* Linux/SPARC yields signal SIGILL. */ |
| +#if defined (__sparc__) && defined (__linux__) |
| + signal (SIGILL, sigfpe_handler); |
| +#endif |
| + |
| + z = x / y; |
| + nan = y / y; |
| + exit (1); |
| +} |
| +], gt_cv_int_divbyzero_sigfpe=yes, gt_cv_int_divbyzero_sigfpe=no, |
| + [ |
| + # Guess based on the CPU. |
| + case "$host_cpu" in |
| + alpha* | i[34567]86 | m68k | s390*) |
| + gt_cv_int_divbyzero_sigfpe="guessing yes";; |
| + *) |
| + gt_cv_int_divbyzero_sigfpe="guessing no";; |
| + esac |
| + ]) |
| + ]) |
| + case "$gt_cv_int_divbyzero_sigfpe" in |
| + *yes) value=1;; |
| + *) value=0;; |
| + esac |
| + AC_DEFINE_UNQUOTED(INTDIV0_RAISES_SIGFPE, $value, |
| + [Define if integer division by zero raises signal SIGFPE.]) |
| +]) |
| --- lrzsz-0.12.20.safe/m4/intmax.m4 1969-12-31 19:00:00.000000000 -0500 |
| +++ lrzsz-0.12.20/m4/intmax.m4 2004-09-12 14:40:34.855672088 -0400 |
| @@ -0,0 +1,32 @@ |
| +# intmax.m4 serial 1 (gettext-0.12) |
| +dnl Copyright (C) 2002-2003 Free Software Foundation, Inc. |
| +dnl This file is free software, distributed under the terms of the GNU |
| +dnl General Public License. As a special exception to the GNU General |
| +dnl Public License, this file may be distributed as part of a program |
| +dnl that contains a configuration script generated by Autoconf, under |
| +dnl the same distribution terms as the rest of that program. |
| + |
| +dnl From Bruno Haible. |
| +dnl Test whether the system has the 'intmax_t' type, but don't attempt to |
| +dnl find a replacement if it is lacking. |
| + |
| +AC_DEFUN([gt_TYPE_INTMAX_T], |
| +[ |
| + AC_REQUIRE([jm_AC_HEADER_INTTYPES_H]) |
| + AC_REQUIRE([jm_AC_HEADER_STDINT_H]) |
| + AC_CACHE_CHECK(for intmax_t, gt_cv_c_intmax_t, |
| + [AC_TRY_COMPILE([ |
| +#include <stddef.h> |
| +#include <stdlib.h> |
| +#if HAVE_STDINT_H_WITH_UINTMAX |
| +#include <stdint.h> |
| +#endif |
| +#if HAVE_INTTYPES_H_WITH_UINTMAX |
| +#include <inttypes.h> |
| +#endif |
| +], [intmax_t x = -1;], gt_cv_c_intmax_t=yes, gt_cv_c_intmax_t=no)]) |
| + if test $gt_cv_c_intmax_t = yes; then |
| + AC_DEFINE(HAVE_INTMAX_T, 1, |
| + [Define if you have the 'intmax_t' type in <stdint.h> or <inttypes.h>.]) |
| + fi |
| +]) |
| --- lrzsz-0.12.20.safe/m4/inttypes_h.m4 1969-12-31 19:00:00.000000000 -0500 |
| +++ lrzsz-0.12.20/m4/inttypes_h.m4 2004-09-12 14:40:34.868670112 -0400 |
| @@ -0,0 +1,28 @@ |
| +# inttypes_h.m4 serial 5 (gettext-0.12) |
| +dnl Copyright (C) 1997-2003 Free Software Foundation, Inc. |
| +dnl This file is free software, distributed under the terms of the GNU |
| +dnl General Public License. As a special exception to the GNU General |
| +dnl Public License, this file may be distributed as part of a program |
| +dnl that contains a configuration script generated by Autoconf, under |
| +dnl the same distribution terms as the rest of that program. |
| + |
| +dnl From Paul Eggert. |
| + |
| +# Define HAVE_INTTYPES_H_WITH_UINTMAX if <inttypes.h> exists, |
| +# doesn't clash with <sys/types.h>, and declares uintmax_t. |
| + |
| +AC_DEFUN([jm_AC_HEADER_INTTYPES_H], |
| +[ |
| + AC_CACHE_CHECK([for inttypes.h], jm_ac_cv_header_inttypes_h, |
| + [AC_TRY_COMPILE( |
| + [#include <sys/types.h> |
| +#include <inttypes.h>], |
| + [uintmax_t i = (uintmax_t) -1;], |
| + jm_ac_cv_header_inttypes_h=yes, |
| + jm_ac_cv_header_inttypes_h=no)]) |
| + if test $jm_ac_cv_header_inttypes_h = yes; then |
| + AC_DEFINE_UNQUOTED(HAVE_INTTYPES_H_WITH_UINTMAX, 1, |
| + [Define if <inttypes.h> exists, doesn't clash with <sys/types.h>, |
| + and declares uintmax_t. ]) |
| + fi |
| +]) |
| --- lrzsz-0.12.20.safe/m4/inttypes.m4 1969-12-31 19:00:00.000000000 -0500 |
| +++ lrzsz-0.12.20/m4/inttypes.m4 2004-09-12 14:40:34.861671176 -0400 |
| @@ -0,0 +1,27 @@ |
| +# inttypes.m4 serial 1 (gettext-0.11.4) |
| +dnl Copyright (C) 1997-2002 Free Software Foundation, Inc. |
| +dnl This file is free software, distributed under the terms of the GNU |
| +dnl General Public License. As a special exception to the GNU General |
| +dnl Public License, this file may be distributed as part of a program |
| +dnl that contains a configuration script generated by Autoconf, under |
| +dnl the same distribution terms as the rest of that program. |
| + |
| +dnl From Paul Eggert. |
| + |
| +# Define HAVE_INTTYPES_H if <inttypes.h> exists and doesn't clash with |
| +# <sys/types.h>. |
| + |
| +AC_DEFUN([gt_HEADER_INTTYPES_H], |
| +[ |
| + AC_CACHE_CHECK([for inttypes.h], gt_cv_header_inttypes_h, |
| + [ |
| + AC_TRY_COMPILE( |
| + [#include <sys/types.h> |
| +#include <inttypes.h>], |
| + [], gt_cv_header_inttypes_h=yes, gt_cv_header_inttypes_h=no) |
| + ]) |
| + if test $gt_cv_header_inttypes_h = yes; then |
| + AC_DEFINE_UNQUOTED(HAVE_INTTYPES_H, 1, |
| + [Define if <inttypes.h> exists and doesn't clash with <sys/types.h>.]) |
| + fi |
| +]) |
| --- lrzsz-0.12.20.safe/m4/inttypes-pri.m4 1969-12-31 19:00:00.000000000 -0500 |
| +++ lrzsz-0.12.20/m4/inttypes-pri.m4 2004-09-12 14:40:34.874669200 -0400 |
| @@ -0,0 +1,32 @@ |
| +# inttypes-pri.m4 serial 1 (gettext-0.11.4) |
| +dnl Copyright (C) 1997-2002 Free Software Foundation, Inc. |
| +dnl This file is free software, distributed under the terms of the GNU |
| +dnl General Public License. As a special exception to the GNU General |
| +dnl Public License, this file may be distributed as part of a program |
| +dnl that contains a configuration script generated by Autoconf, under |
| +dnl the same distribution terms as the rest of that program. |
| + |
| +dnl From Bruno Haible. |
| + |
| +# Define PRI_MACROS_BROKEN if <inttypes.h> exists and defines the PRI* |
| +# macros to non-string values. This is the case on AIX 4.3.3. |
| + |
| +AC_DEFUN([gt_INTTYPES_PRI], |
| +[ |
| + AC_REQUIRE([gt_HEADER_INTTYPES_H]) |
| + if test $gt_cv_header_inttypes_h = yes; then |
| + AC_CACHE_CHECK([whether the inttypes.h PRIxNN macros are broken], |
| + gt_cv_inttypes_pri_broken, |
| + [ |
| + AC_TRY_COMPILE([#include <inttypes.h> |
| +#ifdef PRId32 |
| +char *p = PRId32; |
| +#endif |
| +], [], gt_cv_inttypes_pri_broken=no, gt_cv_inttypes_pri_broken=yes) |
| + ]) |
| + fi |
| + if test "$gt_cv_inttypes_pri_broken" = yes; then |
| + AC_DEFINE_UNQUOTED(PRI_MACROS_BROKEN, 1, |
| + [Define if <inttypes.h> exists and defines unusable PRI* macros.]) |
| + fi |
| +]) |
| --- lrzsz-0.12.20.safe/m4/isc-posix.m4 1969-12-31 19:00:00.000000000 -0500 |
| +++ lrzsz-0.12.20/m4/isc-posix.m4 2004-09-12 14:40:34.885667528 -0400 |
| @@ -0,0 +1,26 @@ |
| +# isc-posix.m4 serial 2 (gettext-0.11.2) |
| +dnl Copyright (C) 1995-2002 Free Software Foundation, Inc. |
| +dnl This file is free software, distributed under the terms of the GNU |
| +dnl General Public License. As a special exception to the GNU General |
| +dnl Public License, this file may be distributed as part of a program |
| +dnl that contains a configuration script generated by Autoconf, under |
| +dnl the same distribution terms as the rest of that program. |
| + |
| +# This file is not needed with autoconf-2.53 and newer. Remove it in 2005. |
| + |
| +# This test replaces the one in autoconf. |
| +# Currently this macro should have the same name as the autoconf macro |
| +# because gettext's gettext.m4 (distributed in the automake package) |
| +# still uses it. Otherwise, the use in gettext.m4 makes autoheader |
| +# give these diagnostics: |
| +# configure.in:556: AC_TRY_COMPILE was called before AC_ISC_POSIX |
| +# configure.in:556: AC_TRY_RUN was called before AC_ISC_POSIX |
| + |
| +undefine([AC_ISC_POSIX]) |
| + |
| +AC_DEFUN([AC_ISC_POSIX], |
| + [ |
| + dnl This test replaces the obsolescent AC_ISC_POSIX kludge. |
| + AC_CHECK_LIB(cposix, strerror, [LIBS="$LIBS -lcposix"]) |
| + ] |
| +) |
| --- lrzsz-0.12.20.safe/m4/lcmessage.m4 1969-12-31 19:00:00.000000000 -0500 |
| +++ lrzsz-0.12.20/m4/lcmessage.m4 2004-09-12 14:40:34.902664944 -0400 |
| @@ -0,0 +1,32 @@ |
| +# lcmessage.m4 serial 3 (gettext-0.11.3) |
| +dnl Copyright (C) 1995-2002 Free Software Foundation, Inc. |
| +dnl This file is free software, distributed under the terms of the GNU |
| +dnl General Public License. As a special exception to the GNU General |
| +dnl Public License, this file may be distributed as part of a program |
| +dnl that contains a configuration script generated by Autoconf, under |
| +dnl the same distribution terms as the rest of that program. |
| +dnl |
| +dnl This file can can be used in projects which are not available under |
| +dnl the GNU General Public License or the GNU Library General Public |
| +dnl License but which still want to provide support for the GNU gettext |
| +dnl functionality. |
| +dnl Please note that the actual code of the GNU gettext library is covered |
| +dnl by the GNU Library General Public License, and the rest of the GNU |
| +dnl gettext package package is covered by the GNU General Public License. |
| +dnl They are *not* in the public domain. |
| + |
| +dnl Authors: |
| +dnl Ulrich Drepper <drepper@cygnus.com>, 1995. |
| + |
| +# Check whether LC_MESSAGES is available in <locale.h>. |
| + |
| +AC_DEFUN([AM_LC_MESSAGES], |
| +[ |
| + AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES, |
| + [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES], |
| + am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)]) |
| + if test $am_cv_val_LC_MESSAGES = yes; then |
| + AC_DEFINE(HAVE_LC_MESSAGES, 1, |
| + [Define if your <locale.h> file defines LC_MESSAGES.]) |
| + fi |
| +]) |
| --- lrzsz-0.12.20.safe/m4/lib-ld.m4 1969-12-31 19:00:00.000000000 -0500 |
| +++ lrzsz-0.12.20/m4/lib-ld.m4 2004-09-12 14:40:34.908664032 -0400 |
| @@ -0,0 +1,112 @@ |
| +# lib-ld.m4 serial 3 (gettext-0.13) |
| +dnl Copyright (C) 1996-2003 Free Software Foundation, Inc. |
| +dnl This file is free software, distributed under the terms of the GNU |
| +dnl General Public License. As a special exception to the GNU General |
| +dnl Public License, this file may be distributed as part of a program |
| +dnl that contains a configuration script generated by Autoconf, under |
| +dnl the same distribution terms as the rest of that program. |
| + |
| +dnl Subroutines of libtool.m4, |
| +dnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision |
| +dnl with libtool.m4. |
| + |
| +dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no. |
| +AC_DEFUN([AC_LIB_PROG_LD_GNU], |
| +[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], acl_cv_prog_gnu_ld, |
| +[# I'd rather use --version here, but apparently some GNU ld's only accept -v. |
| +case `$LD -v 2>&1 </dev/null` in |
| +*GNU* | *'with BFD'*) |
| + acl_cv_prog_gnu_ld=yes ;; |
| +*) |
| + acl_cv_prog_gnu_ld=no ;; |
| +esac]) |
| +with_gnu_ld=$acl_cv_prog_gnu_ld |
| +]) |
| + |
| +dnl From libtool-1.4. Sets the variable LD. |
| +AC_DEFUN([AC_LIB_PROG_LD], |
| +[AC_ARG_WITH(gnu-ld, |
| +[ --with-gnu-ld assume the C compiler uses GNU ld [default=no]], |
| +test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no) |
| +AC_REQUIRE([AC_PROG_CC])dnl |
| +AC_REQUIRE([AC_CANONICAL_HOST])dnl |
| +# Prepare PATH_SEPARATOR. |
| +# The user is always right. |
| +if test "${PATH_SEPARATOR+set}" != set; then |
| + echo "#! /bin/sh" >conf$$.sh |
| + echo "exit 0" >>conf$$.sh |
| + chmod +x conf$$.sh |
| + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then |
| + PATH_SEPARATOR=';' |
| + else |
| + PATH_SEPARATOR=: |
| + fi |
| + rm -f conf$$.sh |
| +fi |
| +ac_prog=ld |
| +if test "$GCC" = yes; then |
| + # Check if gcc -print-prog-name=ld gives a path. |
| + AC_MSG_CHECKING([for ld used by GCC]) |
| + case $host in |
| + *-*-mingw*) |
| + # gcc leaves a trailing carriage return which upsets mingw |
| + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; |
| + *) |
| + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; |
| + esac |
| + case $ac_prog in |
| + # Accept absolute paths. |
| + [[\\/]* | [A-Za-z]:[\\/]*)] |
| + [re_direlt='/[^/][^/]*/\.\./'] |
| + # Canonicalize the path of ld |
| + ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` |
| + while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do |
| + ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` |
| + done |
| + test -z "$LD" && LD="$ac_prog" |
| + ;; |
| + "") |
| + # If it fails, then pretend we aren't using GCC. |
| + ac_prog=ld |
| + ;; |
| + *) |
| + # If it is relative, then search for the first ld in PATH. |
| + with_gnu_ld=unknown |
| + ;; |
| + esac |
| +elif test "$with_gnu_ld" = yes; then |
| + AC_MSG_CHECKING([for GNU ld]) |
| +else |
| + AC_MSG_CHECKING([for non-GNU ld]) |
| +fi |
| +AC_CACHE_VAL(acl_cv_path_LD, |
| +[if test -z "$LD"; then |
| + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" |
| + for ac_dir in $PATH; do |
| + test -z "$ac_dir" && ac_dir=. |
| + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then |
| + acl_cv_path_LD="$ac_dir/$ac_prog" |
| + # Check to see if the program is GNU ld. I'd rather use --version, |
| + # but apparently some GNU ld's only accept -v. |
| + # Break only if it was the GNU/non-GNU ld that we prefer. |
| + case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in |
| + *GNU* | *'with BFD'*) |
| + test "$with_gnu_ld" != no && break ;; |
| + *) |
| + test "$with_gnu_ld" != yes && break ;; |
| + esac |
| + fi |
| + done |
| + IFS="$ac_save_ifs" |
| +else |
| + acl_cv_path_LD="$LD" # Let the user override the test with a path. |
| +fi]) |
| +LD="$acl_cv_path_LD" |
| +if test -n "$LD"; then |
| + AC_MSG_RESULT($LD) |
| +else |
| + AC_MSG_RESULT(no) |
| +fi |
| +test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH]) |
| +AC_LIB_PROG_LD_GNU |
| +]) |
| --- lrzsz-0.12.20.safe/m4/lib-link.m4 1969-12-31 19:00:00.000000000 -0500 |
| +++ lrzsz-0.12.20/m4/lib-link.m4 2004-09-12 14:40:34.914663120 -0400 |
| @@ -0,0 +1,551 @@ |
| +# lib-link.m4 serial 4 (gettext-0.12) |
| +dnl Copyright (C) 2001-2003 Free Software Foundation, Inc. |
| +dnl This file is free software, distributed under the terms of the GNU |
| +dnl General Public License. As a special exception to the GNU General |
| +dnl Public License, this file may be distributed as part of a program |
| +dnl that contains a configuration script generated by Autoconf, under |
| +dnl the same distribution terms as the rest of that program. |
| + |
| +dnl From Bruno Haible. |
| + |
| +dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and |
| +dnl the libraries corresponding to explicit and implicit dependencies. |
| +dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and |
| +dnl augments the CPPFLAGS variable. |
| +AC_DEFUN([AC_LIB_LINKFLAGS], |
| +[ |
| + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) |
| + AC_REQUIRE([AC_LIB_RPATH]) |
| + define([Name],[translit([$1],[./-], [___])]) |
| + define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], |
| + [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) |
| + AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [ |
| + AC_LIB_LINKFLAGS_BODY([$1], [$2]) |
| + ac_cv_lib[]Name[]_libs="$LIB[]NAME" |
| + ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME" |
| + ac_cv_lib[]Name[]_cppflags="$INC[]NAME" |
| + ]) |
| + LIB[]NAME="$ac_cv_lib[]Name[]_libs" |
| + LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs" |
| + INC[]NAME="$ac_cv_lib[]Name[]_cppflags" |
| + AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) |
| + AC_SUBST([LIB]NAME) |
| + AC_SUBST([LTLIB]NAME) |
| + dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the |
| + dnl results of this search when this library appears as a dependency. |
| + HAVE_LIB[]NAME=yes |
| + undefine([Name]) |
| + undefine([NAME]) |
| +]) |
| + |
| +dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode) |
| +dnl searches for libname and the libraries corresponding to explicit and |
| +dnl implicit dependencies, together with the specified include files and |
| +dnl the ability to compile and link the specified testcode. If found, it |
| +dnl sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} and |
| +dnl LTLIB${NAME} variables and augments the CPPFLAGS variable, and |
| +dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs |
| +dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty. |
| +AC_DEFUN([AC_LIB_HAVE_LINKFLAGS], |
| +[ |
| + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) |
| + AC_REQUIRE([AC_LIB_RPATH]) |
| + define([Name],[translit([$1],[./-], [___])]) |
| + define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], |
| + [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) |
| + |
| + dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME |
| + dnl accordingly. |
| + AC_LIB_LINKFLAGS_BODY([$1], [$2]) |
| + |
| + dnl Add $INC[]NAME to CPPFLAGS before performing the following checks, |
| + dnl because if the user has installed lib[]Name and not disabled its use |
| + dnl via --without-lib[]Name-prefix, he wants to use it. |
| + ac_save_CPPFLAGS="$CPPFLAGS" |
| + AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) |
| + |
| + AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [ |
| + ac_save_LIBS="$LIBS" |
| + LIBS="$LIBS $LIB[]NAME" |
| + AC_TRY_LINK([$3], [$4], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name=no]) |
| + LIBS="$ac_save_LIBS" |
| + ]) |
| + if test "$ac_cv_lib[]Name" = yes; then |
| + HAVE_LIB[]NAME=yes |
| + AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the $1 library.]) |
| + AC_MSG_CHECKING([how to link with lib[]$1]) |
| + AC_MSG_RESULT([$LIB[]NAME]) |
| + else |
| + HAVE_LIB[]NAME=no |
| + dnl If $LIB[]NAME didn't lead to a usable library, we don't need |
| + dnl $INC[]NAME either. |
| + CPPFLAGS="$ac_save_CPPFLAGS" |
| + LIB[]NAME= |
| + LTLIB[]NAME= |
| + fi |
| + AC_SUBST([HAVE_LIB]NAME) |
| + AC_SUBST([LIB]NAME) |
| + AC_SUBST([LTLIB]NAME) |
| + undefine([Name]) |
| + undefine([NAME]) |
| +]) |
| + |
| +dnl Determine the platform dependent parameters needed to use rpath: |
| +dnl libext, shlibext, hardcode_libdir_flag_spec, hardcode_libdir_separator, |
| +dnl hardcode_direct, hardcode_minus_L. |
| +AC_DEFUN([AC_LIB_RPATH], |
| +[ |
| + AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS |
| + AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld |
| + AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host |
| + AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir |
| + AC_CACHE_CHECK([for shared library run path origin], acl_cv_rpath, [ |
| + CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ |
| + ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh |
| + . ./conftest.sh |
| + rm -f ./conftest.sh |
| + acl_cv_rpath=done |
| + ]) |
| + wl="$acl_cv_wl" |
| + libext="$acl_cv_libext" |
| + shlibext="$acl_cv_shlibext" |
| + hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" |
| + hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" |
| + hardcode_direct="$acl_cv_hardcode_direct" |
| + hardcode_minus_L="$acl_cv_hardcode_minus_L" |
| + dnl Determine whether the user wants rpath handling at all. |
| + AC_ARG_ENABLE(rpath, |
| + [ --disable-rpath do not hardcode runtime library paths], |
| + :, enable_rpath=yes) |
| +]) |
| + |
| +dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and |
| +dnl the libraries corresponding to explicit and implicit dependencies. |
| +dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables. |
| +AC_DEFUN([AC_LIB_LINKFLAGS_BODY], |
| +[ |
| + define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], |
| + [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) |
| + dnl By default, look in $includedir and $libdir. |
| + use_additional=yes |
| + AC_LIB_WITH_FINAL_PREFIX([ |
| + eval additional_includedir=\"$includedir\" |
| + eval additional_libdir=\"$libdir\" |
| + ]) |
| + AC_LIB_ARG_WITH([lib$1-prefix], |
| +[ --with-lib$1-prefix[=DIR] search for lib$1 in DIR/include and DIR/lib |
| + --without-lib$1-prefix don't search for lib$1 in includedir and libdir], |
| +[ |
| + if test "X$withval" = "Xno"; then |
| + use_additional=no |
| + else |
| + if test "X$withval" = "X"; then |
| + AC_LIB_WITH_FINAL_PREFIX([ |
| + eval additional_includedir=\"$includedir\" |
| + eval additional_libdir=\"$libdir\" |
| + ]) |
| + else |
| + additional_includedir="$withval/include" |
| + additional_libdir="$withval/lib" |
| + fi |
| + fi |
| +]) |
| + dnl Search the library and its dependencies in $additional_libdir and |
| + dnl $LDFLAGS. Using breadth-first-seach. |
| + LIB[]NAME= |
| + LTLIB[]NAME= |
| + INC[]NAME= |
| + rpathdirs= |
| + ltrpathdirs= |
| + names_already_handled= |
| + names_next_round='$1 $2' |
| + while test -n "$names_next_round"; do |
| + names_this_round="$names_next_round" |
| + names_next_round= |
| + for name in $names_this_round; do |
| + already_handled= |
| + for n in $names_already_handled; do |
| + if test "$n" = "$name"; then |
| + already_handled=yes |
| + break |
| + fi |
| + done |
| + if test -z "$already_handled"; then |
| + names_already_handled="$names_already_handled $name" |
| + dnl See if it was already located by an earlier AC_LIB_LINKFLAGS |
| + dnl or AC_LIB_HAVE_LINKFLAGS call. |
| + uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` |
| + eval value=\"\$HAVE_LIB$uppername\" |
| + if test -n "$value"; then |
| + if test "$value" = yes; then |
| + eval value=\"\$LIB$uppername\" |
| + test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value" |
| + eval value=\"\$LTLIB$uppername\" |
| + test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value" |
| + else |
| + dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined |
| + dnl that this library doesn't exist. So just drop it. |
| + : |
| + fi |
| + else |
| + dnl Search the library lib$name in $additional_libdir and $LDFLAGS |
| + dnl and the already constructed $LIBNAME/$LTLIBNAME. |
| + found_dir= |
| + found_la= |
| + found_so= |
| + found_a= |
| + if test $use_additional = yes; then |
| + if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then |
| + found_dir="$additional_libdir" |
| + found_so="$additional_libdir/lib$name.$shlibext" |
| + if test -f "$additional_libdir/lib$name.la"; then |
| + found_la="$additional_libdir/lib$name.la" |
| + fi |
| + else |
| + if test -f "$additional_libdir/lib$name.$libext"; then |
| + found_dir="$additional_libdir" |
| + found_a="$additional_libdir/lib$name.$libext" |
| + if test -f "$additional_libdir/lib$name.la"; then |
| + found_la="$additional_libdir/lib$name.la" |
| + fi |
| + fi |
| + fi |
| + fi |
| + if test "X$found_dir" = "X"; then |
| + for x in $LDFLAGS $LTLIB[]NAME; do |
| + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) |
| + case "$x" in |
| + -L*) |
| + dir=`echo "X$x" | sed -e 's/^X-L//'` |
| + if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then |
| + found_dir="$dir" |
| + found_so="$dir/lib$name.$shlibext" |
| + if test -f "$dir/lib$name.la"; then |
| + found_la="$dir/lib$name.la" |
| + fi |
| + else |
| + if test -f "$dir/lib$name.$libext"; then |
| + found_dir="$dir" |
| + found_a="$dir/lib$name.$libext" |
| + if test -f "$dir/lib$name.la"; then |
| + found_la="$dir/lib$name.la" |
| + fi |
| + fi |
| + fi |
| + ;; |
| + esac |
| + if test "X$found_dir" != "X"; then |
| + break |
| + fi |
| + done |
| + fi |
| + if test "X$found_dir" != "X"; then |
| + dnl Found the library. |
| + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name" |
| + if test "X$found_so" != "X"; then |
| + dnl Linking with a shared library. We attempt to hardcode its |
| + dnl directory into the executable's runpath, unless it's the |
| + dnl standard /usr/lib. |
| + if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then |
| + dnl No hardcoding is needed. |
| + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" |
| + else |
| + dnl Use an explicit option to hardcode DIR into the resulting |
| + dnl binary. |
| + dnl Potentially add DIR to ltrpathdirs. |
| + dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. |
| + haveit= |
| + for x in $ltrpathdirs; do |
| + if test "X$x" = "X$found_dir"; then |
| + haveit=yes |
| + break |
| + fi |
| + done |
| + if test -z "$haveit"; then |
| + ltrpathdirs="$ltrpathdirs $found_dir" |
| + fi |
| + dnl The hardcoding into $LIBNAME is system dependent. |
| + if test "$hardcode_direct" = yes; then |
| + dnl Using DIR/libNAME.so during linking hardcodes DIR into the |
| + dnl resulting binary. |
| + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" |
| + else |
| + if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then |
| + dnl Use an explicit option to hardcode DIR into the resulting |
| + dnl binary. |
| + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" |
| + dnl Potentially add DIR to rpathdirs. |
| + dnl The rpathdirs will be appended to $LIBNAME at the end. |
| + haveit= |
| + for x in $rpathdirs; do |
| + if test "X$x" = "X$found_dir"; then |
| + haveit=yes |
| + break |
| + fi |
| + done |
| + if test -z "$haveit"; then |
| + rpathdirs="$rpathdirs $found_dir" |
| + fi |
| + else |
| + dnl Rely on "-L$found_dir". |
| + dnl But don't add it if it's already contained in the LDFLAGS |
| + dnl or the already constructed $LIBNAME |
| + haveit= |
| + for x in $LDFLAGS $LIB[]NAME; do |
| + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) |
| + if test "X$x" = "X-L$found_dir"; then |
| + haveit=yes |
| + break |
| + fi |
| + done |
| + if test -z "$haveit"; then |
| + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir" |
| + fi |
| + if test "$hardcode_minus_L" != no; then |
| + dnl FIXME: Not sure whether we should use |
| + dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" |
| + dnl here. |
| + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" |
| + else |
| + dnl We cannot use $hardcode_runpath_var and LD_RUN_PATH |
| + dnl here, because this doesn't fit in flags passed to the |
| + dnl compiler. So give up. No hardcoding. This affects only |
| + dnl very old systems. |
| + dnl FIXME: Not sure whether we should use |
| + dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" |
| + dnl here. |
| + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" |
| + fi |
| + fi |
| + fi |
| + fi |
| + else |
| + if test "X$found_a" != "X"; then |
| + dnl Linking with a static library. |
| + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a" |
| + else |
| + dnl We shouldn't come here, but anyway it's good to have a |
| + dnl fallback. |
| + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name" |
| + fi |
| + fi |
| + dnl Assume the include files are nearby. |
| + additional_includedir= |
| + case "$found_dir" in |
| + */lib | */lib/) |
| + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'` |
| + additional_includedir="$basedir/include" |
| + ;; |
| + esac |
| + if test "X$additional_includedir" != "X"; then |
| + dnl Potentially add $additional_includedir to $INCNAME. |
| + dnl But don't add it |
| + dnl 1. if it's the standard /usr/include, |
| + dnl 2. if it's /usr/local/include and we are using GCC on Linux, |
| + dnl 3. if it's already present in $CPPFLAGS or the already |
| + dnl constructed $INCNAME, |
| + dnl 4. if it doesn't exist as a directory. |
| + if test "X$additional_includedir" != "X/usr/include"; then |
| + haveit= |
| + if test "X$additional_includedir" = "X/usr/local/include"; then |
| + if test -n "$GCC"; then |
| + case $host_os in |
| + linux*) haveit=yes;; |
| + esac |
| + fi |
| + fi |
| + if test -z "$haveit"; then |
| + for x in $CPPFLAGS $INC[]NAME; do |
| + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) |
| + if test "X$x" = "X-I$additional_includedir"; then |
| + haveit=yes |
| + break |
| + fi |
| + done |
| + if test -z "$haveit"; then |
| + if test -d "$additional_includedir"; then |
| + dnl Really add $additional_includedir to $INCNAME. |
| + INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir" |
| + fi |
| + fi |
| + fi |
| + fi |
| + fi |
| + dnl Look for dependencies. |
| + if test -n "$found_la"; then |
| + dnl Read the .la file. It defines the variables |
| + dnl dlname, library_names, old_library, dependency_libs, current, |
| + dnl age, revision, installed, dlopen, dlpreopen, libdir. |
| + save_libdir="$libdir" |
| + case "$found_la" in |
| + */* | *\\*) . "$found_la" ;; |
| + *) . "./$found_la" ;; |
| + esac |
| + libdir="$save_libdir" |
| + dnl We use only dependency_libs. |
| + for dep in $dependency_libs; do |
| + case "$dep" in |
| + -L*) |
| + additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` |
| + dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME. |
| + dnl But don't add it |
| + dnl 1. if it's the standard /usr/lib, |
| + dnl 2. if it's /usr/local/lib and we are using GCC on Linux, |
| + dnl 3. if it's already present in $LDFLAGS or the already |
| + dnl constructed $LIBNAME, |
| + dnl 4. if it doesn't exist as a directory. |
| + if test "X$additional_libdir" != "X/usr/lib"; then |
| + haveit= |
| + if test "X$additional_libdir" = "X/usr/local/lib"; then |
| + if test -n "$GCC"; then |
| + case $host_os in |
| + linux*) haveit=yes;; |
| + esac |
| + fi |
| + fi |
| + if test -z "$haveit"; then |
| + haveit= |
| + for x in $LDFLAGS $LIB[]NAME; do |
| + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) |
| + if test "X$x" = "X-L$additional_libdir"; then |
| + haveit=yes |
| + break |
| + fi |
| + done |
| + if test -z "$haveit"; then |
| + if test -d "$additional_libdir"; then |
| + dnl Really add $additional_libdir to $LIBNAME. |
| + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir" |
| + fi |
| + fi |
| + haveit= |
| + for x in $LDFLAGS $LTLIB[]NAME; do |
| + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) |
| + if test "X$x" = "X-L$additional_libdir"; then |
| + haveit=yes |
| + break |
| + fi |
| + done |
| + if test -z "$haveit"; then |
| + if test -d "$additional_libdir"; then |
| + dnl Really add $additional_libdir to $LTLIBNAME. |
| + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir" |
| + fi |
| + fi |
| + fi |
| + fi |
| + ;; |
| + -R*) |
| + dir=`echo "X$dep" | sed -e 's/^X-R//'` |
| + if test "$enable_rpath" != no; then |
| + dnl Potentially add DIR to rpathdirs. |
| + dnl The rpathdirs will be appended to $LIBNAME at the end. |
| + haveit= |
| + for x in $rpathdirs; do |
| + if test "X$x" = "X$dir"; then |
| + haveit=yes |
| + break |
| + fi |
| + done |
| + if test -z "$haveit"; then |
| + rpathdirs="$rpathdirs $dir" |
| + fi |
| + dnl Potentially add DIR to ltrpathdirs. |
| + dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. |
| + haveit= |
| + for x in $ltrpathdirs; do |
| + if test "X$x" = "X$dir"; then |
| + haveit=yes |
| + break |
| + fi |
| + done |
| + if test -z "$haveit"; then |
| + ltrpathdirs="$ltrpathdirs $dir" |
| + fi |
| + fi |
| + ;; |
| + -l*) |
| + dnl Handle this in the next round. |
| + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` |
| + ;; |
| + *.la) |
| + dnl Handle this in the next round. Throw away the .la's |
| + dnl directory; it is already contained in a preceding -L |
| + dnl option. |
| + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` |
| + ;; |
| + *) |
| + dnl Most likely an immediate library name. |
| + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep" |
| + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep" |
| + ;; |
| + esac |
| + done |
| + fi |
| + else |
| + dnl Didn't find the library; assume it is in the system directories |
| + dnl known to the linker and runtime loader. (All the system |
| + dnl directories known to the linker should also be known to the |
| + dnl runtime loader, otherwise the system is severely misconfigured.) |
| + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" |
| + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name" |
| + fi |
| + fi |
| + fi |
| + done |
| + done |
| + if test "X$rpathdirs" != "X"; then |
| + if test -n "$hardcode_libdir_separator"; then |
| + dnl Weird platform: only the last -rpath option counts, the user must |
| + dnl pass all path elements in one option. We can arrange that for a |
| + dnl single library, but not when more than one $LIBNAMEs are used. |
| + alldirs= |
| + for found_dir in $rpathdirs; do |
| + alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir" |
| + done |
| + dnl Note: hardcode_libdir_flag_spec uses $libdir and $wl. |
| + acl_save_libdir="$libdir" |
| + libdir="$alldirs" |
| + eval flag=\"$hardcode_libdir_flag_spec\" |
| + libdir="$acl_save_libdir" |
| + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" |
| + else |
| + dnl The -rpath options are cumulative. |
| + for found_dir in $rpathdirs; do |
| + acl_save_libdir="$libdir" |
| + libdir="$found_dir" |
| + eval flag=\"$hardcode_libdir_flag_spec\" |
| + libdir="$acl_save_libdir" |
| + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" |
| + done |
| + fi |
| + fi |
| + if test "X$ltrpathdirs" != "X"; then |
| + dnl When using libtool, the option that works for both libraries and |
| + dnl executables is -R. The -R options are cumulative. |
| + for found_dir in $ltrpathdirs; do |
| + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir" |
| + done |
| + fi |
| +]) |
| + |
| +dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR, |
| +dnl unless already present in VAR. |
| +dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes |
| +dnl contains two or three consecutive elements that belong together. |
| +AC_DEFUN([AC_LIB_APPENDTOVAR], |
| +[ |
| + for element in [$2]; do |
| + haveit= |
| + for x in $[$1]; do |
| + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) |
| + if test "X$x" = "X$element"; then |
| + haveit=yes |
| + break |
| + fi |
| + done |
| + if test -z "$haveit"; then |
| + [$1]="${[$1]}${[$1]:+ }$element" |
| + fi |
| + done |
| +]) |
| --- lrzsz-0.12.20.safe/m4/lib-prefix.m4 1969-12-31 19:00:00.000000000 -0500 |
| +++ lrzsz-0.12.20/m4/lib-prefix.m4 2004-09-12 14:40:34.921662056 -0400 |
| @@ -0,0 +1,155 @@ |
| +# lib-prefix.m4 serial 3 (gettext-0.13) |
| +dnl Copyright (C) 2001-2003 Free Software Foundation, Inc. |
| +dnl This file is free software, distributed under the terms of the GNU |
| +dnl General Public License. As a special exception to the GNU General |
| +dnl Public License, this file may be distributed as part of a program |
| +dnl that contains a configuration script generated by Autoconf, under |
| +dnl the same distribution terms as the rest of that program. |
| + |
| +dnl From Bruno Haible. |
| + |
| +dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and |
| +dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't |
| +dnl require excessive bracketing. |
| +ifdef([AC_HELP_STRING], |
| +[AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])], |
| +[AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])]) |
| + |
| +dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed |
| +dnl to access previously installed libraries. The basic assumption is that |
| +dnl a user will want packages to use other packages he previously installed |
| +dnl with the same --prefix option. |
| +dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate |
| +dnl libraries, but is otherwise very convenient. |
| +AC_DEFUN([AC_LIB_PREFIX], |
| +[ |
| + AC_BEFORE([$0], [AC_LIB_LINKFLAGS]) |
| + AC_REQUIRE([AC_PROG_CC]) |
| + AC_REQUIRE([AC_CANONICAL_HOST]) |
| + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) |
| + dnl By default, look in $includedir and $libdir. |
| + use_additional=yes |
| + AC_LIB_WITH_FINAL_PREFIX([ |
| + eval additional_includedir=\"$includedir\" |
| + eval additional_libdir=\"$libdir\" |
| + ]) |
| + AC_LIB_ARG_WITH([lib-prefix], |
| +[ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib |
| + --without-lib-prefix don't search for libraries in includedir and libdir], |
| +[ |
| + if test "X$withval" = "Xno"; then |
| + use_additional=no |
| + else |
| + if test "X$withval" = "X"; then |
| + AC_LIB_WITH_FINAL_PREFIX([ |
| + eval additional_includedir=\"$includedir\" |
| + eval additional_libdir=\"$libdir\" |
| + ]) |
| + else |
| + additional_includedir="$withval/include" |
| + additional_libdir="$withval/lib" |
| + fi |
| + fi |
| +]) |
| + if test $use_additional = yes; then |
| + dnl Potentially add $additional_includedir to $CPPFLAGS. |
| + dnl But don't add it |
| + dnl 1. if it's the standard /usr/include, |
| + dnl 2. if it's already present in $CPPFLAGS, |
| + dnl 3. if it's /usr/local/include and we are using GCC on Linux, |
| + dnl 4. if it doesn't exist as a directory. |
| + if test "X$additional_includedir" != "X/usr/include"; then |
| + haveit= |
| + for x in $CPPFLAGS; do |
| + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) |
| + if test "X$x" = "X-I$additional_includedir"; then |
| + haveit=yes |
| + break |
| + fi |
| + done |
| + if test -z "$haveit"; then |
| + if test "X$additional_includedir" = "X/usr/local/include"; then |
| + if test -n "$GCC"; then |
| + case $host_os in |
| + linux*) haveit=yes;; |
| + esac |
| + fi |
| + fi |
| + if test -z "$haveit"; then |
| + if test -d "$additional_includedir"; then |
| + dnl Really add $additional_includedir to $CPPFLAGS. |
| + CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir" |
| + fi |
| + fi |
| + fi |
| + fi |
| + dnl Potentially add $additional_libdir to $LDFLAGS. |
| + dnl But don't add it |
| + dnl 1. if it's the standard /usr/lib, |
| + dnl 2. if it's already present in $LDFLAGS, |
| + dnl 3. if it's /usr/local/lib and we are using GCC on Linux, |
| + dnl 4. if it doesn't exist as a directory. |
| + if test "X$additional_libdir" != "X/usr/lib"; then |
| + haveit= |
| + for x in $LDFLAGS; do |
| + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) |
| + if test "X$x" = "X-L$additional_libdir"; then |
| + haveit=yes |
| + break |
| + fi |
| + done |
| + if test -z "$haveit"; then |
| + if test "X$additional_libdir" = "X/usr/local/lib"; then |
| + if test -n "$GCC"; then |
| + case $host_os in |
| + linux*) haveit=yes;; |
| + esac |
| + fi |
| + fi |
| + if test -z "$haveit"; then |
| + if test -d "$additional_libdir"; then |
| + dnl Really add $additional_libdir to $LDFLAGS. |
| + LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir" |
| + fi |
| + fi |
| + fi |
| + fi |
| + fi |
| +]) |
| + |
| +dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix, |
| +dnl acl_final_exec_prefix, containing the values to which $prefix and |
| +dnl $exec_prefix will expand at the end of the configure script. |
| +AC_DEFUN([AC_LIB_PREPARE_PREFIX], |
| +[ |
| + dnl Unfortunately, prefix and exec_prefix get only finally determined |
| + dnl at the end of configure. |
| + if test "X$prefix" = "XNONE"; then |
| + acl_final_prefix="$ac_default_prefix" |
| + else |
| + acl_final_prefix="$prefix" |
| + fi |
| + if test "X$exec_prefix" = "XNONE"; then |
| + acl_final_exec_prefix='${prefix}' |
| + else |
| + acl_final_exec_prefix="$exec_prefix" |
| + fi |
| + acl_save_prefix="$prefix" |
| + prefix="$acl_final_prefix" |
| + eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" |
| + prefix="$acl_save_prefix" |
| +]) |
| + |
| +dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the |
| +dnl variables prefix and exec_prefix bound to the values they will have |
| +dnl at the end of the configure script. |
| +AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX], |
| +[ |
| + acl_save_prefix="$prefix" |
| + prefix="$acl_final_prefix" |
| + acl_save_exec_prefix="$exec_prefix" |
| + exec_prefix="$acl_final_exec_prefix" |
| + $1 |
| + exec_prefix="$acl_save_exec_prefix" |
| + prefix="$acl_save_prefix" |
| +]) |
| --- lrzsz-0.12.20.safe/m4/longdouble.m4 1969-12-31 19:00:00.000000000 -0500 |
| +++ lrzsz-0.12.20/m4/longdouble.m4 2004-09-12 14:40:34.942658864 -0400 |
| @@ -0,0 +1,30 @@ |
| +# longdouble.m4 serial 1 (gettext-0.12) |
| +dnl Copyright (C) 2002-2003 Free Software Foundation, Inc. |
| +dnl This file is free software, distributed under the terms of the GNU |
| +dnl General Public License. As a special exception to the GNU General |
| +dnl Public License, this file may be distributed as part of a program |
| +dnl that contains a configuration script generated by Autoconf, under |
| +dnl the same distribution terms as the rest of that program. |
| + |
| +dnl From Bruno Haible. |
| +dnl Test whether the compiler supports the 'long double' type. |
| +dnl Prerequisite: AC_PROG_CC |
| + |
| +AC_DEFUN([gt_TYPE_LONGDOUBLE], |
| +[ |
| + AC_CACHE_CHECK([for long double], gt_cv_c_long_double, |
| + [if test "$GCC" = yes; then |
| + gt_cv_c_long_double=yes |
| + else |
| + AC_TRY_COMPILE([ |
| + /* The Stardent Vistra knows sizeof(long double), but does not support it. */ |
| + long double foo = 0.0; |
| + /* On Ultrix 4.3 cc, long double is 4 and double is 8. */ |
| + int array [2*(sizeof(long double) >= sizeof(double)) - 1]; |
| + ], , |
| + gt_cv_c_long_double=yes, gt_cv_c_long_double=no) |
| + fi]) |
| + if test $gt_cv_c_long_double = yes; then |
| + AC_DEFINE(HAVE_LONG_DOUBLE, 1, [Define if you have the 'long double' type.]) |
| + fi |
| +]) |
| --- lrzsz-0.12.20.safe/m4/longlong.m4 1969-12-31 19:00:00.000000000 -0500 |
| +++ lrzsz-0.12.20/m4/longlong.m4 2004-09-12 14:40:34.949657800 -0400 |
| @@ -0,0 +1,25 @@ |
| +# longlong.m4 serial 4 |
| +dnl Copyright (C) 1999-2003 Free Software Foundation, Inc. |
| +dnl This file is free software, distributed under the terms of the GNU |
| +dnl General Public License. As a special exception to the GNU General |
| +dnl Public License, this file may be distributed as part of a program |
| +dnl that contains a configuration script generated by Autoconf, under |
| +dnl the same distribution terms as the rest of that program. |
| + |
| +dnl From Paul Eggert. |
| + |
| +# Define HAVE_LONG_LONG if 'long long' works. |
| + |
| +AC_DEFUN([jm_AC_TYPE_LONG_LONG], |
| +[ |
| + AC_CACHE_CHECK([for long long], ac_cv_type_long_long, |
| + [AC_TRY_LINK([long long ll = 1LL; int i = 63;], |
| + [long long llmax = (long long) -1; |
| + return ll << i | ll >> i | llmax / ll | llmax % ll;], |
| + ac_cv_type_long_long=yes, |
| + ac_cv_type_long_long=no)]) |
| + if test $ac_cv_type_long_long = yes; then |
| + AC_DEFINE(HAVE_LONG_LONG, 1, |
| + [Define if you have the 'long long' type.]) |
| + fi |
| +]) |
| --- lrzsz-0.12.20.safe/m4/Makefile.am 1969-12-31 19:00:00.000000000 -0500 |
| +++ lrzsz-0.12.20/m4/Makefile.am 2004-09-12 14:40:35.048642752 -0400 |
| @@ -0,0 +1 @@ |
| +EXTRA_DIST = codeset.m4 gettext.m4 glibc21.m4 iconv.m4 intdiv0.m4 intmax.m4 inttypes.m4 inttypes_h.m4 inttypes-pri.m4 isc-posix.m4 lcmessage.m4 lib-ld.m4 lib-link.m4 lib-prefix.m4 longdouble.m4 longlong.m4 nls.m4 po.m4 printf-posix.m4 progtest.m4 signed.m4 size_max.m4 stdint_h.m4 uintmax_t.m4 ulonglong.m4 wchar_t.m4 wint_t.m4 xsize.m4 |
| --- lrzsz-0.12.20.safe/m4/nls.m4 1969-12-31 19:00:00.000000000 -0500 |
| +++ lrzsz-0.12.20/m4/nls.m4 2004-09-12 14:40:34.955656888 -0400 |
| @@ -0,0 +1,49 @@ |
| +# nls.m4 serial 1 (gettext-0.12) |
| +dnl Copyright (C) 1995-2003 Free Software Foundation, Inc. |
| +dnl This file is free software, distributed under the terms of the GNU |
| +dnl General Public License. As a special exception to the GNU General |
| +dnl Public License, this file may be distributed as part of a program |
| +dnl that contains a configuration script generated by Autoconf, under |
| +dnl the same distribution terms as the rest of that program. |
| +dnl |
| +dnl This file can can be used in projects which are not available under |
| +dnl the GNU General Public License or the GNU Library General Public |
| +dnl License but which still want to provide support for the GNU gettext |
| +dnl functionality. |
| +dnl Please note that the actual code of the GNU gettext library is covered |
| +dnl by the GNU Library General Public License, and the rest of the GNU |
| +dnl gettext package package is covered by the GNU General Public License. |
| +dnl They are *not* in the public domain. |
| + |
| +dnl Authors: |
| +dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000. |
| +dnl Bruno Haible <haible@clisp.cons.org>, 2000-2003. |
| + |
| +AC_DEFUN([AM_NLS], |
| +[ |
| + AC_MSG_CHECKING([whether NLS is requested]) |
| + dnl Default is enabled NLS |
| + AC_ARG_ENABLE(nls, |
| + [ --disable-nls do not use Native Language Support], |
| + USE_NLS=$enableval, USE_NLS=yes) |
| + AC_MSG_RESULT($USE_NLS) |
| + AC_SUBST(USE_NLS) |
| +]) |
| + |
| +AC_DEFUN([AM_MKINSTALLDIRS], |
| +[ |
| + dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly |
| + dnl find the mkinstalldirs script in another subdir but $(top_srcdir). |
| + dnl Try to locate it. |
| + MKINSTALLDIRS= |
| + if test -n "$ac_aux_dir"; then |
| + case "$ac_aux_dir" in |
| + /*) MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" ;; |
| + *) MKINSTALLDIRS="\$(top_builddir)/$ac_aux_dir/mkinstalldirs" ;; |
| + esac |
| + fi |
| + if test -z "$MKINSTALLDIRS"; then |
| + MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" |
| + fi |
| + AC_SUBST(MKINSTALLDIRS) |
| +]) |
| --- lrzsz-0.12.20.safe/m4/po.m4 1969-12-31 19:00:00.000000000 -0500 |
| +++ lrzsz-0.12.20/m4/po.m4 2004-09-12 14:40:34.961655976 -0400 |
| @@ -0,0 +1,426 @@ |
| +# po.m4 serial 3 (gettext-0.14) |
| +dnl Copyright (C) 1995-2003 Free Software Foundation, Inc. |
| +dnl This file is free software, distributed under the terms of the GNU |
| +dnl General Public License. As a special exception to the GNU General |
| +dnl Public License, this file may be distributed as part of a program |
| +dnl that contains a configuration script generated by Autoconf, under |
| +dnl the same distribution terms as the rest of that program. |
| +dnl |
| +dnl This file can can be used in projects which are not available under |
| +dnl the GNU General Public License or the GNU Library General Public |
| +dnl License but which still want to provide support for the GNU gettext |
| +dnl functionality. |
| +dnl Please note that the actual code of the GNU gettext library is covered |
| +dnl by the GNU Library General Public License, and the rest of the GNU |
| +dnl gettext package package is covered by the GNU General Public License. |
| +dnl They are *not* in the public domain. |
| + |
| +dnl Authors: |
| +dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000. |
| +dnl Bruno Haible <haible@clisp.cons.org>, 2000-2003. |
| + |
| +dnl Checks for all prerequisites of the po subdirectory. |
| +AC_DEFUN([AM_PO_SUBDIRS], |
| +[ |
| + AC_REQUIRE([AC_PROG_MAKE_SET])dnl |
| + AC_REQUIRE([AC_PROG_INSTALL])dnl |
| + AC_REQUIRE([AM_MKINSTALLDIRS])dnl |
| + AC_REQUIRE([AM_NLS])dnl |
| + |
| + dnl Perform the following tests also if --disable-nls has been given, |
| + dnl because they are needed for "make dist" to work. |
| + |
| + dnl Search for GNU msgfmt in the PATH. |
| + dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions. |
| + dnl The second test excludes FreeBSD msgfmt. |
| + AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, |
| + [$ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1 && |
| + (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], |
| + :) |
| + AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) |
| + |
| + dnl Search for GNU xgettext 0.12 or newer in the PATH. |
| + dnl The first test excludes Solaris xgettext and early GNU xgettext versions. |
| + dnl The second test excludes FreeBSD xgettext. |
| + AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, |
| + [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 && |
| + (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], |
| + :) |
| + dnl Remove leftover from FreeBSD xgettext call. |
| + rm -f messages.po |
| + |
| + dnl Search for GNU msgmerge 0.11 or newer in the PATH. |
| + AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge, |
| + [$ac_dir/$ac_word --update -q /dev/null /dev/null >/dev/null 2>&1], :) |
| + |
| + dnl This could go away some day; the PATH_PROG_WITH_TEST already does it. |
| + dnl Test whether we really found GNU msgfmt. |
| + if test "$GMSGFMT" != ":"; then |
| + dnl If it is no GNU msgfmt we define it as : so that the |
| + dnl Makefiles still can work. |
| + if $GMSGFMT --statistics /dev/null >/dev/null 2>&1 && |
| + (if $GMSGFMT --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then |
| + : ; |
| + else |
| + GMSGFMT=`echo "$GMSGFMT" | sed -e 's,^.*/,,'` |
| + AC_MSG_RESULT( |
| + [found $GMSGFMT program is not GNU msgfmt; ignore it]) |
| + GMSGFMT=":" |
| + fi |
| + fi |
| + |
| + dnl This could go away some day; the PATH_PROG_WITH_TEST already does it. |
| + dnl Test whether we really found GNU xgettext. |
| + if test "$XGETTEXT" != ":"; then |
| + dnl If it is no GNU xgettext we define it as : so that the |
| + dnl Makefiles still can work. |
| + if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 && |
| + (if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then |
| + : ; |
| + else |
| + AC_MSG_RESULT( |
| + [found xgettext program is not GNU xgettext; ignore it]) |
| + XGETTEXT=":" |
| + fi |
| + dnl Remove leftover from FreeBSD xgettext call. |
| + rm -f messages.po |
| + fi |
| + |
| + AC_OUTPUT_COMMANDS([ |
| + for ac_file in $CONFIG_FILES; do |
| + # Support "outfile[:infile[:infile...]]" |
| + case "$ac_file" in |
| + *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; |
| + esac |
| + # PO directories have a Makefile.in generated from Makefile.in.in. |
| + case "$ac_file" in */Makefile.in) |
| + # Adjust a relative srcdir. |
| + ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` |
| + ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" |
| + ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` |
| + # In autoconf-2.13 it is called $ac_given_srcdir. |
| + # In autoconf-2.50 it is called $srcdir. |
| + test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" |
| + case "$ac_given_srcdir" in |
| + .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; |
| + /*) top_srcdir="$ac_given_srcdir" ;; |
| + *) top_srcdir="$ac_dots$ac_given_srcdir" ;; |
| + esac |
| + if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then |
| + rm -f "$ac_dir/POTFILES" |
| + test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" |
| + cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" |
| + POMAKEFILEDEPS="POTFILES.in" |
| + # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend |
| + # on $ac_dir but don't depend on user-specified configuration |
| + # parameters. |
| + if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then |
| + # The LINGUAS file contains the set of available languages. |
| + if test -n "$OBSOLETE_ALL_LINGUAS"; then |
| + test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" |
| + fi |
| + ALL_LINGUAS_=`sed -e "/^#/d" "$ac_given_srcdir/$ac_dir/LINGUAS"` |
| + # Hide the ALL_LINGUAS assigment from automake. |
| + eval 'ALL_LINGUAS''=$ALL_LINGUAS_' |
| + POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" |
| + else |
| + # The set of available languages was given in configure.in. |
| + eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' |
| + fi |
| + # Compute POFILES |
| + # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) |
| + # Compute UPDATEPOFILES |
| + # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) |
| + # Compute DUMMYPOFILES |
| + # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) |
| + # Compute GMOFILES |
| + # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) |
| + case "$ac_given_srcdir" in |
| + .) srcdirpre= ;; |
| + *) srcdirpre='$(srcdir)/' ;; |
| + esac |
| + POFILES= |
| + UPDATEPOFILES= |
| + DUMMYPOFILES= |
| + GMOFILES= |
| + for lang in $ALL_LINGUAS; do |
| + POFILES="$POFILES $srcdirpre$lang.po" |
| + UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" |
| + DUMMYPOFILES="$DUMMYPOFILES $lang.nop" |
| + GMOFILES="$GMOFILES $srcdirpre$lang.gmo" |
| + done |
| + # CATALOGS depends on both $ac_dir and the user's LINGUAS |
| + # environment variable. |
| + INST_LINGUAS= |
| + if test -n "$ALL_LINGUAS"; then |
| + for presentlang in $ALL_LINGUAS; do |
| + useit=no |
| + if test "%UNSET%" != "$LINGUAS"; then |
| + desiredlanguages="$LINGUAS" |
| + else |
| + desiredlanguages="$ALL_LINGUAS" |
| + fi |
| + for desiredlang in $desiredlanguages; do |
| + # Use the presentlang catalog if desiredlang is |
| + # a. equal to presentlang, or |
| + # b. a variant of presentlang (because in this case, |
| + # presentlang can be used as a fallback for messages |
| + # which are not translated in the desiredlang catalog). |
| + case "$desiredlang" in |
| + "$presentlang"*) useit=yes;; |
| + esac |
| + done |
| + if test $useit = yes; then |
| + INST_LINGUAS="$INST_LINGUAS $presentlang" |
| + fi |
| + done |
| + fi |
| + CATALOGS= |
| + if test -n "$INST_LINGUAS"; then |
| + for lang in $INST_LINGUAS; do |
| + CATALOGS="$CATALOGS $lang.gmo" |
| + done |
| + fi |
| + test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" |
| + sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" |
| + for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do |
| + if test -f "$f"; then |
| + case "$f" in |
| + *.orig | *.bak | *~) ;; |
| + *) cat "$f" >> "$ac_dir/Makefile" ;; |
| + esac |
| + fi |
| + done |
| + fi |
| + ;; |
| + esac |
| + done], |
| + [# Capture the value of obsolete ALL_LINGUAS because we need it to compute |
| + # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it |
| + # from automake. |
| + eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"' |
| + # Capture the value of LINGUAS because we need it to compute CATALOGS. |
| + LINGUAS="${LINGUAS-%UNSET%}" |
| + ]) |
| +]) |
| + |
| +dnl Postprocesses a Makefile in a directory containing PO files. |
| +AC_DEFUN([AM_POSTPROCESS_PO_MAKEFILE], |
| +[ |
| + # When this code is run, in config.status, two variables have already been |
| + # set: |
| + # - OBSOLETE_ALL_LINGUAS is the value of LINGUAS set in configure.in, |
| + # - LINGUAS is the value of the environment variable LINGUAS at configure |
| + # time. |
| + |
| +changequote(,)dnl |
| + # Adjust a relative srcdir. |
| + ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` |
| + ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" |
| + ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` |
| + # In autoconf-2.13 it is called $ac_given_srcdir. |
| + # In autoconf-2.50 it is called $srcdir. |
| + test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" |
| + case "$ac_given_srcdir" in |
| + .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; |
| + /*) top_srcdir="$ac_given_srcdir" ;; |
| + *) top_srcdir="$ac_dots$ac_given_srcdir" ;; |
| + esac |
| + |
| + # Find a way to echo strings without interpreting backslash. |
| + if test "X`(echo '\t') 2>/dev/null`" = 'X\t'; then |
| + gt_echo='echo' |
| + else |
| + if test "X`(printf '%s\n' '\t') 2>/dev/null`" = 'X\t'; then |
| + gt_echo='printf %s\n' |
| + else |
| + echo_func () { |
| + cat <<EOT |
| +$* |
| +EOT |
| + } |
| + gt_echo='echo_func' |
| + fi |
| + fi |
| + |
| + # A sed script that extracts the value of VARIABLE from a Makefile. |
| + sed_x_variable=' |
| +# Test if the hold space is empty. |
| +x |
| +s/P/P/ |
| +x |
| +ta |
| +# Yes it was empty. Look if we have the expected variable definition. |
| +/^[ ]*VARIABLE[ ]*=/{ |
| + # Seen the first line of the variable definition. |
| + s/^[ ]*VARIABLE[ ]*=// |
| + ba |
| +} |
| +bd |
| +:a |
| +# Here we are processing a line from the variable definition. |
| +# Remove comment, more precisely replace it with a space. |
| +s/#.*$/ / |
| +# See if the line ends in a backslash. |
| +tb |
| +:b |
| +s/\\$// |
| +# Print the line, without the trailing backslash. |
| +p |
| +tc |
| +# There was no trailing backslash. The end of the variable definition is |
| +# reached. Clear the hold space. |
| +s/^.*$// |
| +x |
| +bd |
| +:c |
| +# A trailing backslash means that the variable definition continues in the |
| +# next line. Put a nonempty string into the hold space to indicate this. |
| +s/^.*$/P/ |
| +x |
| +:d |
| +' |
| +changequote([,])dnl |
| + |
| + # Set POTFILES to the value of the Makefile variable POTFILES. |
| + sed_x_POTFILES="`$gt_echo \"$sed_x_variable\" | sed -e '/^ *#/d' -e 's/VARIABLE/POTFILES/g'`" |
| + POTFILES=`sed -n -e "$sed_x_POTFILES" < "$ac_file"` |
| + # Compute POTFILES_DEPS as |
| + # $(foreach file, $(POTFILES), $(top_srcdir)/$(file)) |
| + POTFILES_DEPS= |
| + for file in $POTFILES; do |
| + POTFILES_DEPS="$POTFILES_DEPS "'$(top_srcdir)/'"$file" |
| + done |
| + POMAKEFILEDEPS="" |
| + |
| + if test -n "$OBSOLETE_ALL_LINGUAS"; then |
| + test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" |
| + fi |
| + if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then |
| + # The LINGUAS file contains the set of available languages. |
| + ALL_LINGUAS_=`sed -e "/^#/d" "$ac_given_srcdir/$ac_dir/LINGUAS"` |
| + POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" |
| + else |
| + # Set ALL_LINGUAS to the value of the Makefile variable LINGUAS. |
| + sed_x_LINGUAS="`$gt_echo \"$sed_x_variable\" | sed -e '/^ *#/d' -e 's/VARIABLE/LINGUAS/g'`" |
| + ALL_LINGUAS_=`sed -n -e "$sed_x_LINGUAS" < "$ac_file"` |
| + fi |
| + # Hide the ALL_LINGUAS assigment from automake. |
| + eval 'ALL_LINGUAS''=$ALL_LINGUAS_' |
| + # Compute POFILES |
| + # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) |
| + # Compute UPDATEPOFILES |
| + # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) |
| + # Compute DUMMYPOFILES |
| + # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) |
| + # Compute GMOFILES |
| + # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) |
| + # Compute PROPERTIESFILES |
| + # as $(foreach lang, $(ALL_LINGUAS), $(top_srcdir)/$(DOMAIN)_$(lang).properties) |
| + # Compute CLASSFILES |
| + # as $(foreach lang, $(ALL_LINGUAS), $(top_srcdir)/$(DOMAIN)_$(lang).class) |
| + # Compute QMFILES |
| + # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).qm) |
| + # Compute MSGFILES |
| + # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang)).msg) |
| + # Compute RESOURCESDLLFILES |
| + # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang))/$(DOMAIN).resources.dll) |
| + case "$ac_given_srcdir" in |
| + .) srcdirpre= ;; |
| + *) srcdirpre='$(srcdir)/' ;; |
| + esac |
| + POFILES= |
| + UPDATEPOFILES= |
| + DUMMYPOFILES= |
| + GMOFILES= |
| + PROPERTIESFILES= |
| + CLASSFILES= |
| + QMFILES= |
| + MSGFILES= |
| + RESOURCESDLLFILES= |
| + for lang in $ALL_LINGUAS; do |
| + POFILES="$POFILES $srcdirpre$lang.po" |
| + UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" |
| + DUMMYPOFILES="$DUMMYPOFILES $lang.nop" |
| + GMOFILES="$GMOFILES $srcdirpre$lang.gmo" |
| + PROPERTIESFILES="$PROPERTIESFILES \$(top_srcdir)/\$(DOMAIN)_$lang.properties" |
| + CLASSFILES="$CLASSFILES \$(top_srcdir)/\$(DOMAIN)_$lang.class" |
| + QMFILES="$QMFILES $srcdirpre$lang.qm" |
| + frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` |
| + MSGFILES="$MSGFILES $srcdirpre$frobbedlang.msg" |
| + frobbedlang=`echo $lang | sed -e 's/_/-/g'` |
| + RESOURCESDLLFILES="$RESOURCESDLLFILES $srcdirpre$frobbedlang/\$(DOMAIN).resources.dll" |
| + done |
| + # CATALOGS depends on both $ac_dir and the user's LINGUAS |
| + # environment variable. |
| + INST_LINGUAS= |
| + if test -n "$ALL_LINGUAS"; then |
| + for presentlang in $ALL_LINGUAS; do |
| + useit=no |
| + if test "%UNSET%" != "$LINGUAS"; then |
| + desiredlanguages="$LINGUAS" |
| + else |
| + desiredlanguages="$ALL_LINGUAS" |
| + fi |
| + for desiredlang in $desiredlanguages; do |
| + # Use the presentlang catalog if desiredlang is |
| + # a. equal to presentlang, or |
| + # b. a variant of presentlang (because in this case, |
| + # presentlang can be used as a fallback for messages |
| + # which are not translated in the desiredlang catalog). |
| + case "$desiredlang" in |
| + "$presentlang"*) useit=yes;; |
| + esac |
| + done |
| + if test $useit = yes; then |
| + INST_LINGUAS="$INST_LINGUAS $presentlang" |
| + fi |
| + done |
| + fi |
| + CATALOGS= |
| + JAVACATALOGS= |
| + QTCATALOGS= |
| + TCLCATALOGS= |
| + CSHARPCATALOGS= |
| + if test -n "$INST_LINGUAS"; then |
| + for lang in $INST_LINGUAS; do |
| + CATALOGS="$CATALOGS $lang.gmo" |
| + JAVACATALOGS="$JAVACATALOGS \$(DOMAIN)_$lang.properties" |
| + QTCATALOGS="$QTCATALOGS $lang.qm" |
| + frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` |
| + TCLCATALOGS="$TCLCATALOGS $frobbedlang.msg" |
| + frobbedlang=`echo $lang | sed -e 's/_/-/g'` |
| + CSHARPCATALOGS="$CSHARPCATALOGS $frobbedlang/\$(DOMAIN).resources.dll" |
| + done |
| + fi |
| + |
| + sed -e "s|@POTFILES_DEPS@|$POTFILES_DEPS|g" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@PROPERTIESFILES@|$PROPERTIESFILES|g" -e "s|@CLASSFILES@|$CLASSFILES|g" -e "s|@QMFILES@|$QMFILES|g" -e "s|@MSGFILES@|$MSGFILES|g" -e "s|@RESOURCESDLLFILES@|$RESOURCESDLLFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@JAVACATALOGS@|$JAVACATALOGS|g" -e "s|@QTCATALOGS@|$QTCATALOGS|g" -e "s|@TCLCATALOGS@|$TCLCATALOGS|g" -e "s|@CSHARPCATALOGS@|$CSHARPCATALOGS|g" -e 's,^#distdir:,distdir:,' < "$ac_file" > "$ac_file.tmp" |
| + if grep -l '@TCLCATALOGS@' "$ac_file" > /dev/null; then |
| + # Add dependencies that cannot be formulated as a simple suffix rule. |
| + for lang in $ALL_LINGUAS; do |
| + frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` |
| + cat >> "$ac_file.tmp" <<EOF |
| +$frobbedlang.msg: $lang.po |
| + @echo "\$(MSGFMT) -c --tcl -d \$(srcdir) -l $lang $srcdirpre$lang.po"; \ |
| + \$(MSGFMT) -c --tcl -d "\$(srcdir)" -l $lang $srcdirpre$lang.po || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; } |
| +EOF |
| + done |
| + fi |
| + if grep -l '@CSHARPCATALOGS@' "$ac_file" > /dev/null; then |
| + # Add dependencies that cannot be formulated as a simple suffix rule. |
| + for lang in $ALL_LINGUAS; do |
| + frobbedlang=`echo $lang | sed -e 's/_/-/g'` |
| + cat >> "$ac_file.tmp" <<EOF |
| +$frobbedlang/\$(DOMAIN).resources.dll: $lang.po |
| + @echo "\$(MSGFMT) -c --csharp -d \$(srcdir) -l $lang $srcdirpre$lang.po -r \$(DOMAIN)"; \ |
| + \$(MSGFMT) -c --csharp -d "\$(srcdir)" -l $lang $srcdirpre$lang.po -r "\$(DOMAIN)" || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; } |
| +EOF |
| + done |
| + fi |
| + if test -n "$POMAKEFILEDEPS"; then |
| + cat >> "$ac_file.tmp" <<EOF |
| +Makefile: $POMAKEFILEDEPS |
| +EOF |
| + fi |
| + mv "$ac_file.tmp" "$ac_file" |
| +]) |
| --- lrzsz-0.12.20.safe/m4/printf-posix.m4 1969-12-31 19:00:00.000000000 -0500 |
| +++ lrzsz-0.12.20/m4/printf-posix.m4 2004-09-12 14:40:34.974654000 -0400 |
| @@ -0,0 +1,46 @@ |
| +# printf-posix.m4 serial 2 (gettext-0.13.1) |
| +dnl Copyright (C) 2003 Free Software Foundation, Inc. |
| +dnl This file is free software, distributed under the terms of the GNU |
| +dnl General Public License. As a special exception to the GNU General |
| +dnl Public License, this file may be distributed as part of a program |
| +dnl that contains a configuration script generated by Autoconf, under |
| +dnl the same distribution terms as the rest of that program. |
| + |
| +dnl From Bruno Haible. |
| +dnl Test whether the printf() function supports POSIX/XSI format strings with |
| +dnl positions. |
| + |
| +AC_DEFUN([gt_PRINTF_POSIX], |
| +[ |
| + AC_REQUIRE([AC_PROG_CC]) |
| + AC_CACHE_CHECK([whether printf() supports POSIX/XSI format strings], |
| + gt_cv_func_printf_posix, |
| + [ |
| + AC_TRY_RUN([ |
| +#include <stdio.h> |
| +#include <string.h> |
| +/* The string "%2$d %1$d", with dollar characters protected from the shell's |
| + dollar expansion (possibly an autoconf bug). */ |
| +static char format[] = { '%', '2', '$', 'd', ' ', '%', '1', '$', 'd', '\0' }; |
| +static char buf[100]; |
| +int main () |
| +{ |
| + sprintf (buf, format, 33, 55); |
| + return (strcmp (buf, "55 33") != 0); |
| +}], gt_cv_func_printf_posix=yes, gt_cv_func_printf_posix=no, |
| + [ |
| + AC_EGREP_CPP(notposix, [ |
| +#if defined __NetBSD__ || defined _MSC_VER || defined __MINGW32__ || defined __CYGWIN__ |
| + notposix |
| +#endif |
| + ], gt_cv_func_printf_posix="guessing no", |
| + gt_cv_func_printf_posix="guessing yes") |
| + ]) |
| + ]) |
| + case $gt_cv_func_printf_posix in |
| + *yes) |
| + AC_DEFINE(HAVE_POSIX_PRINTF, 1, |
| + [Define if your printf() function supports format strings with positions.]) |
| + ;; |
| + esac |
| +]) |
| --- lrzsz-0.12.20.safe/m4/progtest.m4 1969-12-31 19:00:00.000000000 -0500 |
| +++ lrzsz-0.12.20/m4/progtest.m4 2004-09-12 14:40:34.990651568 -0400 |
| @@ -0,0 +1,91 @@ |
| +# progtest.m4 serial 3 (gettext-0.12) |
| +dnl Copyright (C) 1996-2003 Free Software Foundation, Inc. |
| +dnl This file is free software, distributed under the terms of the GNU |
| +dnl General Public License. As a special exception to the GNU General |
| +dnl Public License, this file may be distributed as part of a program |
| +dnl that contains a configuration script generated by Autoconf, under |
| +dnl the same distribution terms as the rest of that program. |
| +dnl |
| +dnl This file can can be used in projects which are not available under |
| +dnl the GNU General Public License or the GNU Library General Public |
| +dnl License but which still want to provide support for the GNU gettext |
| +dnl functionality. |
| +dnl Please note that the actual code of the GNU gettext library is covered |
| +dnl by the GNU Library General Public License, and the rest of the GNU |
| +dnl gettext package package is covered by the GNU General Public License. |
| +dnl They are *not* in the public domain. |
| + |
| +dnl Authors: |
| +dnl Ulrich Drepper <drepper@cygnus.com>, 1996. |
| + |
| +# Search path for a program which passes the given test. |
| + |
| +dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, |
| +dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) |
| +AC_DEFUN([AM_PATH_PROG_WITH_TEST], |
| +[ |
| +# Prepare PATH_SEPARATOR. |
| +# The user is always right. |
| +if test "${PATH_SEPARATOR+set}" != set; then |
| + echo "#! /bin/sh" >conf$$.sh |
| + echo "exit 0" >>conf$$.sh |
| + chmod +x conf$$.sh |
| + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then |
| + PATH_SEPARATOR=';' |
| + else |
| + PATH_SEPARATOR=: |
| + fi |
| + rm -f conf$$.sh |
| +fi |
| + |
| +# Find out how to test for executable files. Don't use a zero-byte file, |
| +# as systems may use methods other than mode bits to determine executability. |
| +cat >conf$$.file <<_ASEOF |
| +#! /bin/sh |
| +exit 0 |
| +_ASEOF |
| +chmod +x conf$$.file |
| +if test -x conf$$.file >/dev/null 2>&1; then |
| + ac_executable_p="test -x" |
| +else |
| + ac_executable_p="test -f" |
| +fi |
| +rm -f conf$$.file |
| + |
| +# Extract the first word of "$2", so it can be a program name with args. |
| +set dummy $2; ac_word=[$]2 |
| +AC_MSG_CHECKING([for $ac_word]) |
| +AC_CACHE_VAL(ac_cv_path_$1, |
| +[case "[$]$1" in |
| + [[\\/]]* | ?:[[\\/]]*) |
| + ac_cv_path_$1="[$]$1" # Let the user override the test with a path. |
| + ;; |
| + *) |
| + ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR |
| + for ac_dir in ifelse([$5], , $PATH, [$5]); do |
| + IFS="$ac_save_IFS" |
| + test -z "$ac_dir" && ac_dir=. |
| + for ac_exec_ext in '' $ac_executable_extensions; do |
| + if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then |
| + if [$3]; then |
| + ac_cv_path_$1="$ac_dir/$ac_word$ac_exec_ext" |
| + break 2 |
| + fi |
| + fi |
| + done |
| + done |
| + IFS="$ac_save_IFS" |
| +dnl If no 4th arg is given, leave the cache variable unset, |
| +dnl so AC_PATH_PROGS will keep looking. |
| +ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" |
| +])dnl |
| + ;; |
| +esac])dnl |
| +$1="$ac_cv_path_$1" |
| +if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then |
| + AC_MSG_RESULT([$]$1) |
| +else |
| + AC_MSG_RESULT(no) |
| +fi |
| +AC_SUBST($1)dnl |
| +]) |
| --- lrzsz-0.12.20.safe/m4/signed.m4 1969-12-31 19:00:00.000000000 -0500 |
| +++ lrzsz-0.12.20/m4/signed.m4 2004-09-12 14:40:34.996650656 -0400 |
| @@ -0,0 +1,19 @@ |
| +# signed.m4 serial 1 (gettext-0.10.40) |
| +dnl Copyright (C) 2001-2002 Free Software Foundation, Inc. |
| +dnl This file is free software, distributed under the terms of the GNU |
| +dnl General Public License. As a special exception to the GNU General |
| +dnl Public License, this file may be distributed as part of a program |
| +dnl that contains a configuration script generated by Autoconf, under |
| +dnl the same distribution terms as the rest of that program. |
| + |
| +dnl From Bruno Haible. |
| + |
| +AC_DEFUN([bh_C_SIGNED], |
| +[ |
| + AC_CACHE_CHECK([for signed], bh_cv_c_signed, |
| + [AC_TRY_COMPILE(, [signed char x;], bh_cv_c_signed=yes, bh_cv_c_signed=no)]) |
| + if test $bh_cv_c_signed = no; then |
| + AC_DEFINE(signed, , |
| + [Define to empty if the C compiler doesn't support this keyword.]) |
| + fi |
| +]) |
| --- lrzsz-0.12.20.safe/m4/size_max.m4 1969-12-31 19:00:00.000000000 -0500 |
| +++ lrzsz-0.12.20/m4/size_max.m4 2004-09-12 14:40:35.003649592 -0400 |
| @@ -0,0 +1,61 @@ |
| +# size_max.m4 serial 2 |
| +dnl Copyright (C) 2003 Free Software Foundation, Inc. |
| +dnl This file is free software, distributed under the terms of the GNU |
| +dnl General Public License. As a special exception to the GNU General |
| +dnl Public License, this file may be distributed as part of a program |
| +dnl that contains a configuration script generated by Autoconf, under |
| +dnl the same distribution terms as the rest of that program. |
| + |
| +dnl From Bruno Haible. |
| + |
| +AC_DEFUN([gl_SIZE_MAX], |
| +[ |
| + AC_CHECK_HEADERS(stdint.h) |
| + dnl First test whether the system already has SIZE_MAX. |
| + AC_MSG_CHECKING([for SIZE_MAX]) |
| + result= |
| + AC_EGREP_CPP([Found it], [ |
| +#include <limits.h> |
| +#if HAVE_STDINT_H |
| +#include <stdint.h> |
| +#endif |
| +#ifdef SIZE_MAX |
| +Found it |
| +#endif |
| +], result=yes) |
| + if test -z "$result"; then |
| + dnl Define it ourselves. Here we assume that the type 'size_t' is not wider |
| + dnl than the type 'unsigned long'. |
| + dnl The _AC_COMPUTE_INT macro works up to LONG_MAX, since it uses 'expr', |
| + dnl which is guaranteed to work from LONG_MIN to LONG_MAX. |
| + _AC_COMPUTE_INT([~(size_t)0 / 10], res_hi, |
| + [#include <stddef.h>], result=?) |
| + _AC_COMPUTE_INT([~(size_t)0 % 10], res_lo, |
| + [#include <stddef.h>], result=?) |
| + _AC_COMPUTE_INT([sizeof (size_t) <= sizeof (unsigned int)], fits_in_uint, |
| + [#include <stddef.h>], result=?) |
| + if test "$fits_in_uint" = 1; then |
| + dnl Even though SIZE_MAX fits in an unsigned int, it must be of type |
| + dnl 'unsigned long' if the type 'size_t' is the same as 'unsigned long'. |
| + AC_TRY_COMPILE([#include <stddef.h> |
| + extern size_t foo; |
| + extern unsigned long foo; |
| + ], [], fits_in_uint=0) |
| + fi |
| + if test -z "$result"; then |
| + if test "$fits_in_uint" = 1; then |
| + result="$res_hi$res_lo"U |
| + else |
| + result="$res_hi$res_lo"UL |
| + fi |
| + else |
| + dnl Shouldn't happen, but who knows... |
| + result='~(size_t)0' |
| + fi |
| + fi |
| + AC_MSG_RESULT([$result]) |
| + if test "$result" != yes; then |
| + AC_DEFINE_UNQUOTED([SIZE_MAX], [$result], |
| + [Define as the maximum value of type 'size_t', if the system doesn't define it.]) |
| + fi |
| +]) |
| --- lrzsz-0.12.20.safe/m4/stdint_h.m4 1969-12-31 19:00:00.000000000 -0500 |
| +++ lrzsz-0.12.20/m4/stdint_h.m4 2004-09-12 14:40:35.009648680 -0400 |
| @@ -0,0 +1,28 @@ |
| +# stdint_h.m4 serial 3 (gettext-0.12) |
| +dnl Copyright (C) 1997-2003 Free Software Foundation, Inc. |
| +dnl This file is free software, distributed under the terms of the GNU |
| +dnl General Public License. As a special exception to the GNU General |
| +dnl Public License, this file may be distributed as part of a program |
| +dnl that contains a configuration script generated by Autoconf, under |
| +dnl the same distribution terms as the rest of that program. |
| + |
| +dnl From Paul Eggert. |
| + |
| +# Define HAVE_STDINT_H_WITH_UINTMAX if <stdint.h> exists, |
| +# doesn't clash with <sys/types.h>, and declares uintmax_t. |
| + |
| +AC_DEFUN([jm_AC_HEADER_STDINT_H], |
| +[ |
| + AC_CACHE_CHECK([for stdint.h], jm_ac_cv_header_stdint_h, |
| + [AC_TRY_COMPILE( |
| + [#include <sys/types.h> |
| +#include <stdint.h>], |
| + [uintmax_t i = (uintmax_t) -1;], |
| + jm_ac_cv_header_stdint_h=yes, |
| + jm_ac_cv_header_stdint_h=no)]) |
| + if test $jm_ac_cv_header_stdint_h = yes; then |
| + AC_DEFINE_UNQUOTED(HAVE_STDINT_H_WITH_UINTMAX, 1, |
| + [Define if <stdint.h> exists, doesn't clash with <sys/types.h>, |
| + and declares uintmax_t. ]) |
| + fi |
| +]) |
| --- lrzsz-0.12.20.safe/m4/uintmax_t.m4 1969-12-31 19:00:00.000000000 -0500 |
| +++ lrzsz-0.12.20/m4/uintmax_t.m4 2004-09-12 14:40:35.021646856 -0400 |
| @@ -0,0 +1,32 @@ |
| +# uintmax_t.m4 serial 7 (gettext-0.12) |
| +dnl Copyright (C) 1997-2003 Free Software Foundation, Inc. |
| +dnl This file is free software, distributed under the terms of the GNU |
| +dnl General Public License. As a special exception to the GNU General |
| +dnl Public License, this file may be distributed as part of a program |
| +dnl that contains a configuration script generated by Autoconf, under |
| +dnl the same distribution terms as the rest of that program. |
| + |
| +dnl From Paul Eggert. |
| + |
| +AC_PREREQ(2.13) |
| + |
| +# Define uintmax_t to 'unsigned long' or 'unsigned long long' |
| +# if it is not already defined in <stdint.h> or <inttypes.h>. |
| + |
| +AC_DEFUN([jm_AC_TYPE_UINTMAX_T], |
| +[ |
| + AC_REQUIRE([jm_AC_HEADER_INTTYPES_H]) |
| + AC_REQUIRE([jm_AC_HEADER_STDINT_H]) |
| + if test $jm_ac_cv_header_inttypes_h = no && test $jm_ac_cv_header_stdint_h = no; then |
| + AC_REQUIRE([jm_AC_TYPE_UNSIGNED_LONG_LONG]) |
| + test $ac_cv_type_unsigned_long_long = yes \ |
| + && ac_type='unsigned long long' \ |
| + || ac_type='unsigned long' |
| + AC_DEFINE_UNQUOTED(uintmax_t, $ac_type, |
| + [Define to unsigned long or unsigned long long |
| + if <stdint.h> and <inttypes.h> don't define.]) |
| + else |
| + AC_DEFINE(HAVE_UINTMAX_T, 1, |
| + [Define if you have the 'uintmax_t' type in <stdint.h> or <inttypes.h>.]) |
| + fi |
| +]) |
| --- lrzsz-0.12.20.safe/m4/ulonglong.m4 1969-12-31 19:00:00.000000000 -0500 |
| +++ lrzsz-0.12.20/m4/ulonglong.m4 2004-09-12 14:40:35.028645792 -0400 |
| @@ -0,0 +1,25 @@ |
| +# ulonglong.m4 serial 3 |
| +dnl Copyright (C) 1999-2003 Free Software Foundation, Inc. |
| +dnl This file is free software, distributed under the terms of the GNU |
| +dnl General Public License. As a special exception to the GNU General |
| +dnl Public License, this file may be distributed as part of a program |
| +dnl that contains a configuration script generated by Autoconf, under |
| +dnl the same distribution terms as the rest of that program. |
| + |
| +dnl From Paul Eggert. |
| + |
| +# Define HAVE_UNSIGNED_LONG_LONG if 'unsigned long long' works. |
| + |
| +AC_DEFUN([jm_AC_TYPE_UNSIGNED_LONG_LONG], |
| +[ |
| + AC_CACHE_CHECK([for unsigned long long], ac_cv_type_unsigned_long_long, |
| + [AC_TRY_LINK([unsigned long long ull = 1ULL; int i = 63;], |
| + [unsigned long long ullmax = (unsigned long long) -1; |
| + return ull << i | ull >> i | ullmax / ull | ullmax % ull;], |
| + ac_cv_type_unsigned_long_long=yes, |
| + ac_cv_type_unsigned_long_long=no)]) |
| + if test $ac_cv_type_unsigned_long_long = yes; then |
| + AC_DEFINE(HAVE_UNSIGNED_LONG_LONG, 1, |
| + [Define if you have the 'unsigned long long' type.]) |
| + fi |
| +]) |
| --- lrzsz-0.12.20.safe/m4/wchar_t.m4 1969-12-31 19:00:00.000000000 -0500 |
| +++ lrzsz-0.12.20/m4/wchar_t.m4 2004-09-12 14:40:35.034644880 -0400 |
| @@ -0,0 +1,22 @@ |
| +# wchar_t.m4 serial 1 (gettext-0.12) |
| +dnl Copyright (C) 2002-2003 Free Software Foundation, Inc. |
| +dnl This file is free software, distributed under the terms of the GNU |
| +dnl General Public License. As a special exception to the GNU General |
| +dnl Public License, this file may be distributed as part of a program |
| +dnl that contains a configuration script generated by Autoconf, under |
| +dnl the same distribution terms as the rest of that program. |
| + |
| +dnl From Bruno Haible. |
| +dnl Test whether <stddef.h> has the 'wchar_t' type. |
| +dnl Prerequisite: AC_PROG_CC |
| + |
| +AC_DEFUN([gt_TYPE_WCHAR_T], |
| +[ |
| + AC_CACHE_CHECK([for wchar_t], gt_cv_c_wchar_t, |
| + [AC_TRY_COMPILE([#include <stddef.h> |
| + wchar_t foo = (wchar_t)'\0';], , |
| + gt_cv_c_wchar_t=yes, gt_cv_c_wchar_t=no)]) |
| + if test $gt_cv_c_wchar_t = yes; then |
| + AC_DEFINE(HAVE_WCHAR_T, 1, [Define if you have the 'wchar_t' type.]) |
| + fi |
| +]) |
| --- lrzsz-0.12.20.safe/m4/wint_t.m4 1969-12-31 19:00:00.000000000 -0500 |
| +++ lrzsz-0.12.20/m4/wint_t.m4 2004-09-12 14:40:35.040643968 -0400 |
| @@ -0,0 +1,22 @@ |
| +# wint_t.m4 serial 1 (gettext-0.12) |
| +dnl Copyright (C) 2003 Free Software Foundation, Inc. |
| +dnl This file is free software, distributed under the terms of the GNU |
| +dnl General Public License. As a special exception to the GNU General |
| +dnl Public License, this file may be distributed as part of a program |
| +dnl that contains a configuration script generated by Autoconf, under |
| +dnl the same distribution terms as the rest of that program. |
| + |
| +dnl From Bruno Haible. |
| +dnl Test whether <wchar.h> has the 'wint_t' type. |
| +dnl Prerequisite: AC_PROG_CC |
| + |
| +AC_DEFUN([gt_TYPE_WINT_T], |
| +[ |
| + AC_CACHE_CHECK([for wint_t], gt_cv_c_wint_t, |
| + [AC_TRY_COMPILE([#include <wchar.h> |
| + wint_t foo = (wchar_t)'\0';], , |
| + gt_cv_c_wint_t=yes, gt_cv_c_wint_t=no)]) |
| + if test $gt_cv_c_wint_t = yes; then |
| + AC_DEFINE(HAVE_WINT_T, 1, [Define if you have the 'wint_t' type.]) |
| + fi |
| +]) |
| --- lrzsz-0.12.20.safe/m4/xsize.m4 1969-12-31 19:00:00.000000000 -0500 |
| +++ lrzsz-0.12.20/m4/xsize.m4 2004-09-12 14:40:35.047642904 -0400 |
| @@ -0,0 +1,14 @@ |
| +# xsize.m4 serial 2 |
| +dnl Copyright (C) 2003 Free Software Foundation, Inc. |
| +dnl This file is free software, distributed under the terms of the GNU |
| +dnl General Public License. As a special exception to the GNU General |
| +dnl Public License, this file may be distributed as part of a program |
| +dnl that contains a configuration script generated by Autoconf, under |
| +dnl the same distribution terms as the rest of that program. |
| + |
| +AC_DEFUN([gl_XSIZE], |
| +[ |
| + dnl Prerequisites of lib/xsize.h. |
| + AC_REQUIRE([gl_SIZE_MAX]) |
| + AC_CHECK_HEADERS(stdint.h) |
| +]) |
| --- lrzsz-0.12.20.safe/Makefile.am 1998-12-30 06:19:40.000000000 -0500 |
| +++ lrzsz-0.12.20/Makefile.am 2004-09-12 14:40:35.121631656 -0400 |
| @@ -1,5 +1,5 @@ |
| SUBDIRS = lib intl src po man testsuite |
| -EXTRA_DIST = check.lrzsz COMPATABILITY README.cvs README.isdn4linux \ |
| +EXTRA_DIST = config.rpath check.lrzsz COMPATABILITY README.cvs README.isdn4linux \ |
| README.gettext rpmrc buildrpm systype.in fastcheck.sh README.tests \ |
| beos-runpiped.c fastcheck.beos |
| noinst_SCRIPTS=systype |
| @@ -83,3 +83,5 @@ |
| rpm: $(PR).tar.gz Specfile |
| $(srcdir)/buildrpm $(srcdir) |
| |
| + |
| +ACLOCAL_AMFLAGS = -I m4 |
| --- lrzsz-0.12.20.safe/Makefile.in 1998-12-30 11:31:40.000000000 -0500 |
| +++ lrzsz-0.12.20/Makefile.in 2004-09-12 14:40:35.109633480 -0400 |
| @@ -125,7 +125,7 @@ |
| && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status |
| |
| $(ACLOCAL_M4): configure.in acinclude.m4 |
| - cd $(srcdir) && $(ACLOCAL) |
| + cd $(srcdir) && $(ACLOCAL) -I m4 |
| |
| config.status: $(srcdir)/configure |
| $(SHELL) ./config.status --recheck |
| --- lrzsz-0.12.20.safe/mkinstalldirs 1998-04-26 09:20:52.000000000 -0400 |
| +++ lrzsz-0.12.20/mkinstalldirs 2004-09-12 14:40:34.337750824 -0400 |
| @@ -1,34 +1,150 @@ |
| #! /bin/sh |
| # mkinstalldirs --- make directory hierarchy |
| -# Author: Noah Friedman <friedman@prep.ai.mit.edu> |
| + |
| +scriptversion=2004-02-15.20 |
| + |
| +# Original author: Noah Friedman <friedman@prep.ai.mit.edu> |
| # Created: 1993-05-16 |
| -# Last modified: 1995-03-05 |
| -# Public domain |
| +# Public domain. |
| +# |
| +# This file is maintained in Automake, please report |
| +# bugs to <bug-automake@gnu.org> or send patches to |
| +# <automake-patches@gnu.org>. |
| |
| errstatus=0 |
| +dirmode="" |
| |
| -for file in ${1+"$@"} ; do |
| - set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` |
| - shift |
| +usage="\ |
| +Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ... |
| |
| - pathcomp= |
| - for d in ${1+"$@"} ; do |
| - pathcomp="$pathcomp$d" |
| - case "$pathcomp" in |
| - -* ) pathcomp=./$pathcomp ;; |
| - esac |
| +Create each directory DIR (with mode MODE, if specified), including all |
| +leading file name components. |
| |
| - if test ! -d "$pathcomp"; then |
| - echo "mkdir $pathcomp" 1>&2 |
| - mkdir "$pathcomp" > /dev/null 2>&1 || lasterr=$? |
| - fi |
| +Report bugs to <bug-automake@gnu.org>." |
| |
| - if test ! -d "$pathcomp"; then |
| +# process command line arguments |
| +while test $# -gt 0 ; do |
| + case $1 in |
| + -h | --help | --h*) # -h for help |
| + echo "$usage" |
| + exit 0 |
| + ;; |
| + -m) # -m PERM arg |
| + shift |
| + test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } |
| + dirmode=$1 |
| + shift |
| + ;; |
| + --version) |
| + echo "$0 $scriptversion" |
| + exit 0 |
| + ;; |
| + --) # stop option processing |
| + shift |
| + break |
| + ;; |
| + -*) # unknown option |
| + echo "$usage" 1>&2 |
| + exit 1 |
| + ;; |
| + *) # first non-opt arg |
| + break |
| + ;; |
| + esac |
| +done |
| + |
| +for file |
| +do |
| + if test -d "$file"; then |
| + shift |
| + else |
| + break |
| + fi |
| +done |
| + |
| +case $# in |
| + 0) exit 0 ;; |
| +esac |
| + |
| +# Solaris 8's mkdir -p isn't thread-safe. If you mkdir -p a/b and |
| +# mkdir -p a/c at the same time, both will detect that a is missing, |
| +# one will create a, then the other will try to create a and die with |
| +# a "File exists" error. This is a problem when calling mkinstalldirs |
| +# from a parallel make. We use --version in the probe to restrict |
| +# ourselves to GNU mkdir, which is thread-safe. |
| +case $dirmode in |
| + '') |
| + if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then |
| + echo "mkdir -p -- $*" |
| + exec mkdir -p -- "$@" |
| + else |
| + # On NextStep and OpenStep, the `mkdir' command does not |
| + # recognize any option. It will interpret all options as |
| + # directories to create, and then abort because `.' already |
| + # exists. |
| + test -d ./-p && rmdir ./-p |
| + test -d ./--version && rmdir ./--version |
| + fi |
| + ;; |
| + *) |
| + if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 && |
| + test ! -d ./--version; then |
| + echo "mkdir -m $dirmode -p -- $*" |
| + exec mkdir -m "$dirmode" -p -- "$@" |
| + else |
| + # Clean up after NextStep and OpenStep mkdir. |
| + for d in ./-m ./-p ./--version "./$dirmode"; |
| + do |
| + test -d $d && rmdir $d |
| + done |
| + fi |
| + ;; |
| +esac |
| + |
| +for file |
| +do |
| + set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` |
| + shift |
| + |
| + pathcomp= |
| + for d |
| + do |
| + pathcomp="$pathcomp$d" |
| + case $pathcomp in |
| + -*) pathcomp=./$pathcomp ;; |
| + esac |
| + |
| + if test ! -d "$pathcomp"; then |
| + echo "mkdir $pathcomp" |
| + |
| + mkdir "$pathcomp" || lasterr=$? |
| + |
| + if test ! -d "$pathcomp"; then |
| errstatus=$lasterr |
| - fi |
| + else |
| + if test ! -z "$dirmode"; then |
| + echo "chmod $dirmode $pathcomp" |
| + lasterr="" |
| + chmod "$dirmode" "$pathcomp" || lasterr=$? |
| |
| - pathcomp="$pathcomp/" |
| - done |
| + if test ! -z "$lasterr"; then |
| + errstatus=$lasterr |
| + fi |
| + fi |
| + fi |
| + fi |
| + |
| + pathcomp="$pathcomp/" |
| + done |
| done |
| |
| exit $errstatus |
| + |
| +# Local Variables: |
| +# mode: shell-script |
| +# sh-indentation: 2 |
| +# eval: (add-hook 'write-file-hooks 'time-stamp) |
| +# time-stamp-start: "scriptversion=" |
| +# time-stamp-format: "%:y-%02m-%02d.%02H" |
| +# time-stamp-end: "$" |
| +# End: |
| --- lrzsz-0.12.20.safe/po/boldquot.sed 1969-12-31 19:00:00.000000000 -0500 |
| +++ lrzsz-0.12.20/po/boldquot.sed 2004-09-12 14:40:34.723692152 -0400 |
| @@ -0,0 +1,10 @@ |
| +s/"\([^"]*\)"/â\1â/g |
| +s/`\([^`']*\)'/â\1â/g |
| +s/ '\([^`']*\)' / â\1â /g |
| +s/ '\([^`']*\)'$/ â\1â/g |
| +s/^'\([^`']*\)' /â\1â /g |
| +s/ââ/""/g |
| +s/â/â[1m/g |
| +s/â/[0mâ/g |
| +s/â/â[1m/g |
| +s/â/[0mâ/g |
| --- lrzsz-0.12.20.safe/po/cat-id-tbl.c 1998-12-29 04:24:24.000000000 -0500 |
| +++ lrzsz-0.12.20/po/cat-id-tbl.c 1969-12-31 19:00:00.000000000 -0500 |
| @@ -1,234 +0,0 @@ |
| -/* Automatically generated by po2tbl.sed from lrzsz.pot. */ |
| - |
| -#if HAVE_CONFIG_H |
| -# include <config.h> |
| -#endif |
| - |
| -#include "libgettext.h" |
| - |
| -const struct _msg_ent _msg_tbl[] = { |
| - {"", 1}, |
| - {"io_mode(,2) in rbsb.c not implemented\n", 2}, |
| - {"caught signal %d; exiting", 3}, |
| - {"command tries", 4}, |
| - {"packetlength", 5}, |
| - {"packetlength out of range 24..%ld", 6}, |
| - {"framelength", 7}, |
| - {"framelength out of range 32..%ld", 8}, |
| - {"min_bps", 9}, |
| - {"min_bps must be >= 0", 10}, |
| - {"min_bps_time", 11}, |
| - {"min_bps_time must be > 1", 12}, |
| - {"hour to large (0..23)", 13}, |
| - {"unparsable stop time\n", 14}, |
| - {"minute to large (0..59)", 15}, |
| - {"stop time to small", 16}, |
| - {"stop-at", 17}, |
| - {"timeout", 18}, |
| - {"timeout out of range 10..1000", 19}, |
| - {"security violation: can't do that under restricted shell\n", 20}, |
| - {"window size", 21}, |
| - {"cannot turnoff syslog", 22}, |
| - {"startup delay", 23}, |
| - {"out of memory", 24}, |
| - {"this program was never intended to be used setuid\n", 25}, |
| - {"need at least one file to send", 26}, |
| - {"Can't send command in restricted mode\n", 27}, |
| - {"hostname too long\n", 28}, |
| - {"illegal server address\n", 29}, |
| - {"can read only one file from stdin", 30}, |
| - {"Transfer incomplete\n", 31}, |
| - {"Transfer complete\n", 32}, |
| - {"send_pseudo %s: cannot open tmpfile %s: %s", 33}, |
| - {"send_pseudo %s: cannot lstat tmpfile %s: %s", 34}, |
| - {"send_pseudo %s: avoiding symlink trap", 35}, |
| - {"send_pseudo %s: cannot write to tmpfile %s: %s", 36}, |
| - {"send_pseudo %s: failed", 37}, |
| - {"send_pseudo %s: ok", 38}, |
| - {"tcp protocol init failed\n", 39}, |
| - {"Answering TIMESYNC at %s", 40}, |
| - {"timezone", 41}, |
| - {"timezone unknown", 42}, |
| - {"Can't open any requested files.", 43}, |
| - {"security violation: not allowed to upload from %s", 44}, |
| - {"cannot open %s", 45}, |
| - {"is not a file: %s", 46}, |
| - {"%s/%s: error occured", 47}, |
| - {"skipped: %s", 48}, |
| - {"%s/%s: skipped", 49}, |
| - {"Bytes Sent:%7ld BPS:%-8ld \n", 50}, |
| - {"Sending %s, %ld blocks: ", 51}, |
| - {"Give your local XMODEM receive command now.", 52}, |
| - {"Sending: %s\n", 53}, |
| - {"Timeout on pathname", 54}, |
| - {"Receiver Cancelled", 55}, |
| - {"No ACK on EOT", 56}, |
| - {"Xmodem sectors/kbytes sent: %3d/%2dk", 57}, |
| - {"Ymodem sectors/kbytes sent: %3d/%2dk", 58}, |
| - {"Cancelled", 59}, |
| - {"Timeout on sector ACK", 60}, |
| - {"NAK on sector", 61}, |
| - {"Got burst for sector ACK", 62}, |
| - {"Got %02x for sector ACK", 63}, |
| - {"Retry Count Exceeded", 64}, |
| - {"Try `%s --help' for more information.\n", 65}, |
| - {"%s version %s\n", 66}, |
| - {"Usage: %s [options] file ...\n", 67}, |
| - {" or: %s [options] -{c|i} COMMAND\n", 68}, |
| - {"Send file(s) with ZMODEM/YMODEM/XMODEM protocol\n", 69}, |
| - {"\ |
| - (X) = option applies to XMODEM only\n\ |
| - (Y) = option applies to YMODEM only\n\ |
| - (Z) = option applies to ZMODEM only\n", 70}, |
| - {"\ |
| - -+, --append append to existing destination file (Z)\n\ |
| - -2, --twostop use 2 stop bits\n\ |
| - -4, --try-4k go up to 4K blocksize\n\ |
| - --start-4k start with 4K blocksize (doesn't try 8)\n\ |
| - -8, --try-8k go up to 8K blocksize\n\ |
| - --start-8k start with 8K blocksize\n\ |
| - -a, --ascii ASCII transfer (change CR/LF to LF)\n\ |
| - -b, --binary binary transfer\n\ |
| - -B, --bufsize N buffer N bytes (N==auto: buffer whole file)\n\ |
| - -c, --command COMMAND execute remote command COMMAND (Z)\n\ |
| - -C, --command-tries N try N times to execute a command (Z)\n\ |
| - -d, --dot-to-slash change '.' to '/' in pathnames (Y/Z)\n\ |
| - --delay-startup N sleep N seconds before doing anything\n\ |
| - -e, --escape escape all control characters (Z)\n\ |
| - -E, --rename force receiver to rename files it already has\n\ |
| - -f, --full-path send full pathname (Y/Z)\n\ |
| - -i, --immediate-command CMD send remote CMD, return immediately (Z)\n\ |
| - -h, --help print this usage message\n\ |
| - -k, --1k send 1024 byte packets (X)\n\ |
| - -L, --packetlen N limit subpacket length to N bytes (Z)\n\ |
| - -l, --framelen N limit frame length to N bytes (l>=L) (Z)\n\ |
| - -m, --min-bps N stop transmission if BPS below N\n\ |
| - -M, --min-bps-time N for at least N seconds (default: 120)\n", 71}, |
| - {"\ |
| - -n, --newer send file if source newer (Z)\n\ |
| - -N, --newer-or-longer send file if source newer or longer (Z)\n\ |
| - -o, --16-bit-crc use 16 bit CRC instead of 32 bit CRC (Z)\n\ |
| - -O, --disable-timeouts disable timeout code, wait forever\n\ |
| - -p, --protect protect existing destination file (Z)\n\ |
| - -r, --resume resume interrupted file transfer (Z)\n\ |
| - -R, --restricted restricted, more secure mode\n\ |
| - -q, --quiet quiet (no progress reports)\n\ |
| - -s, --stop-at {HH:MM|+N} stop transmission at HH:MM or in N seconds\n\ |
| - --tcp build a TCP connection to transmit files\n\ |
| - --tcp-server open socket, wait for connection\n\ |
| - -u, --unlink unlink file after transmission\n\ |
| - -U, --unrestrict turn off restricted mode (if allowed to)\n\ |
| - -v, --verbose be verbose, provide debugging information\n\ |
| - -w, --windowsize N Window is N bytes (Z)\n\ |
| - -X, --xmodem use XMODEM protocol\n\ |
| - -y, --overwrite overwrite existing files\n\ |
| - -Y, --overwrite-or-skip overwrite existing files, else skip\n\ |
| - --ymodem use YMODEM protocol\n\ |
| - -Z, --zmodem use ZMODEM protocol\n\ |
| -\n\ |
| -short options use the same arguments as the long ones\n", 72}, |
| - {"got ZRQINIT", 73}, |
| - {"got ZCAN", 74}, |
| - {"blklen now %d\n", 75}, |
| - {"zsendfdata: bps rate %ld below min %ld", 76}, |
| - {"zsendfdata: reached stop time", 77}, |
| - {"Bytes Sent:%7ld/%7ld BPS:%-8ld ETA %02d:%02d ", 78}, |
| - {"calc_blklen: reduced to %d due to error\n", 79}, |
| - {"calc_blklen: returned old value %d due to low bpe diff\n", 80}, |
| - {"calc_blklen: old %ld, new %ld, d %ld\n", 81}, |
| - {"calc_blklen: calc total_bytes=%ld, bpe=%ld, ec=%ld\n", 82}, |
| - {"calc_blklen: blklen %d, ok %ld, failed %ld -> %lu\n", 83}, |
| - {"calc_blklen: returned %d as best\n", 84}, |
| - {"\ |
| -\n\ |
| -countem: Total %d %ld\n", 85}, |
| - {"Bad escape sequence %x", 86}, |
| - {"Sender Canceled", 87}, |
| - {"TIMEOUT", 88}, |
| - {"Bad data subpacket", 89}, |
| - {"Data subpacket too long", 90}, |
| - {"Garbage count exceeded", 91}, |
| - {"Got %s", 92}, |
| - {"Retry %d: ", 93}, |
| - {"don't have settimeofday, will not set time\n", 94}, |
| - {"not running as root (this is good!), can not set time\n", 95}, |
| - {"bytes_per_error", 96}, |
| - {"bytes-per-error should be >100", 97}, |
| - {"O_SYNC not supported by the kernel", 98}, |
| - {"garbage on commandline", 99}, |
| - {"Usage: %s [options] [filename.if.xmodem]\n", 100}, |
| - {"Receive files with ZMODEM/YMODEM/XMODEM protocol\n", 101}, |
| - {"\ |
| - -+, --append append to existing files\n\ |
| - -a, --ascii ASCII transfer (change CR/LF to LF)\n\ |
| - -b, --binary binary transfer\n\ |
| - -B, --bufsize N buffer N bytes (N==auto: buffer whole file)\n\ |
| - -c, --with-crc Use 16 bit CRC (X)\n\ |
| - -C, --allow-remote-commands allow execution of remote commands (Z)\n\ |
| - -D, --null write all received data to /dev/null\n\ |
| - --delay-startup N sleep N seconds before doing anything\n\ |
| - -e, --escape Escape control characters (Z)\n\ |
| - -E, --rename rename any files already existing\n\ |
| - --errors N generate CRC error every N bytes (debugging)\n\ |
| - -h, --help Help, print this usage message\n\ |
| - -m, --min-bps N stop transmission if BPS below N\n\ |
| - -M, --min-bps-time N for at least N seconds (default: 120)\n\ |
| - -O, --disable-timeouts disable timeout code, wait forever for data\n\ |
| - --o-sync open output file(s) in synchronous write mode\n\ |
| - -p, --protect protect existing files\n\ |
| - -q, --quiet quiet, no progress reports\n\ |
| - -r, --resume try to resume interrupted file transfer (Z)\n\ |
| - -R, --restricted restricted, more secure mode\n\ |
| - -s, --stop-at {HH:MM|+N} stop transmission at HH:MM or in N seconds\n\ |
| - -S, --timesync request remote time (twice: set local time)\n\ |
| - --syslog[=off] turn syslog on or off, if possible\n\ |
| - -t, --timeout N set timeout to N tenths of a second\n\ |
| - -u, --keep-uppercase keep upper case filenames\n\ |
| - -U, --unrestrict disable restricted mode (if allowed to)\n\ |
| - -v, --verbose be verbose, provide debugging information\n\ |
| - -w, --windowsize N Window is N bytes (Z)\n\ |
| - -X --xmodem use XMODEM protocol\n\ |
| - -y, --overwrite Yes, clobber existing file if any\n\ |
| - --ymodem use YMODEM protocol\n\ |
| - -Z, --zmodem use ZMODEM protocol\n\ |
| -\n\ |
| -short options use the same arguments as the long ones\n", 102}, |
| - {"%s waiting to receive.", 103}, |
| - {"\rBytes received: %7ld/%7ld BPS:%-6ld \r\n", 104}, |
| - {"%s: ready to receive %s", 105}, |
| - {"\rBytes received: %7ld BPS:%-6ld \r\n", 106}, |
| - {"\ |
| -\r\n\ |
| -%s: %s removed.\r\n", 107}, |
| - {"Pathname fetch returned EOT", 108}, |
| - {"Received dup Sector", 109}, |
| - {"Sync Error", 110}, |
| - {"CRC", 111}, |
| - {"Checksum", 112}, |
| - {"Sector number garbled", 113}, |
| - {"Sender Cancelled", 114}, |
| - {"Got 0%o sector header", 115}, |
| - {"file name ends with a /, skipped: %s\n", 116}, |
| - {"zmanag=%d, Lzmanag=%d\n", 117}, |
| - {"zconv=%d\n", 118}, |
| - {"file exists, skipped: %s\n", 119}, |
| - {"TIMESYNC: here %ld, remote %ld, diff %ld seconds\n", 120}, |
| - {"TIMESYNC: cannot set time: %s\n", 121}, |
| - {"cannot tmpfile() for tcp protocol synchronization", 122}, |
| - {"Topipe", 123}, |
| - {"Receiving: %s\n", 124}, |
| - {"Blocks received: %d", 125}, |
| - {"%s: %s exists\n", 126}, |
| - {"%s:\tSecurity Violation", 127}, |
| - {"remote command execution requested", 128}, |
| - {"not executed", 129}, |
| - {"got ZRINIT", 130}, |
| - {"Skipped", 131}, |
| - {"rzfile: bps rate %ld below min %ld", 132}, |
| - {"rzfile: reached stop time", 133}, |
| - {"\rBytes received: %7ld/%7ld BPS:%-6ld ETA %02d:%02d ", 134}, |
| - {"fgets for tcp protocol synchronization failed: ", 135}, |
| - {"file close error", 136}, |
| -}; |
| - |
| -int _msg_tbl_length = 136; |
| --- lrzsz-0.12.20.safe/po/ChangeLog 1998-04-26 09:20:52.000000000 -0400 |
| +++ lrzsz-0.12.20/po/ChangeLog 2004-09-12 14:40:34.793681512 -0400 |
| @@ -1,3 +1,15 @@ |
| +2004-09-12 gettextize <bug-gnu-gettext@gnu.org> |
| + |
| + * boldquot.sed: New file, from gettext-0.14.1. |
| + * en@boldquot.header: New file, from gettext-0.14.1. |
| + * en@quot.header: New file, from gettext-0.14.1. |
| + * insert-header.sin: New file, from gettext-0.14.1. |
| + * quot.sed: New file, from gettext-0.14.1. |
| + * remove-potcdate.sin: New file, from gettext-0.14.1. |
| + * Rules-quot: New file, from gettext-0.14.1. |
| + * cat-id-tbl.c: Remove file. |
| + * stamp-cat-id: Remove file. |
| + |
| /* Automatically generated by po2tbl.sed from lrzsz.pot. */ |
| |
| #if HAVE_CONFIG_H |
| --- lrzsz-0.12.20.safe/po/en@boldquot.header 1969-12-31 19:00:00.000000000 -0500 |
| +++ lrzsz-0.12.20/po/en@boldquot.header 2004-09-12 14:40:34.731690936 -0400 |
| @@ -0,0 +1,25 @@ |
| +# All this catalog "translates" are quotation characters. |
| +# The msgids must be ASCII and therefore cannot contain real quotation |
| +# characters, only substitutes like grave accent (0x60), apostrophe (0x27) |
| +# and double quote (0x22). These substitutes look strange; see |
| +# http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html |
| +# |
| +# This catalog translates grave accent (0x60) and apostrophe (0x27) to |
| +# left single quotation mark (U+2018) and right single quotation mark (U+2019). |
| +# It also translates pairs of apostrophe (0x27) to |
| +# left single quotation mark (U+2018) and right single quotation mark (U+2019) |
| +# and pairs of quotation mark (0x22) to |
| +# left double quotation mark (U+201C) and right double quotation mark (U+201D). |
| +# |
| +# When output to an UTF-8 terminal, the quotation characters appear perfectly. |
| +# When output to an ISO-8859-1 terminal, the single quotation marks are |
| +# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to |
| +# grave/acute accent (by libiconv), and the double quotation marks are |
| +# transliterated to 0x22. |
| +# When output to an ASCII terminal, the single quotation marks are |
| +# transliterated to apostrophes, and the double quotation marks are |
| +# transliterated to 0x22. |
| +# |
| +# This catalog furthermore displays the text between the quotation marks in |
| +# bold face, assuming the VT100/XTerm escape sequences. |
| +# |
| --- lrzsz-0.12.20.safe/po/en@quot.header 1969-12-31 19:00:00.000000000 -0500 |
| +++ lrzsz-0.12.20/po/en@quot.header 2004-09-12 14:40:34.737690024 -0400 |
| @@ -0,0 +1,22 @@ |
| +# All this catalog "translates" are quotation characters. |
| +# The msgids must be ASCII and therefore cannot contain real quotation |
| +# characters, only substitutes like grave accent (0x60), apostrophe (0x27) |
| +# and double quote (0x22). These substitutes look strange; see |
| +# http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html |
| +# |
| +# This catalog translates grave accent (0x60) and apostrophe (0x27) to |
| +# left single quotation mark (U+2018) and right single quotation mark (U+2019). |
| +# It also translates pairs of apostrophe (0x27) to |
| +# left single quotation mark (U+2018) and right single quotation mark (U+2019) |
| +# and pairs of quotation mark (0x22) to |
| +# left double quotation mark (U+201C) and right double quotation mark (U+201D). |
| +# |
| +# When output to an UTF-8 terminal, the quotation characters appear perfectly. |
| +# When output to an ISO-8859-1 terminal, the single quotation marks are |
| +# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to |
| +# grave/acute accent (by libiconv), and the double quotation marks are |
| +# transliterated to 0x22. |
| +# When output to an ASCII terminal, the single quotation marks are |
| +# transliterated to apostrophes, and the double quotation marks are |
| +# transliterated to 0x22. |
| +# |
| --- lrzsz-0.12.20.safe/po/insert-header.sin 1969-12-31 19:00:00.000000000 -0500 |
| +++ lrzsz-0.12.20/po/insert-header.sin 2004-09-12 14:40:34.743689112 -0400 |
| @@ -0,0 +1,23 @@ |
| +# Sed script that inserts the file called HEADER before the header entry. |
| +# |
| +# At each occurrence of a line starting with "msgid ", we execute the following |
| +# commands. At the first occurrence, insert the file. At the following |
| +# occurrences, do nothing. The distinction between the first and the following |
| +# occurrences is achieved by looking at the hold space. |
| +/^msgid /{ |
| +x |
| +# Test if the hold space is empty. |
| +s/m/m/ |
| +ta |
| +# Yes it was empty. First occurrence. Read the file. |
| +r HEADER |
| +# Output the file's contents by reading the next line. But don't lose the |
| +# current line while doing this. |
| +g |
| +N |
| +bb |
| +:a |
| +# The hold space was nonempty. Following occurrences. Do nothing. |
| +x |
| +:b |
| +} |
| --- lrzsz-0.12.20.safe/po/Makevars 1969-12-31 19:00:00.000000000 -0500 |
| +++ lrzsz-0.12.20/po/Makevars 2004-09-12 14:40:34.748688352 -0400 |
| @@ -0,0 +1,41 @@ |
| +# Makefile variables for PO directory in any package using GNU gettext. |
| + |
| +# Usually the message domain is the same as the package name. |
| +DOMAIN = $(PACKAGE) |
| + |
| +# These two variables depend on the location of this directory. |
| +subdir = po |
| +top_builddir = .. |
| + |
| +# These options get passed to xgettext. |
| +XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ |
| + |
| +# This is the copyright holder that gets inserted into the header of the |
| +# $(DOMAIN).pot file. Set this to the copyright holder of the surrounding |
| +# package. (Note that the msgstr strings, extracted from the package's |
| +# sources, belong to the copyright holder of the package.) Translators are |
| +# expected to transfer the copyright for their translations to this person |
| +# or entity, or to disclaim their copyright. The empty string stands for |
| +# the public domain; in this case the translators are expected to disclaim |
| +# their copyright. |
| +COPYRIGHT_HOLDER = Free Software Foundation, Inc. |
| + |
| +# This is the email address or URL to which the translators shall report |
| +# bugs in the untranslated strings: |
| +# - Strings which are not entire sentences, see the maintainer guidelines |
| +# in the GNU gettext documentation, section 'Preparing Strings'. |
| +# - Strings which use unclear terms or require additional context to be |
| +# understood. |
| +# - Strings which make invalid assumptions about notation of date, time or |
| +# money. |
| +# - Pluralisation problems. |
| +# - Incorrect English spelling. |
| +# - Incorrect formatting. |
| +# It can be your email address, or a mailing list address where translators |
| +# can write to without being subscribed, or the URL of a web page through |
| +# which the translators can contact you. |
| +MSGID_BUGS_ADDRESS = |
| + |
| +# This is the list of locale categories, beyond LC_MESSAGES, for which the |
| +# message catalogs shall be used. It is usually empty. |
| +EXTRA_LOCALE_CATEGORIES = |
| --- lrzsz-0.12.20.safe/po/quot.sed 1969-12-31 19:00:00.000000000 -0500 |
| +++ lrzsz-0.12.20/po/quot.sed 2004-09-12 14:40:34.754687440 -0400 |
| @@ -0,0 +1,6 @@ |
| +s/"\([^"]*\)"/â\1â/g |
| +s/`\([^`']*\)'/â\1â/g |
| +s/ '\([^`']*\)' / â\1â /g |
| +s/ '\([^`']*\)'$/ â\1â/g |
| +s/^'\([^`']*\)' /â\1â /g |
| +s/ââ/""/g |
| --- lrzsz-0.12.20.safe/po/remove-potcdate.sin 1969-12-31 19:00:00.000000000 -0500 |
| +++ lrzsz-0.12.20/po/remove-potcdate.sin 2004-09-12 14:40:34.762686224 -0400 |
| @@ -0,0 +1,19 @@ |
| +# Sed script that remove the POT-Creation-Date line in the header entry |
| +# from a POT file. |
| +# |
| +# The distinction between the first and the following occurrences of the |
| +# pattern is achieved by looking at the hold space. |
| +/^"POT-Creation-Date: .*"$/{ |
| +x |
| +# Test if the hold space is empty. |
| +s/P/P/ |
| +ta |
| +# Yes it was empty. First occurrence. Remove the line. |
| +g |
| +d |
| +bb |
| +:a |
| +# The hold space was nonempty. Following occurrences. Do nothing. |
| +x |
| +:b |
| +} |
| --- lrzsz-0.12.20.safe/po/Rules-quot 1969-12-31 19:00:00.000000000 -0500 |
| +++ lrzsz-0.12.20/po/Rules-quot 2004-09-12 14:40:34.778683792 -0400 |
| @@ -0,0 +1,47 @@ |
| +# Special Makefile rules for English message catalogs with quotation marks. |
| + |
| +DISTFILES.common.extra1 = quot.sed boldquot.sed en@quot.header en@boldquot.header insert-header.sin Rules-quot |
| + |
| +.SUFFIXES: .insert-header .po-update-en |
| + |
| +en@quot.po-create: |
| + $(MAKE) en@quot.po-update |
| +en@boldquot.po-create: |
| + $(MAKE) en@boldquot.po-update |
| + |
| +en@quot.po-update: en@quot.po-update-en |
| +en@boldquot.po-update: en@boldquot.po-update-en |
| + |
| +.insert-header.po-update-en: |
| + @lang=`echo $@ | sed -e 's/\.po-update-en$$//'`; \ |
| + if test "$(PACKAGE)" = "gettext"; then PATH=`pwd`/../src:$$PATH; GETTEXTLIBDIR=`cd $(top_srcdir)/src && pwd`; export GETTEXTLIBDIR; fi; \ |
| + tmpdir=`pwd`; \ |
| + echo "$$lang:"; \ |
| + ll=`echo $$lang | sed -e 's/@.*//'`; \ |
| + LC_ALL=C; export LC_ALL; \ |
| + cd $(srcdir); \ |
| + if $(MSGINIT) -i $(DOMAIN).pot --no-translator -l $$ll -o - 2>/dev/null | sed -f $$tmpdir/$$lang.insert-header | $(MSGCONV) -t UTF-8 | $(MSGFILTER) sed -f `echo $$lang | sed -e 's/.*@//'`.sed 2>/dev/null > $$tmpdir/$$lang.new.po; then \ |
| + if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ |
| + rm -f $$tmpdir/$$lang.new.po; \ |
| + else \ |
| + if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ |
| + :; \ |
| + else \ |
| + echo "creation of $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ |
| + exit 1; \ |
| + fi; \ |
| + fi; \ |
| + else \ |
| + echo "creation of $$lang.po failed!" 1>&2; \ |
| + rm -f $$tmpdir/$$lang.new.po; \ |
| + fi |
| + |
| +en@quot.insert-header: insert-header.sin |
| + sed -e '/^#/d' -e 's/HEADER/en@quot.header/g' $(srcdir)/insert-header.sin > en@quot.insert-header |
| + |
| +en@boldquot.insert-header: insert-header.sin |
| + sed -e '/^#/d' -e 's/HEADER/en@boldquot.header/g' $(srcdir)/insert-header.sin > en@boldquot.insert-header |
| + |
| +mostlyclean: mostlyclean-quot |
| +mostlyclean-quot: |
| + rm -f *.insert-header |
| --- lrzsz-0.12.20.safe/po/stamp-cat-id 1998-12-30 02:50:01.000000000 -0500 |
| +++ lrzsz-0.12.20/po/stamp-cat-id 1969-12-31 19:00:00.000000000 -0500 |
| @@ -1 +0,0 @@ |
| -timestamp |
| --- lrzsz-0.12.20.safe/src/Makefile.am 1998-12-28 03:38:47.000000000 -0500 |
| +++ lrzsz-0.12.20/src/Makefile.am 2004-09-12 14:40:53.665812512 -0400 |
| @@ -2,12 +2,12 @@ |
| lrz_SOURCES=lrz.c timing.c zperr.c zreadline.c crctab.c rbsb.c zm.c protname.c tcp.c lsyslog.c canit.c |
| lsz_SOURCES=lsz.c timing.c zperr.c zreadline.c crctab.c rbsb.c zm.c protname.c tcp.c lsyslog.c canit.c |
| noinst_HEADERS = timing.h zglobal.h zmodem.h |
| -datadir = $(prefix)/@DATADIRNAME@ |
| +datadir = $(prefix)/share |
| localedir = $(datadir)/locale |
| CFLAGS=@CFLAGS@ |
| DISTCLEAN_FILES=lrzszbug |
| |
| -LDADD = ../lib/libzmodem.a @INTLLIBS@ |
| +LDADD = ../lib/libzmodem.a @LIBINTL@ |
| AUTOMAKE_OPTIONS=ansi2knr |
| EXTRA_DIST = ansi2knr.1 ansi2knr.c lrzszbug.in |
| INCLUDES = -I.. -I$(srcdir) -I$(top_srcdir)/src -I../intl -I$(top_srcdir)/lib |