diff options
author | Koen Kooi <koen@openembedded.org> | 2005-06-30 08:19:37 +0000 |
---|---|---|
committer | OpenEmbedded Project <openembedded-devel@lists.openembedded.org> | 2005-06-30 08:19:37 +0000 |
commit | c8e5702127e507e82e6f68a4b8c546803accea9d (patch) | |
tree | 00583491f40ecc640f2b28452af995e3a63a09d7 /packages/psmisc/psmisc-20.2/gettext.patch | |
parent | 87ec8ca4d2e2eb4d1c1e1e1a6b46a395d56805b9 (diff) |
import clean BK tree at cset 1.3670
Diffstat (limited to 'packages/psmisc/psmisc-20.2/gettext.patch')
-rw-r--r-- | packages/psmisc/psmisc-20.2/gettext.patch | 18062 |
1 files changed, 18062 insertions, 0 deletions
diff --git a/packages/psmisc/psmisc-20.2/gettext.patch b/packages/psmisc/psmisc-20.2/gettext.patch index e69de29bb2..971850f489 100644 --- a/packages/psmisc/psmisc-20.2/gettext.patch +++ b/packages/psmisc/psmisc-20.2/gettext.patch @@ -0,0 +1,18062 @@ +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/ABOUT-NLS psmisc-20.2.works.clean/ABOUT-NLS +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/ABOUT-NLS 2001-04-13 23:00:47.000000000 -0500 ++++ psmisc-20.2.works.clean/ABOUT-NLS 2004-10-13 15:18:41.000000000 -0500 +@@ -1,8 +1,8 @@ + 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. + +@@ -25,7 +25,7 @@ + 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 +@@ -48,10 +48,10 @@ + 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 already +@@ -98,18 +98,27 @@ + 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. + +- Some languages have dialects in different countries. To specify +-such a dialect, the notation `LL_CC' can be used, which combines an +-ISO 639 language code `LL' and an ISO 3166 two-letter country code +-`CC'. For example, `de_AT' is used for Austria, and `pt_BR' for Brazil. ++ 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 +@@ -120,12 +129,25 @@ + 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'. ++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. The up-to-date list of +@@ -155,99 +177,559 @@ + Available Packages + ================== + +- Languages are not equally supported in all packages. The following +-matrix shows the current state of internationalization, as of July +-2000. The matrix shows, in regard of each package, for which languages ++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 bg cs da de el en eo es et fi fr gl hr id it +- .----------------------------------------------. +- a2ps | [] [] | +- bash | [] [] [] | +- bison | [] [] [] [] | +- clisp | [] [] [] [] | +- cpio | [] [] [] | +- diffutils | [] [] [] [] [] | +- enscript | [] [] | +- error | [] | +- fileutils | [] [] [] [] [] [] [] [] | +- findutils | [] [] [] [] [] [] | +- flex | [] [] | +- gcal | | +- gcc | | +- gettext | [] [] [] [] [] [] [] [] [] | +- gnupg | [] [] [] [] | +- grep | [] [] [] [] [] [] [] [] [] [] | +- hello | [] [] [] [] [] [] [] | +- id-utils | [] | +- indent | [] [] [] [] [] | +- libc | [] [] [] [] [] [] [] [] | +- lilypond | | +- lynx | [] [] [] | +- m4 | [] [] [] [] [] [] | +- make | [] [] [] [] | +- music | [] | +- parted | [] [] | +- ptx | [] [] [] [] [] [] [] | +- python | | +- recode | [] [] [] [] [] [] [] | +- sed | [] [] [] [] [] [] [] | +- sh-utils | [] [] [] [] [] [] [] [] [] | +- sharutils | [] [] [] [] [] [] | +- tar | [] [] [] [] [] [] [] | +- texinfo | [] [] [] [] | +- textutils | [] [] [] [] [] [] [] | +- util-linux | | +- wdiff | [] [] [] [] [] | +- wget | [] [] [] [] [] [] [] [] | +- `----------------------------------------------' +- bg cs da de el en eo es et fi fr gl hr id it +- 1 14 15 28 11 1 4 19 12 1 30 16 0 3 12 ++ 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 + +- ja ko lv nl no pl pt pt_BR ru sk sl sv zh +- .-------------------------------------------. +- a2ps | [] [] [] | 5 +- bash | | 3 +- bison | [] [] [] | 7 +- clisp | [] | 5 +- cpio | [] [] [] [] [] | 8 +- diffutils | [] [] [] | 8 +- enscript | [] [] | 4 +- error | | 1 +- fileutils | [] [] [] [] [] [] [] [] [] | 17 +- findutils | [] [] [] [] [] [] | 12 +- flex | [] [] [] | 5 +- gcal | | 0 +- gcc | [] | 1 +- gettext | [] [] [] [] [] [] [] [] [] | 18 +- gnupg | [] [] [] | 7 +- grep | [] [] [] [] [] [] [] | 17 +- hello | [] [] [] [] [] [] [] [] | 15 +- id-utils | [] [] [] | 4 +- indent | [] [] [] [] [] | 10 +- libc | [] [] [] [] [] [] [] [] | 16 +- lilypond | [] [] | 2 +- lynx | [] [] [] [] | 7 +- m4 | [] [] [] [] [] | 11 +- make | [] [] [] [] [] | 9 +- music | [] | 2 +- parted | [] [] [] [] | 6 +- ptx | [] [] [] [] [] [] | 13 +- python | | 0 +- recode | [] [] [] | 10 +- sed | [] [] [] [] [] [] [] | 14 +- sh-utils | [] [] [] [] [] [] [] [] [] [] | 19 +- sharutils | [] [] [] [] | 10 +- tar | [] [] [] [] [] [] [] [] | 15 +- texinfo | [] [] | 6 +- textutils | [] [] [] [] [] [] [] [] | 15 +- util-linux | [] | 1 +- wdiff | [] [] [] [] [] | 10 +- wget | [] [] [] [] [] [] [] [] [] | 17 +- `-------------------------------------------' +- 28 teams ja ko lv nl no pl pt pt_BR ru sk sl sv zh +- 38 domains 20 8 0 25 6 18 1 16 27 9 10 20 3 330 ++ 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 +@@ -260,7 +742,7 @@ + lag between the mere existence a PO file and its wide availability in a + distribution. + +- If July 2000 seems to be old, you may fetch a more recent copy of ++ 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'. +@@ -268,15 +750,17 @@ + Using `gettext' in new packages + =============================== + +- If you are writing a freely available program and want to ++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 the GNU Public License applies to your sources from +-then if you include `gettext' directly in your distribution on but +-since you are writing free software anyway this is no restriction. ++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 change appropriately and the setup can handle to +-use of `gettext' the only thing missing are the translations. The Free +-Translation Project is also available for packages which are not ++ 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 +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/ChangeLog psmisc-20.2.works.clean/ChangeLog +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/ChangeLog 2001-10-17 17:43:07.000000000 -0500 ++++ psmisc-20.2.works.clean/ChangeLog 2004-10-13 15:18:42.000000000 -0500 +@@ -1,3 +1,35 @@ ++2004-10-13 gettextize <bug-gnu-gettext@gnu.org> ++ ++ * Makefile.am (SUBDIRS): Add intl. ++ (EXTRA_DIST): Add config.rpath. ++ * configure.in (AC_CONFIG_FILES): Add intl/Makefile. ++ ++2004-10-13 gettextize <bug-gnu-gettext@gnu.org> ++ ++ * Makefile.am (SUBDIRS): Add intl. ++ * configure.in (AC_CONFIG_FILES): Add intl/Makefile. ++ ++2004-10-13 gettextize <bug-gnu-gettext@gnu.org> ++ ++ * Makefile.am (SUBDIRS): Add intl. ++ * configure.in (AC_CONFIG_FILES): Add intl/Makefile. ++ ++2004-10-13 gettextize <bug-gnu-gettext@gnu.org> ++ ++ * configure.in (AC_CONFIG_FILES): Add po/Makefile.in. ++ ++2004-10-13 gettextize <bug-gnu-gettext@gnu.org> ++ ++ * configure.in (AC_CONFIG_FILES): Add intl/Makefile. ++ ++2004-10-13 gettextize <bug-gnu-gettext@gnu.org> ++ ++ * Makefile.am (SUBDIRS): Remove intl. ++ (ACLOCAL_AMFLAGS): New variable. ++ (EXTRA_DIST): Add config.rpath. ++ * configure.in (AC_CONFIG_FILES): Add m4/Makefile. ++ (AC_CONFIG_FILES): Remove intl/Makefile. ++ + Changes in 20.2 (18-OCT-2001) + ============================= + - Added NLS/gettext +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/ChangeLog~ psmisc-20.2.works.clean/ChangeLog~ +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/Makefile.am psmisc-20.2.works.clean/Makefile.am +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/Makefile.am 2001-06-12 19:49:47.000000000 -0500 ++++ psmisc-20.2.works.clean/Makefile.am 2004-10-13 15:19:08.000000000 -0500 +@@ -1,4 +1,5 @@ ++SUBDIRS = intl po doc src + +-SUBDIRS = doc intl src po ++EXTRA_DIST= config.rpath config.rpath ABOUT-NLS + +-EXTRA_DIST=ABOUT-NLS ++ACLOCAL_AMFLAGS = -I m4 +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/Makefile.am~ psmisc-20.2.works.clean/Makefile.am~ +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/Makefile.in psmisc-20.2.works.clean/Makefile.in +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/aclocal.m4 psmisc-20.2.works.clean/aclocal.m4 +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/autom4te.cache/output.0 psmisc-20.2.works.clean/autom4te.cache/output.0 +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/autom4te.cache/output.1 psmisc-20.2.works.clean/autom4te.cache/output.1 +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/autom4te.cache/output.2 psmisc-20.2.works.clean/autom4te.cache/output.2 +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/autom4te.cache/requests psmisc-20.2.works.clean/autom4te.cache/requests +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/autom4te.cache/traces.0 psmisc-20.2.works.clean/autom4te.cache/traces.0 +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/autom4te.cache/traces.1 psmisc-20.2.works.clean/autom4te.cache/traces.1 +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/autom4te.cache/traces.2 psmisc-20.2.works.clean/autom4te.cache/traces.2 +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/config.guess psmisc-20.2.works.clean/config.guess +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/config.h.in psmisc-20.2.works.clean/config.h.in +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/config.rpath psmisc-20.2.works.clean/config.rpath +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/config.sub psmisc-20.2.works.clean/config.sub +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/configure psmisc-20.2.works.clean/configure +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/configure.in psmisc-20.2.works.clean/configure.in +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/configure.in 2001-06-15 07:21:07.000000000 -0500 ++++ psmisc-20.2.works.clean/configure.in 2004-10-13 15:19:18.000000000 -0500 +@@ -1,5 +1,6 @@ + dnl Process this file with autoconf to produce a configure script. +-AC_INIT(src/comm.h) ++AC_INIT ++AC_CONFIG_SRCDIR([src/comm.h]) + AM_CONFIG_HEADER(config.h) + AM_INIT_AUTOMAKE(psmisc,20.2) + +@@ -23,7 +24,15 @@ + AC_C_CONST + AC_TYPE_PID_T + AC_TYPE_SIZE_T +-AC_STRUCT_ST_RDEV ++AC_DIAGNOSE([obsolete],[AC_STRUCT_ST_RDEV: ++ your code should no longer depend upon `HAVE_ST_RDEV', but ++ `HAVE_STRUCT_STAT_ST_RDEV'. Remove this warning and ++ the `AC_DEFINE' when you adjust the code.]) ++AC_CHECK_MEMBERS([struct stat.st_rdev],[AC_DEFINE(HAVE_ST_RDEV, 1, ++ [Define to 1 if your `struct stat' has `st_rdev'. ++ Deprecated, use `HAVE_STRUCT_STAT_ST_RDEV' ++ instead.])]) ++ + AC_TYPE_UID_T + + dnl Check for language stuff +@@ -33,4 +42,5 @@ + dnl Checks for library functions. + AC_CHECK_FUNCS(strdup strerror strtoul) + +-AC_OUTPUT(Makefile doc/Makefile src/Makefile intl/Makefile po/Makefile.in) ++AC_CONFIG_FILES([Makefile doc/Makefile src/Makefile po/Makefile.in m4/Makefile intl/Makefile intl/libgnuintl.h ]) ++AC_OUTPUT +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/configure.in~ psmisc-20.2.works.clean/configure.in~ +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/depcomp psmisc-20.2.works.clean/depcomp +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/doc/Makefile.in psmisc-20.2.works.clean/doc/Makefile.in +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/doc/Makefile.in 2001-10-17 17:49:50.000000000 -0500 ++++ psmisc-20.2.works.clean/doc/Makefile.in 2004-10-13 15:20:17.000000000 -0500 +@@ -1,6 +1,8 @@ +-# Makefile.in generated automatically by automake 1.4-p4 from Makefile.am ++# Makefile.in generated by automake 1.8.4 from Makefile.am. ++# @configure_input@ + +-# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. ++# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, ++# 2003, 2004 Free Software Foundation, Inc. + # This Makefile.in is free software; the Free Software Foundation + # gives unlimited permission to copy and/or distribute it, + # with or without modifications, as long as this notice is preserved. +@@ -10,111 +12,192 @@ + # even the implied warranty of MERCHANTABILITY or FITNESS FOR A + # PARTICULAR PURPOSE. + +- +-SHELL = @SHELL@ +- ++@SET_MAKE@ + srcdir = @srcdir@ + top_srcdir = @top_srcdir@ + VPATH = @srcdir@ +-prefix = @prefix@ +-exec_prefix = @exec_prefix@ +- +-bindir = @bindir@ +-sbindir = @sbindir@ +-libexecdir = @libexecdir@ +-datadir = @datadir@ +-sysconfdir = @sysconfdir@ +-sharedstatedir = @sharedstatedir@ +-localstatedir = @localstatedir@ +-libdir = @libdir@ +-infodir = @infodir@ +-mandir = @mandir@ +-includedir = @includedir@ +-oldincludedir = /usr/include +- +-DESTDIR = +- + pkgdatadir = $(datadir)/@PACKAGE@ + pkglibdir = $(libdir)/@PACKAGE@ + pkgincludedir = $(includedir)/@PACKAGE@ +- + top_builddir = .. +- +-ACLOCAL = @ACLOCAL@ +-AUTOCONF = @AUTOCONF@ +-AUTOMAKE = @AUTOMAKE@ +-AUTOHEADER = @AUTOHEADER@ +- ++am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd + INSTALL = @INSTALL@ +-INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) +-INSTALL_DATA = @INSTALL_DATA@ +-INSTALL_SCRIPT = @INSTALL_SCRIPT@ +-transform = @program_transform_name@ +- ++install_sh_DATA = $(install_sh) -c -m 644 ++install_sh_PROGRAM = $(install_sh) -c ++install_sh_SCRIPT = $(install_sh) -c ++INSTALL_HEADER = $(INSTALL_DATA) ++transform = $(program_transform_name) + NORMAL_INSTALL = : + PRE_INSTALL = : + POST_INSTALL = : + NORMAL_UNINSTALL = : + PRE_UNINSTALL = : + POST_UNINSTALL = : +-host_alias = @host_alias@ + host_triplet = @host@ ++subdir = doc ++DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ++ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 ++am__aclocal_m4_deps = $(top_srcdir)/configure.in ++am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ ++ $(ACLOCAL_M4) ++mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs ++CONFIG_HEADER = $(top_builddir)/config.h ++CONFIG_CLEAN_FILES = ++SOURCES = ++DIST_SOURCES = ++man1dir = $(mandir)/man1 ++am__installdirs = "$(DESTDIR)$(man1dir)" ++NROFF = nroff ++MANS = $(man_MANS) ++DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ++ACLOCAL = @ACLOCAL@ ++ALLOCA = @ALLOCA@ ++AMDEP_FALSE = @AMDEP_FALSE@ ++AMDEP_TRUE = @AMDEP_TRUE@ ++AMTAR = @AMTAR@ ++AUTOCONF = @AUTOCONF@ ++AUTOHEADER = @AUTOHEADER@ ++AUTOMAKE = @AUTOMAKE@ ++AWK = @AWK@ + BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ +-CATALOGS = @CATALOGS@ + CATOBJEXT = @CATOBJEXT@ + CC = @CC@ ++CCDEPMODE = @CCDEPMODE@ ++CFLAGS = @CFLAGS@ + CPP = @CPP@ ++CPPFLAGS = @CPPFLAGS@ ++CYGPATH_W = @CYGPATH_W@ + DATADIRNAME = @DATADIRNAME@ +-GMOFILES = @GMOFILES@ ++DEFS = @DEFS@ ++DEPDIR = @DEPDIR@ ++ECHO_C = @ECHO_C@ ++ECHO_N = @ECHO_N@ ++ECHO_T = @ECHO_T@ ++EGREP = @EGREP@ ++EXEEXT = @EXEEXT@ ++GENCAT = @GENCAT@ ++GLIBC21 = @GLIBC21@ + GMSGFMT = @GMSGFMT@ ++HAVE_ASPRINTF = @HAVE_ASPRINTF@ ++HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ ++HAVE_SNPRINTF = @HAVE_SNPRINTF@ ++HAVE_WPRINTF = @HAVE_WPRINTF@ ++INSTALL_DATA = @INSTALL_DATA@ ++INSTALL_PROGRAM = @INSTALL_PROGRAM@ ++INSTALL_SCRIPT = @INSTALL_SCRIPT@ ++INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ ++INSTOBJEXT = @INSTOBJEXT@ + INTLBISON = @INTLBISON@ + INTLLIBS = @INTLLIBS@ + INTLOBJS = @INTLOBJS@ + INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ ++LDFLAGS = @LDFLAGS@ + LIBICONV = @LIBICONV@ ++LIBINTL = @LIBINTL@ ++LIBOBJS = @LIBOBJS@ ++LIBS = @LIBS@ ++LTLIBICONV = @LTLIBICONV@ ++LTLIBINTL = @LTLIBINTL@ ++LTLIBOBJS = @LTLIBOBJS@ + MAKEINFO = @MAKEINFO@ + MKINSTALLDIRS = @MKINSTALLDIRS@ + MSGFMT = @MSGFMT@ ++MSGMERGE = @MSGMERGE@ ++OBJEXT = @OBJEXT@ + PACKAGE = @PACKAGE@ +-POFILES = @POFILES@ ++PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ ++PACKAGE_NAME = @PACKAGE_NAME@ ++PACKAGE_STRING = @PACKAGE_STRING@ ++PACKAGE_TARNAME = @PACKAGE_TARNAME@ ++PACKAGE_VERSION = @PACKAGE_VERSION@ ++PATH_SEPARATOR = @PATH_SEPARATOR@ + POSUB = @POSUB@ + RANLIB = @RANLIB@ ++SET_MAKE = @SET_MAKE@ ++SHELL = @SHELL@ ++STRIP = @STRIP@ + TERMCAP_LIB = @TERMCAP_LIB@ + USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ + USE_NLS = @USE_NLS@ + VERSION = @VERSION@ +- ++XGETTEXT = @XGETTEXT@ ++ac_ct_CC = @ac_ct_CC@ ++ac_ct_RANLIB = @ac_ct_RANLIB@ ++ac_ct_STRIP = @ac_ct_STRIP@ ++am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ ++am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ ++am__include = @am__include@ ++am__leading_dot = @am__leading_dot@ ++am__quote = @am__quote@ ++bindir = @bindir@ ++build = @build@ ++build_alias = @build_alias@ ++build_cpu = @build_cpu@ ++build_os = @build_os@ ++build_vendor = @build_vendor@ ++datadir = @datadir@ ++exec_prefix = @exec_prefix@ ++host = @host@ ++host_alias = @host_alias@ ++host_cpu = @host_cpu@ ++host_os = @host_os@ ++host_vendor = @host_vendor@ ++includedir = @includedir@ ++infodir = @infodir@ ++install_sh = @install_sh@ ++libdir = @libdir@ ++libexecdir = @libexecdir@ ++localstatedir = @localstatedir@ ++mandir = @mandir@ ++mkdir_p = @mkdir_p@ ++oldincludedir = @oldincludedir@ ++prefix = @prefix@ ++program_transform_name = @program_transform_name@ ++sbindir = @sbindir@ ++sharedstatedir = @sharedstatedir@ ++sysconfdir = @sysconfdir@ ++target_alias = @target_alias@ + man_MANS = fuser.1 killall.1 pidof.1 pstree.1 +- + EXTRA_DIST = $(man_MANS) +-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +-CONFIG_HEADER = ../config.h +-CONFIG_CLEAN_FILES = +-man1dir = $(mandir)/man1 +-MANS = $(man_MANS) +- +-NROFF = nroff +-DIST_COMMON = Makefile.am Makefile.in +- +- +-DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) ++all: all-am + +-TAR = tar +-GZIP_ENV = --best +-all: all-redirect + .SUFFIXES: +-$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) +- cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps doc/Makefile +- +-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status +- cd $(top_builddir) \ +- && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status ++$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) ++ @for dep in $?; do \ ++ case '$(am__configure_deps)' in \ ++ *$$dep*) \ ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ ++ && exit 0; \ ++ exit 1;; \ ++ esac; \ ++ done; \ ++ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/Makefile'; \ ++ cd $(top_srcdir) && \ ++ $(AUTOMAKE) --foreign doc/Makefile ++.PRECIOUS: Makefile ++Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status ++ @case '$?' in \ ++ *config.status*) \ ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ ++ *) \ ++ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ ++ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ ++ esac; + ++$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +-install-man1: +- $(mkinstalldirs) $(DESTDIR)$(man1dir) +- @list='$(man1_MANS)'; \ +- l2='$(man_MANS)'; for i in $$l2; do \ ++$(top_srcdir)/configure: $(am__configure_deps) ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ++$(ACLOCAL_M4): $(am__aclocal_m4_deps) ++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ++uninstall-info-am: ++install-man1: $(man1_MANS) $(man_MANS) ++ @$(NORMAL_INSTALL) ++ test -z "$(man1dir)" || $(mkdir_p) "$(DESTDIR)$(man1dir)" ++ @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \ ++ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ ++ for i in $$l2; do \ + case "$$i" in \ + *.1*) list="$$list $$i" ;; \ + esac; \ +@@ -123,112 +206,158 @@ + if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \ + else file=$$i; fi; \ + ext=`echo $$i | sed -e 's/^.*\\.//'`; \ ++ case "$$ext" in \ ++ 1*) ;; \ ++ *) ext='1' ;; \ ++ esac; \ + inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ ++ inst=`echo $$inst | sed -e 's/^.*\///'`; \ + inst=`echo $$inst | sed '$(transform)'`.$$ext; \ +- echo " $(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst"; \ +- $(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst; \ ++ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ ++ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \ + done +- + uninstall-man1: +- @list='$(man1_MANS)'; \ +- l2='$(man_MANS)'; for i in $$l2; do \ ++ @$(NORMAL_UNINSTALL) ++ @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \ ++ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ ++ for i in $$l2; do \ + case "$$i" in \ + *.1*) list="$$list $$i" ;; \ + esac; \ + done; \ + for i in $$list; do \ + ext=`echo $$i | sed -e 's/^.*\\.//'`; \ ++ case "$$ext" in \ ++ 1*) ;; \ ++ *) ext='1' ;; \ ++ esac; \ + inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ ++ inst=`echo $$inst | sed -e 's/^.*\///'`; \ + inst=`echo $$inst | sed '$(transform)'`.$$ext; \ +- echo " rm -f $(DESTDIR)$(man1dir)/$$inst"; \ +- rm -f $(DESTDIR)$(man1dir)/$$inst; \ ++ echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \ ++ rm -f "$(DESTDIR)$(man1dir)/$$inst"; \ + done +-install-man: $(MANS) +- @$(NORMAL_INSTALL) +- $(MAKE) $(AM_MAKEFLAGS) install-man1 +-uninstall-man: +- @$(NORMAL_UNINSTALL) +- $(MAKE) $(AM_MAKEFLAGS) uninstall-man1 + tags: TAGS + TAGS: + ++ctags: CTAGS ++CTAGS: + +-distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) +- +-subdir = doc + + distdir: $(DISTFILES) +- @for file in $(DISTFILES); do \ +- d=$(srcdir); \ ++ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ ++ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ ++ list='$(DISTFILES)'; for file in $$list; do \ ++ case $$file in \ ++ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ ++ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ ++ esac; \ ++ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ ++ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ ++ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ ++ dir="/$$dir"; \ ++ $(mkdir_p) "$(distdir)$$dir"; \ ++ else \ ++ dir=''; \ ++ fi; \ + if test -d $$d/$$file; then \ +- cp -pr $$d/$$file $(distdir)/$$file; \ ++ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ ++ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ ++ fi; \ ++ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ +- || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ +- || cp -p $$d/$$file $(distdir)/$$file || :; \ ++ || cp -p $$d/$$file $(distdir)/$$file \ ++ || exit 1; \ + fi; \ + done +-info-am: +-info: info-am +-dvi-am: +-dvi: dvi-am + check-am: all-am + check: check-am +-installcheck-am: +-installcheck: installcheck-am +-install-exec-am: ++all-am: Makefile $(MANS) ++installdirs: ++ for dir in "$(DESTDIR)$(man1dir)"; do \ ++ test -z "$$dir" || $(mkdir_p) "$$dir"; \ ++ done ++install: install-am + install-exec: install-exec-am +- +-install-data-am: install-man + install-data: install-data-am ++uninstall: uninstall-am + + install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am +-install: install-am +-uninstall-am: uninstall-man +-uninstall: uninstall-am +-all-am: Makefile $(MANS) +-all-redirect: all-am +-install-strip: +- $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install +-installdirs: +- $(mkinstalldirs) $(DESTDIR)$(mandir)/man1 +- + ++installcheck: installcheck-am ++install-strip: ++ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ ++ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ ++ `test -z '$(STRIP)' || \ ++ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install + mostlyclean-generic: + + clean-generic: + + distclean-generic: +- -rm -f Makefile $(CONFIG_CLEAN_FILES) +- -rm -f config.cache config.log stamp-h stamp-h[0-9]* ++ -rm -f $(CONFIG_CLEAN_FILES) + + maintainer-clean-generic: +-mostlyclean-am: mostlyclean-generic ++ @echo "This command is intended for maintainers to use" ++ @echo "it deletes files that may require special tools to rebuild." ++clean: clean-am + +-mostlyclean: mostlyclean-am ++clean-am: clean-generic mostlyclean-am + +-clean-am: clean-generic mostlyclean-am ++distclean: distclean-am ++ -rm -f Makefile ++distclean-am: clean-am distclean-generic + +-clean: clean-am ++dvi: dvi-am + +-distclean-am: distclean-generic clean-am ++dvi-am: + +-distclean: distclean-am ++html: html-am + +-maintainer-clean-am: maintainer-clean-generic distclean-am +- @echo "This command is intended for maintainers to use;" +- @echo "it deletes files that may require special tools to rebuild." ++info: info-am ++ ++info-am: ++ ++install-data-am: install-man ++ ++install-exec-am: ++ ++install-info: install-info-am ++ ++install-man: install-man1 ++ ++installcheck-am: + + maintainer-clean: maintainer-clean-am ++ -rm -f Makefile ++maintainer-clean-am: distclean-am maintainer-clean-generic + +-.PHONY: install-man1 uninstall-man1 install-man uninstall-man tags \ +-distdir info-am info dvi-am dvi check check-am installcheck-am \ +-installcheck install-exec-am install-exec install-data-am install-data \ +-install-am install uninstall-am uninstall all-redirect all-am all \ +-installdirs mostlyclean-generic distclean-generic clean-generic \ +-maintainer-clean-generic clean mostlyclean distclean maintainer-clean ++mostlyclean: mostlyclean-am ++ ++mostlyclean-am: mostlyclean-generic ++ ++pdf: pdf-am ++ ++pdf-am: ++ ++ps: ps-am + ++ps-am: ++ ++uninstall-am: uninstall-info-am uninstall-man ++ ++uninstall-man: uninstall-man1 ++ ++.PHONY: all all-am check check-am clean clean-generic distclean \ ++ distclean-generic distdir dvi dvi-am html html-am info info-am \ ++ install install-am install-data install-data-am install-exec \ ++ install-exec-am install-info install-info-am install-man \ ++ install-man1 install-strip installcheck installcheck-am \ ++ installdirs maintainer-clean maintainer-clean-generic \ ++ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \ ++ uninstall-am uninstall-info-am uninstall-man uninstall-man1 + + # Tell versions [3.59,3.63) of GNU make to not export all variables. + # Otherwise a system limit (for SysV at least) may be exceeded. +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/install-sh psmisc-20.2.works.clean/install-sh +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/ChangeLog psmisc-20.2.works.clean/intl/ChangeLog +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/ChangeLog 2001-04-13 23:00:42.000000000 -0500 ++++ psmisc-20.2.works.clean/intl/ChangeLog 2004-10-13 15:18:41.000000000 -0500 +@@ -1,4 +1,4 @@ +-2001-03-09 GNU <bug-gnu-utils@gnu.org> ++2004-01-29 GNU <bug-gnu-gettext@gnu.org> + +- * Version 0.10.36 released. ++ * Version 0.14.1 released. + +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/Makefile.in psmisc-20.2.works.clean/intl/Makefile.in +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/Makefile.in 2001-04-13 23:00:42.000000000 -0500 ++++ psmisc-20.2.works.clean/intl/Makefile.in 2004-10-13 15:18:41.000000000 -0500 +@@ -1,19 +1,20 @@ +-# Makefile for directory with message catalog handling in GNU NLS Utilities. +-# Copyright (C) 1995-1998, 2000, 2001 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,23 +24,23 @@ + 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)/share ++libdir = @libdir@ ++includedir = @includedir@ ++datadir = @datadir@ + localedir = $(datadir)/locale +-gettextsrcdir = @datadir@/gettext/intl ++gettextsrcdir = $(datadir)/gettext/intl + aliaspath = $(localedir) + subdir = intl + + INSTALL = @INSTALL@ + INSTALL_DATA = @INSTALL_DATA@ + MKINSTALLDIRS = @MKINSTALLDIRS@ +-mkinstalldirs = $(SHELL) `case "$(MKINSTALLDIRS)" in /*) echo "$(MKINSTALLDIRS)" ;; *) echo "$(top_builddir)/$(MKINSTALLDIRS)" ;; esac` ++mkinstalldirs = $(SHELL) $(MKINSTALLDIRS) + + l = @INTL_LIBTOOL_SUFFIX_PREFIX@ + +@@ -51,89 +52,202 @@ + YFLAGS = --name-prefix=__gettext + + DEFS = -DLOCALEDIR=\"$(localedir)\" -DLOCALE_ALIAS_PATH=\"$(aliaspath)\" \ +--DLIBDIR=\"$(libdir)\" @DEFS@ ++-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) libgnuintl.h libgettext.h loadinfo.h +-COMHDRS = gettext.h gettextP.h hash-string.h +-SOURCES = $(COMSRCS) intl-compat.c +-COMSRCS = bindtextdom.c dcgettext.c dgettext.c gettext.c \ +-finddomain.c loadmsgcat.c localealias.c textdomain.c l10nflist.c \ +-explodename.c dcigettext.c dcngettext.c dngettext.c ngettext.c plural.y \ +-localcharset.c +-OBJECTS = @INTLOBJS@ bindtextdom.$lo dcgettext.$lo dgettext.$lo gettext.$lo \ +-finddomain.$lo loadmsgcat.$lo localealias.$lo textdomain.$lo l10nflist.$lo \ +-explodename.$lo dcigettext.$lo dcngettext.$lo dngettext.$lo ngettext.$lo \ +-plural.$lo localcharset.$lo +-GETTOBJS = intl-compat.$lo ++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 +-DISTFILES.obsolete = xopen-msg.sed linux-msg.sed po2tbl.sed.in cat-compat.c ++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=1 ++LTV_CURRENT=7 + LTV_REVISION=0 +-LTV_AGE=0 ++LTV_AGE=4 + + .SUFFIXES: + .SUFFIXES: .c .y .o .lo .sin .sed ++ + .c.o: + $(COMPILE) $< +-.c.lo: +- $(LIBTOOL) --mode=compile $(COMPILE) $< + + .y.c: + $(YACC) $(YFLAGS) --output $@ $< + rm -f $*.h + +-.sin.sed: +- sed -e '/^#/d' -e 's/@''PACKAGE''@/@PACKAGE@/g' $< > t-$@ +- mv t-$@ $@ +- +-INCLUDES = -I.. -I. -I$(top_srcdir)/intl ++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: 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: ++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 libgnuintl.a: $(OBJECTS) +- rm -f $@ +- $(AR) cru $@ $(OBJECTS) +- $(RANLIB) $@ ++INCLUDES = -I. -I$(srcdir) -I.. + +-libintl.la libgnuintl.la: $(OBJECTS) +- $(LIBTOOL) --mode=link \ +- $(CC) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) $(LDFLAGS) -o $@ \ +- $(OBJECTS) @LIBICONV@ \ +- -version-info $(LTV_CURRENT):$(LTV_REVISION):$(LTV_AGE) \ +- -rpath $(libdir) \ +- -no-undefined ++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 + + libintl.h: libgnuintl.h +- cp $(srcdir)/libgnuintl.h libintl.h ++ cp libgnuintl.h libintl.h + +-charset.alias: config.charset ++charset.alias: $(srcdir)/config.charset + $(SHELL) $(srcdir)/config.charset '@host@' > t-$@ + mv t-$@ $@ + + check: all + +-# This installation goal is only used in GNU gettext. Packages which +-# only use the library should use install instead. +- + # We must not install the libintl.h/libintl.a files if we are on a + # system which has the GNU gettext() function in its C library or in a + # separate library. +@@ -141,25 +255,50 @@ + # 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 "$(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; \ + else \ + : ; \ + fi +- if test '@USE_INCLUDED_LIBINTL@' = yes; then \ ++ if test "$(PACKAGE)" = "gettext-tools" \ ++ && test '@USE_INCLUDED_LIBINTL@' = no; then \ + $(mkinstalldirs) $(DESTDIR)$(libdir); \ +- test -f $(DESTDIR)$(libdir)/charset.alias \ +- && orig=$(DESTDIR)$(libdir)/charset.alias \ +- || orig=charset.alias; \ ++ $(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; \ +- sed -f ref-add.sed $$orig > $$temp; \ +- $(INSTALL_DATA) $$temp $$dest; \ +- rm -f $$temp; \ ++ 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 \ ++ if test @GLIBC21@ = no; then \ ++ orig=charset.alias; \ ++ sed -f ref-add.sed $$orig > $$temp; \ ++ $(INSTALL_DATA) $$temp $$dest; \ ++ rm -f $$temp; \ ++ fi; \ ++ fi; \ + $(mkinstalldirs) $(DESTDIR)$(localedir); \ + test -f $(DESTDIR)$(localedir)/locale.alias \ + && orig=$(DESTDIR)$(localedir)/locale.alias \ +@@ -173,16 +312,22 @@ + : ; \ + fi + install-data: all +- if test "$(PACKAGE)" = "gettext"; then \ ++ if test "$(PACKAGE)" = "gettext-tools"; then \ + $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \ + $(INSTALL_DATA) VERSION $(DESTDIR)$(gettextsrcdir)/VERSION; \ + $(INSTALL_DATA) ChangeLog.inst $(DESTDIR)$(gettextsrcdir)/ChangeLog; \ +- dists="$(DISTFILES.common)"; \ ++ dists="COPYING.LIB-2.0 COPYING.LIB-2.1 $(DISTFILES.common)"; \ + for file in $$dists; do \ + $(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; \ +@@ -191,18 +336,51 @@ + : ; \ + 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 ++ + # Define this as empty until I found a useful application. + installcheck: + + uninstall: +- if test "$(PACKAGE)" = "gettext" \ +- && test '@INTLOBJS@' = '$(GETTOBJS)'; then \ ++ 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; \ +@@ -229,25 +407,36 @@ + else \ + : ; \ + fi +- if test "$(PACKAGE)" = "gettext"; then \ +- for file in VERSION ChangeLog $(DISTFILES.common); do \ ++ 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 libgnuintl.h +-bindtextdom.$lo finddomain.$lo loadmsgcat.$lo: gettextP.h gettext.h loadinfo.h +-dcgettext.$lo: gettextP.h gettext.h hash-string.h loadinfo.h ++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) +@@ -255,15 +444,15 @@ + + + mostlyclean: +- rm -f *.a *.la *.o *.lo core core.* +- rm -f libintl.h charset.alias ref-add.sed ref-del.sed ++ 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 +- if test "$(PACKAGE)" = gettext; then \ ++ if test "$(PACKAGE)" = "gettext-runtime" || test "$(PACKAGE)" = "gettext-tools"; then \ + rm -f ChangeLog.inst $(DISTFILES.normal); \ + else \ + : ; \ +@@ -278,20 +467,26 @@ + # other files which should not be distributed in other packages. + distdir = ../$(PACKAGE)-$(VERSION)/$(subdir) + dist distdir: Makefile +- if test "$(PACKAGE)" = gettext; then \ +- additional="$(DISTFILES.gettext)"; \ ++ if test "$(PACKAGE)" = "gettext-tools"; then \ ++ : ; \ + else \ +- additional="$(DISTFILES.normal)"; \ +- fi; \ +- $(MAKE) $(DISTFILES.common) $(DISTFILES.generated) $$additional; \ +- for file in ChangeLog $(DISTFILES.common) $(DISTFILES.generated) $$additional; do \ +- ln $(srcdir)/$$file $(distdir) 2> /dev/null \ +- || cp -p $(srcdir)/$$file $(distdir); \ +- done ++ 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 + +-Makefile: Makefile.in ../config.status +- cd .. \ +- && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status ++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. +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/VERSION psmisc-20.2.works.clean/intl/VERSION +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/VERSION 2001-04-13 23:00:42.000000000 -0500 ++++ psmisc-20.2.works.clean/intl/VERSION 2004-10-13 15:18:41.000000000 -0500 +@@ -1 +1 @@ +-GNU gettext library from gettext-0.10.36 ++GNU gettext library from gettext-0.14.1 +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/bindtextdom.c psmisc-20.2.works.clean/intl/bindtextdom.c +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/bindtextdom.c 2001-04-13 23:00:42.000000000 -0500 ++++ psmisc-20.2.works.clean/intl/bindtextdom.c 2004-10-13 15:18:41.000000000 -0500 +@@ -1,19 +1,20 @@ + /* Implementation of the bindtextdomain(3) function +- Copyright (C) 1995-1998, 2000, 2001 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> +@@ -44,8 +45,8 @@ + names than the internal variables in GNU libc, otherwise programs + using libintl.a cannot be linked statically. */ + #if !defined _LIBC +-# define _nl_default_dirname _nl_default_dirname__ +-# define _nl_domain_bindings _nl_domain_bindings__ ++# 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>. */ +@@ -57,12 +58,17 @@ + + /* 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) ++__libc_rwlock_define (extern, _nl_state_lock attribute_hidden) + + + /* Names for the libintl functions are a problem. They must not clash +@@ -76,15 +82,10 @@ + # define strdup(str) __strdup (str) + # endif + #else +-# define BINDTEXTDOMAIN bindtextdomain__ +-# define BIND_TEXTDOMAIN_CODESET bind_textdomain_codeset__ ++# define BINDTEXTDOMAIN libintl_bindtextdomain ++# define BIND_TEXTDOMAIN_CODESET libintl_bind_textdomain_codeset + #endif + +-/* Prototypes for local functions. */ +-static void set_binding_values PARAMS ((const char *domainname, +- const char **dirnamep, +- const char **codesetp)); +- + /* Specifies the directory name *DIRNAMEP and the output codeset *CODESETP + to be used for the DOMAINNAME message catalog. + If *DIRNAMEP or *CODESETP is NULL, the corresponding attribute is not +@@ -92,10 +93,8 @@ + If DIRNAMEP or CODESETP is NULL, the corresponding attribute is neither + modified nor returned. */ + static void +-set_binding_values (domainname, dirnamep, codesetp) +- const char *domainname; +- const char **dirnamep; +- const char **codesetp; ++set_binding_values (const char *domainname, ++ const char **dirnamep, const char **codesetp) + { + struct binding *binding; + int modified; +@@ -145,8 +144,8 @@ + char *result = binding->dirname; + if (strcmp (dirname, result) != 0) + { +- if (strcmp (dirname, _nl_default_dirname) == 0) +- result = (char *) _nl_default_dirname; ++ if (strcmp (dirname, INTUSE(_nl_default_dirname)) == 0) ++ result = (char *) INTUSE(_nl_default_dirname); + else + { + #if defined _LIBC || defined HAVE_STRDUP +@@ -161,7 +160,7 @@ + + if (__builtin_expect (result != NULL, 1)) + { +- if (binding->dirname != _nl_default_dirname) ++ if (binding->dirname != INTUSE(_nl_default_dirname)) + free (binding->dirname); + + binding->dirname = result; +@@ -202,6 +201,7 @@ + free (binding->codeset); + + binding->codeset = result; ++ binding->codeset_cntr++; + modified = 1; + } + } +@@ -214,7 +214,7 @@ + { + /* Simply return the default values. */ + if (dirnamep) +- *dirnamep = _nl_default_dirname; ++ *dirnamep = INTUSE(_nl_default_dirname); + if (codesetp) + *codesetp = NULL; + } +@@ -236,11 +236,11 @@ + + if (dirname == NULL) + /* The default value. */ +- dirname = _nl_default_dirname; ++ dirname = INTUSE(_nl_default_dirname); + else + { +- if (strcmp (dirname, _nl_default_dirname) == 0) +- dirname = _nl_default_dirname; ++ if (strcmp (dirname, INTUSE(_nl_default_dirname)) == 0) ++ dirname = INTUSE(_nl_default_dirname); + else + { + char *result; +@@ -263,7 +263,9 @@ + } + else + /* The default value. */ +- new_binding->dirname = (char *) _nl_default_dirname; ++ new_binding->dirname = (char *) INTUSE(_nl_default_dirname); ++ ++ new_binding->codeset_cntr = 0; + + if (codesetp) + { +@@ -285,6 +287,7 @@ + memcpy (result, codeset, len); + #endif + codeset = result; ++ new_binding->codeset_cntr++; + } + *codesetp = codeset; + new_binding->codeset = (char *) codeset; +@@ -316,7 +319,7 @@ + if (0) + { + failed_codeset: +- if (new_binding->dirname != _nl_default_dirname) ++ if (new_binding->dirname != INTUSE(_nl_default_dirname)) + free (new_binding->dirname); + failed_dirname: + free (new_binding); +@@ -338,9 +341,7 @@ + /* 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; ++BINDTEXTDOMAIN (const char *domainname, const char *dirname) + { + set_binding_values (domainname, &dirname, NULL); + return (char *) dirname; +@@ -349,9 +350,7 @@ + /* Specify the character encoding in which the messages from the + DOMAINNAME message catalog will be returned. */ + char * +-BIND_TEXTDOMAIN_CODESET (domainname, codeset) +- const char *domainname; +- const char *codeset; ++BIND_TEXTDOMAIN_CODESET (const char *domainname, const char *codeset) + { + set_binding_values (domainname, NULL, &codeset); + return (char *) codeset; +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/config.charset psmisc-20.2.works.clean/intl/config.charset +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/dcgettext.c psmisc-20.2.works.clean/intl/dcgettext.c +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/dcgettext.c 2001-04-13 23:00:42.000000000 -0500 ++++ psmisc-20.2.works.clean/intl/dcgettext.c 2004-10-13 15:18:41.000000000 -0500 +@@ -1,19 +1,20 @@ + /* Implementation of the dcgettext(3) function. +- Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc. ++ Copyright (C) 1995-1999, 2000-2003 Free Software Foundation, Inc. + +- This program is free software; you can redistribute it and/or modify +- it 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,22 +37,20 @@ + # define DCGETTEXT __dcgettext + # define DCIGETTEXT __dcigettext + #else +-# define DCGETTEXT dcgettext__ +-# define DCIGETTEXT dcigettext__ ++# 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) + { + 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 +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/dcigettext.c psmisc-20.2.works.clean/intl/dcigettext.c +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/dcigettext.c 2001-04-13 23:00:43.000000000 -0500 ++++ psmisc-20.2.works.clean/intl/dcigettext.c 2004-10-13 15:18:41.000000000 -0500 +@@ -1,19 +1,20 @@ + /* Implementation of the internal dcigettext function. +- Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc. ++ Copyright (C) 1995-1999, 2000-2003 Free Software Foundation, Inc. + +- This program is free software; you can redistribute it and/or modify +- it 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 +@@ -32,14 +33,19 @@ + # 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 +@@ -55,13 +61,7 @@ + + #include <stddef.h> + #include <stdlib.h> +- + #include <string.h> +-#if !HAVE_STRCHR && !defined _LIBC +-# ifndef strchr +-# define strchr index +-# endif +-#endif + + #if defined HAVE_UNISTD_H || defined _LIBC + # include <unistd.h> +@@ -69,11 +69,26 @@ + + #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 +@@ -106,10 +121,10 @@ + 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 _nl_default_default_domain__ +-# define _nl_current_default_domain _nl_current_default_domain__ +-# define _nl_default_dirname _nl_default_dirname__ +-# define _nl_domain_bindings _nl_domain_bindings__ ++# 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>. */ +@@ -133,13 +148,17 @@ + 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 PARAMS ((char *dest, const char *src)); ++static char *stpcpy (char *dest, const char *src); + # endif + # ifndef HAVE_MEMPCPY +-static void *mempcpy PARAMS ((void *dest, const void *src, size_t n)); ++static void *mempcpy (void *dest, const void *src, size_t n); + # endif + #endif + +@@ -197,16 +216,6 @@ + # define IS_PATH_WITH_DIR(P) (strchr (P, '/') != NULL) + #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). */ +-#ifdef _LIBC +-# define HAVE_LOCALE_NULL +-#endif +- + /* This is the type used for the search tree where known translations + are stored. */ + struct known_translation_t +@@ -243,11 +252,8 @@ + # endif + + /* Function to compare two entries in the table of known translations. */ +-static int transcmp PARAMS ((const void *p1, const void *p2)); + static int +-transcmp (p1, p2) +- const void *p1; +- const void *p2; ++transcmp (const void *p1, const void *p2) + { + const struct known_translation_t *s1; + const struct known_translation_t *s2; +@@ -271,39 +277,54 @@ + } + #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[] = "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 = _nl_default_default_domain; ++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 PARAMS ((struct loaded_l10nfile *domain, +- unsigned long int n, +- const char *translation, +- size_t translation_len)) +- internal_function; +-static unsigned long int plural_eval PARAMS ((struct expression *pexp, +- unsigned long int n)) ++static char *plural_lookup (struct loaded_l10nfile *domain, ++ unsigned long int n, ++ const char *translation, size_t translation_len) + internal_function; +-static const char *category_to_name PARAMS ((int category)) internal_function; +-static const char *guess_category_value PARAMS ((int category, +- const char *categoryname)) ++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 +@@ -328,11 +349,13 @@ + 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 */ + + +@@ -356,12 +379,12 @@ + #ifdef _LIBC + # define DCIGETTEXT __dcigettext + #else +-# define DCIGETTEXT dcigettext__ ++# 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) ++__libc_rwlock_define_initialized (, _nl_state_lock attribute_hidden) + #endif + + /* Checking whether the binaries runs SUID must be done and glibc provides +@@ -370,6 +393,18 @@ + # 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 \ +@@ -382,17 +417,15 @@ + } + #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 (domainname, msgid1, msgid2, plural, n, category) +- const char *domainname; +- const char *msgid1; +- const char *msgid2; +- int plural; +- unsigned long int n; +- int category; ++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; +@@ -417,6 +450,15 @@ + 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 +@@ -425,6 +467,12 @@ + 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; + +@@ -437,6 +485,7 @@ + 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. */ +@@ -473,7 +522,7 @@ + } + + if (binding == NULL) +- dirname = (char *) _nl_default_dirname; ++ dirname = (char *) INTUSE(_nl_default_dirname); + else if (IS_ABSOLUTE_PATH (binding->dirname)) + dirname = binding->dirname; + else +@@ -501,16 +550,9 @@ + } + + 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 (plural == 0 +- ? (char *) msgid1 +- /* Use the Germanic plural rule. */ +- : n == 1 ? (char *) msgid1 : (char *) msgid2); +- } ++ /* 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); + } +@@ -567,16 +609,7 @@ + domain. Return the MSGID. */ + if (strcmp (single_locale, "C") == 0 + || strcmp (single_locale, "POSIX") == 0) +- { +- FREE_BLOCKS (block_list); +- __libc_rwlock_unlock (_nl_state_lock); +- __set_errno (saved_errno); +- return (plural == 0 +- ? (char *) msgid1 +- /* Use the Germanic plural rule. */ +- : n == 1 ? (char *) msgid1 : (char *) msgid2); +- } +- ++ break; + + /* Find structure describing the message catalog matching the + DOMAINNAME and CATEGORY. */ +@@ -584,7 +617,7 @@ + + if (domain != NULL) + { +- retval = _nl_find_msg (domain, msgid1, &retlen); ++ retval = _nl_find_msg (domain, binding, msgid1, &retlen); + + if (retval == NULL) + { +@@ -592,8 +625,8 @@ + + for (cnt = 0; domain->successor[cnt] != NULL; ++cnt) + { +- retval = _nl_find_msg (domain->successor[cnt], msgid1, +- &retlen); ++ retval = _nl_find_msg (domain->successor[cnt], binding, ++ msgid1, &retlen); + + if (retval != NULL) + { +@@ -608,7 +641,6 @@ + /* Found the translation of MSGID1 in domain DOMAIN: + starting at RETVAL, RETLEN bytes. */ + FREE_BLOCKS (block_list); +- __set_errno (saved_errno); + #if defined HAVE_TSEARCH || defined _LIBC + if (foundp == NULL) + { +@@ -647,6 +679,8 @@ + (*foundp)->translation_length = retlen; + } + #endif ++ __set_errno (saved_errno); ++ + /* Now deal with plural. */ + if (plural) + retval = plural_lookup (domain, n, retval, retlen); +@@ -656,32 +690,56 @@ + } + } + } +- /* NOTREACHED */ ++ ++ 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 (domain_file, msgid, lengthp) +- struct loaded_l10nfile *domain_file; +- const char *msgid; +- size_t *lengthp; ++_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); ++ _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_size > 2 && domain->hash_tab != NULL) ++ if (domain->hash_tab != NULL) + { + /* Use the hashing table. */ + nls_uint32 len = strlen (msgid); +@@ -691,22 +749,30 @@ + + while (1) + { +- nls_uint32 nstr = W (domain->must_swap, domain->hash_tab[idx]); ++ nls_uint32 nstr = ++ W (domain->must_swap_hash_tab, domain->hash_tab[idx]); + + if (nstr == 0) + /* Hash table entry is empty. */ + return NULL; + +- /* Compare msgid with the original string at index nstr-1. ++ 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 (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)) ++ 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 - 1; ++ act = nstr; + goto found; + } + +@@ -724,7 +790,7 @@ + size_t top, bottom; + + bottom = 0; +- top = domain->nstrings; ++ top = nstrings; + while (bottom < top) + { + int cmp_val; +@@ -747,11 +813,29 @@ + 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. */ +- result = ((char *) domain->data +- + W (domain->must_swap, domain->trans_tab[act].offset)); +- resultlen = W (domain->must_swap, domain->trans_tab[act].length) + 1; ++ 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 +@@ -772,8 +856,9 @@ + NULs. */ + + if (domain->conv_tab == NULL +- && ((domain->conv_tab = (char **) calloc (domain->nstrings, +- sizeof (char *))) ++ && ((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; +@@ -942,11 +1027,8 @@ + /* Look up a plural variant. */ + static char * + internal_function +-plural_lookup (domain, n, translation, translation_len) +- struct loaded_l10nfile *domain; +- unsigned long int n; +- const char *translation; +- size_t translation_len; ++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; +@@ -979,93 +1061,11 @@ + return (char *) p; + } + +- +-/* Function to evaluate the plural expression and return an index value. */ +-static unsigned long int +-internal_function +-plural_eval (pexp, n) +- 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: +- return leftarg / rightarg; +- case module: +- 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; +-} +- +- ++#ifndef _LIBC + /* Return string representation of locale CATEGORY. */ + static const char * + internal_function +-category_to_name (category) +- int category; ++category_to_name (int category) + { + const char *retval; + +@@ -1120,13 +1120,12 @@ + + return retval; + } ++#endif + + /* Guess value of current locale from value of the environment variables. */ + static const char * + internal_function +-guess_category_value (category, categoryname) +- int category; +- const char *categoryname; ++guess_category_value (int category, const char *categoryname) + { + const char *language; + const char *retval; +@@ -1141,27 +1140,21 @@ + /* 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 _LIBC || (defined HAVE_SETLOCALE && defined HAVE_LC_MESSAGES && defined HAVE_LOCALE_NULL) +- retval = setlocale (category, NULL); ++#ifdef _LIBC ++ retval = __current_locale_name (category); + #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. */ +- return "C"; +- } +- } ++ 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; + } + +@@ -1173,9 +1166,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. */ ; +@@ -1185,10 +1176,7 @@ + + #if !_LIBC && !HAVE_MEMPCPY + static void * +-mempcpy (dest, src, n) +- void *dest; +- const void *src; +- size_t n; ++mempcpy (void *dest, const void *src, size_t n) + { + return (void *) ((char *) memcpy (dest, src, n) + n); + } +@@ -1198,8 +1186,7 @@ + #ifdef _LIBC + /* If we want to free all resources we have to do some work at + program's end. */ +-static void __attribute__ ((unused)) +-free_mem (void) ++libc_freeres_fn (free_mem) + { + void *old; + +@@ -1207,7 +1194,7 @@ + { + struct binding *oldp = _nl_domain_bindings; + _nl_domain_bindings = _nl_domain_bindings->next; +- if (oldp->dirname != _nl_default_dirname) ++ if (oldp->dirname != INTUSE(_nl_default_dirname)) + /* Yes, this is a pointer comparison. */ + free (oldp->dirname); + free (oldp->codeset); +@@ -1229,6 +1216,4 @@ + free (old); + } + } +- +-text_set_element (__libc_subfreeres, free_mem); + #endif +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/dcngettext.c psmisc-20.2.works.clean/intl/dcngettext.c +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/dcngettext.c 2001-04-13 23:00:43.000000000 -0500 ++++ psmisc-20.2.works.clean/intl/dcngettext.c 2004-10-13 15:18:41.000000000 -0500 +@@ -1,19 +1,20 @@ + /* Implementation of the dcngettext(3) function. +- Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc. ++ Copyright (C) 1995-1999, 2000-2003 Free Software Foundation, Inc. + +- This program is free software; you can redistribute it and/or modify +- it 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,19 +37,16 @@ + # define DCNGETTEXT __dcngettext + # define DCIGETTEXT __dcigettext + #else +-# define DCNGETTEXT dcngettext__ +-# define DCIGETTEXT dcigettext__ ++# define DCNGETTEXT libintl_dcngettext ++# define DCIGETTEXT libintl_dcigettext + #endif + + /* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY + locale. */ + char * +-DCNGETTEXT (domainname, msgid1, msgid2, n, category) +- const char *domainname; +- const char *msgid1; +- const char *msgid2; +- unsigned long int n; +- int category; ++DCNGETTEXT (const char *domainname, ++ const char *msgid1, const char *msgid2, unsigned long int n, ++ int category) + { + return DCIGETTEXT (domainname, msgid1, msgid2, 1, n, category); + } +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/dgettext.c psmisc-20.2.works.clean/intl/dgettext.c +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/dgettext.c 2001-04-13 23:00:42.000000000 -0500 ++++ psmisc-20.2.works.clean/intl/dgettext.c 2004-10-13 15:18:41.000000000 -0500 +@@ -1,27 +1,29 @@ + /* Implementation of the dgettext(3) function. +- Copyright (C) 1995-1997, 2000, 2001 Free Software Foundation, Inc. ++ Copyright (C) 1995-1997, 2000-2003 Free Software Foundation, Inc. + +- This program is free software; you can redistribute it and/or modify +- it 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 "gettextP.h" ++ + #include <locale.h> + +-#include "gettextP.h" + #ifdef _LIBC + # include <libintl.h> + #else +@@ -36,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); + } +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/dngettext.c psmisc-20.2.works.clean/intl/dngettext.c +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/dngettext.c 2001-04-13 23:00:43.000000000 -0500 ++++ psmisc-20.2.works.clean/intl/dngettext.c 2004-10-13 15:18:41.000000000 -0500 +@@ -1,27 +1,29 @@ + /* Implementation of the dngettext(3) function. +- Copyright (C) 1995-1997, 2000, 2001 Free Software Foundation, Inc. ++ Copyright (C) 1995-1997, 2000-2003 Free Software Foundation, Inc. + +- This program is free software; you can redistribute it and/or modify +- it 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 "gettextP.h" ++ + #include <locale.h> + +-#include "gettextP.h" + #ifdef _LIBC + # include <libintl.h> + #else +@@ -38,18 +40,15 @@ + # define DNGETTEXT __dngettext + # define DCNGETTEXT __dcngettext + #else +-# define DNGETTEXT dngettext__ +-# define DCNGETTEXT dcngettext__ ++# 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 (domainname, msgid1, msgid2, n) +- const char *domainname; +- const char *msgid1; +- const char *msgid2; +- unsigned long int n; ++DNGETTEXT (const char *domainname, ++ const char *msgid1, const char *msgid2, unsigned long int n) + { + return DCNGETTEXT (domainname, msgid1, msgid2, n, LC_MESSAGES); + } +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/eval-plural.h psmisc-20.2.works.clean/intl/eval-plural.h +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/eval-plural.h 1969-12-31 18:00:00.000000000 -0600 ++++ psmisc-20.2.works.clean/intl/eval-plural.h 2004-10-13 15:18:41.000000000 -0500 +@@ -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; ++} +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/explodename.c psmisc-20.2.works.clean/intl/explodename.c +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/explodename.c 2001-04-13 23:00:42.000000000 -0500 ++++ psmisc-20.2.works.clean/intl/explodename.c 2004-10-13 15:18:41.000000000 -0500 +@@ -1,19 +1,20 @@ +-/* Copyright (C) 1995-1998, 2000, 2001 Free Software Foundation, Inc. ++/* Copyright (C) 1995-1998, 2000-2001, 2003 Free Software Foundation, Inc. + Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995. + +- 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> +@@ -37,8 +38,7 @@ + /* @@ end of prolog @@ */ + + char * +-_nl_find_language (name) +- const char *name; ++_nl_find_language (const char *name) + { + while (name[0] != '\0' && name[0] != '_' && name[0] != '@' + && name[0] != '+' && name[0] != ',') +@@ -49,17 +49,11 @@ + + + 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; +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/finddomain.c psmisc-20.2.works.clean/intl/finddomain.c +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/finddomain.c 2001-04-13 23:00:42.000000000 -0500 ++++ psmisc-20.2.works.clean/intl/finddomain.c 2004-10-13 15:18:41.000000000 -0500 +@@ -1,20 +1,21 @@ + /* Handle list of needed message catalogs +- Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc. ++ Copyright (C) 1995-1999, 2000-2001, 2003 Free Software Foundation, Inc. + Written by Ulrich Drepper <drepper@gnu.org>, 1995. + +- 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> +@@ -46,11 +47,8 @@ + established bindings. */ + struct loaded_l10nfile * + internal_function +-_nl_find_domain (dirname, locale, domainname, domainbinding) +- const char *dirname; +- char *locale; +- const char *domainname; +- struct binding *domainbinding; ++_nl_find_domain (const char *dirname, char *locale, ++ const char *domainname, struct binding *domainbinding) + { + struct loaded_l10nfile *retval; + const char *language; +@@ -89,15 +87,14 @@ + be one data set in the list of loaded domains. */ + retval = _nl_make_l10nflist (&_nl_loaded_domains, dirname, + strlen (dirname) + 1, 0, locale, NULL, NULL, +- NULL, NULL, NULL, NULL, NULL, domainname, +- domainbinding, 0); ++ NULL, NULL, NULL, NULL, NULL, domainname, 0); + if (retval != NULL) + { + /* We know something about this locale. */ + int cnt; + + if (retval->decided == 0) +- _nl_load_domain (retval); ++ _nl_load_domain (retval, domainbinding); + + if (retval->data != NULL) + return retval; +@@ -105,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; +@@ -146,21 +143,20 @@ + retval = _nl_make_l10nflist (&_nl_loaded_domains, dirname, + strlen (dirname) + 1, mask, language, territory, + codeset, normalized_codeset, modifier, special, +- sponsor, revision, domainname, domainbinding, +- 1); ++ sponsor, revision, domainname, 1); + if (retval == NULL) + /* This means we are out of core. */ + 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; + } +@@ -179,8 +175,7 @@ + + + #ifdef _LIBC +-static void __attribute__ ((unused)) +-free_mem (void) ++libc_freeres_fn (free_mem) + { + struct loaded_l10nfile *runp = _nl_loaded_domains; + +@@ -194,6 +189,4 @@ + free (here); + } + } +- +-text_set_element (__libc_subfreeres, free_mem); + #endif +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/gettext.c psmisc-20.2.works.clean/intl/gettext.c +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/gettext.c 2001-04-13 23:00:42.000000000 -0500 ++++ psmisc-20.2.works.clean/intl/gettext.c 2004-10-13 15:18:41.000000000 -0500 +@@ -1,19 +1,20 @@ + /* Implementation of gettext(3) function. +- Copyright (C) 1995, 1997, 2000, 2001 Free Software Foundation, Inc. ++ Copyright (C) 1995, 1997, 2000-2003 Free Software Foundation, Inc. + +- This program is free software; you can redistribute it and/or modify +- it 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> +@@ -41,18 +42,17 @@ + prefix. So we have to make a difference here. */ + #ifdef _LIBC + # define GETTEXT __gettext +-# define DCGETTEXT __dcgettext ++# define DCGETTEXT INTUSE(__dcgettext) + #else +-# define GETTEXT gettext__ +-# define DCGETTEXT dcgettext__ ++# 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 DCGETTEXT (NULL, msgid, LC_MESSAGES); + } +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/gettext.h psmisc-20.2.works.clean/intl/gettext.h +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/gettext.h 2001-04-13 23:00:42.000000000 -0500 ++++ psmisc-20.2.works.clean/intl/gettext.h 2004-10-13 15:19:00.000000000 -0500 +@@ -1,101 +1,69 @@ +-/* Description of GNU message catalog format: general file layout. +- Copyright (C) 1995, 1997, 2000, 2001 Free Software Foundation, Inc. ++/* Convenience header for conditional use of GNU <libintl.h>. ++ Copyright (C) 1995-1998, 2000-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) ++ 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. +- +- You should have received a copy of the GNU General Public License +- along with this program; if not, write to the Free Software Foundation, +- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +- +-#ifndef _GETTEXT_H +-#define _GETTEXT_H 1 +- +-#if HAVE_LIMITS_H || _LIBC +-# include <limits.h> +-#endif ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Library General Public License for more details. + +-/* @@ end of prolog @@ */ ++ 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 magic number of the GNU message catalog format. */ +-#define _MAGIC 0x950412de +-#define _MAGIC_SWAPPED 0xde120495 ++#ifndef _LIBGETTEXT_H ++#define _LIBGETTEXT_H 1 + +-/* Revision number of the currently used .mo (binary) file format. */ +-#define MO_REVISION_NUMBER 0 ++/* NLS can be disabled through the configure --disable-nls option. */ ++#if ENABLE_NLS + +-/* 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. */ ++/* Get declarations of GNU message catalog functions. */ ++# include <libintl.h> + +-#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 ++/* Solaris /usr/include/locale.h includes /usr/include/libintl.h, which ++ chokes if dcgettext is defined as a macro. So include it now, to make ++ later inclusions of <locale.h> a NOP. We don't include <libintl.h> ++ as well because people using "gettext.h" will not include <libintl.h>, ++ and also including <libintl.h> would fail on SunOS 4, whereas <locale.h> ++ is OK. */ ++#if defined(__sun) ++# include <locale.h> + #endif + ++/* Disabled NLS. ++ The casts to 'const char *' serve the purpose of producing warnings ++ for invalid uses of the value returned from these functions. ++ On pre-ANSI systems without 'const', the config.h file is supposed to ++ contain "#define const". */ ++# define gettext(Msgid) ((const char *) (Msgid)) ++# define dgettext(Domainname, Msgid) ((const char *) (Msgid)) ++# define dcgettext(Domainname, Msgid, Category) ((const char *) (Msgid)) ++# define ngettext(Msgid1, Msgid2, N) \ ++ ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2)) ++# define dngettext(Domainname, Msgid1, Msgid2, N) \ ++ ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2)) ++# define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \ ++ ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2)) ++# define textdomain(Domainname) ((const char *) (Domainname)) ++# define bindtextdomain(Domainname, Dirname) ((const char *) (Dirname)) ++# define bind_textdomain_codeset(Domainname, Codeset) ((const char *) (Codeset)) + +-/* 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; +-}; ++#endif + +-/* @@ begin of epilog @@ */ ++/* A pseudo function call that serves as a marker for the automated ++ extraction of messages, but does not call gettext(). The run-time ++ translation is done at a different place in the code. ++ The argument, String, should be a literal string. Concatenated strings ++ and other string expressions won't work. ++ The macro's expansion is not parenthesized, so that it is suitable as ++ initializer for static 'char[]' or 'const char[]' variables. */ ++#define gettext_noop(String) String + +-#endif /* gettext.h */ ++#endif /* _LIBGETTEXT_H */ +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/gettextP.h psmisc-20.2.works.clean/intl/gettextP.h +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/gettextP.h 2001-04-13 23:00:42.000000000 -0500 ++++ psmisc-20.2.works.clean/intl/gettextP.h 2004-10-13 15:18:41.000000000 -0500 +@@ -1,20 +1,21 @@ + /* Header describing internals of libintl library. +- Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc. ++ 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 +@@ -31,22 +32,18 @@ + + #include "loadinfo.h" + +-#include "gettext.h" /* Get nls_uint32. */ ++#include "gmo.h" /* Get nls_uint32. */ + + /* @@ end of prolog @@ */ + +-#ifndef PARAMS +-# if __STDC__ +-# define PARAMS(args) args +-# else +-# define PARAMS(args) () +-# endif +-#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 +@@ -71,63 +68,51 @@ + #endif + + +-/* This is the representation of the expressions to determine the +- plural form. */ +-struct expression +-{ +- int nargs; /* Number of arguments. */ +- enum operator +- { +- /* Without arguments: */ +- var, /* The variable "n". */ +- num, /* Decimal number. */ +- /* Unary operators: */ +- lnot, /* Logical NOT. */ +- /* Binary operators: */ +- mult, /* Multiplication. */ +- divide, /* Division. */ +- module, /* Module operation. */ +- plus, /* Addition. */ +- minus, /* Subtraction. */ +- less_than, /* Comparison. */ +- greater_than, /* Comparison. */ +- less_or_equal, /* Comparison. */ +- greater_or_equal, /* Comparison. */ +- equal, /* Comparision for equality. */ +- not_equal, /* Comparision for inequality. */ +- land, /* Logical AND. */ +- lor, /* Logical OR. */ +- /* Ternary operators: */ +- qmop /* Question mark operator. */ +- } operation; +- union +- { +- unsigned long int num; /* Number value for `num'. */ +- struct expression *args[3]; /* Up to three arguments. */ +- } val; +-}; +- +-/* This is the data structure to pass information to the parser and get +- the result in a thread-safe way. */ +-struct parse_args ++/* In-memory representation of system dependent string. */ ++struct sysdep_string_desc + { +- const char *cp; +- struct expression *res; ++ /* 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 +@@ -155,6 +140,7 @@ + { + struct binding *next; + char *dirname; ++ int codeset_cntr; /* Incremented each time codeset changes. */ + char *codeset; + char domainname[ZERO]; + }; +@@ -164,72 +150,64 @@ + This variable is part of the external ABI of the GNU libintl. */ + extern int _nl_msg_cat_cntr; + +-struct loaded_l10nfile *_nl_find_domain PARAMS ((const char *__dirname, +- char *__locale, +- const char *__domainname, +- struct binding *__domainbinding)) ++#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 PARAMS ((struct loaded_l10nfile *__domain)) ++void _nl_load_domain (struct loaded_l10nfile *__domain, ++ struct binding *__domainbinding) + internal_function; +-void _nl_unload_domain PARAMS ((struct loaded_domain *__domain)) ++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; + +-#ifdef _LIBC +-extern char *__gettext PARAMS ((const char *__msgid)); +-extern char *__dgettext PARAMS ((const char *__domainname, +- const char *__msgid)); +-extern char *__dcgettext PARAMS ((const char *__domainname, +- const char *__msgid, int __category)); +-extern char *__ngettext PARAMS ((const char *__msgid1, const char *__msgid2, +- unsigned long int __n)); +-extern char *__dngettext PARAMS ((const char *__domainname, +- const char *__msgid1, const char *__msgid2, +- unsigned long int n)); +-extern char *__dcngettext PARAMS ((const char *__domainname, +- const char *__msgid1, const char *__msgid2, +- unsigned long int __n, int __category)); +-extern char *__dcigettext PARAMS ((const char *__domainname, +- const char *__msgid1, const char *__msgid2, +- int __plural, unsigned long int __n, +- int __category)); +-extern char *__textdomain PARAMS ((const char *__domainname)); +-extern char *__bindtextdomain PARAMS ((const char *__domainname, +- const char *__dirname)); +-extern char *__bind_textdomain_codeset PARAMS ((const char *__domainname, +- const char *__codeset)); +-#else +-extern char *gettext__ PARAMS ((const char *__msgid)); +-extern char *dgettext__ PARAMS ((const char *__domainname, +- const char *__msgid)); +-extern char *dcgettext__ PARAMS ((const char *__domainname, +- const char *__msgid, int __category)); +-extern char *ngettext__ PARAMS ((const char *__msgid1, const char *__msgid2, +- unsigned long int __n)); +-extern char *dngettext__ PARAMS ((const char *__domainname, +- const char *__msgid1, const char *__msgid2, +- unsigned long int __n)); +-extern char *dcngettext__ PARAMS ((const char *__domainname, +- const char *__msgid1, const char *__msgid2, +- unsigned long int __n, int __category)); +-extern char *dcigettext__ PARAMS ((const char *__domainname, +- const char *__msgid1, const char *__msgid2, +- int __plural, unsigned long int __n, +- int __category)); +-extern char *textdomain__ PARAMS ((const char *__domainname)); +-extern char *bindtextdomain__ PARAMS ((const char *__domainname, +- const char *__dirname)); +-extern char *bind_textdomain_codeset__ PARAMS ((const char *__domainname, +- const char *__codeset)); +-#endif ++char *_nl_find_msg (struct loaded_l10nfile *domain_file, ++ struct binding *domainbinding, const char *msgid, ++ size_t *lengthp) ++ internal_function; + + #ifdef _LIBC +-extern void __gettext_free_exp PARAMS ((struct expression *exp)) +- internal_function; +-extern int __gettextparse PARAMS ((void *arg)); ++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 +-extern void gettext_free_exp__ PARAMS ((struct expression *exp)) +- internal_function; +-extern int gettextparse__ PARAMS ((void *arg)); ++/* 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 @@ */ +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/gmo.h psmisc-20.2.works.clean/intl/gmo.h +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/gmo.h 1969-12-31 18:00:00.000000000 -0600 ++++ psmisc-20.2.works.clean/intl/gmo.h 2004-10-13 15:18:41.000000000 -0500 +@@ -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 */ +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/hash-string.h psmisc-20.2.works.clean/intl/hash-string.h +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/hash-string.h 2001-04-13 23:00:42.000000000 -0500 ++++ psmisc-20.2.works.clean/intl/hash-string.h 2004-10-13 15:18:41.000000000 -0500 +@@ -1,30 +1,23 @@ + /* Description of GNU message catalog format: string hashing function. +- Copyright (C) 1995, 1997, 1998, 2000, 2001 Free Software Foundation, Inc. ++ Copyright (C) 1995, 1997-1998, 2000-2003 Free Software Foundation, Inc. + +- This program is free software; you can redistribute it and/or modify +- it 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. */ + + /* @@ 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 + +@@ -32,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 int hash_string PARAMS ((const char *__str_param)); +- + static inline unsigned long int +-hash_string (str_param) +- const char *str_param; ++hash_string (const char *str_param) + { + unsigned long int hval, g; + const char *str = str_param; +@@ -46,7 +36,7 @@ + while (*str != '\0') + { + hval <<= 4; +- hval += (unsigned long int) *str++; ++ hval += (unsigned char) *str++; + g = hval & ((unsigned long int) 0xf << (HASHWORDBITS - 4)); + if (g != 0) + { +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/intl-compat.c psmisc-20.2.works.clean/intl/intl-compat.c +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/intl-compat.c 2001-04-13 23:00:43.000000000 -0500 ++++ psmisc-20.2.works.clean/intl/intl-compat.c 2004-10-13 15:18:41.000000000 -0500 +@@ -1,71 +1,38 @@ + /* intl-compat.c - Stub functions to call gettext functions from GNU gettext + Library. +- Copyright (C) 1995, 2000, 2001 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 "libgnuintl.h" + #include "gettextP.h" + + /* @@ end of prolog @@ */ + +-/* This file redirects the gettext functions (without prefix or suffix) to +- those defined in the included GNU gettext library (with "__" suffix). +- It is compiled into libintl when the included GNU gettext library is +- configured --with-included-gettext. +- +- This redirection works also in the case that the system C library or +- the system libintl library contain gettext/textdomain/... functions. +- If it didn't, we would need to add preprocessor level redirections to +- libgnuintl.h of the following form: +- +-# define gettext gettext__ +-# define dgettext dgettext__ +-# define dcgettext dcgettext__ +-# define ngettext ngettext__ +-# define dngettext dngettext__ +-# define dcngettext dcngettext__ +-# define textdomain textdomain__ +-# define bindtextdomain bindtextdomain__ +-# define bind_textdomain_codeset bind_textdomain_codeset__ +- +- How does this redirection work? There are two cases. +- A. When libintl.a is linked into an executable, it works because +- functions defined in the executable always override functions in +- the shared libraries. +- B. When libintl.so is used, it works because +- 1. those systems defining gettext/textdomain/... in the C library +- (namely, Solaris 2.4 and newer, and GNU libc 2.0 and newer) are +- ELF systems and define these symbols as weak, thus explicitly +- letting other shared libraries override it. +- 2. those systems defining gettext/textdomain/... in a standalone +- libintl.so library (namely, Solaris 2.3 and newer) have this +- shared library in /usr/lib, and the linker will search /usr/lib +- *after* the directory where the GNU gettext library is installed. +- +- A third case, namely when libintl.a is linked into a shared library +- whose name is not libintl.so, is not supported. In this case, on +- Solaris, when -lintl precedes the linker option for the shared library +- containing GNU gettext, the system's gettext would indeed override +- the GNU gettext. Anyone doing this kind of stuff must be clever enough +- to 1. compile libintl.a with -fPIC, 2. remove -lintl from his linker +- command line. */ ++/* 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 +@@ -79,87 +46,86 @@ + #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 * +-gettext (msgid) +- const char *msgid; ++gettext (const char *msgid) + { +- return gettext__ (msgid); ++ return libintl_gettext (msgid); + } + + ++DLL_EXPORTED + char * +-dgettext (domainname, msgid) +- const char *domainname; +- const char *msgid; ++dgettext (const char *domainname, const char *msgid) + { +- return dgettext__ (domainname, msgid); ++ return libintl_dgettext (domainname, msgid); + } + + ++DLL_EXPORTED + char * +-dcgettext (domainname, msgid, category) +- const char *domainname; +- const char *msgid; +- int category; ++dcgettext (const char *domainname, const char *msgid, int category) + { +- return dcgettext__ (domainname, msgid, category); ++ return libintl_dcgettext (domainname, msgid, category); + } + + ++DLL_EXPORTED + char * +-ngettext (msgid1, msgid2, n) +- const char *msgid1; +- const char *msgid2; +- unsigned long int n; ++ngettext (const char *msgid1, const char *msgid2, unsigned long int n) + { +- return ngettext__ (msgid1, msgid2, n); ++ return libintl_ngettext (msgid1, msgid2, n); + } + + ++DLL_EXPORTED + char * +-dngettext (domainname, msgid1, msgid2, n) +- const char *domainname; +- const char *msgid1; +- const char *msgid2; +- unsigned long int n; ++dngettext (const char *domainname, ++ const char *msgid1, const char *msgid2, unsigned long int n) + { +- return dngettext__ (domainname, msgid1, msgid2, n); ++ return libintl_dngettext (domainname, msgid1, msgid2, n); + } + + ++DLL_EXPORTED + char * +-dcngettext (domainname, msgid1, msgid2, n, category) +- const char *domainname; +- const char *msgid1; +- const char *msgid2; +- unsigned long int n; +- int category; ++dcngettext (const char *domainname, ++ const char *msgid1, const char *msgid2, unsigned long int n, ++ int category) + { +- return dcngettext__ (domainname, msgid1, msgid2, n, category); ++ return libintl_dcngettext (domainname, msgid1, msgid2, n, category); + } + + ++DLL_EXPORTED + char * +-textdomain (domainname) +- const char *domainname; ++textdomain (const char *domainname) + { +- return textdomain__ (domainname); ++ return libintl_textdomain (domainname); + } + + ++DLL_EXPORTED + char * +-bindtextdomain (domainname, dirname) +- const char *domainname; +- const char *dirname; ++bindtextdomain (const char *domainname, const char *dirname) + { +- return bindtextdomain__ (domainname, dirname); ++ return libintl_bindtextdomain (domainname, dirname); + } + + ++DLL_EXPORTED + char * +-bind_textdomain_codeset (domainname, codeset) +- const char *domainname; +- const char *codeset; ++bind_textdomain_codeset (const char *domainname, const char *codeset) + { +- return bind_textdomain_codeset__ (domainname, codeset); ++ return libintl_bind_textdomain_codeset (domainname, codeset); + } +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/l10nflist.c psmisc-20.2.works.clean/intl/l10nflist.c +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/l10nflist.c 2001-04-13 23:00:42.000000000 -0500 ++++ psmisc-20.2.works.clean/intl/l10nflist.c 2004-10-13 15:18:41.000000000 -0500 +@@ -1,19 +1,20 @@ +-/* Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc. ++/* 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 +@@ -27,11 +28,6 @@ + #endif + + #include <string.h> +-#if !HAVE_STRCHR && !defined _LIBC +-# ifndef strchr +-# define strchr index +-# endif +-#endif + + #if defined _LIBC || defined HAVE_ARGZ_H + # include <argz.h> +@@ -62,20 +58,34 @@ + # 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) +@@ -89,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) + { +@@ -113,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) + { +@@ -144,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); +@@ -161,32 +166,27 @@ + + + struct loaded_l10nfile * +-_nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, mask, language, +- territory, codeset, normalized_codeset, modifier, special, +- sponsor, revision, filename, domainbinding, 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; +- struct binding *domainbinding; +- 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) +@@ -204,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); +@@ -212,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, PATH_SEPARATOR); +- 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) +@@ -266,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) + { +@@ -281,7 +283,7 @@ + break; + } + +- last = retval; ++ lastp = &retval->next; + } + + if (retval != NULL || do_allocate == 0) +@@ -290,52 +292,68 @@ + 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->domainbinding = domainbinding; +- 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, domainbinding, +- 1); ++ sponsor, revision, filename, 1); + } + retval->successor[entries] = NULL; + +@@ -347,9 +365,7 @@ + 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; +@@ -358,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; + } + +@@ -376,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'; +@@ -396,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. */ ; +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/libgettext.h psmisc-20.2.works.clean/intl/libgettext.h +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/libgettext.h 2001-04-13 23:00:42.000000000 -0500 ++++ psmisc-20.2.works.clean/intl/libgettext.h 1969-12-31 18:00:00.000000000 -0600 +@@ -1,48 +0,0 @@ +-/* Convenience header for conditional use of GNU <libintl.h>. +- Copyright (C) 1995-1998, 2000, 2001 Free Software Foundation, Inc. +- +- This program is free software; you can redistribute it and/or modify +- it under the terms of the GNU General Public License as published by +- 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. */ +- +-#ifndef _LIBGETTEXT_H +-#define _LIBGETTEXT_H 1 +- +-/* NLS can be disabled through the configure --disable-nls option. */ +-#if ENABLE_NLS +- +-/* Get declarations of GNU message catalog functions. */ +-# include <libintl.h> +- +-#else +- +-# define gettext(Msgid) (Msgid) +-# define dgettext(Domainname, Msgid) (Msgid) +-# define dcgettext(Domainname, Msgid, Category) (Msgid) +-# define ngettext(Msgid1, Msgid2, N) \ +- ((N) == 1 ? (char *) (Msgid1) : (char *) (Msgid2)) +-# define dngettext(Domainname, Msgid1, Msgid2, N) \ +- ((N) == 1 ? (char *) (Msgid1) : (char *) (Msgid2)) +-# define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \ +- ((N) == 1 ? (char *) (Msgid1) : (char *) (Msgid2)) +-# define textdomain(Domainname) ((char *) (Domainname)) +-# define bindtextdomain(Domainname, Dirname) ((char *) (Dirname)) +-# define bind_textdomain_codeset(Domainname, Codeset) ((char *) (Codeset)) +- +-#endif +- +-/* For automatical extraction of messages sometimes no real +- translation is needed. Instead the string itself is the result. */ +-#define gettext_noop(Str) (Str) +- +-#endif /* _LIBGETTEXT_H */ +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/libgnuintl.h psmisc-20.2.works.clean/intl/libgnuintl.h +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/libgnuintl.h 2001-04-13 23:00:42.000000000 -0500 ++++ psmisc-20.2.works.clean/intl/libgnuintl.h 1969-12-31 18:00:00.000000000 -0600 +@@ -1,127 +0,0 @@ +-/* Message catalogs for internationalization. +- Copyright (C) 1995-1997, 2000, 2001 Free Software Foundation, Inc. +- +- This program is free software; you can redistribute it and/or modify +- it under the terms of the GNU General Public License as published by +- 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. */ +- +-#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 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 +-# 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 +- +-/* Resolve a platform specific conflict on DJGPP. GNU gettext takes +- precedence over _conio_gettext. */ +-#ifdef __DJGPP__ +-# undef gettext +-# define gettext gettext +-#endif +- +-#ifndef PARAMS +-# if __STDC__ || defined __cplusplus +-# define PARAMS(args) args +-# else +-# define PARAMS(args) () +-# endif +-#endif +- +-#ifdef __cplusplus +-extern "C" { +-#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). */ +-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)); +- +-/* 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)); +- +- +-/* Similar to `gettext' but select the plural form corresponding to the +- number N. */ +-extern char *ngettext PARAMS ((const char *__msgid1, const char *__msgid2, +- unsigned long int __n)); +- +-/* Similar to `dgettext' but select the plural form corresponding to the +- number N. */ +-extern char *dngettext PARAMS ((const char *__domainname, const char *__msgid1, +- const char *__msgid2, unsigned long int __n)); +- +-/* Similar to `dcgettext' but select the plural form corresponding to the +- number N. */ +-extern char *dcngettext PARAMS ((const char *__domainname, const char *__msgid1, +- const char *__msgid2, unsigned long int __n, +- 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)); +- +-/* 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)); +- +-/* Specify the character encoding in which the messages from the +- DOMAINNAME message catalog will be returned. */ +-extern char *bind_textdomain_codeset PARAMS ((const char *__domainname, +- const char *__codeset)); +- +- +-/* Optimized version of the functions above. */ +-#if defined __OPTIMIZED +-/* These are macros, but could also be inline functions. */ +- +-# define gettext(msgid) \ +- dgettext (NULL, msgid) +- +-# define dgettext(domainname, msgid) \ +- dcgettext (domainname, msgid, LC_MESSAGES) +- +-# define ngettext(msgid1, msgid2, n) \ +- dngettext (NULL, msgid1, msgid2, n) +- +-# define dngettext(domainname, msgid1, msgid2, n) \ +- dcngettext (domainname, msgid1, msgid2, n, LC_MESSAGES) +- +-#endif /* Optimizing. */ +- +- +-#ifdef __cplusplus +-} +-#endif +- +-#endif /* libintl.h */ +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/libgnuintl.h.in psmisc-20.2.works.clean/intl/libgnuintl.h.in +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/libgnuintl.h.in 1969-12-31 18:00:00.000000000 -0600 ++++ psmisc-20.2.works.clean/intl/libgnuintl.h.in 2004-10-13 15:18:41.000000000 -0500 +@@ -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 */ +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/loadinfo.h psmisc-20.2.works.clean/intl/loadinfo.h +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/loadinfo.h 2001-04-13 23:00:42.000000000 -0500 ++++ psmisc-20.2.works.clean/intl/loadinfo.h 2004-10-13 15:18:41.000000000 -0500 +@@ -1,31 +1,36 @@ +-/* Copyright (C) 1996-1999, 2000, 2001 Free Software Foundation, Inc. ++/* 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 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 _LOADINFO_H + #define _LOADINFO_H 1 + +-#ifndef PARAMS +-# if __STDC__ +-# define PARAMS(args) args +-# else +-# define PARAMS(args) () +-# endif +-#endif ++/* 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 +@@ -63,7 +68,6 @@ + struct loaded_l10nfile + { + const char *filename; +- struct binding *domainbinding; + int decided; + + const void *data; +@@ -77,39 +81,65 @@ + 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 PARAMS ((const char *codeset, +- size_t name_len)); ++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, +- struct binding *domainbinding, int do_allocate)); +- +- +-extern const char *_nl_expand_alias PARAMS ((const char *name)); +- +-/* normalized_codeset is dynamically allocated and has to be freed by +- the caller. */ +-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)); ++_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); + +-extern char *_nl_find_language PARAMS ((const char *name)); ++/* 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); + ++/* 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 char *_nl_find_msg PARAMS ((struct loaded_l10nfile *domain_file, +- const char *msgid, size_t *lengthp)) +- internal_function; ++/* 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 */ +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/loadmsgcat.c psmisc-20.2.works.clean/intl/loadmsgcat.c +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/loadmsgcat.c 2001-04-13 23:00:42.000000000 -0500 ++++ psmisc-20.2.works.clean/intl/loadmsgcat.c 2004-10-13 15:18:41.000000000 -0500 +@@ -1,19 +1,20 @@ + /* Load needed message catalogs. +- Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc. ++ Copyright (C) 1995-1999, 2000-2004 Free Software Foundation, Inc. + +- This program is free software; you can redistribute it and/or modify +- it 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 +@@ -33,17 +34,23 @@ + #include <sys/stat.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 +@@ -70,13 +77,380 @@ + # 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 @@ */ + + #ifdef _LIBC +@@ -90,16 +464,6 @@ + # define munmap __munmap + #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 PLURAL_PARSE __gettextparse +-#else +-# define PLURAL_PARSE gettextparse__ +-#endif +- + /* For those losing systems which don't have `alloca' we have to add + some additional code emulating it. */ + #ifdef HAVE_ALLOCA +@@ -126,85 +490,424 @@ + # 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; + +-#if defined __GNUC__ \ +- || (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 +- } +-}; +-static struct expression germanic_plural = ++/* Expand a system dependent string segment. Return NULL if unsupported. */ ++static const char * ++get_sysdep_segment_value (const char *name) + { +- .nargs = 2, +- .operation = not_equal, +- .val = +- { +- .args = ++ /* 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') + { +- [0] = (struct expression *) &plvar, +- [1] = (struct expression *) &plone ++ 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; ++} + +-# define INIT_GERMANIC_PLURAL() ++/* 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; + +-/* For compilers without support for ISO C 99 struct/union initializers: +- Initialization at run-time. */ +- +-static struct expression plvar; +-static struct expression plone; +-static struct expression germanic_plural; ++ /* Get the header entry. */ ++ nullentry = _nl_find_msg (domain_file, domainbinding, "", &nullentrylen); + +-static void +-init_germanic_plural () +-{ +- if (plone.val.num == 0) ++ if (nullentry != NULL) + { +- plvar.nargs = 0; +- plvar.operation = var; ++#if defined _LIBC || HAVE_ICONV ++ const char *charsetstr; + +- plone.nargs = 0; +- plone.operation = num; +- plone.val.num = 1; ++ charsetstr = strstr (nullentry, "charset="); ++ if (charsetstr != NULL) ++ { ++ size_t len; ++ char *charset; ++ const char *outcharset; + +- germanic_plural.nargs = 2; +- germanic_plural.operation = not_equal; +- germanic_plural.val.args[0] = &plvar; +- germanic_plural.val.args[1] = &plone; ++ 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; + } + +-# define INIT_GERMANIC_PLURAL() init_germanic_plural () ++/* 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 + internal_function +-_nl_load_domain (domain_file) +- struct loaded_l10nfile *domain_file; ++_nl_load_domain (struct loaded_l10nfile *domain_file, ++ struct binding *domainbinding) + { + int fd; + size_t size; +@@ -216,12 +919,16 @@ + struct mo_file_header *data = (struct mo_file_header *) -1; + int use_mmap = 0; + struct loaded_domain *domain; +- char *nullentry; +- size_t nullentrylen; ++ 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 +@@ -320,22 +1027,353 @@ + 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 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, size); +@@ -347,154 +1385,28 @@ + return; + } + +- /* Now 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. */ +-#ifdef _LIBC +- domain->conv = (__gconv_t) -1; +-#else +-# if HAVE_ICONV +- domain->conv = (iconv_t) -1; +-# endif +-#endif +- domain->conv_tab = NULL; +- nullentry = _nl_find_msg (domain_file, "", &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 (domain_file->domainbinding != NULL +- && domain_file->domainbinding->codeset != NULL) +- outcharset = domain_file->domainbinding->codeset; +- else +- { +- outcharset = getenv ("OUTPUT_CHARSET"); +- if (outcharset == NULL || outcharset[0] == '\0') +- { +-# ifdef _LIBC +- outcharset = (*_nl_current[LC_CTYPE])->values[_NL_ITEM_INDEX (CODESET)].string; +-# 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 +- domain->conv = iconv_open (outcharset, charset); +-# endif +-# endif +- +- freea (charset); +- } +-#endif /* _LIBC || HAVE_ICONV */ +- } ++ /* 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. */ +- 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 +- { +- /* First get the number. */ +- char *endp; +- unsigned long int n; +- struct parse_args args; +- +- nplurals += 9; +- while (*nplurals != '\0' && isspace (*nplurals)) +- ++nplurals; +-#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 +- domain->nplurals = n; +- if (nplurals == endp) +- goto no_plural; +- +- /* 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; +- domain->plural = 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 (); +- domain->plural = &germanic_plural; +- domain->nplurals = 2; +- } ++ EXTRACT_PLURAL_EXPRESSION (nullentry, &domain->plural, &domain->nplurals); + } + + + #ifdef _LIBC + void + internal_function +-_nl_unload_domain (domain) +- struct loaded_domain *domain; ++_nl_unload_domain (struct loaded_domain *domain) + { +- if (domain->plural != &germanic_plural) ++ if (domain->plural != &__gettext_germanic_plural) + __gettext_free_exp (domain->plural); + +- if (domain->conv_tab != NULL && domain->conv_tab != (char **) -1) +- free (domain->conv_tab); ++ _nl_free_domain_conv (domain); + +- if (domain->conv != (__gconv_t) -1) +- __gconv_close (domain->conv); ++ if (domain->malloced) ++ free (domain->malloced); + + # ifdef _POSIX_MAPPED_FILES + if (domain->use_mmap) +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/localcharset.c psmisc-20.2.works.clean/intl/localcharset.c +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/localcharset.c 2001-04-13 23:00:43.000000000 -0500 ++++ psmisc-20.2.works.clean/intl/localcharset.c 2004-10-13 15:18:41.000000000 -0500 +@@ -1,6 +1,6 @@ + /* Determine a canonical name for the current locale's character encoding. + +- Copyright (C) 2000-2001 Free Software Foundation, Inc. ++ Copyright (C) 2000-2003 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published +@@ -17,12 +17,15 @@ + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + USA. */ + +-/* Written by Bruno Haible <haible@clisp.cons.org>. */ ++/* 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 +@@ -42,7 +45,12 @@ + # define WIN32 + #endif + +-#ifndef WIN32 ++#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 +@@ -50,10 +58,25 @@ + # include <locale.h> + # endif + # endif +-#else /* WIN32 */ ++#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 '/' +@@ -63,6 +86,11 @@ + # 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 +@@ -75,20 +103,20 @@ + /* 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 char * volatile charset_aliases; ++static const char * volatile charset_aliases; + + /* Return a pointer to the contents of the charset.alias file. */ + static const char * + get_charset_aliases () + { +- char *cp; ++ const char *cp; + + cp = charset_aliases; + if (cp == NULL) + { +-#ifndef WIN32 ++#if !(defined VMS || defined WIN32) + FILE *fp; +- const char *dir = LIBDIR; ++ const char *dir = relocate (LIBDIR); + const char *base = "charset.alias"; + char *file_name; + +@@ -138,19 +166,19 @@ + continue; + } + ungetc (c, fp); +- if (fscanf(fp, "%50s %50s", buf1, buf2) < 2) ++ 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 = malloc (res_size + 1); ++ res_ptr = (char *) malloc (res_size + 1); + } + else + { + res_size += l1 + 1 + l2 + 1; +- res_ptr = realloc (res_ptr, res_size + 1); ++ res_ptr = (char *) realloc (res_ptr, res_size + 1); + } + if (res_ptr == NULL) + { +@@ -174,14 +202,54 @@ + if (file_name != NULL) + free (file_name); + +-#else /* WIN32 */ ++#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"; ++ "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; +@@ -205,7 +273,7 @@ + const char *codeset; + const char *aliases; + +-#ifndef WIN32 ++#if !(defined WIN32 || defined OS2) + + # if HAVE_LANGINFO_CODESET + +@@ -242,14 +310,67 @@ + + # endif + +-#else /* WIN32 */ ++#elif defined WIN32 + + static char buf[2 + 10 + 1]; + +- /* Win32 has a function returning the locale's codepage as a number. */ ++ /* 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) +@@ -267,5 +388,11 @@ + 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; + } +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/localcharset.h psmisc-20.2.works.clean/intl/localcharset.h +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/localcharset.h 1969-12-31 18:00:00.000000000 -0600 ++++ psmisc-20.2.works.clean/intl/localcharset.h 2004-10-13 15:18:41.000000000 -0500 +@@ -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 */ +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/locale.alias psmisc-20.2.works.clean/intl/locale.alias +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/locale.alias 2001-04-13 23:00:42.000000000 -0500 ++++ psmisc-20.2.works.clean/intl/locale.alias 2004-10-13 15:18:41.000000000 -0500 +@@ -1,19 +1,20 @@ + # Locale name alias data base. +-# Copyright (C) 1996,1997,1998,1999,2000,2001 Free Software Foundation, Inc. ++# Copyright (C) 1996-2001,2003 Free Software Foundation, Inc. + # +-# This program is free software; you can redistribute it and/or modify +-# it 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. + + # The format of this file is the same as for the corresponding file of + # the X Window System, which normally can be found in +@@ -28,8 +29,8 @@ + + # Packages using this file: + +-bokmal no_NO.ISO-8859-1 +-bokml no_NO.ISO-8859-1 ++bokmal nb_NO.ISO-8859-1 ++bokml nb_NO.ISO-8859-1 + catalan ca_ES.ISO-8859-1 + croatian hr_HR.ISO-8859-2 + czech cs_CZ.ISO-8859-2 +@@ -46,7 +47,7 @@ + galician gl_ES.ISO-8859-1 + german de_DE.ISO-8859-1 + greek el_GR.ISO-8859-7 +-hebrew iw_IL.ISO-8859-8 ++hebrew he_IL.ISO-8859-8 + hrvatski hr_HR.ISO-8859-2 + hungarian hu_HU.ISO-8859-2 + icelandic is_IS.ISO-8859-1 +@@ -60,9 +61,9 @@ + korean.euc ko_KR.eucKR + ko_KR ko_KR.eucKR + lithuanian lt_LT.ISO-8859-13 +-nb_NO no_NO.ISO-8859-1 +-nb_NO.ISO-8859-1 no_NO.ISO-8859-1 +-norwegian no_NO.ISO-8859-1 ++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 +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/localealias.c psmisc-20.2.works.clean/intl/localealias.c +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/localealias.c 2001-04-13 23:00:42.000000000 -0500 ++++ psmisc-20.2.works.clean/intl/localealias.c 2004-10-13 15:18:41.000000000 -0500 +@@ -1,19 +1,20 @@ + /* Handle aliases for locale names. +- Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc. ++ 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 +@@ -28,36 +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 + + #include <stdlib.h> +- + #include <string.h> +-#if !HAVE_STRCHR && !defined _LIBC +-# ifndef strchr +-# define strchr index +-# endif +-#endif + + #include "gettextP.h" + ++#if ENABLE_RELOCATABLE ++# include "relocatable.h" ++#else ++# define relocate(pathname) (pathname) ++#endif ++ + /* @@ end of prolog @@ */ + + #ifdef _LIBC +@@ -70,6 +80,7 @@ + # 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> +@@ -81,6 +92,15 @@ + # 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 losing systems which don't have `alloca' we have to add + some additional code emulating it. */ + #ifdef HAVE_ALLOCA +@@ -90,11 +110,11 @@ + # define freea(p) free (p) + #endif + +-#if defined _LIBC_REENTRANT || defined HAVE_FGETS_UNLOCKED ++#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 || defined HAVE_FEOF_UNLOCKED ++#if defined _LIBC_REENTRANT || HAVE_DECL_FEOF_UNLOCKED + # undef feof + # define feof(s) feof_unlocked (s) + #endif +@@ -107,27 +127,30 @@ + }; + + +-static char *string_space; ++#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; +-static struct alias_map *map; ++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 size_t read_alias_file (const char *fname, int fname_len) + internal_function; +-static int extend_alias_table PARAMS ((void)); +-static int alias_compare PARAMS ((const struct alias_map *map1, +- const struct alias_map *map2)); ++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; +@@ -136,6 +159,9 @@ + __libc_lock_lock (lock); + #endif + ++ if (locale_alias_path == NULL) ++ locale_alias_path = LOCALE_ALIAS_PATH; ++ + do + { + struct alias_map item; +@@ -145,8 +171,8 @@ + 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; +@@ -188,9 +214,7 @@ + + static size_t + internal_function +-read_alias_file (fname, fname_len) +- const char *fname; +- int fname_len; ++read_alias_file (const char *fname, int fname_len) + { + FILE *fp; + char *full_fname; +@@ -206,58 +230,52 @@ + 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) + 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, sizeof buf, fp) == NULL) ++ if (FGETS (buf, sizeof buf, fp) == NULL) + /* EOF reached. */ + break; + +- /* Possibly not the whole line fits into the buffer. Ignore +- the rest of the line. */ +- if (strchr (buf, '\n') == NULL) +- { +- char altbuf[BUFSIZ]; +- do +- if (fgets (altbuf, sizeof altbuf, fp) == NULL) +- /* Make sure the inner loop will be left. The outer loop +- will exit at the `feof' test. */ +- break; +- while (strchr (altbuf, '\n') == NULL); +- } +- + 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') +@@ -266,7 +284,7 @@ + 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') +@@ -324,6 +342,14 @@ + ++added; + } + } ++ ++ /* Possibly not the whole line fits into the buffer. Ignore ++ the rest of the line. */ ++ 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 +@@ -332,7 +358,7 @@ + + 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); + + return added; + } +@@ -357,23 +383,8 @@ + } + + +-#ifdef _LIBC +-static void __attribute__ ((unused)) +-free_mem (void) +-{ +- if (string_space != NULL) +- free (string_space); +- if (map != NULL) +- free (map); +-} +-text_set_element (__libc_subfreeres, free_mem); +-#endif +- +- + 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); +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/localename.c psmisc-20.2.works.clean/intl/localename.c +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/localename.c 1969-12-31 18:00:00.000000000 -0600 ++++ psmisc-20.2.works.clean/intl/localename.c 2004-10-13 15:18:41.000000000 -0500 +@@ -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 ++} +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/log.c psmisc-20.2.works.clean/intl/log.c +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/log.c 1969-12-31 18:00:00.000000000 -0600 ++++ psmisc-20.2.works.clean/intl/log.c 2004-10-13 15:18:41.000000000 -0500 +@@ -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); ++} +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/ngettext.c psmisc-20.2.works.clean/intl/ngettext.c +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/ngettext.c 2001-04-13 23:00:43.000000000 -0500 ++++ psmisc-20.2.works.clean/intl/ngettext.c 2004-10-13 15:18:41.000000000 -0500 +@@ -1,19 +1,20 @@ + /* Implementation of ngettext(3) function. +- Copyright (C) 1995, 1997, 2000, 2001 Free Software Foundation, Inc. ++ Copyright (C) 1995, 1997, 2000-2003 Free Software Foundation, Inc. + +- This program is free software; you can redistribute it and/or modify +- it 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> +@@ -45,18 +46,15 @@ + # define NGETTEXT __ngettext + # define DCNGETTEXT __dcngettext + #else +-# define NGETTEXT ngettext__ +-# define DCNGETTEXT dcngettext__ ++# 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 (msgid1, msgid2, n) +- const char *msgid1; +- const char *msgid2; +- unsigned long int n; ++NGETTEXT (const char *msgid1, const char *msgid2, unsigned long int n) + { + return DCNGETTEXT (NULL, msgid1, msgid2, n, LC_MESSAGES); + } +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/os2compat.c psmisc-20.2.works.clean/intl/os2compat.c +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/os2compat.c 1969-12-31 18:00:00.000000000 -0600 ++++ psmisc-20.2.works.clean/intl/os2compat.c 2004-10-13 15:18:41.000000000 -0500 +@@ -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); ++} +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/os2compat.h psmisc-20.2.works.clean/intl/os2compat.h +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/os2compat.h 1969-12-31 18:00:00.000000000 -0600 ++++ psmisc-20.2.works.clean/intl/os2compat.h 2004-10-13 15:18:41.000000000 -0500 +@@ -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) +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/osdep.c psmisc-20.2.works.clean/intl/osdep.c +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/osdep.c 1969-12-31 18:00:00.000000000 -0600 ++++ psmisc-20.2.works.clean/intl/osdep.c 2004-10-13 15:18:41.000000000 -0500 +@@ -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 +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/plural-exp.c psmisc-20.2.works.clean/intl/plural-exp.c +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/plural-exp.c 1969-12-31 18:00:00.000000000 -0600 ++++ psmisc-20.2.works.clean/intl/plural-exp.c 2004-10-13 15:18:41.000000000 -0500 +@@ -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; ++ } ++} +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/plural-exp.h psmisc-20.2.works.clean/intl/plural-exp.h +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/plural-exp.h 1969-12-31 18:00:00.000000000 -0600 ++++ psmisc-20.2.works.clean/intl/plural-exp.h 2004-10-13 15:18:41.000000000 -0500 +@@ -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 */ +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/plural.c psmisc-20.2.works.clean/intl/plural.c +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/plural.c 2001-10-17 17:05:25.000000000 -0500 ++++ psmisc-20.2.works.clean/intl/plural.c 2004-10-13 15:18:43.000000000 -0500 +@@ -1,6 +1,5 @@ +- +-/* A Bison parser, made from plural.y +- by GNU Bison version 1.28 */ ++/* A Bison parser, made from plural.y ++ by GNU bison 1.35. */ + + #define YYBISON 1 /* Identify Bison output. */ + +@@ -11,31 +10,32 @@ + #define yychar __gettextchar + #define yydebug __gettextdebug + #define yynerrs __gettextnerrs +-#define EQUOP2 257 +-#define CMPOP2 258 +-#define ADDOP2 259 +-#define MULOP2 260 +-#define NUMBER 261 ++# 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 Free Software Foundation, Inc. ++ 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 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. */ + + /* 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 +@@ -49,54 +49,39 @@ + # include <config.h> + #endif + ++#include <stddef.h> + #include <stdlib.h> +-#include "gettextP.h" ++#include "plural-exp.h" + +-/* 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 FREE_EXPRESSION __gettext_free_exp +-#else +-# define FREE_EXPRESSION gettext_free_exp__ +-# define __gettextparse gettextparse__ ++/* 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 52 "plural.y" ++#line 49 "plural.y" ++#ifndef YYSTYPE + typedef union { + unsigned long int num; + enum operator op; + struct expression *exp; +-} YYSTYPE; +-#line 58 "plural.y" ++} yystype; ++# define YYSTYPE yystype ++# define YYSTYPE_IS_TRIVIAL 1 ++#endif ++#line 55 "plural.y" + + /* Prototypes for local functions. */ +-static struct expression *new_exp PARAMS ((int nargs, enum operator op, +- struct expression * const *args)); +-static inline struct expression *new_exp_0 PARAMS ((enum operator op)); +-static inline struct expression *new_exp_1 PARAMS ((enum operator op, +- struct expression *right)); +-static struct expression *new_exp_2 PARAMS ((enum operator op, +- struct expression *left, +- struct expression *right)); +-static inline struct expression *new_exp_3 PARAMS ((enum operator op, +- struct expression *bexp, +- struct expression *tbranch, +- struct expression *fbranch)); +-static int yylex PARAMS ((YYSTYPE *lval, const char **pexp)); +-static void yyerror PARAMS ((const char *str)); ++static int yylex (YYSTYPE *lval, const char **pexp); ++static void yyerror (const char *str); + + /* Allocation of expressions. */ + + static struct expression * +-new_exp (nargs, op, args) +- int nargs; +- enum operator op; +- struct expression * const *args; ++new_exp (int nargs, enum operator op, struct expression * const *args) + { + int i; + struct expression *newp; +@@ -125,16 +110,13 @@ + } + + static inline struct expression * +-new_exp_0 (op) +- enum operator op; ++new_exp_0 (enum operator op) + { + return new_exp (0, op, NULL); + } + + static inline struct expression * +-new_exp_1 (op, right) +- enum operator op; +- struct expression *right; ++new_exp_1 (enum operator op, struct expression *right) + { + struct expression *args[1]; + +@@ -143,10 +125,7 @@ + } + + static struct expression * +-new_exp_2 (op, left, right) +- enum operator op; +- struct expression *left; +- struct expression *right; ++new_exp_2 (enum operator op, struct expression *left, struct expression *right) + { + struct expression *args[2]; + +@@ -156,11 +135,8 @@ + } + + static inline struct expression * +-new_exp_3 (op, bexp, tbranch, fbranch) +- enum operator op; +- struct expression *bexp; +- struct expression *tbranch; +- struct expression *fbranch; ++new_exp_3 (enum operator op, struct expression *bexp, ++ struct expression *tbranch, struct expression *fbranch) + { + struct expression *args[3]; + +@@ -170,12 +146,8 @@ + return new_exp (3, op, args); + } + +-#include <stdio.h> +- +-#ifndef __cplusplus +-#ifndef __STDC__ +-#define const +-#endif ++#ifndef YYDEBUG ++# define YYDEBUG 0 + #endif + + +@@ -184,129 +156,152 @@ + #define YYFLAG -32768 + #define YYNTBASE 16 + ++/* YYTRANSLATE(YYLEX) -- Bison token number corresponding to YYLEX. */ + #define YYTRANSLATE(x) ((unsigned)(x) <= 261 ? yytranslate[x] : 18) + +-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 ++/* 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 != 0 +-static const short yyprhs[] = { 0, +- 0, 2, 8, 12, 16, 20, 24, 28, 32, 35, +- 37, 39 ++#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 ++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 != 0 +-static const short yyrline[] = { 0, +- 177, 185, 189, 193, 197, 201, 205, 209, 213, 217, +- 221, 226 ++#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 != 0 || defined (YYERROR_VERBOSE) ++#if (YYDEBUG) || defined YYERROR_VERBOSE + +-static const char * const yytname[] = { "$","error","$undefined.","'?'","'|'", +-"'&'","EQUOP2","CMPOP2","ADDOP2","MULOP2","'!'","NUMBER","':'","'n'","'('","')'", +-"start","exp", NULL ++/* 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 + +-static const short yyr1[] = { 0, +- 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, +- 17, 17 ++/* 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 + }; + +-static const short yyr2[] = { 0, +- 1, 5, 3, 3, 3, 3, 3, 3, 2, 1, +- 1, 3 ++/* 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 + }; + +-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 ++/* 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 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 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 ++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 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 ++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/share/bison/bison.simple" +-/* This file comes from bison-1.28. */ ++#line 3 "/usr/local/share/bison/bison.simple" + + /* Skeleton output parser for bison, +- Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc. ++ ++ 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 +@@ -328,62 +323,131 @@ + 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. */ ++/* 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. */ + +-#ifndef YYSTACK_USE_ALLOCA +-#ifdef alloca +-#define YYSTACK_USE_ALLOCA +-#else /* alloca not defined */ +-#ifdef __GNUC__ +-#define YYSTACK_USE_ALLOCA +-#define alloca __builtin_alloca +-#else /* not GNU C. */ +-#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386)) +-#define YYSTACK_USE_ALLOCA +-#include <alloca.h> +-#else /* not sparc */ +-/* We think this test detects Watcom and Microsoft C. */ +-/* This used to test MSDOS, but that is a bad idea +- since that symbol is in the user namespace. */ +-#if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__) +-#if 0 /* No need for malloc.h, which pollutes the namespace; +- instead, just don't use alloca. */ +-#include <malloc.h> +-#endif +-#else /* not MSDOS, or __TURBOC__ */ +-#if defined(_AIX) +-/* I don't know what this was needed for, but it pollutes the namespace. +- So I turned it off. rms, 2 May 1997. */ +-/* #include <malloc.h> */ +- #pragma alloca +-#define YYSTACK_USE_ALLOCA +-#else /* not MSDOS, or __TURBOC__, or _AIX */ +-#if 0 +-#ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up, +- and on HPUX 10. Eventually we can turn this on. */ +-#define YYSTACK_USE_ALLOCA +-#define alloca __builtin_alloca +-#endif /* __hpux */ +-#endif +-#endif /* not _AIX */ +-#endif /* not MSDOS, or __TURBOC__ */ +-#endif /* not sparc */ +-#endif /* not GNU C */ +-#endif /* alloca not defined */ +-#endif /* YYSTACK_USE_ALLOCA not defined */ ++/* 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) + +-#ifdef YYSTACK_USE_ALLOCA +-#define YYSTACK_ALLOC alloca +-#else +-#define YYSTACK_ALLOC malloc + #endif + +-/* Note: there must be only one dollar sign in this file. +- It is replaced by the list of actions, each action +- as one case of the switch. */ ++ ++#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) +@@ -392,131 +456,161 @@ + #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. ++/* 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) \ ++#define YYBACKUP(Token, Value) \ + do \ + if (yychar == YYEMPTY && yylen == 1) \ +- { yychar = (token), yylval = (value); \ ++ { \ ++ yychar = (Token); \ ++ yylval = (Value); \ + yychar1 = YYTRANSLATE (yychar); \ + YYPOPSTACK; \ + goto yybackup; \ + } \ + else \ +- { yyerror ("syntax error: cannot back up"); YYERROR; } \ ++ { \ ++ yyerror ("syntax error: cannot back up"); \ ++ YYERROR; \ ++ } \ + while (0) + + #define YYTERROR 1 + #define YYERRCODE 256 + +-#ifndef YYPURE +-#define YYLEX yylex() +-#endif + +-#ifdef YYPURE +-#ifdef YYLSP_NEEDED +-#ifdef YYLEX_PARAM +-#define YYLEX yylex(&yylval, &yylloc, YYLEX_PARAM) +-#else +-#define YYLEX yylex(&yylval, &yylloc) +-#endif +-#else /* not YYLSP_NEEDED */ +-#ifdef YYLEX_PARAM +-#define YYLEX yylex(&yylval, YYLEX_PARAM) +-#else +-#define YYLEX yylex(&yylval) +-#endif +-#endif /* not YYLSP_NEEDED */ ++/* 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 + +-/* If nonreentrant, generate the variables here */ + +-#ifndef YYPURE ++/* YYLEX -- calling `yylex' with the right arguments. */ + +-int yychar; /* the lookahead symbol */ +-YYSTYPE yylval; /* the semantic value of the */ +- /* lookahead symbol */ ++#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 */ + +-#ifdef YYLSP_NEEDED +-YYLTYPE yylloc; /* location data for the lookahead */ +- /* symbol */ +-#endif + +-int yynerrs; /* number of parse errors so far */ +-#endif /* not YYPURE */ ++/* Enable debugging if requested. */ ++#if YYDEBUG + +-#if YYDEBUG != 0 +-int yydebug; /* nonzero means print parse trace */ +-/* Since this is uninitialized, it does not stop multiple parsers +- from coexisting. */ +-#endif ++# ifndef YYFPRINTF ++# include <stdio.h> /* INFRINGES ON USER NAME SPACE */ ++# define YYFPRINTF fprintf ++# endif + +-/* YYINITDEPTH indicates the initial size of the parser's stacks */ ++# 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 ++# define YYINITDEPTH 200 + #endif + +-/* YYMAXDEPTH is the maximum size the stacks can grow to +- (effective only if the built-in stack extension method is used). */ ++/* 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 ++# undef YYMAXDEPTH + #endif + + #ifndef YYMAXDEPTH +-#define YYMAXDEPTH 10000 ++# define YYMAXDEPTH 10000 + #endif + +-/* Define __yy_memcpy. Note that the size argument +- should be passed with type unsigned int, because that is what the non-GCC +- definitions require. With GCC, __builtin_memcpy takes an arg +- of type size_t, but it can handle unsigned int. */ +- +-#if __GNUC__ > 1 /* GNU C and GNU C++ define this. */ +-#define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT) +-#else /* not GNU C or C++ */ +-#ifndef __cplusplus ++#ifdef YYERROR_VERBOSE + +-/* This is the most reliable way to avoid incompatibilities +- in available built-in functions on various systems. */ +-static void +-__yy_memcpy (to, from, count) +- char *to; +- char *from; +- unsigned int count; ++# 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 char *f = from; +- register char *t = to; +- register int i = count; ++ register const char *yys = yystr; + +- while (i-- > 0) +- *t++ = *f++; +-} ++ while (*yys++ != '\0') ++ continue; + +-#else /* __cplusplus */ ++ return yys - yystr - 1; ++} ++# endif ++# endif + +-/* This is the most reliable way to avoid incompatibilities +- in available built-in functions on various systems. */ +-static void +-__yy_memcpy (char *to, char *from, unsigned int count) ++# 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 *t = to; +- register char *f = from; +- register int i = count; ++ register char *yyd = yydest; ++ register const char *yys = yysrc; + +- while (i-- > 0) +- *t++ = *f++; +-} ++ while ((*yyd++ = *yys++) != '\0') ++ continue; + +-#endif ++ return yyd - 1; ++} ++# endif ++# endif + #endif + +-#line 217 "/usr/share/bison/bison.simple" ++#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 *. +@@ -525,76 +619,121 @@ + to the proper pointer type. */ + + #ifdef YYPARSE_PARAM +-#ifdef __cplusplus +-#define YYPARSE_PARAM_ARG void *YYPARSE_PARAM +-#define YYPARSE_PARAM_DECL +-#else /* not __cplusplus */ +-#define YYPARSE_PARAM_ARG YYPARSE_PARAM +-#define YYPARSE_PARAM_DECL void *YYPARSE_PARAM; +-#endif /* not __cplusplus */ +-#else /* not YYPARSE_PARAM */ +-#define YYPARSE_PARAM_ARG +-#define YYPARSE_PARAM_DECL +-#endif /* not 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 ++# ifdef YYPARSE_PARAM + int yyparse (void *); +-#else ++# 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 (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; +- register short *yyssp; +- register YYSTYPE *yyvsp; +- int yyerrstatus; /* number of tokens to shift before error messages enabled */ +- int yychar1 = 0; /* lookahead token as an internal (translated) token number */ ++ int yyresult; ++ /* Number of tokens to shift before error messages enabled. */ ++ int yyerrstatus; ++ /* Lookahead token as an internal (translated) token number. */ ++ int yychar1 = 0; + +- short yyssa[YYINITDEPTH]; /* the state stack */ +- YYSTYPE yyvsa[YYINITDEPTH]; /* the semantic value stack */ ++ /* Three stacks and their tools: ++ `yyss': related to states, ++ `yyvs': related to semantic values, ++ `yyls': related to locations. + +- short *yyss = yyssa; /* refer to the stacks thru separate pointers */ +- YYSTYPE *yyvs = yyvsa; /* to allow yyoverflow to reallocate them elsewhere */ ++ Refer to the stacks thru separate pointers, to allow yyoverflow ++ to reallocate them elsewhere. */ + +-#ifdef YYLSP_NEEDED +- YYLTYPE yylsa[YYINITDEPTH]; /* the location stack */ ++ /* 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 + +-#define YYPOPSTACK (yyvsp--, yyssp--, yylsp--) ++#if YYLSP_NEEDED ++# define YYPOPSTACK (yyvsp--, yyssp--, yylsp--) + #else +-#define YYPOPSTACK (yyvsp--, yyssp--) ++# define YYPOPSTACK (yyvsp--, yyssp--) + #endif + +- int yystacksize = YYINITDEPTH; +- int yyfree_stacks = 0; ++ YYSIZE_T yystacksize = YYINITDEPTH; + +-#ifdef YYPURE +- int yychar; +- YYSTYPE yylval; +- int yynerrs; +-#ifdef YYLSP_NEEDED +- YYLTYPE yylloc; +-#endif +-#endif + +- YYSTYPE yyval; /* the variable used to return */ +- /* semantic values from the action */ +- /* routines */ ++ /* 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; + +-#if YYDEBUG != 0 +- if (yydebug) +- fprintf(stderr, "Starting parse\n"); +-#endif ++ YYDPRINTF ((stderr, "Starting parse\n")); + + yystate = 0; + yyerrstatus = 0; +@@ -606,110 +745,110 @@ + so that they stay on the same level as the state stack. + The wasted elements are never initialized. */ + +- yyssp = yyss - 1; ++ yyssp = yyss; + yyvsp = yyvs; +-#ifdef YYLSP_NEEDED ++#if YYLSP_NEEDED + yylsp = yyls; + #endif ++ goto yysetstate; + +-/* Push a new state, which is found in yystate . */ +-/* In all cases, when you get here, the value and location stacks +- have just been pushed. so pushing a state here evens the stacks. */ +-yynewstate: ++/*------------------------------------------------------------. ++| 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++; + +- *++yyssp = yystate; ++ yysetstate: ++ *yyssp = yystate; + + if (yyssp >= yyss + yystacksize - 1) + { +- /* 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; +-#ifdef YYLSP_NEEDED +- YYLTYPE *yyls1 = yyls; +-#endif +- + /* Get the current used size of the three stacks, in elements. */ +- int size = yyssp - yyss + 1; ++ YYSIZE_T yysize = yyssp - yyss + 1; + + #ifdef yyoverflow +- /* Each stack pointer address is followed by the size of +- the data in use in that stack, in bytes. */ +-#ifdef YYLSP_NEEDED +- /* 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, size * sizeof (*yyssp), +- &yyvs1, size * sizeof (*yyvsp), +- &yyls1, size * sizeof (*yylsp), +- &yystacksize); +-#else +- yyoverflow("parser stack overflow", +- &yyss1, size * sizeof (*yyssp), +- &yyvs1, size * sizeof (*yyvsp), +- &yystacksize); +-#endif ++ { ++ /* 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; + +- yyss = yyss1; yyvs = yyvs1; +-#ifdef YYLSP_NEEDED +- yyls = yyls1; +-#endif ++ /* 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) +- { +- yyerror("parser stack overflow"); +- if (yyfree_stacks) +- { +- free (yyss); +- free (yyvs); +-#ifdef YYLSP_NEEDED +- free (yyls); +-#endif +- } +- return 2; +- } ++ goto yyoverflowlab; + yystacksize *= 2; + if (yystacksize > YYMAXDEPTH) + yystacksize = YYMAXDEPTH; +-#ifndef YYSTACK_USE_ALLOCA +- yyfree_stacks = 1; +-#endif +- yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp)); +- __yy_memcpy ((char *)yyss, (char *)yyss1, +- size * (unsigned int) sizeof (*yyssp)); +- yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp)); +- __yy_memcpy ((char *)yyvs, (char *)yyvs1, +- size * (unsigned int) sizeof (*yyvsp)); +-#ifdef YYLSP_NEEDED +- yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp)); +- __yy_memcpy ((char *)yyls, (char *)yyls1, +- size * (unsigned int) sizeof (*yylsp)); +-#endif ++ ++ { ++ 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 + size - 1; +- yyvsp = yyvs + size - 1; +-#ifdef YYLSP_NEEDED +- yylsp = yyls + size - 1; ++ yyssp = yyss + yysize - 1; ++ yyvsp = yyvs + yysize - 1; ++#if YYLSP_NEEDED ++ yylsp = yyls + yysize - 1; + #endif + +-#if YYDEBUG != 0 +- if (yydebug) +- fprintf(stderr, "Stack size increased to %d\n", yystacksize); +-#endif ++ YYDPRINTF ((stderr, "Stack size increased to %lu\n", ++ (unsigned long int) yystacksize)); + + if (yyssp >= yyss + yystacksize - 1) + YYABORT; + } + +-#if YYDEBUG != 0 +- if (yydebug) +- fprintf(stderr, "Entering state %d\n", yystate); +-#endif ++ YYDPRINTF ((stderr, "Entering state %d\n", yystate)); + + goto yybackup; +- yybackup: ++ ++ ++/*-----------. ++| yybackup. | ++`-----------*/ ++yybackup: + + /* Do appropriate processing given the current state. */ + /* Read a lookahead token if we need one and don't already have one. */ +@@ -728,10 +867,7 @@ + + if (yychar == YYEMPTY) + { +-#if YYDEBUG != 0 +- if (yydebug) +- fprintf(stderr, "Reading a token: "); +-#endif ++ YYDPRINTF ((stderr, "Reading a token: ")); + yychar = YYLEX; + } + +@@ -742,25 +878,25 @@ + yychar1 = 0; + yychar = YYEOF; /* Don't call YYLEX any more */ + +-#if YYDEBUG != 0 +- if (yydebug) +- fprintf(stderr, "Now at end of input.\n"); +-#endif ++ YYDPRINTF ((stderr, "Now at end of input.\n")); + } + else + { +- yychar1 = YYTRANSLATE(yychar); ++ yychar1 = YYTRANSLATE (yychar); + +-#if YYDEBUG != 0 ++#if YYDEBUG ++ /* We have to keep this `#if YYDEBUG', since we use variables ++ which are defined only if `YYDEBUG' is set. */ + if (yydebug) + { +- fprintf (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 ++ 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 +- fprintf (stderr, ")\n"); ++# endif ++ YYFPRINTF (stderr, ")\n"); + } + #endif + } +@@ -792,177 +928,185 @@ + YYACCEPT; + + /* Shift the lookahead token. */ +- +-#if YYDEBUG != 0 +- if (yydebug) +- fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]); +-#endif ++ 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; +-#ifdef YYLSP_NEEDED ++#if YYLSP_NEEDED + *++yylsp = yylloc; + #endif + +- /* count tokens shifted since error; after three, turn off error status. */ +- if (yyerrstatus) yyerrstatus--; ++ /* Count tokens shifted since error; after three, turn off error ++ status. */ ++ if (yyerrstatus) ++ yyerrstatus--; + + yystate = yyn; + goto yynewstate; + +-/* Do the default action for the current state. */ +-yydefault: + ++/*-----------------------------------------------------------. ++| yydefault -- do the default action for the current state. | ++`-----------------------------------------------------------*/ ++yydefault: + yyn = yydefact[yystate]; + if (yyn == 0) + goto yyerrlab; ++ goto yyreduce; + +-/* Do a reduction. yyn is the number of a rule to reduce with. */ ++ ++/*-----------------------------. ++| yyreduce -- Do a reduction. | ++`-----------------------------*/ + yyreduce: ++ /* yyn is the number of a rule to reduce with. */ + yylen = yyr2[yyn]; +- if (yylen > 0) +- yyval = yyvsp[1-yylen]; /* implement default value of the action */ + +-#if YYDEBUG != 0 ++ /* 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 i; ++ int yyi; + +- fprintf (stderr, "Reducing via rule %d (line %d), ", +- yyn, yyrline[yyn]); ++ YYFPRINTF (stderr, "Reducing via rule %d (line %d), ", ++ yyn, yyrline[yyn]); + + /* Print the symbols being reduced, and their result. */ +- for (i = yyprhs[yyn]; yyrhs[i] > 0; i++) +- fprintf (stderr, "%s ", yytname[yyrhs[i]]); +- fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]); ++ 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 178 "plural.y" ++#line 151 "plural.y" + { + if (yyvsp[0].exp == NULL) + YYABORT; + ((struct parse_args *) arg)->res = yyvsp[0].exp; +- ; +- break;} ++ } ++ break; + case 2: +-#line 186 "plural.y" ++#line 159 "plural.y" + { + yyval.exp = new_exp_3 (qmop, yyvsp[-4].exp, yyvsp[-2].exp, yyvsp[0].exp); +- ; +- break;} ++ } ++ break; + case 3: +-#line 190 "plural.y" ++#line 163 "plural.y" + { + yyval.exp = new_exp_2 (lor, yyvsp[-2].exp, yyvsp[0].exp); +- ; +- break;} ++ } ++ break; + case 4: +-#line 194 "plural.y" ++#line 167 "plural.y" + { + yyval.exp = new_exp_2 (land, yyvsp[-2].exp, yyvsp[0].exp); +- ; +- break;} ++ } ++ break; + case 5: +-#line 198 "plural.y" ++#line 171 "plural.y" + { + yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp); +- ; +- break;} ++ } ++ break; + case 6: +-#line 202 "plural.y" ++#line 175 "plural.y" + { + yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp); +- ; +- break;} ++ } ++ break; + case 7: +-#line 206 "plural.y" ++#line 179 "plural.y" + { + yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp); +- ; +- break;} ++ } ++ break; + case 8: +-#line 210 "plural.y" ++#line 183 "plural.y" + { + yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp); +- ; +- break;} ++ } ++ break; + case 9: +-#line 214 "plural.y" ++#line 187 "plural.y" + { + yyval.exp = new_exp_1 (lnot, yyvsp[0].exp); +- ; +- break;} ++ } ++ break; + case 10: +-#line 218 "plural.y" ++#line 191 "plural.y" + { + yyval.exp = new_exp_0 (var); +- ; +- break;} ++ } ++ break; + case 11: +-#line 222 "plural.y" ++#line 195 "plural.y" + { + if ((yyval.exp = new_exp_0 (num)) != NULL) + yyval.exp->val.num = yyvsp[0].num; +- ; +- break;} ++ } ++ break; + case 12: +-#line 227 "plural.y" ++#line 200 "plural.y" + { + yyval.exp = yyvsp[-1].exp; +- ; +- break;} ++ } ++ break; + } +- /* the action file gets copied in in place of this dollarsign */ +-#line 543 "/usr/share/bison/bison.simple" ++ ++#line 705 "/usr/local/share/bison/bison.simple" ++ + + yyvsp -= yylen; + yyssp -= yylen; +-#ifdef YYLSP_NEEDED ++#if YYLSP_NEEDED + yylsp -= yylen; + #endif + +-#if YYDEBUG != 0 ++#if YYDEBUG + if (yydebug) + { +- short *ssp1 = yyss - 1; +- fprintf (stderr, "state stack now"); +- while (ssp1 != yyssp) +- fprintf (stderr, " %d", *++ssp1); +- fprintf (stderr, "\n"); ++ short *yyssp1 = yyss - 1; ++ YYFPRINTF (stderr, "state stack now"); ++ while (yyssp1 != yyssp) ++ YYFPRINTF (stderr, " %d", *++yyssp1); ++ YYFPRINTF (stderr, "\n"); + } + #endif + + *++yyvsp = yyval; +- +-#ifdef YYLSP_NEEDED +- yylsp++; +- if (yylen == 0) +- { +- yylsp->first_line = yylloc.first_line; +- yylsp->first_column = yylloc.first_column; +- yylsp->last_line = (yylsp-1)->last_line; +- yylsp->last_column = (yylsp-1)->last_column; +- yylsp->text = 0; +- } +- else +- { +- yylsp->last_line = (yylsp+yylen-1)->last_line; +- yylsp->last_column = (yylsp+yylen-1)->last_column; +- } ++#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. */ ++ /* 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]; + +@@ -974,10 +1118,13 @@ + + goto yynewstate; + +-yyerrlab: /* here on detecting error */ + +- if (! yyerrstatus) +- /* If not already recovering from an error, report this error. */ ++/*------------------------------------. ++| yyerrlab -- here on detecting error | ++`------------------------------------*/ ++yyerrlab: ++ /* If not already recovering from an error, report this error. */ ++ if (!yyerrstatus) + { + ++yynerrs; + +@@ -986,102 +1133,121 @@ + + if (yyn > YYFLAG && yyn < YYLAST) + { +- int size = 0; +- char *msg; +- int x, count; ++ YYSIZE_T yysize = 0; ++ char *yymsg; ++ int yyx, yycount; + +- count = 0; +- /* Start X at -yyn if nec to avoid negative indexes in yycheck. */ +- for (x = (yyn < 0 ? -yyn : 0); +- x < (sizeof(yytname) / sizeof(char *)); x++) +- if (yycheck[x + yyn] == x) +- size += strlen(yytname[x]) + 15, count++; +- msg = (char *) malloc(size + 15); +- if (msg != 0) ++ 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) + { +- strcpy(msg, "parse error"); ++ char *yyp = yystpcpy (yymsg, "parse error, unexpected "); ++ yyp = yystpcpy (yyp, yytname[YYTRANSLATE (yychar)]); + +- if (count < 5) ++ if (yycount < 5) + { +- count = 0; +- for (x = (yyn < 0 ? -yyn : 0); +- x < (sizeof(yytname) / sizeof(char *)); x++) +- if (yycheck[x + yyn] == x) ++ yycount = 0; ++ for (yyx = yyn < 0 ? -yyn : 0; ++ yyx < (int) (sizeof (yytname) / sizeof (char *)); ++ yyx++) ++ if (yycheck[yyx + yyn] == yyx) + { +- strcat(msg, count == 0 ? ", expecting `" : " or `"); +- strcat(msg, yytname[x]); +- strcat(msg, "'"); +- count++; ++ const char *yyq = ! yycount ? ", expecting " : " or "; ++ yyp = yystpcpy (yyp, yyq); ++ yyp = yystpcpy (yyp, yytname[yyx]); ++ yycount++; + } + } +- yyerror(msg); +- free(msg); ++ yyerror (yymsg); ++ YYSTACK_FREE (yymsg); + } + else +- yyerror ("parse error; also virtual memory exceeded"); ++ yyerror ("parse error; also virtual memory exhausted"); + } + else +-#endif /* YYERROR_VERBOSE */ +- yyerror("parse error"); ++#endif /* defined (YYERROR_VERBOSE) */ ++ yyerror ("parse error"); + } +- + goto yyerrlab1; +-yyerrlab1: /* here on error raised explicitly by an action */ + ++ ++/*--------------------------------------------------. ++| 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. */ ++ /* 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; +- +-#if YYDEBUG != 0 +- if (yydebug) +- fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]); +-#endif +- ++ YYDPRINTF ((stderr, "Discarding token %d (%s).\n", ++ yychar, yytname[yychar1])); + yychar = YYEMPTY; + } + +- /* Else will try to reuse lookahead token +- after shifting the error token. */ ++ /* 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 -- 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. */ +- yyn = yydefact[yystate]; /* If its default is to accept any token, ok. Otherwise pop it.*/ +- if (yyn) goto yydefault; ++ ++ /* 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 */ + +- if (yyssp == yyss) YYABORT; ++/*---------------------------------------------------------------. ++| yyerrpop -- pop the current state because it cannot handle the | ++| error token | ++`---------------------------------------------------------------*/ ++yyerrpop: ++ if (yyssp == yyss) ++ YYABORT; + yyvsp--; + yystate = *--yyssp; +-#ifdef YYLSP_NEEDED ++#if YYLSP_NEEDED + yylsp--; + #endif + +-#if YYDEBUG != 0 ++#if YYDEBUG + if (yydebug) + { +- short *ssp1 = yyss - 1; +- fprintf (stderr, "Error: state stack now"); +- while (ssp1 != yyssp) +- fprintf (stderr, " %d", *++ssp1); +- fprintf (stderr, "\n"); ++ 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; +@@ -1104,50 +1270,52 @@ + if (yyn == YYFINAL) + YYACCEPT; + +-#if YYDEBUG != 0 +- if (yydebug) +- fprintf(stderr, "Shifting error token, "); +-#endif ++ YYDPRINTF ((stderr, "Shifting error token, ")); + + *++yyvsp = yylval; +-#ifdef YYLSP_NEEDED ++#if YYLSP_NEEDED + *++yylsp = yylloc; + #endif + + yystate = yyn; + goto yynewstate; + +- yyacceptlab: +- /* YYACCEPT comes here. */ +- if (yyfree_stacks) +- { +- free (yyss); +- free (yyvs); +-#ifdef YYLSP_NEEDED +- free (yyls); +-#endif +- } +- return 0; + +- yyabortlab: +- /* YYABORT comes here. */ +- if (yyfree_stacks) +- { +- free (yyss); +- free (yyvs); +-#ifdef YYLSP_NEEDED +- free (yyls); ++/*-------------------------------------. ++| 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 1; ++ return yyresult; + } +-#line 232 "plural.y" ++#line 205 "plural.y" + + + void + internal_function +-FREE_EXPRESSION (exp) +- struct expression *exp; ++FREE_EXPRESSION (struct expression *exp) + { + if (exp == NULL) + return; +@@ -1173,9 +1341,7 @@ + + + static int +-yylex (lval, pexp) +- YYSTYPE *lval; +- const char **pexp; ++yylex (YYSTYPE *lval, const char **pexp) + { + const char *exp = *pexp; + int result; +@@ -1318,8 +1484,7 @@ + + + static void +-yyerror (str) +- const char *str; ++yyerror (const char *str) + { + /* Do nothing. We don't print error messages here. */ + } +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/plural.y psmisc-20.2.works.clean/intl/plural.y +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/plural.y 2001-04-13 23:00:43.000000000 -0500 ++++ psmisc-20.2.works.clean/intl/plural.y 2004-10-13 15:18:41.000000000 -0500 +@@ -1,21 +1,22 @@ + %{ + /* Expression parsing for plural form selection. +- Copyright (C) 2000, 2001 Free Software Foundation, Inc. ++ Copyright (C) 2000-2001, 2003 Free Software Foundation, Inc. + Written by Ulrich Drepper <drepper@cygnus.com>, 2000. + +- 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. */ + + /* 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 +@@ -29,25 +30,21 @@ + # include <config.h> + #endif + ++#include <stddef.h> + #include <stdlib.h> +-#include "gettextP.h" ++#include "plural-exp.h" + +-/* 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 FREE_EXPRESSION __gettext_free_exp +-#else +-# define FREE_EXPRESSION gettext_free_exp__ +-# define __gettextparse gettextparse__ ++/* 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 10 ++%expect 7 + + %union { + unsigned long int num; +@@ -57,28 +54,13 @@ + + %{ + /* Prototypes for local functions. */ +-static struct expression *new_exp PARAMS ((int nargs, enum operator op, +- struct expression * const *args)); +-static inline struct expression *new_exp_0 PARAMS ((enum operator op)); +-static inline struct expression *new_exp_1 PARAMS ((enum operator op, +- struct expression *right)); +-static struct expression *new_exp_2 PARAMS ((enum operator op, +- struct expression *left, +- struct expression *right)); +-static inline struct expression *new_exp_3 PARAMS ((enum operator op, +- struct expression *bexp, +- struct expression *tbranch, +- struct expression *fbranch)); +-static int yylex PARAMS ((YYSTYPE *lval, const char **pexp)); +-static void yyerror PARAMS ((const char *str)); ++static int yylex (YYSTYPE *lval, const char **pexp); ++static void yyerror (const char *str); + + /* Allocation of expressions. */ + + static struct expression * +-new_exp (nargs, op, args) +- int nargs; +- enum operator op; +- struct expression * const *args; ++new_exp (int nargs, enum operator op, struct expression * const *args) + { + int i; + struct expression *newp; +@@ -107,16 +89,13 @@ + } + + static inline struct expression * +-new_exp_0 (op) +- enum operator op; ++new_exp_0 (enum operator op) + { + return new_exp (0, op, NULL); + } + + static inline struct expression * +-new_exp_1 (op, right) +- enum operator op; +- struct expression *right; ++new_exp_1 (enum operator op, struct expression *right) + { + struct expression *args[1]; + +@@ -125,10 +104,7 @@ + } + + static struct expression * +-new_exp_2 (op, left, right) +- enum operator op; +- struct expression *left; +- struct expression *right; ++new_exp_2 (enum operator op, struct expression *left, struct expression *right) + { + struct expression *args[2]; + +@@ -138,11 +114,8 @@ + } + + static inline struct expression * +-new_exp_3 (op, bexp, tbranch, fbranch) +- enum operator op; +- struct expression *bexp; +- struct expression *tbranch; +- struct expression *fbranch; ++new_exp_3 (enum operator op, struct expression *bexp, ++ struct expression *tbranch, struct expression *fbranch) + { + struct expression *args[3]; + +@@ -233,8 +206,7 @@ + + void + internal_function +-FREE_EXPRESSION (exp) +- struct expression *exp; ++FREE_EXPRESSION (struct expression *exp) + { + if (exp == NULL) + return; +@@ -260,9 +232,7 @@ + + + static int +-yylex (lval, pexp) +- YYSTYPE *lval; +- const char **pexp; ++yylex (YYSTYPE *lval, const char **pexp) + { + const char *exp = *pexp; + int result; +@@ -405,8 +375,7 @@ + + + static void +-yyerror (str) +- const char *str; ++yyerror (const char *str) + { + /* Do nothing. We don't print error messages here. */ + } +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/printf-args.c psmisc-20.2.works.clean/intl/printf-args.c +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/printf-args.c 1969-12-31 18:00:00.000000000 -0600 ++++ psmisc-20.2.works.clean/intl/printf-args.c 2004-10-13 15:18:41.000000000 -0500 +@@ -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; ++} +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/printf-args.h psmisc-20.2.works.clean/intl/printf-args.h +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/printf-args.h 1969-12-31 18:00:00.000000000 -0600 ++++ psmisc-20.2.works.clean/intl/printf-args.h 2004-10-13 15:18:41.000000000 -0500 +@@ -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 */ +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/printf-parse.c psmisc-20.2.works.clean/intl/printf-parse.c +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/printf-parse.c 1969-12-31 18:00:00.000000000 -0600 ++++ psmisc-20.2.works.clean/intl/printf-parse.c 2004-10-13 15:18:41.000000000 -0500 +@@ -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 +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/printf-parse.h psmisc-20.2.works.clean/intl/printf-parse.h +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/printf-parse.h 1969-12-31 18:00:00.000000000 -0600 ++++ psmisc-20.2.works.clean/intl/printf-parse.h 2004-10-13 15:18:41.000000000 -0500 +@@ -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 */ +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/printf.c psmisc-20.2.works.clean/intl/printf.c +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/printf.c 1969-12-31 18:00:00.000000000 -0600 ++++ psmisc-20.2.works.clean/intl/printf.c 2004-10-13 15:18:42.000000000 -0500 +@@ -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 +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/relocatable.c psmisc-20.2.works.clean/intl/relocatable.c +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/relocatable.c 1969-12-31 18:00:00.000000000 -0600 ++++ psmisc-20.2.works.clean/intl/relocatable.c 2004-10-13 15:18:42.000000000 -0500 +@@ -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 +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/relocatable.h psmisc-20.2.works.clean/intl/relocatable.h +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/relocatable.h 1969-12-31 18:00:00.000000000 -0600 ++++ psmisc-20.2.works.clean/intl/relocatable.h 2004-10-13 15:18:42.000000000 -0500 +@@ -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 */ +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/textdomain.c psmisc-20.2.works.clean/intl/textdomain.c +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/textdomain.c 2001-04-13 23:00:42.000000000 -0500 ++++ psmisc-20.2.works.clean/intl/textdomain.c 2004-10-13 15:18:42.000000000 -0500 +@@ -1,19 +1,20 @@ + /* Implementation of the textdomain(3) function. +- Copyright (C) 1995-1998, 2000, 2001 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> +@@ -43,17 +44,17 @@ + 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 _nl_default_default_domain__ +-# define _nl_current_default_domain _nl_current_default_domain__ ++# 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 +@@ -66,18 +67,17 @@ + # 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) ++__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 *new_domain; + char *old_domain; +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/vasnprintf.c psmisc-20.2.works.clean/intl/vasnprintf.c +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/vasnprintf.c 1969-12-31 18:00:00.000000000 -0600 ++++ psmisc-20.2.works.clean/intl/vasnprintf.c 2004-10-13 15:18:42.000000000 -0500 +@@ -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 +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/vasnprintf.h psmisc-20.2.works.clean/intl/vasnprintf.h +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/vasnprintf.h 1969-12-31 18:00:00.000000000 -0600 ++++ psmisc-20.2.works.clean/intl/vasnprintf.h 2004-10-13 15:18:42.000000000 -0500 +@@ -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 */ +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/vasnwprintf.h psmisc-20.2.works.clean/intl/vasnwprintf.h +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/vasnwprintf.h 1969-12-31 18:00:00.000000000 -0600 ++++ psmisc-20.2.works.clean/intl/vasnwprintf.h 2004-10-13 15:18:42.000000000 -0500 +@@ -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 */ +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/wprintf-parse.h psmisc-20.2.works.clean/intl/wprintf-parse.h +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/wprintf-parse.h 1969-12-31 18:00:00.000000000 -0600 ++++ psmisc-20.2.works.clean/intl/wprintf-parse.h 2004-10-13 15:18:42.000000000 -0500 +@@ -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 */ +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/xsize.h psmisc-20.2.works.clean/intl/xsize.h +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/intl/xsize.h 1969-12-31 18:00:00.000000000 -0600 ++++ psmisc-20.2.works.clean/intl/xsize.h 2004-10-13 15:18:42.000000000 -0500 +@@ -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 */ +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/ChangeLog psmisc-20.2.works.clean/m4/ChangeLog +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/ChangeLog 1969-12-31 18:00:00.000000000 -0600 ++++ psmisc-20.2.works.clean/m4/ChangeLog 2004-10-13 15:11:01.000000000 -0500 +@@ -0,0 +1,25 @@ ++2004-10-13 gettextize <bug-gnu-gettext@gnu.org> ++ ++ * gettext.m4: Upgrade to gettext-0.14.1. ++ * intmax.m4: New file, from gettext-0.14.1. ++ * inttypes_h.m4: Upgrade to gettext-0.14.1. ++ * isc-posix.m4: New file, from gettext-0.14.1. ++ * lib-ld.m4: Upgrade to gettext-0.14.1. ++ * lib-link.m4: Upgrade to gettext-0.14.1. ++ * lib-prefix.m4: Upgrade to gettext-0.14.1. ++ * longdouble.m4: New file, from gettext-0.14.1. ++ * longlong.m4: New file, from gettext-0.14.1. ++ * 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: Upgrade to 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: Upgrade to gettext-0.14.1. ++ * uintmax_t.m4: Upgrade to gettext-0.14.1. ++ * ulonglong.m4: Upgrade to gettext-0.14.1. ++ * wchar_t.m4: New file, from gettext-0.14.1. ++ * wint_t.m4: New file, from gettext-0.14.1. ++ * xsize.m4: New file, from gettext-0.14.1. ++ * Makefile.am: New file. ++ +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/Makefile psmisc-20.2.works.clean/m4/Makefile +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/Makefile.am psmisc-20.2.works.clean/m4/Makefile.am +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/Makefile.am 1969-12-31 18:00:00.000000000 -0600 ++++ psmisc-20.2.works.clean/m4/Makefile.am 2004-10-13 15:11:01.000000000 -0500 +@@ -0,0 +1 @@ ++EXTRA_DIST = intmax.m4 isc-posix.m4 longdouble.m4 longlong.m4 nls.m4 po.m4 printf-posix.m4 signed.m4 size_max.m4 wchar_t.m4 wint_t.m4 xsize.m4 +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/Makefile.in psmisc-20.2.works.clean/m4/Makefile.in +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/codeset.m4 psmisc-20.2.works.clean/m4/codeset.m4 +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/codeset.m4 1969-12-31 18:00:00.000000000 -0600 ++++ psmisc-20.2.works.clean/m4/codeset.m4 2004-10-13 15:18:42.000000000 -0500 +@@ -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 ++]) +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/codeset.m4~ psmisc-20.2.works.clean/m4/codeset.m4~ +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/gettext.m4 psmisc-20.2.works.clean/m4/gettext.m4 +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/gettext.m4 1969-12-31 18:00:00.000000000 -0600 ++++ psmisc-20.2.works.clean/m4/gettext.m4 2004-10-13 15:18:42.000000000 -0500 +@@ -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], []) +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/gettext.m4~ psmisc-20.2.works.clean/m4/gettext.m4~ +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/glibc21.m4 psmisc-20.2.works.clean/m4/glibc21.m4 +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/glibc21.m4 1969-12-31 18:00:00.000000000 -0600 ++++ psmisc-20.2.works.clean/m4/glibc21.m4 2004-10-13 15:18:42.000000000 -0500 +@@ -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" ++ ] ++) +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/glibc21.m4~ psmisc-20.2.works.clean/m4/glibc21.m4~ +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/iconv.m4 psmisc-20.2.works.clean/m4/iconv.m4 +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/iconv.m4 1969-12-31 18:00:00.000000000 -0600 ++++ psmisc-20.2.works.clean/m4/iconv.m4 2004-10-13 15:18:42.000000000 -0500 +@@ -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 ++]) +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/iconv.m4~ psmisc-20.2.works.clean/m4/iconv.m4~ +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/intdiv0.m4 psmisc-20.2.works.clean/m4/intdiv0.m4 +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/intdiv0.m4 1969-12-31 18:00:00.000000000 -0600 ++++ psmisc-20.2.works.clean/m4/intdiv0.m4 2004-10-13 15:18:42.000000000 -0500 +@@ -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.]) ++]) +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/intdiv0.m4~ psmisc-20.2.works.clean/m4/intdiv0.m4~ +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/intmax.m4 psmisc-20.2.works.clean/m4/intmax.m4 +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/intmax.m4 1969-12-31 18:00:00.000000000 -0600 ++++ psmisc-20.2.works.clean/m4/intmax.m4 2004-10-13 15:18:42.000000000 -0500 +@@ -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 ++]) +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/intmax.m4~ psmisc-20.2.works.clean/m4/intmax.m4~ +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/inttypes-pri.m4 psmisc-20.2.works.clean/m4/inttypes-pri.m4 +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/inttypes-pri.m4 1969-12-31 18:00:00.000000000 -0600 ++++ psmisc-20.2.works.clean/m4/inttypes-pri.m4 2004-10-13 15:18:42.000000000 -0500 +@@ -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 ++]) +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/inttypes-pri.m4~ psmisc-20.2.works.clean/m4/inttypes-pri.m4~ +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/inttypes.m4 psmisc-20.2.works.clean/m4/inttypes.m4 +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/inttypes.m4 1969-12-31 18:00:00.000000000 -0600 ++++ psmisc-20.2.works.clean/m4/inttypes.m4 2004-10-13 15:18:42.000000000 -0500 +@@ -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 ++]) +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/inttypes.m4~ psmisc-20.2.works.clean/m4/inttypes.m4~ +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/inttypes_h.m4 psmisc-20.2.works.clean/m4/inttypes_h.m4 +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/inttypes_h.m4 1969-12-31 18:00:00.000000000 -0600 ++++ psmisc-20.2.works.clean/m4/inttypes_h.m4 2004-10-13 15:18:42.000000000 -0500 +@@ -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 ++]) +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/inttypes_h.m4~ psmisc-20.2.works.clean/m4/inttypes_h.m4~ +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/isc-posix.m4 psmisc-20.2.works.clean/m4/isc-posix.m4 +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/isc-posix.m4 1969-12-31 18:00:00.000000000 -0600 ++++ psmisc-20.2.works.clean/m4/isc-posix.m4 2004-10-13 15:18:42.000000000 -0500 +@@ -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"]) ++ ] ++) +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/isc-posix.m4~ psmisc-20.2.works.clean/m4/isc-posix.m4~ +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/lcmessage.m4 psmisc-20.2.works.clean/m4/lcmessage.m4 +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/lcmessage.m4 1969-12-31 18:00:00.000000000 -0600 ++++ psmisc-20.2.works.clean/m4/lcmessage.m4 2004-10-13 15:18:42.000000000 -0500 +@@ -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 ++]) +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/lcmessage.m4~ psmisc-20.2.works.clean/m4/lcmessage.m4~ +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/lib-ld.m4 psmisc-20.2.works.clean/m4/lib-ld.m4 +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/lib-ld.m4 1969-12-31 18:00:00.000000000 -0600 ++++ psmisc-20.2.works.clean/m4/lib-ld.m4 2004-10-13 15:18:42.000000000 -0500 +@@ -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 ++]) +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/lib-ld.m4~ psmisc-20.2.works.clean/m4/lib-ld.m4~ +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/lib-link.m4 psmisc-20.2.works.clean/m4/lib-link.m4 +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/lib-link.m4 1969-12-31 18:00:00.000000000 -0600 ++++ psmisc-20.2.works.clean/m4/lib-link.m4 2004-10-13 15:18:42.000000000 -0500 +@@ -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 ++]) +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/lib-link.m4~ psmisc-20.2.works.clean/m4/lib-link.m4~ +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/lib-prefix.m4 psmisc-20.2.works.clean/m4/lib-prefix.m4 +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/lib-prefix.m4 1969-12-31 18:00:00.000000000 -0600 ++++ psmisc-20.2.works.clean/m4/lib-prefix.m4 2004-10-13 15:18:42.000000000 -0500 +@@ -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" ++]) +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/lib-prefix.m4~ psmisc-20.2.works.clean/m4/lib-prefix.m4~ +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/longdouble.m4 psmisc-20.2.works.clean/m4/longdouble.m4 +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/longdouble.m4 1969-12-31 18:00:00.000000000 -0600 ++++ psmisc-20.2.works.clean/m4/longdouble.m4 2004-10-13 15:18:42.000000000 -0500 +@@ -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 ++]) +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/longdouble.m4~ psmisc-20.2.works.clean/m4/longdouble.m4~ +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/longlong.m4 psmisc-20.2.works.clean/m4/longlong.m4 +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/longlong.m4 1969-12-31 18:00:00.000000000 -0600 ++++ psmisc-20.2.works.clean/m4/longlong.m4 2004-10-13 15:18:42.000000000 -0500 +@@ -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 ++]) +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/longlong.m4~ psmisc-20.2.works.clean/m4/longlong.m4~ +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/nls.m4 psmisc-20.2.works.clean/m4/nls.m4 +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/nls.m4 1969-12-31 18:00:00.000000000 -0600 ++++ psmisc-20.2.works.clean/m4/nls.m4 2004-10-13 15:18:42.000000000 -0500 +@@ -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) ++]) +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/nls.m4~ psmisc-20.2.works.clean/m4/nls.m4~ +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/po.m4 psmisc-20.2.works.clean/m4/po.m4 +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/po.m4 1969-12-31 18:00:00.000000000 -0600 ++++ psmisc-20.2.works.clean/m4/po.m4 2004-10-13 15:18:42.000000000 -0500 +@@ -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" ++]) +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/po.m4~ psmisc-20.2.works.clean/m4/po.m4~ +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/printf-posix.m4 psmisc-20.2.works.clean/m4/printf-posix.m4 +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/printf-posix.m4 1969-12-31 18:00:00.000000000 -0600 ++++ psmisc-20.2.works.clean/m4/printf-posix.m4 2004-10-13 15:18:42.000000000 -0500 +@@ -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 ++]) +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/printf-posix.m4~ psmisc-20.2.works.clean/m4/printf-posix.m4~ +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/progtest.m4 psmisc-20.2.works.clean/m4/progtest.m4 +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/progtest.m4 1969-12-31 18:00:00.000000000 -0600 ++++ psmisc-20.2.works.clean/m4/progtest.m4 2004-10-13 15:18:42.000000000 -0500 +@@ -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 ++]) +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/progtest.m4~ psmisc-20.2.works.clean/m4/progtest.m4~ +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/signed.m4 psmisc-20.2.works.clean/m4/signed.m4 +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/signed.m4 1969-12-31 18:00:00.000000000 -0600 ++++ psmisc-20.2.works.clean/m4/signed.m4 2004-10-13 15:18:42.000000000 -0500 +@@ -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 ++]) +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/signed.m4~ psmisc-20.2.works.clean/m4/signed.m4~ +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/size_max.m4 psmisc-20.2.works.clean/m4/size_max.m4 +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/size_max.m4 1969-12-31 18:00:00.000000000 -0600 ++++ psmisc-20.2.works.clean/m4/size_max.m4 2004-10-13 15:18:42.000000000 -0500 +@@ -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 ++]) +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/size_max.m4~ psmisc-20.2.works.clean/m4/size_max.m4~ +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/stdint_h.m4 psmisc-20.2.works.clean/m4/stdint_h.m4 +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/stdint_h.m4 1969-12-31 18:00:00.000000000 -0600 ++++ psmisc-20.2.works.clean/m4/stdint_h.m4 2004-10-13 15:18:42.000000000 -0500 +@@ -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 ++]) +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/stdint_h.m4~ psmisc-20.2.works.clean/m4/stdint_h.m4~ +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/uintmax_t.m4 psmisc-20.2.works.clean/m4/uintmax_t.m4 +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/uintmax_t.m4 1969-12-31 18:00:00.000000000 -0600 ++++ psmisc-20.2.works.clean/m4/uintmax_t.m4 2004-10-13 15:18:42.000000000 -0500 +@@ -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 ++]) +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/uintmax_t.m4~ psmisc-20.2.works.clean/m4/uintmax_t.m4~ +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/ulonglong.m4 psmisc-20.2.works.clean/m4/ulonglong.m4 +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/ulonglong.m4 1969-12-31 18:00:00.000000000 -0600 ++++ psmisc-20.2.works.clean/m4/ulonglong.m4 2004-10-13 15:18:42.000000000 -0500 +@@ -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 ++]) +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/ulonglong.m4~ psmisc-20.2.works.clean/m4/ulonglong.m4~ +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/wchar_t.m4 psmisc-20.2.works.clean/m4/wchar_t.m4 +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/wchar_t.m4 1969-12-31 18:00:00.000000000 -0600 ++++ psmisc-20.2.works.clean/m4/wchar_t.m4 2004-10-13 15:18:42.000000000 -0500 +@@ -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 ++]) +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/wchar_t.m4~ psmisc-20.2.works.clean/m4/wchar_t.m4~ +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/wint_t.m4 psmisc-20.2.works.clean/m4/wint_t.m4 +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/wint_t.m4 1969-12-31 18:00:00.000000000 -0600 ++++ psmisc-20.2.works.clean/m4/wint_t.m4 2004-10-13 15:18:42.000000000 -0500 +@@ -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 ++]) +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/wint_t.m4~ psmisc-20.2.works.clean/m4/wint_t.m4~ +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/xsize.m4 psmisc-20.2.works.clean/m4/xsize.m4 +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/xsize.m4 1969-12-31 18:00:00.000000000 -0600 ++++ psmisc-20.2.works.clean/m4/xsize.m4 2004-10-13 15:18:42.000000000 -0500 +@@ -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) ++]) +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/m4/xsize.m4~ psmisc-20.2.works.clean/m4/xsize.m4~ +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/missing psmisc-20.2.works.clean/missing +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/mkinstalldirs psmisc-20.2.works.clean/mkinstalldirs +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/po/Makefile.in.in psmisc-20.2.works.clean/po/Makefile.in.in +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/po/Makefile.in.in 2001-04-13 23:00:46.000000000 -0500 ++++ psmisc-20.2.works.clean/po/Makefile.in.in 2004-10-13 15:18:42.000000000 -0500 +@@ -1,10 +1,14 @@ +-# Makefile for program source directory in GNU NLS utilities package. +-# Copyright (C) 1995-1997, 2000, 2001 by Ulrich Drepper <drepper@gnu.ai.mit.edu> ++# Makefile for PO directory in any package using GNU gettext. ++# Copyright (C) 1995-1997, 2000-2004 by Ulrich Drepper <drepper@gnu.ai.mit.edu> + # +-# This file file be copied and used freely without restrictions. It can +-# be used in projects which are not available under the GNU Public License +-# but which still want to provide support for the GNU gettext functionality. +-# Please note that the actual code is *not* freely available. ++# This file can be copied and used freely without restrictions. It can ++# be used in projects which are not available under the GNU General Public ++# License but which still want to provide support for the GNU gettext ++# functionality. ++# Please note that the actual code of GNU gettext is covered by the GNU ++# General Public License and is *not* in the public domain. ++# ++# Origin: gettext-0.14 + + PACKAGE = @PACKAGE@ + VERSION = @VERSION@ +@@ -14,88 +18,139 @@ + + srcdir = @srcdir@ + top_srcdir = @top_srcdir@ +-top_builddir = .. + VPATH = @srcdir@ + + prefix = @prefix@ + exec_prefix = @exec_prefix@ +-datadir = $(prefix)/share ++datadir = @datadir@ + localedir = $(datadir)/locale +-gettextsrcdir = $(prefix)/share/gettext/po +-subdir = po ++gettextsrcdir = $(datadir)/gettext/po + + INSTALL = @INSTALL@ + INSTALL_DATA = @INSTALL_DATA@ + MKINSTALLDIRS = @MKINSTALLDIRS@ +-mkinstalldirs = $(SHELL) `case "$(MKINSTALLDIRS)" in /*) echo "$(MKINSTALLDIRS)" ;; *) echo "$(top_builddir)/$(MKINSTALLDIRS)" ;; esac` ++mkinstalldirs = $(SHELL) $(MKINSTALLDIRS) + +-CC = @CC@ +-GENCAT = @GENCAT@ + GMSGFMT = @GMSGFMT@ + MSGFMT = @MSGFMT@ + XGETTEXT = @XGETTEXT@ + MSGMERGE = msgmerge +- +-DEFS = @DEFS@ +-CFLAGS = @CFLAGS@ +-CPPFLAGS = @CPPFLAGS@ +- +-INCLUDES = -I.. -I$(top_srcdir)/intl +- +-COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) ++MSGMERGE_UPDATE = @MSGMERGE@ --update ++MSGINIT = msginit ++MSGCONV = msgconv ++MSGFILTER = msgfilter + + POFILES = @POFILES@ + GMOFILES = @GMOFILES@ +-DISTFILES = ChangeLog Makefile.in.in POTFILES.in $(PACKAGE).pot \ +-$(POFILES) $(GMOFILES) ++UPDATEPOFILES = @UPDATEPOFILES@ ++DUMMYPOFILES = @DUMMYPOFILES@ ++DISTFILES.common = Makefile.in.in remove-potcdate.sin \ ++$(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3) ++DISTFILES = $(DISTFILES.common) Makevars POTFILES.in $(DOMAIN).pot stamp-po \ ++$(POFILES) $(GMOFILES) \ ++$(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3) + + POTFILES = \ + + CATALOGS = @CATALOGS@ + +-.SUFFIXES: +-.SUFFIXES: .c .o .po .pox .gmo .mo +- +-.c.o: +- $(COMPILE) $< ++# Makevars gets inserted here. (Don't remove this line!) + +-.po.pox: +- $(MAKE) $(PACKAGE).pot +- $(MSGMERGE) $< $(srcdir)/$(PACKAGE).pot -o $*.pox ++.SUFFIXES: ++.SUFFIXES: .po .gmo .mo .sed .sin .nop .po-create .po-update + + .po.mo: +- $(MSGFMT) -o $@ $< ++ @echo "$(MSGFMT) -c -o $@ $<"; \ ++ $(MSGFMT) -c -o t-$@ $< && mv t-$@ $@ + + .po.gmo: +- file=$(srcdir)/`echo $* | sed 's,.*/,,'`.gmo \ +- && rm -f $$file && $(GMSGFMT) --statistics -o $$file $< ++ @lang=`echo $* | sed -e 's,.*/,,'`; \ ++ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ ++ echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o $${lang}.gmo $${lang}.po"; \ ++ cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o t-$${lang}.gmo $${lang}.po && mv t-$${lang}.gmo $${lang}.gmo ++ ++.sin.sed: ++ sed -e '/^#/d' $< > t-$@ ++ mv t-$@ $@ + + + all: all-@USE_NLS@ + +-all-yes: $(CATALOGS) ++all-yes: stamp-po + all-no: + +-# Note: Target 'all' must not depend on target '$(srcdir)/$(PACKAGE).pot', ++# stamp-po is a timestamp denoting the last time at which the CATALOGS have ++# been loosely updated. Its purpose is that when a developer or translator ++# checks out the package via CVS, and the $(DOMAIN).pot file is not in CVS, ++# "make" will update the $(DOMAIN).pot and the $(CATALOGS), but subsequent ++# invocations of "make" will do nothing. This timestamp would not be necessary ++# if updating the $(CATALOGS) would always touch them; however, the rule for ++# $(POFILES) has been designed to not touch files that don't need to be ++# changed. ++stamp-po: $(srcdir)/$(DOMAIN).pot ++ test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES) ++ @echo "touch stamp-po" ++ @echo timestamp > stamp-poT ++ @mv stamp-poT stamp-po ++ ++# Note: Target 'all' must not depend on target '$(DOMAIN).pot-update', + # otherwise packages like GCC can not be built if only parts of the source + # have been downloaded. + +-$(srcdir)/$(PACKAGE).pot: $(POTFILES) $(srcdir)/POTFILES.in +- $(XGETTEXT) --default-domain=$(PACKAGE) --directory=$(top_srcdir) \ +- --add-comments --keyword=_ --keyword=N_ \ ++# This target rebuilds $(DOMAIN).pot; it is an expensive operation. ++# Note that $(DOMAIN).pot is not touched if it doesn't need to be changed. ++$(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed ++ $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \ ++ --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) \ + --files-from=$(srcdir)/POTFILES.in \ +- && test ! -f $(PACKAGE).po \ +- || ( rm -f $(srcdir)/$(PACKAGE).pot \ +- && mv $(PACKAGE).po $(srcdir)/$(PACKAGE).pot ) ++ --copyright-holder='$(COPYRIGHT_HOLDER)' \ ++ --msgid-bugs-address='$(MSGID_BUGS_ADDRESS)' ++ test ! -f $(DOMAIN).po || { \ ++ if test -f $(srcdir)/$(DOMAIN).pot; then \ ++ sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \ ++ sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \ ++ if cmp $(DOMAIN).1po $(DOMAIN).2po >/dev/null 2>&1; then \ ++ rm -f $(DOMAIN).1po $(DOMAIN).2po $(DOMAIN).po; \ ++ else \ ++ rm -f $(DOMAIN).1po $(DOMAIN).2po $(srcdir)/$(DOMAIN).pot && \ ++ mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \ ++ fi; \ ++ else \ ++ mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \ ++ fi; \ ++ } ++ ++# This rule has no dependencies: we don't need to update $(DOMAIN).pot at ++# every "make" invocation, only create it when it is missing. ++# Only "make $(DOMAIN).pot-update" or "make dist" will force an update. ++$(srcdir)/$(DOMAIN).pot: ++ $(MAKE) $(DOMAIN).pot-update ++ ++# This target rebuilds a PO file if $(DOMAIN).pot has changed. ++# Note that a PO file is not touched if it doesn't need to be changed. ++$(POFILES): $(srcdir)/$(DOMAIN).pot ++ @lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \ ++ if test -f "$(srcdir)/$${lang}.po"; then \ ++ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ ++ echo "$${cdcmd}$(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot"; \ ++ cd $(srcdir) && $(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot; \ ++ else \ ++ $(MAKE) $${lang}.po-create; \ ++ fi + + + install: install-exec install-data + install-exec: + install-data: install-data-@USE_NLS@ +- if test "$(PACKAGE)" = "gettext"; then \ ++ if test "$(PACKAGE)" = "gettext-tools"; then \ + $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \ +- $(INSTALL_DATA) $(srcdir)/Makefile.in.in \ +- $(DESTDIR)$(gettextsrcdir)/Makefile.in.in; \ ++ for file in $(DISTFILES.common) Makevars.template; do \ ++ $(INSTALL_DATA) $(srcdir)/$$file \ ++ $(DESTDIR)$(gettextsrcdir)/$$file; \ ++ done; \ ++ for file in Makevars; do \ ++ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ ++ done; \ + else \ + : ; \ + fi +@@ -105,41 +160,118 @@ + @catalogs='$(CATALOGS)'; \ + for cat in $$catalogs; do \ + cat=`basename $$cat`; \ +- lang=`echo $$cat | sed 's/\.gmo$$//'`; \ ++ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ + dir=$(localedir)/$$lang/LC_MESSAGES; \ + $(mkinstalldirs) $(DESTDIR)$$dir; \ +- if test -r $$cat; then \ +- $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/$(PACKAGE).mo; \ +- echo "installing $$cat as $(DESTDIR)$$dir/$(PACKAGE).mo"; \ +- else \ +- $(INSTALL_DATA) $(srcdir)/$$cat $(DESTDIR)$$dir/$(PACKAGE).mo; \ +- echo "installing $(srcdir)/$$cat as" \ +- "$(DESTDIR)$$dir/$(PACKAGE).mo"; \ +- fi; \ ++ if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \ ++ $(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \ ++ echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \ ++ for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \ ++ if test -n "$$lc"; then \ ++ if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ ++ link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \ ++ mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ ++ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ ++ (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \ ++ for file in *; do \ ++ if test -f $$file; then \ ++ ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \ ++ fi; \ ++ done); \ ++ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ ++ else \ ++ if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \ ++ :; \ ++ else \ ++ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \ ++ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ ++ fi; \ ++ fi; \ ++ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ ++ ln -s ../LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \ ++ ln $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \ ++ cp -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ ++ echo "installing $$realcat link as $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo"; \ ++ fi; \ ++ done; \ + done + +-# Define this as empty until I found a useful application. +-installcheck: ++install-strip: install + +-uninstall: +- catalogs='$(CATALOGS)'; \ ++installdirs: installdirs-exec installdirs-data ++installdirs-exec: ++installdirs-data: installdirs-data-@USE_NLS@ ++ if test "$(PACKAGE)" = "gettext-tools"; then \ ++ $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \ ++ else \ ++ : ; \ ++ fi ++installdirs-data-no: ++installdirs-data-yes: ++ $(mkinstalldirs) $(DESTDIR)$(datadir) ++ @catalogs='$(CATALOGS)'; \ + for cat in $$catalogs; do \ + cat=`basename $$cat`; \ +- lang=`echo $$cat | sed 's/\.gmo$$//'`; \ +- rm -f $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(PACKAGE).mo; \ ++ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ ++ dir=$(localedir)/$$lang/LC_MESSAGES; \ ++ $(mkinstalldirs) $(DESTDIR)$$dir; \ ++ for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \ ++ if test -n "$$lc"; then \ ++ if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ ++ link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \ ++ mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ ++ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ ++ (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \ ++ for file in *; do \ ++ if test -f $$file; then \ ++ ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \ ++ fi; \ ++ done); \ ++ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ ++ else \ ++ if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \ ++ :; \ ++ else \ ++ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \ ++ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ ++ fi; \ ++ fi; \ ++ fi; \ ++ done; \ + done +- if test "$(PACKAGE)" = "gettext"; then \ +- rm -f $(DESTDIR)$(gettextsrcdir)/Makefile.in.in; \ ++ ++# Define this as empty until I found a useful application. ++installcheck: ++ ++uninstall: uninstall-exec uninstall-data ++uninstall-exec: ++uninstall-data: uninstall-data-@USE_NLS@ ++ if test "$(PACKAGE)" = "gettext-tools"; then \ ++ for file in $(DISTFILES.common) Makevars.template; do \ ++ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ ++ done; \ + else \ + : ; \ + fi ++uninstall-data-no: ++uninstall-data-yes: ++ catalogs='$(CATALOGS)'; \ ++ for cat in $$catalogs; do \ ++ cat=`basename $$cat`; \ ++ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ ++ for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \ ++ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ ++ done; \ ++ done + + check: all + +-dvi info tags TAGS ID: ++info dvi ps pdf html tags TAGS ctags CTAGS ID: + + mostlyclean: +- rm -f core core.* *.pox $(PACKAGE).po *.new.po ++ rm -f remove-potcdate.sed ++ rm -f stamp-poT ++ rm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po + rm -fr *.o + + clean: mostlyclean +@@ -150,58 +282,85 @@ + maintainer-clean: distclean + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." +- rm -f $(GMOFILES) ++ rm -f stamp-po $(GMOFILES) + +-distdir = ../$(PACKAGE)-$(VERSION)/$(subdir) ++distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) + dist distdir: + $(MAKE) update-po + @$(MAKE) dist2 + # This is a separate target because 'update-po' must be executed before. + dist2: $(DISTFILES) + dists="$(DISTFILES)"; \ ++ if test "$(PACKAGE)" = "gettext-tools"; then \ ++ dists="$$dists Makevars.template"; \ ++ fi; \ ++ if test -f $(srcdir)/ChangeLog; then \ ++ dists="$$dists ChangeLog"; \ ++ fi; \ ++ for i in 0 1 2 3 4 5 6 7 8 9; do \ ++ if test -f $(srcdir)/ChangeLog.$$i; then \ ++ dists="$$dists ChangeLog.$$i"; \ ++ fi; \ ++ done; \ ++ if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \ + for file in $$dists; do \ +- cp -p $(srcdir)/$$file $(distdir); \ ++ if test -f $$file; then \ ++ cp -p $$file $(distdir); \ ++ else \ ++ cp -p $(srcdir)/$$file $(distdir); \ ++ fi; \ + done + + update-po: Makefile +- $(MAKE) $(PACKAGE).pot +- if test "$(PACKAGE)" = "gettext"; then PATH=`pwd`/../src:$$PATH; fi; \ ++ $(MAKE) $(DOMAIN).pot-update ++ test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES) ++ $(MAKE) update-gmo ++ ++# General rule for creating PO files. ++ ++.nop.po-create: ++ @lang=`echo $@ | sed -e 's/\.po-create$$//'`; \ ++ echo "File $$lang.po does not exist. If you are a translator, you can create it through 'msginit'." 1>&2; \ ++ exit 1 ++ ++# General rule for updating PO files. ++ ++.nop.po-update: ++ @lang=`echo $@ | sed -e 's/\.po-update$$//'`; \ ++ if test "$(PACKAGE)" = "gettext-tools"; then PATH=`pwd`/../src:$$PATH; fi; \ ++ tmpdir=`pwd`; \ ++ echo "$$lang:"; \ ++ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ ++ echo "$${cdcmd}$(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \ + cd $(srcdir); \ +- catalogs='$(GMOFILES)'; \ +- for cat in $$catalogs; do \ +- cat=`basename $$cat`; \ +- lang=`echo $$cat | sed 's/\.gmo$$//'`; \ +- echo "$$lang:"; \ +- if $(MSGMERGE) $$lang.po $(PACKAGE).pot -o $$lang.new.po; then \ +- mv -f $$lang.new.po $$lang.po; \ ++ if $(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$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 \ +- echo "msgmerge for $$cat failed!"; \ +- rm -f $$lang.new.po; \ ++ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ ++ :; \ ++ else \ ++ echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ ++ exit 1; \ ++ fi; \ + fi; \ +- done +- $(MAKE) update-gmo ++ else \ ++ echo "msgmerge for $$lang.po failed!" 1>&2; \ ++ rm -f $$tmpdir/$$lang.new.po; \ ++ fi ++ ++$(DUMMYPOFILES): + + update-gmo: Makefile $(GMOFILES) + @: + +-POTFILES: POTFILES.in +- ( if test 'x$(srcdir)' != 'x.'; then \ +- posrcprefix='$(top_srcdir)/'; \ +- else \ +- posrcprefix="../"; \ +- fi; \ +- rm -f $@-t $@ \ +- && (sed -e '/^#/d' -e '/^[ ]*$$/d' \ +- -e "s@.*@ $$posrcprefix& \\\\@" < $(srcdir)/$@.in \ +- | sed -e '$$s/\\$$//') > $@-t \ +- && chmod a-w $@-t \ +- && mv $@-t $@ ) +- +-Makefile: Makefile.in.in ../config.status POTFILES +- cd .. \ ++Makefile: Makefile.in.in $(top_builddir)/config.status @POMAKEFILEDEPS@ ++ cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/$@.in CONFIG_HEADERS= \ + $(SHELL) ./config.status + ++force: ++ + # Tell versions [3.59,3.63) of GNU make not to export all variables. + # Otherwise a system limit (for SysV at least) may be exceeded. + .NOEXPORT: +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/po/Makefile.in.in~ psmisc-20.2.works.clean/po/Makefile.in.in~ +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/po/Makevars psmisc-20.2.works.clean/po/Makevars +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/po/Makevars 1969-12-31 18:00:00.000000000 -0600 ++++ psmisc-20.2.works.clean/po/Makevars 2004-10-13 15:18:42.000000000 -0500 +@@ -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 = +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/po/Rules-quot psmisc-20.2.works.clean/po/Rules-quot +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/po/Rules-quot 1969-12-31 18:00:00.000000000 -0600 ++++ psmisc-20.2.works.clean/po/Rules-quot 2004-10-13 15:18:42.000000000 -0500 +@@ -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 +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/po/Rules-quot~ psmisc-20.2.works.clean/po/Rules-quot~ +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/po/boldquot.sed psmisc-20.2.works.clean/po/boldquot.sed +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/po/boldquot.sed 1969-12-31 18:00:00.000000000 -0600 ++++ psmisc-20.2.works.clean/po/boldquot.sed 2004-10-13 15:18:42.000000000 -0500 +@@ -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 +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/po/boldquot.sed~ psmisc-20.2.works.clean/po/boldquot.sed~ +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/po/en@boldquot.header psmisc-20.2.works.clean/po/en@boldquot.header +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/po/en@boldquot.header 1969-12-31 18:00:00.000000000 -0600 ++++ psmisc-20.2.works.clean/po/en@boldquot.header 2004-10-13 15:18:42.000000000 -0500 +@@ -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. ++# +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/po/en@boldquot.header~ psmisc-20.2.works.clean/po/en@boldquot.header~ +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/po/en@quot.header psmisc-20.2.works.clean/po/en@quot.header +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/po/en@quot.header 1969-12-31 18:00:00.000000000 -0600 ++++ psmisc-20.2.works.clean/po/en@quot.header 2004-10-13 15:18:42.000000000 -0500 +@@ -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. ++# +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/po/en@quot.header~ psmisc-20.2.works.clean/po/en@quot.header~ +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/po/insert-header.sin psmisc-20.2.works.clean/po/insert-header.sin +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/po/insert-header.sin 1969-12-31 18:00:00.000000000 -0600 ++++ psmisc-20.2.works.clean/po/insert-header.sin 2004-10-13 15:18:42.000000000 -0500 +@@ -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 ++} +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/po/insert-header.sin~ psmisc-20.2.works.clean/po/insert-header.sin~ +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/po/quot.sed psmisc-20.2.works.clean/po/quot.sed +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/po/quot.sed 1969-12-31 18:00:00.000000000 -0600 ++++ psmisc-20.2.works.clean/po/quot.sed 2004-10-13 15:18:42.000000000 -0500 +@@ -0,0 +1,6 @@ ++s/"\([^"]*\)"/“\1”/g ++s/`\([^`']*\)'/‘\1’/g ++s/ '\([^`']*\)' / ‘\1’ /g ++s/ '\([^`']*\)'$/ ‘\1’/g ++s/^'\([^`']*\)' /‘\1’ /g ++s/“”/""/g +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/po/quot.sed~ psmisc-20.2.works.clean/po/quot.sed~ +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/po/remove-potcdate.sin psmisc-20.2.works.clean/po/remove-potcdate.sin +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/po/remove-potcdate.sin 1969-12-31 18:00:00.000000000 -0600 ++++ psmisc-20.2.works.clean/po/remove-potcdate.sin 2004-10-13 15:18:42.000000000 -0500 +@@ -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 ++} +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/po/remove-potcdate.sin~ psmisc-20.2.works.clean/po/remove-potcdate.sin~ +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/po/stamp-po psmisc-20.2.works.clean/po/stamp-po +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/po/stamp-po 1969-12-31 18:00:00.000000000 -0600 ++++ psmisc-20.2.works.clean/po/stamp-po 2004-10-13 15:11:01.000000000 -0500 +@@ -0,0 +1 @@ ++timestamp +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/src/Makefile.am psmisc-20.2.works.clean/src/Makefile.am +--- tmp/work/psmisc-20.2-r0/psmisc-20.2/src/Makefile.am 2001-06-15 07:17:55.000000000 -0500 ++++ psmisc-20.2.works.clean/src/Makefile.am 2004-10-13 15:11:01.000000000 -0500 +@@ -1,5 +1,7 @@ + + CFLAGS = -Wall -DLOCALEDIR=\"/usr/share/locale\" ++INCLUDES = -I$(top_srcdir)/intl ++LDADD = @LIBINTL@ + + bin_PROGRAMS = fuser killall pstree + +diff -urNd -urNd tmp/work/psmisc-20.2-r0/psmisc-20.2/src/Makefile.in psmisc-20.2.works.clean/src/Makefile.in |