Move to lclint-3.0.0.15, revisit and clean up annotations.
intl/: Add gettext orphans. popt/intl/: Add gettext orphans. beecrypt: Add beecrypt repository. rpmio/tdigest.c: Add beecrypt digest checks. CVS patchset: 5077 CVS date: 2001/09/24 21:53:14
This commit is contained in:
parent
76b20cd2f4
commit
9d555b6216
28
.lclintrc
28
.lclintrc
|
@ -1,4 +1,4 @@
|
|||
-I. -I./build -I./lib -I./rpmdb -I./rpmio -I./popt -DHAVE_CONFIG_H -D_GNU_SOURCE
|
||||
-I. -I./build -I./lib -I./rpmdb -I./rpmio -I./popt -DHAVE_CONFIG_H -D_GNU_SOURCE -D_REENTRANT
|
||||
|
||||
#+partial
|
||||
#+forcehints
|
||||
|
@ -15,29 +15,29 @@
|
|||
+checks # lclint level
|
||||
|
||||
# --- lclint-3.0.0.15 is pickier than lclint-2.5r
|
||||
#-formatconst
|
||||
-usedef # 296 occurences in 3.0.0.15
|
||||
#-formatconst # new in 3.0.0.15
|
||||
#-unsignedcompare # new in 3.0.0.15
|
||||
#-multithreaded # new in 3.0.0.15
|
||||
#-bufferoverflowhigh # new in 3.0.0.15
|
||||
#-superuser # new in 3.0.0.15
|
||||
#-portability # new in 3.0.0.15
|
||||
#-compdef
|
||||
#-nullstate
|
||||
-usedef # 296 occurences wtfo?
|
||||
#-unsignedcompare
|
||||
#-compmempass
|
||||
#-multithreaded
|
||||
#-nullderef # 6 occurences in getdate.y
|
||||
#-nullderef
|
||||
#-nullpass
|
||||
#-unrecog
|
||||
#-portability
|
||||
#-readonlytrans # 128 occurences in getdate.y
|
||||
#-readonlytrans
|
||||
#-noparams
|
||||
-usereleased # 3 occurences wtfo?
|
||||
#-usereleased
|
||||
#-firstcase
|
||||
#-shadow
|
||||
#-bufferoverflowhigh
|
||||
#-superuser
|
||||
#-retvalint
|
||||
#-incondefs
|
||||
#-nullptrarith
|
||||
#-fcnuse
|
||||
-fielduse # noisy in 3.0.0.15
|
||||
#-fielduse
|
||||
#-varuse
|
||||
#-exportlocal
|
||||
#-exportheadervar
|
||||
|
@ -81,7 +81,7 @@
|
|||
#+ifblock
|
||||
#+noeffectuncon # 228 occurences
|
||||
+topuse
|
||||
#+unusedspecial
|
||||
+unusedspecial
|
||||
+oldstyle
|
||||
#+sys-dir-errors # 749
|
||||
#controlnestdepth 15
|
||||
|
@ -96,7 +96,7 @@
|
|||
-ansi-reserved # goofy
|
||||
-infloopsuncon # goofy
|
||||
|
||||
-proto-param-match # 59 occurences
|
||||
-proto-param-match # 51 occurences
|
||||
|
||||
# don't-bother-me-yet parameters
|
||||
-branchstate # painful
|
||||
|
|
|
@ -26,11 +26,10 @@ static int addTriggerIndex(Package pkg, const char *file,
|
|||
list = list->next;
|
||||
}
|
||||
|
||||
if (last) {
|
||||
if (last)
|
||||
index = last->index + 1;
|
||||
}
|
||||
|
||||
tfe = xmalloc(sizeof(*tfe));
|
||||
tfe = xcalloc(1, sizeof(*tfe));
|
||||
|
||||
tfe->fileName = (file) ? xstrdup(file) : NULL;
|
||||
tfe->script = (script && *script != '\0') ? xstrdup(script) : NULL;
|
||||
|
@ -38,11 +37,10 @@ static int addTriggerIndex(Package pkg, const char *file,
|
|||
tfe->index = index;
|
||||
tfe->next = NULL;
|
||||
|
||||
if (last) {
|
||||
if (last)
|
||||
last->next = tfe;
|
||||
} else {
|
||||
else
|
||||
pkg->triggerFiles = tfe;
|
||||
}
|
||||
|
||||
return index;
|
||||
}
|
||||
|
|
|
@ -469,7 +469,7 @@ fprintf(stderr, "*** PS buildRootURL(%s) %p macro set to %s\n", spec->buildRootU
|
|||
|
||||
closeSpec(spec);
|
||||
|
||||
spec->BASpecs = xmalloc(spec->BACount * sizeof(Spec));
|
||||
spec->BASpecs = xcalloc(spec->BACount, sizeof(Spec));
|
||||
index = 0;
|
||||
if (spec->BANames != NULL)
|
||||
for (x = 0; x < spec->BACount; x++) {
|
||||
|
@ -484,6 +484,7 @@ fprintf(stderr, "*** PS buildRootURL(%s) %p macro set to %s\n", spec->buildRootU
|
|||
#else
|
||||
addMacro(NULL, "_target_cpu", NULL, spec->BANames[x], RMIL_RPMRC);
|
||||
#endif
|
||||
spec->BASpecs[index] = NULL;
|
||||
if (parseSpec(&(spec->BASpecs[index]),
|
||||
specFile, spec->rootURL, buildRootURL, 1,
|
||||
passPhrase, cookie, anyarch, force))
|
||||
|
|
|
@ -105,7 +105,7 @@ Package newPackage(Spec spec)
|
|||
Package p;
|
||||
Package pp;
|
||||
|
||||
p = xmalloc(sizeof(*p));
|
||||
p = xcalloc(1, sizeof(*p));
|
||||
|
||||
p->header = headerNew();
|
||||
p->icon = NULL;
|
||||
|
|
|
@ -0,0 +1,438 @@
|
|||
#! /bin/sh
|
||||
# Output a system dependent table of character encoding aliases.
|
||||
#
|
||||
# Copyright (C) 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 Library General Public License as published
|
||||
# by the Free Software Foundation; either version 2, or (at your option)
|
||||
# any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
# Library General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Library General Public
|
||||
# License along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||
# USA.
|
||||
#
|
||||
# The table consists of lines of the form
|
||||
# ALIAS CANONICAL
|
||||
#
|
||||
# ALIAS is the (system dependent) result of "nl_langinfo (CODESET)".
|
||||
# ALIAS is compared in a case sensitive way.
|
||||
#
|
||||
# CANONICAL is the GNU canonical name for this character encoding.
|
||||
# It must be an encoding supported by libiconv. Support by GNU libc is
|
||||
# also desirable. CANONICAL is case insensitive. Usually an upper case
|
||||
# MIME charset name is preferred.
|
||||
# The current list of GNU canonical charset names is as follows.
|
||||
#
|
||||
# name used by which systems a MIME name?
|
||||
# ASCII, ANSI_X3.4-1968 glibc solaris freebsd
|
||||
# ISO-8859-1 glibc aix hpux irix osf solaris freebsd yes
|
||||
# ISO-8859-2 glibc aix hpux irix osf solaris freebsd yes
|
||||
# ISO-8859-3 glibc yes
|
||||
# ISO-8859-4 osf solaris freebsd yes
|
||||
# ISO-8859-5 glibc aix hpux irix osf solaris freebsd yes
|
||||
# ISO-8859-6 glibc aix hpux solaris yes
|
||||
# ISO-8859-7 glibc aix hpux irix osf solaris yes
|
||||
# ISO-8859-8 glibc aix hpux osf solaris yes
|
||||
# ISO-8859-9 glibc aix hpux irix osf solaris yes
|
||||
# ISO-8859-13 glibc
|
||||
# ISO-8859-15 glibc aix osf solaris freebsd
|
||||
# KOI8-R glibc solaris freebsd yes
|
||||
# KOI8-U glibc freebsd yes
|
||||
# CP437 dos
|
||||
# CP775 dos
|
||||
# CP850 aix osf dos
|
||||
# CP852 dos
|
||||
# CP855 dos
|
||||
# CP856 aix
|
||||
# CP857 dos
|
||||
# CP861 dos
|
||||
# CP862 dos
|
||||
# CP864 dos
|
||||
# CP865 dos
|
||||
# CP866 freebsd dos
|
||||
# CP869 dos
|
||||
# CP874 win32 dos
|
||||
# CP922 aix
|
||||
# CP932 aix win32 dos
|
||||
# CP943 aix
|
||||
# CP949 osf win32 dos
|
||||
# CP950 win32 dos
|
||||
# CP1046 aix
|
||||
# CP1124 aix
|
||||
# CP1129 aix
|
||||
# CP1250 win32
|
||||
# CP1251 glibc win32
|
||||
# CP1252 aix win32
|
||||
# CP1253 win32
|
||||
# CP1254 win32
|
||||
# CP1255 win32
|
||||
# CP1256 win32
|
||||
# CP1257 win32
|
||||
# GB2312 glibc aix hpux irix solaris freebsd yes
|
||||
# EUC-JP glibc aix hpux irix osf solaris freebsd yes
|
||||
# EUC-KR glibc aix hpux irix osf solaris freebsd yes
|
||||
# EUC-TW glibc aix hpux irix osf solaris
|
||||
# BIG5 glibc aix hpux osf solaris freebsd yes
|
||||
# BIG5HKSCS glibc
|
||||
# GBK aix osf win32 dos
|
||||
# GB18030 glibc
|
||||
# SJIS hpux osf solaris freebsd
|
||||
# JOHAB glibc win32
|
||||
# TIS-620 glibc aix hpux osf solaris
|
||||
# VISCII glibc yes
|
||||
# HP-ROMAN8 hpux
|
||||
# HP-ARABIC8 hpux
|
||||
# HP-GREEK8 hpux
|
||||
# HP-HEBREW8 hpux
|
||||
# HP-TURKISH8 hpux
|
||||
# HP-KANA8 hpux
|
||||
# DEC-KANJI osf
|
||||
# DEC-HANYU osf
|
||||
# UTF-8 glibc aix hpux osf solaris yes
|
||||
#
|
||||
# Note: Names which are not marked as being a MIME name should not be used in
|
||||
# Internet protocols for information interchange (mail, news, etc.).
|
||||
#
|
||||
# Note: ASCII and ANSI_X3.4-1968 are synonymous canonical names. Applications
|
||||
# must understand both names and treat them as equivalent.
|
||||
#
|
||||
# The first argument passed to this file is the canonical host specification,
|
||||
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
|
||||
# or
|
||||
# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
|
||||
|
||||
host="$1"
|
||||
os=`echo "$host" | sed -e 's/^[^-]*-[^-]*-\(.*\)$/\1/'`
|
||||
echo "# This file contains a table of character encoding aliases,"
|
||||
echo "# suitable for operating system '${os}'."
|
||||
echo "# It was automatically generated from config.charset."
|
||||
# List of references, updated during installation:
|
||||
echo "# Packages using this file: "
|
||||
case "$os" in
|
||||
linux* | *-gnu*)
|
||||
# With glibc-2.1 or newer, we don't need any canonicalization,
|
||||
# because glibc has iconv and both glibc and libiconv support all
|
||||
# GNU canonical names directly. Therefore, the Makefile does not
|
||||
# need to install the alias file at all.
|
||||
# The following applies only to glibc-2.0.x and older libcs.
|
||||
echo "ISO_646.IRV:1983 ASCII"
|
||||
;;
|
||||
aix*)
|
||||
echo "ISO8859-1 ISO-8859-1"
|
||||
echo "ISO8859-2 ISO-8859-2"
|
||||
echo "ISO8859-5 ISO-8859-5"
|
||||
echo "ISO8859-6 ISO-8859-6"
|
||||
echo "ISO8859-7 ISO-8859-7"
|
||||
echo "ISO8859-8 ISO-8859-8"
|
||||
echo "ISO8859-9 ISO-8859-9"
|
||||
echo "ISO8859-15 ISO-8859-15"
|
||||
echo "IBM-850 CP850"
|
||||
echo "IBM-856 CP856"
|
||||
echo "IBM-921 ISO-8859-13"
|
||||
echo "IBM-922 CP922"
|
||||
echo "IBM-932 CP932"
|
||||
echo "IBM-943 CP943"
|
||||
echo "IBM-1046 CP1046"
|
||||
echo "IBM-1124 CP1124"
|
||||
echo "IBM-1129 CP1129"
|
||||
echo "IBM-1252 CP1252"
|
||||
echo "IBM-eucCN GB2312"
|
||||
echo "IBM-eucJP EUC-JP"
|
||||
echo "IBM-eucKR EUC-KR"
|
||||
echo "IBM-eucTW EUC-TW"
|
||||
echo "big5 BIG5"
|
||||
echo "GBK GBK"
|
||||
echo "TIS-620 TIS-620"
|
||||
echo "UTF-8 UTF-8"
|
||||
;;
|
||||
hpux*)
|
||||
echo "iso88591 ISO-8859-1"
|
||||
echo "iso88592 ISO-8859-2"
|
||||
echo "iso88595 ISO-8859-5"
|
||||
echo "iso88596 ISO-8859-6"
|
||||
echo "iso88597 ISO-8859-7"
|
||||
echo "iso88598 ISO-8859-8"
|
||||
echo "iso88599 ISO-8859-9"
|
||||
echo "iso885915 ISO-8859-15"
|
||||
echo "roman8 HP-ROMAN8"
|
||||
echo "arabic8 HP-ARABIC8"
|
||||
echo "greek8 HP-GREEK8"
|
||||
echo "hebrew8 HP-HEBREW8"
|
||||
echo "turkish8 HP-TURKISH8"
|
||||
echo "kana8 HP-KANA8"
|
||||
echo "tis620 TIS-620"
|
||||
echo "big5 BIG5"
|
||||
echo "eucJP EUC-JP"
|
||||
echo "eucKR EUC-KR"
|
||||
echo "eucTW EUC-TW"
|
||||
echo "hp15CN GB2312"
|
||||
#echo "ccdc ?" # what is this?
|
||||
echo "SJIS SJIS"
|
||||
echo "utf8 UTF-8"
|
||||
;;
|
||||
irix*)
|
||||
echo "ISO8859-1 ISO-8859-1"
|
||||
echo "ISO8859-2 ISO-8859-2"
|
||||
echo "ISO8859-5 ISO-8859-5"
|
||||
echo "ISO8859-7 ISO-8859-7"
|
||||
echo "ISO8859-9 ISO-8859-9"
|
||||
echo "eucCN GB2312"
|
||||
echo "eucJP EUC-JP"
|
||||
echo "eucKR EUC-KR"
|
||||
echo "eucTW EUC-TW"
|
||||
;;
|
||||
osf*)
|
||||
echo "ISO8859-1 ISO-8859-1"
|
||||
echo "ISO8859-2 ISO-8859-2"
|
||||
echo "ISO8859-4 ISO-8859-4"
|
||||
echo "ISO8859-5 ISO-8859-5"
|
||||
echo "ISO8859-7 ISO-8859-7"
|
||||
echo "ISO8859-8 ISO-8859-8"
|
||||
echo "ISO8859-9 ISO-8859-9"
|
||||
echo "ISO8859-15 ISO-8859-15"
|
||||
echo "cp850 CP850"
|
||||
echo "big5 BIG5"
|
||||
echo "dechanyu DEC-HANYU"
|
||||
echo "dechanzi GB2312"
|
||||
echo "deckanji DEC-KANJI"
|
||||
echo "deckorean EUC-KR"
|
||||
echo "eucJP EUC-JP"
|
||||
echo "eucKR EUC-KR"
|
||||
echo "eucTW EUC-TW"
|
||||
echo "GBK GBK"
|
||||
echo "KSC5601 CP949"
|
||||
echo "sdeckanji EUC-JP"
|
||||
echo "SJIS SJIS"
|
||||
echo "TACTIS TIS-620"
|
||||
echo "UTF-8 UTF-8"
|
||||
;;
|
||||
solaris*)
|
||||
echo "646 ASCII"
|
||||
echo "ISO8859-1 ISO-8859-1"
|
||||
echo "ISO8859-2 ISO-8859-2"
|
||||
echo "ISO8859-4 ISO-8859-4"
|
||||
echo "ISO8859-5 ISO-8859-5"
|
||||
echo "ISO8859-6 ISO-8859-6"
|
||||
echo "ISO8859-7 ISO-8859-7"
|
||||
echo "ISO8859-8 ISO-8859-8"
|
||||
echo "ISO8859-9 ISO-8859-9"
|
||||
echo "ISO8859-15 ISO-8859-15"
|
||||
echo "koi8-r KOI8-R"
|
||||
echo "BIG5 BIG5"
|
||||
echo "gb2312 GB2312"
|
||||
echo "cns11643 EUC-TW"
|
||||
echo "5601 EUC-KR"
|
||||
echo "eucJP EUC-JP"
|
||||
echo "PCK SJIS"
|
||||
echo "TIS620.2533 TIS-620"
|
||||
#echo "sun_eu_greek ?" # what is this?
|
||||
echo "UTF-8 UTF-8"
|
||||
;;
|
||||
freebsd*)
|
||||
# FreeBSD 4.2 doesn't have nl_langinfo(CODESET); therefore
|
||||
# localcharset.c falls back to using the full locale name
|
||||
# from the environment variables.
|
||||
echo "C ASCII"
|
||||
echo "US-ASCII ASCII"
|
||||
for l in la_LN lt_LN; do
|
||||
echo "$l.ASCII ASCII"
|
||||
done
|
||||
for l in da_DK de_AT de_CH de_DE en_AU en_CA en_GB en_US es_ES \
|
||||
fi_FI fr_BE fr_CA fr_CH fr_FR is_IS it_CH it_IT la_LN \
|
||||
lt_LN nl_BE nl_NL no_NO pt_PT sv_SE; do
|
||||
echo "$l.ISO_8859-1 ISO-8859-1"
|
||||
echo "$l.DIS_8859-15 ISO-8859-15"
|
||||
done
|
||||
for l in cs_CZ hr_HR hu_HU la_LN lt_LN pl_PL sl_SI; do
|
||||
echo "$l.ISO_8859-2 ISO-8859-2"
|
||||
done
|
||||
for l in la_LN lt_LT; do
|
||||
echo "$l.ISO_8859-4 ISO-8859-4"
|
||||
done
|
||||
for l in ru_RU ru_SU; do
|
||||
echo "$l.KOI8-R KOI8-R"
|
||||
echo "$l.ISO_8859-5 ISO-8859-5"
|
||||
echo "$l.CP866 CP866"
|
||||
done
|
||||
echo "uk_UA.KOI8-U KOI8-U"
|
||||
echo "zh_TW.BIG5 BIG5"
|
||||
echo "zh_TW.Big5 BIG5"
|
||||
echo "zh_CN.EUC GB2312"
|
||||
echo "ja_JP.EUC EUC-JP"
|
||||
echo "ja_JP.SJIS SJIS"
|
||||
echo "ja_JP.Shift_JIS SJIS"
|
||||
echo "ko_KR.EUC EUC-KR"
|
||||
;;
|
||||
beos*)
|
||||
# BeOS has a single locale, and it has UTF-8 encoding.
|
||||
echo "* UTF-8"
|
||||
;;
|
||||
msdosdjgpp*)
|
||||
# DJGPP 2.03 doesn't have nl_langinfo(CODESET); therefore
|
||||
# localcharset.c falls back to using the full locale name
|
||||
# from the environment variables.
|
||||
echo "#"
|
||||
echo "# The encodings given here may not all be correct."
|
||||
echo "# If you find that the encoding given for your language and"
|
||||
echo "# country is not the one your DOS machine actually uses, just"
|
||||
echo "# correct it in this file, and send a mail to"
|
||||
echo "# Juan Manuel Guerrero <st001906@hrz1.hrz.tu-darmstadt.de>"
|
||||
echo "# and Bruno Haible <haible@clisp.cons.org>."
|
||||
echo "#"
|
||||
echo "C ASCII"
|
||||
# ISO-8859-1 languages
|
||||
echo "ca CP850"
|
||||
echo "ca_ES CP850"
|
||||
echo "da CP865" # not CP850 ??
|
||||
echo "da_DK CP865" # not CP850 ??
|
||||
echo "de CP850"
|
||||
echo "de_AT CP850"
|
||||
echo "de_CH CP850"
|
||||
echo "de_DE CP850"
|
||||
echo "en CP850"
|
||||
echo "en_AU CP850" # not CP437 ??
|
||||
echo "en_CA CP850"
|
||||
echo "en_GB CP850"
|
||||
echo "en_NZ CP437"
|
||||
echo "en_US CP437"
|
||||
echo "en_ZA CP850" # not CP437 ??
|
||||
echo "es CP850"
|
||||
echo "es_AR CP850"
|
||||
echo "es_BO CP850"
|
||||
echo "es_CL CP850"
|
||||
echo "es_CO CP850"
|
||||
echo "es_CR CP850"
|
||||
echo "es_CU CP850"
|
||||
echo "es_DO CP850"
|
||||
echo "es_EC CP850"
|
||||
echo "es_ES CP850"
|
||||
echo "es_GT CP850"
|
||||
echo "es_HN CP850"
|
||||
echo "es_MX CP850"
|
||||
echo "es_NI CP850"
|
||||
echo "es_PA CP850"
|
||||
echo "es_PY CP850"
|
||||
echo "es_PE CP850"
|
||||
echo "es_SV CP850"
|
||||
echo "es_UY CP850"
|
||||
echo "es_VE CP850"
|
||||
echo "et CP850"
|
||||
echo "et_EE CP850"
|
||||
echo "eu CP850"
|
||||
echo "eu_ES CP850"
|
||||
echo "fi CP850"
|
||||
echo "fi_FI CP850"
|
||||
echo "fr CP850"
|
||||
echo "fr_BE CP850"
|
||||
echo "fr_CA CP850"
|
||||
echo "fr_CH CP850"
|
||||
echo "fr_FR CP850"
|
||||
echo "ga CP850"
|
||||
echo "ga_IE CP850"
|
||||
echo "gd CP850"
|
||||
echo "gd_GB CP850"
|
||||
echo "gl CP850"
|
||||
echo "gl_ES CP850"
|
||||
echo "id CP850" # not CP437 ??
|
||||
echo "id_ID CP850" # not CP437 ??
|
||||
echo "is CP861" # not CP850 ??
|
||||
echo "is_IS CP861" # not CP850 ??
|
||||
echo "it CP850"
|
||||
echo "it_CH CP850"
|
||||
echo "it_IT CP850"
|
||||
echo "lt CP775"
|
||||
echo "lt_LT CP775"
|
||||
echo "lv CP775"
|
||||
echo "lv_LV CP775"
|
||||
echo "nb CP865" # not CP850 ??
|
||||
echo "nb_NO CP865" # not CP850 ??
|
||||
echo "nl CP850"
|
||||
echo "nl_BE CP850"
|
||||
echo "nl_NL CP850"
|
||||
echo "nn CP865" # not CP850 ??
|
||||
echo "nn_NO CP865" # not CP850 ??
|
||||
echo "no CP865" # not CP850 ??
|
||||
echo "no_NO CP865" # not CP850 ??
|
||||
echo "pt CP850"
|
||||
echo "pt_BR CP850"
|
||||
echo "pt_PT CP850"
|
||||
echo "sv CP850"
|
||||
echo "sv_SE CP850"
|
||||
# ISO-8859-2 languages
|
||||
echo "cs CP852"
|
||||
echo "cs_CZ CP852"
|
||||
echo "hr CP852"
|
||||
echo "hr_HR CP852"
|
||||
echo "hu CP852"
|
||||
echo "hu_HU CP852"
|
||||
echo "pl CP852"
|
||||
echo "pl_PL CP852"
|
||||
echo "ro CP852"
|
||||
echo "ro_RO CP852"
|
||||
echo "sk CP852"
|
||||
echo "sk_SK CP852"
|
||||
echo "sl CP852"
|
||||
echo "sl_SI CP852"
|
||||
echo "sq CP852"
|
||||
echo "sq_AL CP852"
|
||||
echo "sr CP852" # CP852 or CP866 or CP855 ??
|
||||
echo "sr_YU CP852" # CP852 or CP866 or CP855 ??
|
||||
# ISO-8859-3 languages
|
||||
echo "mt CP850"
|
||||
echo "mt_MT CP850"
|
||||
# ISO-8859-5 languages
|
||||
echo "be CP866"
|
||||
echo "be_BE CP866"
|
||||
echo "bg CP866" # not CP855 ??
|
||||
echo "bg_BG CP866" # not CP855 ??
|
||||
echo "mk CP866" # not CP855 ??
|
||||
echo "mk_MK CP866" # not CP855 ??
|
||||
echo "ru KOI8-R" # not CP866 ??
|
||||
echo "ru_RU KOI8-R" # not CP866 ??
|
||||
# ISO-8859-6 languages
|
||||
echo "ar CP864"
|
||||
echo "ar_AE CP864"
|
||||
echo "ar_DZ CP864"
|
||||
echo "ar_EG CP864"
|
||||
echo "ar_IQ CP864"
|
||||
echo "ar_IR CP864"
|
||||
echo "ar_JO CP864"
|
||||
echo "ar_KW CP864"
|
||||
echo "ar_MA CP864"
|
||||
echo "ar_OM CP864"
|
||||
echo "ar_QA CP864"
|
||||
echo "ar_SA CP864"
|
||||
echo "ar_SY CP864"
|
||||
# ISO-8859-7 languages
|
||||
echo "el CP869"
|
||||
echo "el_GR CP869"
|
||||
# ISO-8859-8 languages
|
||||
echo "he CP862"
|
||||
echo "he_IL CP862"
|
||||
# ISO-8859-9 languages
|
||||
echo "tr CP857"
|
||||
echo "tr_TR CP857"
|
||||
# Japanese
|
||||
echo "ja CP932"
|
||||
echo "ja_JP CP932"
|
||||
# Chinese
|
||||
echo "zh_CN GBK"
|
||||
echo "zh_TW CP950" # not CP938 ??
|
||||
# Korean
|
||||
echo "kr CP949" # not CP934 ??
|
||||
echo "kr_KR CP949" # not CP934 ??
|
||||
# Thai
|
||||
echo "th CP874"
|
||||
echo "th_TH CP874"
|
||||
# Other
|
||||
echo "eo CP850"
|
||||
echo "eo_EO CP850"
|
||||
;;
|
||||
esac
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,59 @@
|
|||
/* Implementation of the dcngettext(3) function.
|
||||
Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software Foundation,
|
||||
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include "gettextP.h"
|
||||
#ifdef _LIBC
|
||||
# include <libintl.h>
|
||||
#else
|
||||
# include "libgnuintl.h"
|
||||
#endif
|
||||
|
||||
/* @@ end of prolog @@ */
|
||||
|
||||
/* Names for the libintl functions are a problem. They must not clash
|
||||
with existing names and they should follow ANSI C. But this source
|
||||
code is also used in GNU C Library where the names have a __
|
||||
prefix. So we have to make a difference here. */
|
||||
#ifdef _LIBC
|
||||
# define DCNGETTEXT __dcngettext
|
||||
# define DCIGETTEXT __dcigettext
|
||||
#else
|
||||
# define DCNGETTEXT dcngettext__
|
||||
# define DCIGETTEXT 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;
|
||||
{
|
||||
return DCIGETTEXT (domainname, msgid1, msgid2, 1, n, category);
|
||||
}
|
||||
|
||||
#ifdef _LIBC
|
||||
/* Alias for function name in GNU C Library. */
|
||||
weak_alias (__dcngettext, dcngettext);
|
||||
#endif
|
|
@ -0,0 +1,60 @@
|
|||
/* Implementation of the dngettext(3) function.
|
||||
Copyright (C) 1995-1997, 2000, 2001 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software Foundation,
|
||||
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include <locale.h>
|
||||
|
||||
#include "gettextP.h"
|
||||
#ifdef _LIBC
|
||||
# include <libintl.h>
|
||||
#else
|
||||
# include "libgnuintl.h"
|
||||
#endif
|
||||
|
||||
/* @@ end of prolog @@ */
|
||||
|
||||
/* Names for the libintl functions are a problem. They must not clash
|
||||
with existing names and they should follow ANSI C. But this source
|
||||
code is also used in GNU C Library where the names have a __
|
||||
prefix. So we have to make a difference here. */
|
||||
#ifdef _LIBC
|
||||
# define DNGETTEXT __dngettext
|
||||
# define DCNGETTEXT __dcngettext
|
||||
#else
|
||||
# define DNGETTEXT dngettext__
|
||||
# define DCNGETTEXT 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;
|
||||
{
|
||||
return DCNGETTEXT (domainname, msgid1, msgid2, n, LC_MESSAGES);
|
||||
}
|
||||
|
||||
#ifdef _LIBC
|
||||
/* Alias for function name in GNU C Library. */
|
||||
weak_alias (__dngettext, dngettext);
|
||||
#endif
|
|
@ -0,0 +1,127 @@
|
|||
/* 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 */
|
|
@ -0,0 +1,271 @@
|
|||
/* Determine a canonical name for the current locale's character encoding.
|
||||
|
||||
Copyright (C) 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 Library General Public License as published
|
||||
by the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||
USA. */
|
||||
|
||||
/* Written by Bruno Haible <haible@clisp.cons.org>. */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#if HAVE_STDDEF_H
|
||||
# include <stddef.h>
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
#if HAVE_STRING_H
|
||||
# include <string.h>
|
||||
#else
|
||||
# include <strings.h>
|
||||
#endif
|
||||
#if HAVE_STDLIB_H
|
||||
# include <stdlib.h>
|
||||
#endif
|
||||
|
||||
#if defined _WIN32 || defined __WIN32__
|
||||
# undef WIN32 /* avoid warning on mingw32 */
|
||||
# define WIN32
|
||||
#endif
|
||||
|
||||
#ifndef WIN32
|
||||
# if HAVE_LANGINFO_CODESET
|
||||
# include <langinfo.h>
|
||||
# else
|
||||
# if HAVE_SETLOCALE
|
||||
# include <locale.h>
|
||||
# endif
|
||||
# endif
|
||||
#else /* WIN32 */
|
||||
# define WIN32_LEAN_AND_MEAN
|
||||
# include <windows.h>
|
||||
#endif
|
||||
|
||||
#ifndef DIRECTORY_SEPARATOR
|
||||
# define DIRECTORY_SEPARATOR '/'
|
||||
#endif
|
||||
|
||||
#ifndef ISSLASH
|
||||
# define ISSLASH(C) ((C) == DIRECTORY_SEPARATOR)
|
||||
#endif
|
||||
|
||||
/* The following static variable is declared 'volatile' to avoid a
|
||||
possible multithread problem in the function get_charset_aliases. If we
|
||||
are running in a threaded environment, and if two threads initialize
|
||||
'charset_aliases' simultaneously, both will produce the same value,
|
||||
and everything will be ok if the two assignments to 'charset_aliases'
|
||||
are atomic. But I don't know what will happen if the two assignments mix. */
|
||||
#if __STDC__ != 1
|
||||
# define volatile /* empty */
|
||||
#endif
|
||||
/* Pointer to the contents of the charset.alias file, if it has already been
|
||||
read, else NULL. Its format is:
|
||||
ALIAS_1 '\0' CANONICAL_1 '\0' ... ALIAS_n '\0' CANONICAL_n '\0' '\0' */
|
||||
static char * volatile charset_aliases;
|
||||
|
||||
/* Return a pointer to the contents of the charset.alias file. */
|
||||
static const char *
|
||||
get_charset_aliases ()
|
||||
{
|
||||
char *cp;
|
||||
|
||||
cp = charset_aliases;
|
||||
if (cp == NULL)
|
||||
{
|
||||
#ifndef WIN32
|
||||
FILE *fp;
|
||||
const char *dir = LIBDIR;
|
||||
const char *base = "charset.alias";
|
||||
char *file_name;
|
||||
|
||||
/* Concatenate dir and base into freshly allocated file_name. */
|
||||
{
|
||||
size_t dir_len = strlen (dir);
|
||||
size_t base_len = strlen (base);
|
||||
int add_slash = (dir_len > 0 && !ISSLASH (dir[dir_len - 1]));
|
||||
file_name = (char *) malloc (dir_len + add_slash + base_len + 1);
|
||||
if (file_name != NULL)
|
||||
{
|
||||
memcpy (file_name, dir, dir_len);
|
||||
if (add_slash)
|
||||
file_name[dir_len] = DIRECTORY_SEPARATOR;
|
||||
memcpy (file_name + dir_len + add_slash, base, base_len + 1);
|
||||
}
|
||||
}
|
||||
|
||||
if (file_name == NULL || (fp = fopen (file_name, "r")) == NULL)
|
||||
/* Out of memory or file not found, treat it as empty. */
|
||||
cp = "";
|
||||
else
|
||||
{
|
||||
/* Parse the file's contents. */
|
||||
int c;
|
||||
char buf1[50+1];
|
||||
char buf2[50+1];
|
||||
char *res_ptr = NULL;
|
||||
size_t res_size = 0;
|
||||
size_t l1, l2;
|
||||
|
||||
for (;;)
|
||||
{
|
||||
c = getc (fp);
|
||||
if (c == EOF)
|
||||
break;
|
||||
if (c == '\n' || c == ' ' || c == '\t')
|
||||
continue;
|
||||
if (c == '#')
|
||||
{
|
||||
/* Skip comment, to end of line. */
|
||||
do
|
||||
c = getc (fp);
|
||||
while (!(c == EOF || c == '\n'));
|
||||
if (c == EOF)
|
||||
break;
|
||||
continue;
|
||||
}
|
||||
ungetc (c, fp);
|
||||
if (fscanf(fp, "%50s %50s", buf1, buf2) < 2)
|
||||
break;
|
||||
l1 = strlen (buf1);
|
||||
l2 = strlen (buf2);
|
||||
if (res_size == 0)
|
||||
{
|
||||
res_size = l1 + 1 + l2 + 1;
|
||||
res_ptr = malloc (res_size + 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
res_size += l1 + 1 + l2 + 1;
|
||||
res_ptr = realloc (res_ptr, res_size + 1);
|
||||
}
|
||||
if (res_ptr == NULL)
|
||||
{
|
||||
/* Out of memory. */
|
||||
res_size = 0;
|
||||
break;
|
||||
}
|
||||
strcpy (res_ptr + res_size - (l2 + 1) - (l1 + 1), buf1);
|
||||
strcpy (res_ptr + res_size - (l2 + 1), buf2);
|
||||
}
|
||||
fclose (fp);
|
||||
if (res_size == 0)
|
||||
cp = "";
|
||||
else
|
||||
{
|
||||
*(res_ptr + res_size) = '\0';
|
||||
cp = res_ptr;
|
||||
}
|
||||
}
|
||||
|
||||
if (file_name != NULL)
|
||||
free (file_name);
|
||||
|
||||
#else /* 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";
|
||||
#endif
|
||||
|
||||
charset_aliases = cp;
|
||||
}
|
||||
|
||||
return cp;
|
||||
}
|
||||
|
||||
/* Determine the current locale's character encoding, and canonicalize it
|
||||
into one of the canonical names listed in config.charset.
|
||||
The result must not be freed; it is statically allocated.
|
||||
If the canonical name cannot be determined, the result is a non-canonical
|
||||
name. */
|
||||
|
||||
#ifdef STATIC
|
||||
STATIC
|
||||
#endif
|
||||
const char *
|
||||
locale_charset ()
|
||||
{
|
||||
const char *codeset;
|
||||
const char *aliases;
|
||||
|
||||
#ifndef WIN32
|
||||
|
||||
# if HAVE_LANGINFO_CODESET
|
||||
|
||||
/* Most systems support nl_langinfo (CODESET) nowadays. */
|
||||
codeset = nl_langinfo (CODESET);
|
||||
|
||||
# else
|
||||
|
||||
/* On old systems which lack it, use setlocale or getenv. */
|
||||
const char *locale = NULL;
|
||||
|
||||
/* But most old systems don't have a complete set of locales. Some
|
||||
(like SunOS 4 or DJGPP) have only the C locale. Therefore we don't
|
||||
use setlocale here; it would return "C" when it doesn't support the
|
||||
locale name the user has set. */
|
||||
# if HAVE_SETLOCALE && 0
|
||||
locale = setlocale (LC_CTYPE, NULL);
|
||||
# endif
|
||||
if (locale == NULL || locale[0] == '\0')
|
||||
{
|
||||
locale = getenv ("LC_ALL");
|
||||
if (locale == NULL || locale[0] == '\0')
|
||||
{
|
||||
locale = getenv ("LC_CTYPE");
|
||||
if (locale == NULL || locale[0] == '\0')
|
||||
locale = getenv ("LANG");
|
||||
}
|
||||
}
|
||||
|
||||
/* On some old systems, one used to set locale = "iso8859_1". On others,
|
||||
you set it to "language_COUNTRY.charset". In any case, we resolve it
|
||||
through the charset.alias file. */
|
||||
codeset = locale;
|
||||
|
||||
# endif
|
||||
|
||||
#else /* WIN32 */
|
||||
|
||||
static char buf[2 + 10 + 1];
|
||||
|
||||
/* Win32 has a function returning the locale's codepage as a number. */
|
||||
sprintf (buf, "CP%u", GetACP ());
|
||||
codeset = buf;
|
||||
|
||||
#endif
|
||||
|
||||
if (codeset == NULL)
|
||||
/* The canonical name cannot be determined. */
|
||||
codeset = "";
|
||||
|
||||
/* Resolve alias. */
|
||||
for (aliases = get_charset_aliases ();
|
||||
*aliases != '\0';
|
||||
aliases += strlen (aliases) + 1, aliases += strlen (aliases) + 1)
|
||||
if (strcmp (codeset, aliases) == 0
|
||||
|| (aliases[0] == '*' && aliases[1] == '\0'))
|
||||
{
|
||||
codeset = aliases + strlen (aliases) + 1;
|
||||
break;
|
||||
}
|
||||
|
||||
return codeset;
|
||||
}
|
|
@ -0,0 +1,77 @@
|
|||
# Locale name alias data base.
|
||||
# Copyright (C) 1996,1997,1998,1999,2000,2001 Free Software Foundation, Inc.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2, or (at your option)
|
||||
# any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
# The format of this file is the same as for the corresponding file of
|
||||
# the X Window System, which normally can be found in
|
||||
# /usr/lib/X11/locale/locale.alias
|
||||
# A single line contains two fields: an alias and a substitution value.
|
||||
# All entries are case independent.
|
||||
|
||||
# Note: This file is far from being complete. If you have a value for
|
||||
# your own site which you think might be useful for others too, share
|
||||
# it with the rest of us. Send it using the `glibcbug' script to
|
||||
# bugs@gnu.org.
|
||||
|
||||
# Packages using this file:
|
||||
|
||||
bokmal no_NO.ISO-8859-1
|
||||
bokmål no_NO.ISO-8859-1
|
||||
catalan ca_ES.ISO-8859-1
|
||||
croatian hr_HR.ISO-8859-2
|
||||
czech cs_CZ.ISO-8859-2
|
||||
danish da_DK.ISO-8859-1
|
||||
dansk da_DK.ISO-8859-1
|
||||
deutsch de_DE.ISO-8859-1
|
||||
dutch nl_NL.ISO-8859-1
|
||||
eesti et_EE.ISO-8859-1
|
||||
estonian et_EE.ISO-8859-1
|
||||
finnish fi_FI.ISO-8859-1
|
||||
français fr_FR.ISO-8859-1
|
||||
french fr_FR.ISO-8859-1
|
||||
galego gl_ES.ISO-8859-1
|
||||
galician gl_ES.ISO-8859-1
|
||||
german de_DE.ISO-8859-1
|
||||
greek el_GR.ISO-8859-7
|
||||
hebrew iw_IL.ISO-8859-8
|
||||
hrvatski hr_HR.ISO-8859-2
|
||||
hungarian hu_HU.ISO-8859-2
|
||||
icelandic is_IS.ISO-8859-1
|
||||
italian it_IT.ISO-8859-1
|
||||
japanese ja_JP.eucJP
|
||||
japanese.euc ja_JP.eucJP
|
||||
ja_JP ja_JP.eucJP
|
||||
ja_JP.ujis ja_JP.eucJP
|
||||
japanese.sjis ja_JP.SJIS
|
||||
korean ko_KR.eucKR
|
||||
korean.euc ko_KR.eucKR
|
||||
ko_KR ko_KR.eucKR
|
||||
lithuanian lt_LT.ISO-8859-13
|
||||
nb_NO no_NO.ISO-8859-1
|
||||
nb_NO.ISO-8859-1 no_NO.ISO-8859-1
|
||||
norwegian no_NO.ISO-8859-1
|
||||
nynorsk nn_NO.ISO-8859-1
|
||||
polish pl_PL.ISO-8859-2
|
||||
portuguese pt_PT.ISO-8859-1
|
||||
romanian ro_RO.ISO-8859-2
|
||||
russian ru_RU.ISO-8859-5
|
||||
slovak sk_SK.ISO-8859-2
|
||||
slovene sl_SI.ISO-8859-2
|
||||
slovenian sl_SI.ISO-8859-2
|
||||
spanish es_ES.ISO-8859-1
|
||||
swedish sv_SE.ISO-8859-1
|
||||
thai th_TH.TIS-620
|
||||
turkish tr_TR.ISO-8859-9
|
|
@ -0,0 +1,67 @@
|
|||
/* Implementation of ngettext(3) function.
|
||||
Copyright (C) 1995, 1997, 2000, 2001 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software Foundation,
|
||||
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#ifdef _LIBC
|
||||
# define __need_NULL
|
||||
# include <stddef.h>
|
||||
#else
|
||||
# include <stdlib.h> /* Just for NULL. */
|
||||
#endif
|
||||
|
||||
#include "gettextP.h"
|
||||
#ifdef _LIBC
|
||||
# include <libintl.h>
|
||||
#else
|
||||
# include "libgnuintl.h"
|
||||
#endif
|
||||
|
||||
#include <locale.h>
|
||||
|
||||
/* @@ end of prolog @@ */
|
||||
|
||||
/* Names for the libintl functions are a problem. They must not clash
|
||||
with existing names and they should follow ANSI C. But this source
|
||||
code is also used in GNU C Library where the names have a __
|
||||
prefix. So we have to make a difference here. */
|
||||
#ifdef _LIBC
|
||||
# define NGETTEXT __ngettext
|
||||
# define DCNGETTEXT __dcngettext
|
||||
#else
|
||||
# define NGETTEXT ngettext__
|
||||
# define DCNGETTEXT 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;
|
||||
{
|
||||
return DCNGETTEXT (NULL, msgid1, msgid2, n, LC_MESSAGES);
|
||||
}
|
||||
|
||||
#ifdef _LIBC
|
||||
/* Alias for function name in GNU C Library. */
|
||||
weak_alias (__ngettext, ngettext);
|
||||
#endif
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,412 @@
|
|||
%{
|
||||
/* Expression parsing for plural form selection.
|
||||
Copyright (C) 2000, 2001 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)
|
||||
any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software Foundation,
|
||||
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
|
||||
/* The bison generated parser uses alloca. AIX 3 forces us to put this
|
||||
declaration at the beginning of the file. The declaration in bison's
|
||||
skeleton file comes too late. This must come before <config.h>
|
||||
because <config.h> may include arbitrary system headers. */
|
||||
#if defined _AIX && !defined __GNUC__
|
||||
#pragma alloca
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include <stdlib.h>
|
||||
#include "gettextP.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__
|
||||
#endif
|
||||
|
||||
#define YYLEX_PARAM &((struct parse_args *) arg)->cp
|
||||
#define YYPARSE_PARAM arg
|
||||
%}
|
||||
%pure_parser
|
||||
%expect 10
|
||||
|
||||
%union {
|
||||
unsigned long int num;
|
||||
enum operator op;
|
||||
struct expression *exp;
|
||||
}
|
||||
|
||||
%{
|
||||
/* 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));
|
||||
|
||||
/* Allocation of expressions. */
|
||||
|
||||
static struct expression *
|
||||
new_exp (nargs, op, args)
|
||||
int nargs;
|
||||
enum operator op;
|
||||
struct expression * const *args;
|
||||
{
|
||||
int i;
|
||||
struct expression *newp;
|
||||
|
||||
/* If any of the argument could not be malloc'ed, just return NULL. */
|
||||
for (i = nargs - 1; i >= 0; i--)
|
||||
if (args[i] == NULL)
|
||||
goto fail;
|
||||
|
||||
/* Allocate a new expression. */
|
||||
newp = (struct expression *) malloc (sizeof (*newp));
|
||||
if (newp != NULL)
|
||||
{
|
||||
newp->nargs = nargs;
|
||||
newp->operation = op;
|
||||
for (i = nargs - 1; i >= 0; i--)
|
||||
newp->val.args[i] = args[i];
|
||||
return newp;
|
||||
}
|
||||
|
||||
fail:
|
||||
for (i = nargs - 1; i >= 0; i--)
|
||||
FREE_EXPRESSION (args[i]);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static inline struct expression *
|
||||
new_exp_0 (op)
|
||||
enum operator op;
|
||||
{
|
||||
return new_exp (0, op, NULL);
|
||||
}
|
||||
|
||||
static inline struct expression *
|
||||
new_exp_1 (op, right)
|
||||
enum operator op;
|
||||
struct expression *right;
|
||||
{
|
||||
struct expression *args[1];
|
||||
|
||||
args[0] = right;
|
||||
return new_exp (1, op, args);
|
||||
}
|
||||
|
||||
static struct expression *
|
||||
new_exp_2 (op, left, right)
|
||||
enum operator op;
|
||||
struct expression *left;
|
||||
struct expression *right;
|
||||
{
|
||||
struct expression *args[2];
|
||||
|
||||
args[0] = left;
|
||||
args[1] = right;
|
||||
return new_exp (2, op, args);
|
||||
}
|
||||
|
||||
static inline struct expression *
|
||||
new_exp_3 (op, bexp, tbranch, fbranch)
|
||||
enum operator op;
|
||||
struct expression *bexp;
|
||||
struct expression *tbranch;
|
||||
struct expression *fbranch;
|
||||
{
|
||||
struct expression *args[3];
|
||||
|
||||
args[0] = bexp;
|
||||
args[1] = tbranch;
|
||||
args[2] = fbranch;
|
||||
return new_exp (3, op, args);
|
||||
}
|
||||
|
||||
%}
|
||||
|
||||
/* This declares that all operators have the same associativity and the
|
||||
precedence order as in C. See [Harbison, Steele: C, A Reference Manual].
|
||||
There is no unary minus and no bitwise operators.
|
||||
Operators with the same syntactic behaviour have been merged into a single
|
||||
token, to save space in the array generated by bison. */
|
||||
%right '?' /* ? */
|
||||
%left '|' /* || */
|
||||
%left '&' /* && */
|
||||
%left EQUOP2 /* == != */
|
||||
%left CMPOP2 /* < > <= >= */
|
||||
%left ADDOP2 /* + - */
|
||||
%left MULOP2 /* * / % */
|
||||
%right '!' /* ! */
|
||||
|
||||
%token <op> EQUOP2 CMPOP2 ADDOP2 MULOP2
|
||||
%token <num> NUMBER
|
||||
%type <exp> exp
|
||||
|
||||
%%
|
||||
|
||||
start: exp
|
||||
{
|
||||
if ($1 == NULL)
|
||||
YYABORT;
|
||||
((struct parse_args *) arg)->res = $1;
|
||||
}
|
||||
;
|
||||
|
||||
exp: exp '?' exp ':' exp
|
||||
{
|
||||
$$ = new_exp_3 (qmop, $1, $3, $5);
|
||||
}
|
||||
| exp '|' exp
|
||||
{
|
||||
$$ = new_exp_2 (lor, $1, $3);
|
||||
}
|
||||
| exp '&' exp
|
||||
{
|
||||
$$ = new_exp_2 (land, $1, $3);
|
||||
}
|
||||
| exp EQUOP2 exp
|
||||
{
|
||||
$$ = new_exp_2 ($2, $1, $3);
|
||||
}
|
||||
| exp CMPOP2 exp
|
||||
{
|
||||
$$ = new_exp_2 ($2, $1, $3);
|
||||
}
|
||||
| exp ADDOP2 exp
|
||||
{
|
||||
$$ = new_exp_2 ($2, $1, $3);
|
||||
}
|
||||
| exp MULOP2 exp
|
||||
{
|
||||
$$ = new_exp_2 ($2, $1, $3);
|
||||
}
|
||||
| '!' exp
|
||||
{
|
||||
$$ = new_exp_1 (lnot, $2);
|
||||
}
|
||||
| 'n'
|
||||
{
|
||||
$$ = new_exp_0 (var);
|
||||
}
|
||||
| NUMBER
|
||||
{
|
||||
if (($$ = new_exp_0 (num)) != NULL)
|
||||
$$->val.num = $1;
|
||||
}
|
||||
| '(' exp ')'
|
||||
{
|
||||
$$ = $2;
|
||||
}
|
||||
;
|
||||
|
||||
%%
|
||||
|
||||
void
|
||||
internal_function
|
||||
FREE_EXPRESSION (exp)
|
||||
struct expression *exp;
|
||||
{
|
||||
if (exp == NULL)
|
||||
return;
|
||||
|
||||
/* Handle the recursive case. */
|
||||
switch (exp->nargs)
|
||||
{
|
||||
case 3:
|
||||
FREE_EXPRESSION (exp->val.args[2]);
|
||||
/* FALLTHROUGH */
|
||||
case 2:
|
||||
FREE_EXPRESSION (exp->val.args[1]);
|
||||
/* FALLTHROUGH */
|
||||
case 1:
|
||||
FREE_EXPRESSION (exp->val.args[0]);
|
||||
/* FALLTHROUGH */
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
free (exp);
|
||||
}
|
||||
|
||||
|
||||
static int
|
||||
yylex (lval, pexp)
|
||||
YYSTYPE *lval;
|
||||
const char **pexp;
|
||||
{
|
||||
const char *exp = *pexp;
|
||||
int result;
|
||||
|
||||
while (1)
|
||||
{
|
||||
if (exp[0] == '\0')
|
||||
{
|
||||
*pexp = exp;
|
||||
return YYEOF;
|
||||
}
|
||||
|
||||
if (exp[0] != ' ' && exp[0] != '\t')
|
||||
break;
|
||||
|
||||
++exp;
|
||||
}
|
||||
|
||||
result = *exp++;
|
||||
switch (result)
|
||||
{
|
||||
case '0': case '1': case '2': case '3': case '4':
|
||||
case '5': case '6': case '7': case '8': case '9':
|
||||
{
|
||||
unsigned long int n = result - '0';
|
||||
while (exp[0] >= '0' && exp[0] <= '9')
|
||||
{
|
||||
n *= 10;
|
||||
n += exp[0] - '0';
|
||||
++exp;
|
||||
}
|
||||
lval->num = n;
|
||||
result = NUMBER;
|
||||
}
|
||||
break;
|
||||
|
||||
case '=':
|
||||
if (exp[0] == '=')
|
||||
{
|
||||
++exp;
|
||||
lval->op = equal;
|
||||
result = EQUOP2;
|
||||
}
|
||||
else
|
||||
result = YYERRCODE;
|
||||
break;
|
||||
|
||||
case '!':
|
||||
if (exp[0] == '=')
|
||||
{
|
||||
++exp;
|
||||
lval->op = not_equal;
|
||||
result = EQUOP2;
|
||||
}
|
||||
break;
|
||||
|
||||
case '&':
|
||||
case '|':
|
||||
if (exp[0] == result)
|
||||
++exp;
|
||||
else
|
||||
result = YYERRCODE;
|
||||
break;
|
||||
|
||||
case '<':
|
||||
if (exp[0] == '=')
|
||||
{
|
||||
++exp;
|
||||
lval->op = less_or_equal;
|
||||
}
|
||||
else
|
||||
lval->op = less_than;
|
||||
result = CMPOP2;
|
||||
break;
|
||||
|
||||
case '>':
|
||||
if (exp[0] == '=')
|
||||
{
|
||||
++exp;
|
||||
lval->op = greater_or_equal;
|
||||
}
|
||||
else
|
||||
lval->op = greater_than;
|
||||
result = CMPOP2;
|
||||
break;
|
||||
|
||||
case '*':
|
||||
lval->op = mult;
|
||||
result = MULOP2;
|
||||
break;
|
||||
|
||||
case '/':
|
||||
lval->op = divide;
|
||||
result = MULOP2;
|
||||
break;
|
||||
|
||||
case '%':
|
||||
lval->op = module;
|
||||
result = MULOP2;
|
||||
break;
|
||||
|
||||
case '+':
|
||||
lval->op = plus;
|
||||
result = ADDOP2;
|
||||
break;
|
||||
|
||||
case '-':
|
||||
lval->op = minus;
|
||||
result = ADDOP2;
|
||||
break;
|
||||
|
||||
case 'n':
|
||||
case '?':
|
||||
case ':':
|
||||
case '(':
|
||||
case ')':
|
||||
/* Nothing, just return the character. */
|
||||
break;
|
||||
|
||||
case ';':
|
||||
case '\n':
|
||||
case '\0':
|
||||
/* Be safe and let the user call this function again. */
|
||||
--exp;
|
||||
result = YYEOF;
|
||||
break;
|
||||
|
||||
default:
|
||||
result = YYERRCODE;
|
||||
#if YYDEBUG != 0
|
||||
--exp;
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
|
||||
*pexp = exp;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
yyerror (str)
|
||||
const char *str;
|
||||
{
|
||||
/* Do nothing. We don't print error messages here. */
|
||||
}
|
|
@ -0,0 +1,31 @@
|
|||
# Add this package to a list of references stored in a text file.
|
||||
#
|
||||
# Copyright (C) 2000 Free Software Foundation, Inc.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU Library General Public License as published
|
||||
# by the Free Software Foundation; either version 2, or (at your option)
|
||||
# any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
# Library General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Library General Public
|
||||
# License along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||
# USA.
|
||||
#
|
||||
# Written by Bruno Haible <haible@clisp.cons.org>.
|
||||
#
|
||||
/^# Packages using this file: / {
|
||||
s/# Packages using this file://
|
||||
ta
|
||||
:a
|
||||
s/ @PACKAGE@ / @PACKAGE@ /
|
||||
tb
|
||||
s/ $/ @PACKAGE@ /
|
||||
:b
|
||||
s/^/# Packages using this file:/
|
||||
}
|
|
@ -0,0 +1,26 @@
|
|||
# Remove this package from a list of references stored in a text file.
|
||||
#
|
||||
# Copyright (C) 2000 Free Software Foundation, Inc.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU Library General Public License as published
|
||||
# by the Free Software Foundation; either version 2, or (at your option)
|
||||
# any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
# Library General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Library General Public
|
||||
# License along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||
# USA.
|
||||
#
|
||||
# Written by Bruno Haible <haible@clisp.cons.org>.
|
||||
#
|
||||
/^# Packages using this file: / {
|
||||
s/# Packages using this file://
|
||||
s/ @PACKAGE@ / /
|
||||
s/^/# Packages using this file:/
|
||||
}
|
|
@ -600,10 +600,6 @@ exit:
|
|||
return result;
|
||||
}
|
||||
|
||||
/*@-typeuse@*/
|
||||
typedef int (*dbrecMatch_t) (Header h, const char *reqName, const char * reqEVR, int reqFlags);
|
||||
/*@=typeuse@*/
|
||||
|
||||
static int rangeMatchesDepFlags (Header h,
|
||||
const char * reqName, const char * reqEVR, int reqFlags)
|
||||
/*@*/
|
||||
|
@ -962,12 +958,12 @@ alAllFileSatisfiesDepend(const availableList al,
|
|||
const char * keyType, const char * fileName)
|
||||
/*@*/
|
||||
{
|
||||
int i, found;
|
||||
int i, found = 0;
|
||||
const char * dirName;
|
||||
const char * baseName;
|
||||
struct dirInfo_s dirNeedle;
|
||||
dirInfo dirMatch;
|
||||
struct availablePackage ** ret;
|
||||
struct availablePackage ** ret = NULL;
|
||||
|
||||
/* Solaris 2.6 bsearch sucks down on this. */
|
||||
if (al->numDirs == 0 || al->dirs == NULL || al->list == NULL)
|
||||
|
@ -985,18 +981,16 @@ alAllFileSatisfiesDepend(const availableList al,
|
|||
dirNeedle.dirNameLen = strlen(dirName);
|
||||
dirMatch = bsearch(&dirNeedle, al->dirs, al->numDirs,
|
||||
sizeof(dirNeedle), dirInfoCompare);
|
||||
if (dirMatch == NULL) {
|
||||
dirName = _free(dirName);
|
||||
return NULL;
|
||||
}
|
||||
if (dirMatch == NULL)
|
||||
goto exit;
|
||||
|
||||
/* rewind to the first match */
|
||||
while (dirMatch > al->dirs && dirInfoCompare(dirMatch-1, &dirNeedle) == 0)
|
||||
dirMatch--;
|
||||
|
||||
/*@-nullptrarith@*/ /* FIX: fileName NULL ??? */
|
||||
baseName = strrchr(fileName, '/') + 1;
|
||||
/*@=nullptrarith@*/
|
||||
if ((baseName = strrchr(fileName, '/')) == NULL)
|
||||
goto exit;
|
||||
baseName++;
|
||||
|
||||
for (found = 0, ret = NULL;
|
||||
dirMatch <= al->dirs + al->numDirs &&
|
||||
|
@ -1028,6 +1022,7 @@ alAllFileSatisfiesDepend(const availableList al,
|
|||
}
|
||||
}
|
||||
|
||||
exit:
|
||||
dirName = _free(dirName);
|
||||
/*@-mods@*/ /* FIX: al->list might be modified. */
|
||||
if (ret)
|
||||
|
@ -2100,7 +2095,7 @@ rescan:
|
|||
* the new package. This would be easier if we could sort the
|
||||
* addedPackages array, but we store indexes into it in various places.
|
||||
*/
|
||||
orderList = xmalloc(npkgs * sizeof(*orderList));
|
||||
orderList = xcalloc(npkgs, sizeof(*orderList));
|
||||
for (i = 0, j = 0; i < ts->orderCount; i++) {
|
||||
if (ts->order[i].type == TR_ADDED) {
|
||||
orderList[j].alIndex = ts->order[i].u.addedIndex;
|
||||
|
@ -2112,7 +2107,7 @@ rescan:
|
|||
|
||||
qsort(orderList, npkgs, sizeof(*orderList), orderListIndexCmp);
|
||||
|
||||
newOrder = xmalloc(ts->orderCount * sizeof(*newOrder));
|
||||
newOrder = xcalloc(ts->orderCount, sizeof(*newOrder));
|
||||
for (i = 0, newOrderCount = 0; i < orderingCount; i++) {
|
||||
struct orderListIndex * needle, key;
|
||||
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
/** \ingroup rpmdep
|
||||
* Dependncy ordering information.
|
||||
*/
|
||||
/*@-fielduse@*/ /* LCL: confused by union? */
|
||||
struct tsortInfo {
|
||||
union {
|
||||
int count;
|
||||
|
@ -23,6 +24,7 @@ struct tsortInfo {
|
|||
int tsi_reqx;
|
||||
int tsi_qcnt;
|
||||
} ;
|
||||
/*@=fielduse@*/
|
||||
|
||||
/** \ingroup rpmdep
|
||||
* Info about a single package to be installed.
|
||||
|
@ -107,6 +109,7 @@ typedef /*@abstract@*/ struct availableList_s {
|
|||
/** \ingroup rpmdep
|
||||
* A single package instance to be installed/removed atomically.
|
||||
*/
|
||||
/*@-fielduse@*/ /* LCL: confused by union? */
|
||||
struct transactionElement {
|
||||
enum rpmTransactionType {
|
||||
TR_ADDED, /*!< Package will be installed. */
|
||||
|
@ -120,6 +123,7 @@ struct transactionElement {
|
|||
} removed;
|
||||
} u;
|
||||
} ;
|
||||
/*@=fielduse@*/
|
||||
|
||||
/** \ingroup rpmdep
|
||||
* The set of packages to be installed/removed atomically.
|
||||
|
|
22
lib/fsm.c
22
lib/fsm.c
|
@ -63,19 +63,17 @@ const char * fsmFsPath(/*@special@*/ /*@null@*/ const FSM_t fsm,
|
|||
if (fsm) {
|
||||
int nb;
|
||||
char * t;
|
||||
/*@-nullpass@*/ /* LCL: subdir/suffix != NULL */
|
||||
nb = strlen(fsm->dirName) +
|
||||
(st && subdir && !S_ISDIR(st->st_mode) ? strlen(subdir) : 0) +
|
||||
(st && suffix && !S_ISDIR(st->st_mode) ? strlen(suffix) : 0) +
|
||||
(st && !S_ISDIR(st->st_mode) ? (subdir ? strlen(subdir) : 0) : 0) +
|
||||
(st && !S_ISDIR(st->st_mode) ? (suffix ? strlen(suffix) : 0) : 0) +
|
||||
strlen(fsm->baseName) + 1;
|
||||
s = t = xmalloc(nb);
|
||||
t = stpcpy(t, fsm->dirName);
|
||||
if (st && subdir && !S_ISDIR(st->st_mode))
|
||||
t = stpcpy(t, subdir);
|
||||
if (st && !S_ISDIR(st->st_mode))
|
||||
if (subdir) t = stpcpy(t, subdir);
|
||||
t = stpcpy(t, fsm->baseName);
|
||||
if (st && suffix && !S_ISDIR(st->st_mode))
|
||||
t = stpcpy(t, suffix);
|
||||
/*@=nullpass@*/
|
||||
if (st && !S_ISDIR(st->st_mode))
|
||||
if (suffix) t = stpcpy(t, suffix);
|
||||
}
|
||||
return s;
|
||||
}
|
||||
|
@ -331,7 +329,6 @@ static /*@observer@*/ const char * dnlNextIterator(/*@null@*/ DNLI_t dnli)
|
|||
* @param fsm file state machine data
|
||||
* @return Is chain only partially filled?
|
||||
*/
|
||||
/*@-compmempass@*/
|
||||
static int saveHardLink(/*@special@*/ /*@partial@*/ FSM_t fsm)
|
||||
/*@uses fsm->links, fsm->ix, fsm->sb, fsm->goal, fsm->nsuffix @*/
|
||||
/*@defines fsm->li @*/
|
||||
|
@ -413,7 +410,6 @@ static int saveHardLink(/*@special@*/ /*@partial@*/ FSM_t fsm)
|
|||
return rc;
|
||||
/*@=nullstate@*/
|
||||
}
|
||||
/*@=compmempass@*/
|
||||
|
||||
/** \ingroup payload
|
||||
* Destroy set of hard links.
|
||||
|
@ -1000,7 +996,6 @@ static int fsmCommitLinks(/*@special@*/ FSM_t fsm)
|
|||
* @param fsm file state machine data
|
||||
* @return 0 on success
|
||||
*/
|
||||
/*@-compdef@*/
|
||||
static int fsmRmdirs(/*@special@*/ FSM_t fsm)
|
||||
/*@uses fsm->path, fsm->dnlx, fsm->ldn, fsm->rdbuf, fsm->iter @*/
|
||||
/*@modifies fsm, fileSystem @*/
|
||||
|
@ -1037,7 +1032,7 @@ static int fsmRmdirs(/*@special@*/ FSM_t fsm)
|
|||
if (rc)
|
||||
/*@innerbreak@*/ break;
|
||||
te--;
|
||||
} while ((te - dn) > fsm->dnlx[dc]);
|
||||
} while ((te - fsm->path) > fsm->dnlx[dc]);
|
||||
}
|
||||
dnli = dnlFreeIterator(dnli);
|
||||
/*@=observertrans =dependenttrans@*/
|
||||
|
@ -1045,7 +1040,6 @@ static int fsmRmdirs(/*@special@*/ FSM_t fsm)
|
|||
fsm->path = path;
|
||||
return rc;
|
||||
}
|
||||
/*@=compdef@*/
|
||||
|
||||
/**
|
||||
* Create (if necessary) directories not explicitly included in package.
|
||||
|
@ -1458,7 +1452,7 @@ int fsmStage(FSM_t fsm, fileStage stage)
|
|||
|
||||
fsm->postpone = XFA_SKIPPING(fsm->action);
|
||||
if (fsm->goal == FSM_PKGINSTALL || fsm->goal == FSM_PKGBUILD) {
|
||||
/*@-evalorder@*/
|
||||
/*@-evalorder@*/ /* FIX: saveHardLink can modify fsm */
|
||||
if (!S_ISDIR(st->st_mode) && st->st_nlink > 1)
|
||||
fsm->postpone = saveHardLink(fsm);
|
||||
/*@=evalorder@*/
|
||||
|
|
|
@ -90,9 +90,9 @@ static int yygrowstack();
|
|||
*/
|
||||
struct timeb {
|
||||
time_t time; /* Seconds since the epoch */
|
||||
unsigned short millitm; /* Field not used */
|
||||
/*@unused@*/ unsigned short millitm; /* Field not used */
|
||||
short timezone; /* Minutes west of GMT */
|
||||
short dstflag; /* Field not used */
|
||||
/*@unused@*/ short dstflag; /* Field not used */
|
||||
};
|
||||
#endif /* defined(HAVE_SYS_TIMEB_H) */
|
||||
|
||||
|
@ -131,7 +131,9 @@ extern struct tm *gmtime();
|
|||
extern struct tm *localtime();
|
||||
#endif
|
||||
|
||||
/*@-exportheader@*/
|
||||
extern time_t get_date(char * p, struct timeb * now);
|
||||
/*@=exportheader@*/
|
||||
|
||||
#define yyparse getdate_yyparse
|
||||
#define yylex getdate_yylex
|
||||
|
@ -197,12 +199,12 @@ static MERIDIAN yyMeridian;
|
|||
static time_t yyRelMonth;
|
||||
static time_t yyRelSeconds;
|
||||
|
||||
#line 184 "./getdate.y"
|
||||
#line 186 "./getdate.y"
|
||||
typedef union {
|
||||
time_t Number;
|
||||
enum _MERIDIAN Meridian;
|
||||
} YYSTYPE;
|
||||
#line 203 "getdate.c"
|
||||
#line 205 "getdate.c"
|
||||
#define YYERRCODE 256
|
||||
#define tAGO 257
|
||||
#define tDAY 258
|
||||
|
@ -420,7 +422,7 @@ static short *yyss;
|
|||
static short *yysslim;
|
||||
static YYSTYPE *yyvs;
|
||||
static int yystacksize;
|
||||
#line 403 "./getdate.y"
|
||||
#line 405 "./getdate.y"
|
||||
|
||||
/* Month and day table. */
|
||||
static TABLE const MonthDayTable[] = {
|
||||
|
@ -611,7 +613,7 @@ static TABLE const MilitaryTable[] = {
|
|||
|
||||
/* ARGSUSED */
|
||||
static int
|
||||
yyerror(const char * s)
|
||||
yyerror(/*@unused@*/ const char * s)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
@ -1049,7 +1051,7 @@ main(ac, av)
|
|||
/* NOTREACHED */
|
||||
}
|
||||
#endif /* defined(TEST) */
|
||||
#line 1050 "getdate.c"
|
||||
#line 1052 "getdate.c"
|
||||
/* allocate initial stack or double stack size, up to YYMAXDEPTH */
|
||||
static int yygrowstack()
|
||||
{
|
||||
|
@ -1245,37 +1247,37 @@ yyreduce:
|
|||
switch (yyn)
|
||||
{
|
||||
case 3:
|
||||
#line 202 "./getdate.y"
|
||||
#line 204 "./getdate.y"
|
||||
{
|
||||
yyHaveTime++;
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
#line 205 "./getdate.y"
|
||||
#line 207 "./getdate.y"
|
||||
{
|
||||
yyHaveZone++;
|
||||
}
|
||||
break;
|
||||
case 5:
|
||||
#line 208 "./getdate.y"
|
||||
#line 210 "./getdate.y"
|
||||
{
|
||||
yyHaveDate++;
|
||||
}
|
||||
break;
|
||||
case 6:
|
||||
#line 211 "./getdate.y"
|
||||
#line 213 "./getdate.y"
|
||||
{
|
||||
yyHaveDay++;
|
||||
}
|
||||
break;
|
||||
case 7:
|
||||
#line 214 "./getdate.y"
|
||||
#line 216 "./getdate.y"
|
||||
{
|
||||
yyHaveRel++;
|
||||
}
|
||||
break;
|
||||
case 9:
|
||||
#line 220 "./getdate.y"
|
||||
#line 222 "./getdate.y"
|
||||
{
|
||||
yyHour = yyvsp[-1].Number;
|
||||
yyMinutes = 0;
|
||||
|
@ -1284,7 +1286,7 @@ case 9:
|
|||
}
|
||||
break;
|
||||
case 10:
|
||||
#line 226 "./getdate.y"
|
||||
#line 228 "./getdate.y"
|
||||
{
|
||||
yyHour = yyvsp[-3].Number;
|
||||
yyMinutes = yyvsp[-1].Number;
|
||||
|
@ -1293,7 +1295,7 @@ case 10:
|
|||
}
|
||||
break;
|
||||
case 11:
|
||||
#line 232 "./getdate.y"
|
||||
#line 234 "./getdate.y"
|
||||
{
|
||||
yyHour = yyvsp[-3].Number;
|
||||
yyMinutes = yyvsp[-1].Number;
|
||||
|
@ -1303,7 +1305,7 @@ case 11:
|
|||
}
|
||||
break;
|
||||
case 12:
|
||||
#line 239 "./getdate.y"
|
||||
#line 241 "./getdate.y"
|
||||
{
|
||||
yyHour = yyvsp[-5].Number;
|
||||
yyMinutes = yyvsp[-3].Number;
|
||||
|
@ -1312,7 +1314,7 @@ case 12:
|
|||
}
|
||||
break;
|
||||
case 13:
|
||||
#line 245 "./getdate.y"
|
||||
#line 247 "./getdate.y"
|
||||
{
|
||||
yyHour = yyvsp[-5].Number;
|
||||
yyMinutes = yyvsp[-3].Number;
|
||||
|
@ -1323,56 +1325,56 @@ case 13:
|
|||
}
|
||||
break;
|
||||
case 14:
|
||||
#line 255 "./getdate.y"
|
||||
#line 257 "./getdate.y"
|
||||
{
|
||||
yyTimezone = yyvsp[0].Number;
|
||||
yyDSTmode = DSToff;
|
||||
}
|
||||
break;
|
||||
case 15:
|
||||
#line 259 "./getdate.y"
|
||||
#line 261 "./getdate.y"
|
||||
{
|
||||
yyTimezone = yyvsp[0].Number;
|
||||
yyDSTmode = DSTon;
|
||||
}
|
||||
break;
|
||||
case 16:
|
||||
#line 264 "./getdate.y"
|
||||
#line 266 "./getdate.y"
|
||||
{
|
||||
yyTimezone = yyvsp[-1].Number;
|
||||
yyDSTmode = DSTon;
|
||||
}
|
||||
break;
|
||||
case 17:
|
||||
#line 270 "./getdate.y"
|
||||
#line 272 "./getdate.y"
|
||||
{
|
||||
yyDayOrdinal = 1;
|
||||
yyDayNumber = yyvsp[0].Number;
|
||||
}
|
||||
break;
|
||||
case 18:
|
||||
#line 274 "./getdate.y"
|
||||
#line 276 "./getdate.y"
|
||||
{
|
||||
yyDayOrdinal = 1;
|
||||
yyDayNumber = yyvsp[-1].Number;
|
||||
}
|
||||
break;
|
||||
case 19:
|
||||
#line 278 "./getdate.y"
|
||||
#line 280 "./getdate.y"
|
||||
{
|
||||
yyDayOrdinal = yyvsp[-1].Number;
|
||||
yyDayNumber = yyvsp[0].Number;
|
||||
}
|
||||
break;
|
||||
case 20:
|
||||
#line 284 "./getdate.y"
|
||||
#line 286 "./getdate.y"
|
||||
{
|
||||
yyMonth = yyvsp[-2].Number;
|
||||
yyDay = yyvsp[0].Number;
|
||||
}
|
||||
break;
|
||||
case 21:
|
||||
#line 288 "./getdate.y"
|
||||
#line 290 "./getdate.y"
|
||||
{
|
||||
if (yyvsp[-4].Number >= 100) {
|
||||
yyYear = yyvsp[-4].Number;
|
||||
|
@ -1386,7 +1388,7 @@ case 21:
|
|||
}
|
||||
break;
|
||||
case 22:
|
||||
#line 299 "./getdate.y"
|
||||
#line 301 "./getdate.y"
|
||||
{
|
||||
/* ISO 8601 format. yyyy-mm-dd. */
|
||||
yyYear = yyvsp[-2].Number;
|
||||
|
@ -1395,7 +1397,7 @@ case 22:
|
|||
}
|
||||
break;
|
||||
case 23:
|
||||
#line 305 "./getdate.y"
|
||||
#line 307 "./getdate.y"
|
||||
{
|
||||
/* e.g. 17-JUN-1992. */
|
||||
yyDay = yyvsp[-2].Number;
|
||||
|
@ -1404,14 +1406,14 @@ case 23:
|
|||
}
|
||||
break;
|
||||
case 24:
|
||||
#line 311 "./getdate.y"
|
||||
#line 313 "./getdate.y"
|
||||
{
|
||||
yyMonth = yyvsp[-1].Number;
|
||||
yyDay = yyvsp[0].Number;
|
||||
}
|
||||
break;
|
||||
case 25:
|
||||
#line 315 "./getdate.y"
|
||||
#line 317 "./getdate.y"
|
||||
{
|
||||
yyMonth = yyvsp[-3].Number;
|
||||
yyDay = yyvsp[-2].Number;
|
||||
|
@ -1419,14 +1421,14 @@ case 25:
|
|||
}
|
||||
break;
|
||||
case 26:
|
||||
#line 320 "./getdate.y"
|
||||
#line 322 "./getdate.y"
|
||||
{
|
||||
yyMonth = yyvsp[0].Number;
|
||||
yyDay = yyvsp[-1].Number;
|
||||
}
|
||||
break;
|
||||
case 27:
|
||||
#line 324 "./getdate.y"
|
||||
#line 326 "./getdate.y"
|
||||
{
|
||||
yyMonth = yyvsp[-1].Number;
|
||||
yyDay = yyvsp[-2].Number;
|
||||
|
@ -1434,68 +1436,68 @@ case 27:
|
|||
}
|
||||
break;
|
||||
case 28:
|
||||
#line 331 "./getdate.y"
|
||||
#line 333 "./getdate.y"
|
||||
{
|
||||
yyRelSeconds = -yyRelSeconds;
|
||||
yyRelMonth = -yyRelMonth;
|
||||
}
|
||||
break;
|
||||
case 30:
|
||||
#line 338 "./getdate.y"
|
||||
#line 340 "./getdate.y"
|
||||
{
|
||||
yyRelSeconds += yyvsp[-1].Number * yyvsp[0].Number * 60L;
|
||||
}
|
||||
break;
|
||||
case 31:
|
||||
#line 341 "./getdate.y"
|
||||
#line 343 "./getdate.y"
|
||||
{
|
||||
yyRelSeconds += yyvsp[-1].Number * yyvsp[0].Number * 60L;
|
||||
}
|
||||
break;
|
||||
case 32:
|
||||
#line 344 "./getdate.y"
|
||||
#line 346 "./getdate.y"
|
||||
{
|
||||
yyRelSeconds += yyvsp[0].Number * 60L;
|
||||
}
|
||||
break;
|
||||
case 33:
|
||||
#line 347 "./getdate.y"
|
||||
#line 349 "./getdate.y"
|
||||
{
|
||||
yyRelSeconds += yyvsp[-1].Number;
|
||||
}
|
||||
break;
|
||||
case 34:
|
||||
#line 350 "./getdate.y"
|
||||
#line 352 "./getdate.y"
|
||||
{
|
||||
yyRelSeconds += yyvsp[-1].Number;
|
||||
}
|
||||
break;
|
||||
case 35:
|
||||
#line 353 "./getdate.y"
|
||||
#line 355 "./getdate.y"
|
||||
{
|
||||
yyRelSeconds++;
|
||||
}
|
||||
break;
|
||||
case 36:
|
||||
#line 356 "./getdate.y"
|
||||
#line 358 "./getdate.y"
|
||||
{
|
||||
yyRelMonth += yyvsp[-1].Number * yyvsp[0].Number;
|
||||
}
|
||||
break;
|
||||
case 37:
|
||||
#line 359 "./getdate.y"
|
||||
#line 361 "./getdate.y"
|
||||
{
|
||||
yyRelMonth += yyvsp[-1].Number * yyvsp[0].Number;
|
||||
}
|
||||
break;
|
||||
case 38:
|
||||
#line 362 "./getdate.y"
|
||||
#line 364 "./getdate.y"
|
||||
{
|
||||
yyRelMonth += yyvsp[0].Number;
|
||||
}
|
||||
break;
|
||||
case 39:
|
||||
#line 367 "./getdate.y"
|
||||
#line 369 "./getdate.y"
|
||||
{
|
||||
if (yyHaveTime && yyHaveDate && !yyHaveRel)
|
||||
yyYear = yyvsp[0].Number;
|
||||
|
@ -1523,18 +1525,18 @@ case 39:
|
|||
}
|
||||
break;
|
||||
case 40:
|
||||
#line 394 "./getdate.y"
|
||||
#line 396 "./getdate.y"
|
||||
{
|
||||
yyval.Meridian = MER24;
|
||||
}
|
||||
break;
|
||||
case 41:
|
||||
#line 397 "./getdate.y"
|
||||
#line 399 "./getdate.y"
|
||||
{
|
||||
yyval.Meridian = yyvsp[0].Meridian;
|
||||
}
|
||||
break;
|
||||
#line 1535 "getdate.c"
|
||||
#line 1537 "getdate.c"
|
||||
}
|
||||
yyssp -= yym;
|
||||
yystate = *yyssp;
|
||||
|
|
|
@ -72,9 +72,9 @@
|
|||
*/
|
||||
struct timeb {
|
||||
time_t time; /* Seconds since the epoch */
|
||||
unsigned short millitm; /* Field not used */
|
||||
/*@unused@*/ unsigned short millitm; /* Field not used */
|
||||
short timezone; /* Minutes west of GMT */
|
||||
short dstflag; /* Field not used */
|
||||
/*@unused@*/ short dstflag; /* Field not used */
|
||||
};
|
||||
#endif /* defined(HAVE_SYS_TIMEB_H) */
|
||||
|
||||
|
@ -113,7 +113,9 @@ extern struct tm *gmtime();
|
|||
extern struct tm *localtime();
|
||||
#endif
|
||||
|
||||
/*@-exportheader@*/
|
||||
extern time_t get_date(char * p, struct timeb * now);
|
||||
/*@=exportheader@*/
|
||||
|
||||
#define yyparse getdate_yyparse
|
||||
#define yylex getdate_yylex
|
||||
|
@ -590,7 +592,7 @@ static TABLE const MilitaryTable[] = {
|
|||
|
||||
/* ARGSUSED */
|
||||
static int
|
||||
yyerror(const char * s)
|
||||
yyerror(/*@unused@*/ const char * s)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -79,7 +79,7 @@ HV_t hdrVec; /* forward reference */
|
|||
* @return NULL always
|
||||
*/
|
||||
/*@unused@*/ static inline /*@null@*/ void *
|
||||
_free(/*@only@*/ /*@null@*/ const void * p) /*@modifies *p @*/
|
||||
_free(/*@only@*/ /*@null@*/ /*@out@*/ const void * p) /*@modifies *p @*/
|
||||
{
|
||||
if (p != NULL) free((void *)p);
|
||||
return NULL;
|
||||
|
@ -1054,8 +1054,10 @@ indexEntry findEntry(/*@null@*/ Header h, int_32 tag, int_32 type)
|
|||
return entry;
|
||||
|
||||
last = h->index + h->indexUsed;
|
||||
/*@-usereleased@*/ /* FIX: entry2 = entry. Code looks bogus as well. */
|
||||
while (entry2->info.tag == tag && entry2->info.type != type &&
|
||||
entry2 < last) entry2++;
|
||||
/*@=usereleased@*/
|
||||
|
||||
if (entry->info.tag == tag && entry->info.type == type)
|
||||
return entry;
|
||||
|
|
|
@ -180,6 +180,7 @@ typedef int (*headerTagTagFunction) (Header h,
|
|||
* Define header tag output formats.
|
||||
*/
|
||||
typedef /*@abstract@*/ struct headerSprintfExtension_s * headerSprintfExtension;
|
||||
/*@-fielduse@*/ /* LCL: confused by union? */
|
||||
struct headerSprintfExtension_s {
|
||||
enum headerSprintfExtenstionType type; /*!< Type of extension. */
|
||||
/*@observer@*/ /*@null@*/ const char * name; /*!< Name of extension. */
|
||||
|
@ -190,6 +191,7 @@ struct headerSprintfExtension_s {
|
|||
struct headerSprintfExtension_s * more; /*!< Chained table extension. */
|
||||
} u;
|
||||
};
|
||||
/*@=fielduse@*/
|
||||
|
||||
/** \ingroup header
|
||||
* Supported default header tag output formats.
|
||||
|
|
|
@ -91,8 +91,8 @@ struct extensionCache {
|
|||
|
||||
/** \ingroup header
|
||||
*/
|
||||
/*@-fielduse@*/
|
||||
typedef /*@abstract@*/ struct sprintfToken * sprintfToken;
|
||||
/*@-fielduse@*/
|
||||
struct sprintfToken {
|
||||
enum {
|
||||
PTOK_NONE = 0,
|
||||
|
|
|
@ -4,9 +4,7 @@
|
|||
|
||||
#include "system.h"
|
||||
|
||||
#if !defined(__LCLINT__)
|
||||
#include <netinet/in.h>
|
||||
#endif /* __LCLINT__ */
|
||||
|
||||
#include <rpmlib.h>
|
||||
|
||||
|
@ -19,7 +17,6 @@
|
|||
|
||||
/*@access Header@*/ /* XXX compared with NULL */
|
||||
|
||||
/*@-mods@*/
|
||||
void headerMergeLegacySigs(Header h, const Header sig)
|
||||
{
|
||||
HFD_t hfd = (HFD_t) headerFreeData;
|
||||
|
@ -28,7 +25,9 @@ void headerMergeLegacySigs(Header h, const Header sig)
|
|||
int_32 tag, type, count;
|
||||
const void * ptr;
|
||||
|
||||
/*@-mods@*/ /* FIX: undocumented modification of sig */
|
||||
for (hi = headerInitIterator(sig);
|
||||
/*@=mods@*/
|
||||
headerNextIterator(hi, &tag, &type, &ptr, &count);
|
||||
ptr = hfd(ptr, type))
|
||||
{
|
||||
|
@ -60,7 +59,9 @@ Header headerRegenSigHeader(const Header h)
|
|||
int_32 tag, stag, type, count;
|
||||
const void * ptr;
|
||||
|
||||
/*@-mods@*/ /* FIX: undocumented modification of h */
|
||||
for (hi = headerInitIterator(h);
|
||||
/*@=mods@*/
|
||||
headerNextIterator(hi, &tag, &type, &ptr, &count);
|
||||
ptr = hfd(ptr, type))
|
||||
{
|
||||
|
@ -85,7 +86,6 @@ Header headerRegenSigHeader(const Header h)
|
|||
hi = headerFreeIterator(hi);
|
||||
return sig;
|
||||
}
|
||||
/*@=mods@*/
|
||||
|
||||
/**
|
||||
* Retrieve package components from file handle.
|
||||
|
@ -232,7 +232,7 @@ rpmRC rpmReadPackageHeader(FD_t fd, Header * hdrp, int * isSource, int * major,
|
|||
}
|
||||
|
||||
if (isSource) *isSource = lead.type == RPMLEAD_SOURCE;
|
||||
/*@-mods@*/
|
||||
/*@-mods@*/ /* FIX: undocumented modification */
|
||||
if (major) *major = lead.major;
|
||||
if (minor) *minor = lead.minor;
|
||||
/*@=mods@*/
|
||||
|
|
|
@ -90,7 +90,7 @@ void printDepProblems(FILE * fp,
|
|||
|
||||
#if !defined(HAVE_VSNPRINTF) || defined(__LCLINT__)
|
||||
/*@-shadow -bufferoverflowhigh @*/
|
||||
static inline int vsnprintf(char * buf, /*@unused@*/ int nb,
|
||||
static inline int vsnprintf(/*@out@*/ char * buf, /*@unused@*/ int nb,
|
||||
const char * fmt, va_list ap)
|
||||
{
|
||||
return vsprintf(buf, fmt, ap);
|
||||
|
@ -98,7 +98,7 @@ static inline int vsnprintf(char * buf, /*@unused@*/ int nb,
|
|||
/*@=shadow =bufferoverflowhigh @*/
|
||||
#endif
|
||||
#if !defined(HAVE_SNPRINTF) || defined(__LCLINT__)
|
||||
static inline int snprintf(char * buf, int nb, const char * fmt, ...)
|
||||
static inline int snprintf(/*@out@*/ char * buf, int nb, const char * fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
int rc;
|
||||
|
|
12
lib/psm.c
12
lib/psm.c
|
@ -227,7 +227,7 @@ void freeFi(TFI_t fi)
|
|||
|
||||
fi->h = headerFree(fi->h);
|
||||
|
||||
/*@-nullstate@*/
|
||||
/*@-nullstate@*/ /* FIX: fi->{name,version,release,actions,...,h} NULL */
|
||||
return;
|
||||
/*@=nullstate@*/
|
||||
}
|
||||
|
@ -365,7 +365,7 @@ static int mergeFiles(TFI_t fi, Header h, Header newH)
|
|||
switch (type) {
|
||||
case RPM_CHAR_TYPE:
|
||||
case RPM_INT8_TYPE:
|
||||
newdata = xmalloc(fc * sizeof(int_8));
|
||||
newdata = xcalloc(fc, sizeof(int_8));
|
||||
for (j = 0, k = 0; j < count; j++)
|
||||
if (actions[j] != FA_SKIPMULTILIB)
|
||||
((int_8 *) newdata)[k++] = ((int_8 *) data)[j];
|
||||
|
@ -373,7 +373,7 @@ static int mergeFiles(TFI_t fi, Header h, Header newH)
|
|||
free (newdata);
|
||||
break;
|
||||
case RPM_INT16_TYPE:
|
||||
newdata = xmalloc(fc * sizeof(int_16));
|
||||
newdata = xcalloc(fc, sizeof(int_16));
|
||||
for (j = 0, k = 0; j < count; j++)
|
||||
if (actions[j] != FA_SKIPMULTILIB)
|
||||
((int_16 *) newdata)[k++] = ((int_16 *) data)[j];
|
||||
|
@ -381,7 +381,7 @@ static int mergeFiles(TFI_t fi, Header h, Header newH)
|
|||
free (newdata);
|
||||
break;
|
||||
case RPM_INT32_TYPE:
|
||||
newdata = xmalloc(fc * sizeof(int_32));
|
||||
newdata = xcalloc(fc, sizeof(int_32));
|
||||
for (j = 0, k = 0; j < count; j++)
|
||||
if (actions[j] != FA_SKIPMULTILIB)
|
||||
((int_32 *) newdata)[k++] = ((int_32 *) data)[j];
|
||||
|
@ -389,7 +389,7 @@ static int mergeFiles(TFI_t fi, Header h, Header newH)
|
|||
free (newdata);
|
||||
break;
|
||||
case RPM_STRING_ARRAY_TYPE:
|
||||
newdata = xmalloc(fc * sizeof(char *));
|
||||
newdata = xcalloc(fc, sizeof(char *));
|
||||
for (j = 0, k = 0; j < count; j++)
|
||||
if (actions[j] != FA_SKIPMULTILIB)
|
||||
((char **) newdata)[k++] = ((char **) data)[j];
|
||||
|
@ -413,7 +413,7 @@ static int mergeFiles(TFI_t fi, Header h, Header newH)
|
|||
for (i = 0; i < dirNamesCount; i++)
|
||||
dirNames[i] = ((char **) data)[i];
|
||||
dirCount = dirNamesCount;
|
||||
newdata = xmalloc(fc * sizeof(int_32));
|
||||
newdata = xcalloc(fc, sizeof(int_32));
|
||||
for (i = 0, k = 0; i < count; i++) {
|
||||
if (actions[i] == FA_SKIPMULTILIB)
|
||||
continue;
|
||||
|
|
|
@ -356,14 +356,10 @@ int rpmCheckSig(rpmCheckSigFlags flags, const char ** argv)
|
|||
if (tempKey) {
|
||||
if (res3 == RPMSIG_NOKEY) {
|
||||
strcat(missingKeys, " PGP#");
|
||||
/*@-compdef@*/
|
||||
strncat(missingKeys, tempKey + offset, 8);
|
||||
/*@=compdef@*/
|
||||
} else {
|
||||
strcat(untrustedKeys, " PGP#");
|
||||
/*@-compdef@*/
|
||||
strncat(untrustedKeys, tempKey + offset, 8);
|
||||
/*@=compdef@*/
|
||||
}
|
||||
}
|
||||
} break;
|
||||
|
@ -381,9 +377,7 @@ int rpmCheckSig(rpmCheckSigFlags flags, const char ** argv)
|
|||
strcat(missingKeys, " GPG#");
|
||||
tempKey = strstr(result, "key ID");
|
||||
if (tempKey)
|
||||
/*@-compdef@*/
|
||||
strncat(missingKeys, tempKey+7, 8);
|
||||
/*@=compdef@*/
|
||||
break;
|
||||
default:
|
||||
strcat(buffer, "GPG ");
|
||||
|
|
|
@ -320,6 +320,7 @@ struct rpmInstallArguments_s {
|
|||
/**
|
||||
* A rollback transaction id element.
|
||||
*/
|
||||
/*@-fielduse@*/
|
||||
typedef /*@abstract@*/ struct IDT_s {
|
||||
unsigned int instance; /*!< installed package transaction id. */
|
||||
/*@owned@*/ /*@null@*/ const char * key; /*! removed package file name. */
|
||||
|
@ -328,6 +329,7 @@ typedef /*@abstract@*/ struct IDT_s {
|
|||
int_32 i32; /*!< install/remove transaction id */
|
||||
} val;
|
||||
} * IDT;
|
||||
/*@=fielduse@*/
|
||||
|
||||
/**
|
||||
* A rollback transaction id index.
|
||||
|
|
|
@ -676,10 +676,8 @@ int rpmInstallSource(const char * rootdir, const char * arg,
|
|||
fprintf(stdout, _("Installing %s\n"), arg);
|
||||
|
||||
{
|
||||
/*@-mayaliasunique@*/
|
||||
rpmRC rpmrc = rpmInstallSourcePackage(rootdir, fd, specFile, NULL, NULL,
|
||||
cookie);
|
||||
/*@=mayaliasunique@*/
|
||||
rc = (rpmrc == RPMRC_OK ? 0 : 1);
|
||||
}
|
||||
if (rc != 0) {
|
||||
|
|
|
@ -8,9 +8,7 @@
|
|||
# include <machine/types.h>
|
||||
#endif
|
||||
|
||||
#if !defined(__LCLINT__)
|
||||
#include <netinet/in.h>
|
||||
#endif /* __LCLINT__ */
|
||||
|
||||
#include <rpmlib.h>
|
||||
|
||||
|
|
|
@ -37,7 +37,7 @@ extern "C" {
|
|||
* @return NULL always
|
||||
*/
|
||||
/*@unused@*/ static inline /*@null@*/ void *
|
||||
_free(/*@only@*/ /*@null@*/ const void * p)
|
||||
_free(/*@only@*/ /*@null@*/ /*@out@*/ const void * p)
|
||||
/*@modifies p @*/
|
||||
{
|
||||
if (p != NULL) free((void *)p);
|
||||
|
|
10
lib/rpmrc.c
10
lib/rpmrc.c
|
@ -307,10 +307,13 @@ static int addCanon(canonEntry * table, int * tableLen, char * line,
|
|||
const char * tshort_name;
|
||||
int tnum;
|
||||
|
||||
#ifdef DYING
|
||||
if (! *tableLen) {
|
||||
*tableLen = 2;
|
||||
*table = xmalloc(2 * sizeof(struct canonEntry_s));
|
||||
} else {
|
||||
} else
|
||||
#endif
|
||||
{
|
||||
(*tableLen) += 2;
|
||||
/*@-unqualifiedtrans@*/
|
||||
*table = xrealloc(*table, sizeof(struct canonEntry_s) * (*tableLen));
|
||||
|
@ -360,10 +363,13 @@ static int addDefault(defaultEntry * table, int * tableLen, char * line,
|
|||
{
|
||||
defaultEntry t;
|
||||
|
||||
#ifdef DYING
|
||||
if (! *tableLen) {
|
||||
*tableLen = 1;
|
||||
*table = xmalloc(sizeof(struct defaultEntry_s));
|
||||
} else {
|
||||
} else
|
||||
#endif
|
||||
{
|
||||
(*tableLen)++;
|
||||
/*@-unqualifiedtrans@*/
|
||||
*table = xrealloc(*table, sizeof(struct defaultEntry_s) * (*tableLen));
|
||||
|
|
|
@ -201,11 +201,9 @@ rpmRC rpmReadSignature(FD_t fd, Header * headerp, sigType sig_type)
|
|||
break;
|
||||
}
|
||||
|
||||
if (rc == 0 && headerp)
|
||||
/*@-nullderef@*/
|
||||
if (headerp && rc == 0)
|
||||
*headerp = h;
|
||||
/*@=nullderef@*/
|
||||
else if (h)
|
||||
else
|
||||
h = headerFree(h);
|
||||
|
||||
return rc;
|
||||
|
|
|
@ -29,7 +29,7 @@ struct StringBufRec {
|
|||
* @return NULL always
|
||||
*/
|
||||
/*@unused@*/ static inline /*@null@*/ void *
|
||||
_free(/*@only@*/ /*@null@*/ const void * p) /*@modifies *p @*/
|
||||
_free(/*@only@*/ /*@null@*/ /*@out@*/ const void * p) /*@modifies *p @*/
|
||||
{
|
||||
if (p != NULL) free((void *)p);
|
||||
return NULL;
|
||||
|
@ -93,7 +93,7 @@ void appendStringBufAux(StringBuf sb, const char *s, int nl)
|
|||
sb->tail = sb->buf + (sb->allocated - sb->free);
|
||||
}
|
||||
|
||||
/*@-mayaliasunique@*/
|
||||
/*@-mayaliasunique@*/ /* FIX: shrug */
|
||||
strcpy(sb->tail, s);
|
||||
/*@=mayaliasunique@*/
|
||||
sb->tail += l;
|
||||
|
|
|
@ -125,7 +125,7 @@ static rpmProblemSet psCreate(void)
|
|||
{
|
||||
rpmProblemSet probs;
|
||||
|
||||
probs = xmalloc(sizeof(*probs)); /* XXX memory leak */
|
||||
probs = xcalloc(1, sizeof(*probs)); /* XXX memory leak */
|
||||
probs->numProblems = probs->numProblemsAlloced = 0;
|
||||
probs->probs = NULL;
|
||||
|
||||
|
@ -136,7 +136,7 @@ static void psAppend(rpmProblemSet probs, rpmProblemType type,
|
|||
const struct availablePackage * alp,
|
||||
const char * dn, const char *bn,
|
||||
Header altH, unsigned long ulong1)
|
||||
/*@modifies probs, alp @*/
|
||||
/*@modifies *probs, alp @*/
|
||||
{
|
||||
rpmProblem p;
|
||||
char *t;
|
||||
|
@ -150,50 +150,51 @@ static void psAppend(rpmProblemSet probs, rpmProblemType type,
|
|||
probs->numProblemsAlloced * sizeof(*probs->probs));
|
||||
}
|
||||
|
||||
p = probs->probs + probs->numProblems++;
|
||||
p = probs->probs + probs->numProblems;
|
||||
probs->numProblems++;
|
||||
memset(p, 0, sizeof(*p));
|
||||
p->type = type;
|
||||
/*@-assignexpose@*/
|
||||
p->key = alp->key;
|
||||
/*@=assignexpose@*/
|
||||
p->ulong1 = ulong1;
|
||||
p->ignoreProblem = 0;
|
||||
p->str1 = NULL;
|
||||
p->h = NULL;
|
||||
p->pkgNEVR = NULL;
|
||||
p->altNEVR = NULL;
|
||||
|
||||
if (dn || bn) {
|
||||
p->str1 =
|
||||
t = xmalloc((dn ? strlen(dn) : 0) + (bn ? strlen(bn) : 0) + 1);
|
||||
t = xcalloc(1, (dn ? strlen(dn) : 0) + (bn ? strlen(bn) : 0) + 1);
|
||||
if (dn) t = stpcpy(t, dn);
|
||||
if (bn) t = stpcpy(t, bn);
|
||||
} else
|
||||
p->str1 = NULL;
|
||||
}
|
||||
|
||||
if (alp) {
|
||||
p->h = headerLink(alp->h);
|
||||
p->pkgNEVR =
|
||||
t = xmalloc(strlen(alp->name) +
|
||||
strlen(alp->version) +
|
||||
strlen(alp->release) + sizeof("--"));
|
||||
t = xcalloc(1, strlen(alp->name) +
|
||||
strlen(alp->version) +
|
||||
strlen(alp->release) + sizeof("--"));
|
||||
t = stpcpy(t, alp->name);
|
||||
t = stpcpy(t, "-");
|
||||
t = stpcpy(t, alp->version);
|
||||
t = stpcpy(t, "-");
|
||||
t = stpcpy(t, alp->release);
|
||||
} else {
|
||||
p->h = NULL;
|
||||
p->pkgNEVR = NULL;
|
||||
}
|
||||
|
||||
if (altH) {
|
||||
const char * n, * v, * r;
|
||||
(void) headerNVR(altH, &n, &v, &r);
|
||||
p->altNEVR =
|
||||
t = xmalloc(strlen(n) + strlen(v) + strlen(r) + sizeof("--"));
|
||||
t = xcalloc(1, strlen(n) + strlen(v) + strlen(r) + sizeof("--"));
|
||||
t = stpcpy(t, n);
|
||||
t = stpcpy(t, "-");
|
||||
t = stpcpy(t, v);
|
||||
t = stpcpy(t, "-");
|
||||
t = stpcpy(t, r);
|
||||
} else
|
||||
p->altNEVR = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
static int archOkay(Header h)
|
||||
|
@ -1576,7 +1577,7 @@ int rpmRunTransactions( rpmTransactionSet ts,
|
|||
struct stat sb;
|
||||
|
||||
ts->di = _free(ts->di);
|
||||
dip = ts->di = xcalloc(sizeof(*ts->di), ts->filesystemCount + 1);
|
||||
dip = ts->di = xcalloc((ts->filesystemCount + 1), sizeof(*ts->di));
|
||||
|
||||
for (i = 0; (i < ts->filesystemCount) && dip; i++) {
|
||||
#if STATFS_IN_SYS_STATVFS
|
||||
|
@ -1822,7 +1823,7 @@ int rpmRunTransactions( rpmTransactionSet ts,
|
|||
if (fi->fc == 0) continue;
|
||||
|
||||
/* Extract file info for all files in this package from the database. */
|
||||
matches = xcalloc(sizeof(*matches), fi->fc);
|
||||
matches = xcalloc(fi->fc, sizeof(*matches));
|
||||
if (rpmdbFindFpList(ts->rpmdb, fi->fps, matches, fi->fc))
|
||||
return 1; /* XXX WTFO? */
|
||||
|
||||
|
@ -1831,7 +1832,7 @@ int rpmRunTransactions( rpmTransactionSet ts,
|
|||
numShared += dbiIndexSetCount(matches[i]);
|
||||
|
||||
/* Build sorted file info list for this package. */
|
||||
shared = sharedList = xmalloc((numShared + 1) * sizeof(*sharedList));
|
||||
shared = sharedList = xcalloc((numShared + 1), sizeof(*sharedList));
|
||||
for (i = 0; i < fi->fc; i++) {
|
||||
/*
|
||||
* Take care not to mark files as replaced in packages that will
|
||||
|
|
336
po/rpm.pot
336
po/rpm.pot
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,438 @@
|
|||
#! /bin/sh
|
||||
# Output a system dependent table of character encoding aliases.
|
||||
#
|
||||
# Copyright (C) 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 Library General Public License as published
|
||||
# by the Free Software Foundation; either version 2, or (at your option)
|
||||
# any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
# Library General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Library General Public
|
||||
# License along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||
# USA.
|
||||
#
|
||||
# The table consists of lines of the form
|
||||
# ALIAS CANONICAL
|
||||
#
|
||||
# ALIAS is the (system dependent) result of "nl_langinfo (CODESET)".
|
||||
# ALIAS is compared in a case sensitive way.
|
||||
#
|
||||
# CANONICAL is the GNU canonical name for this character encoding.
|
||||
# It must be an encoding supported by libiconv. Support by GNU libc is
|
||||
# also desirable. CANONICAL is case insensitive. Usually an upper case
|
||||
# MIME charset name is preferred.
|
||||
# The current list of GNU canonical charset names is as follows.
|
||||
#
|
||||
# name used by which systems a MIME name?
|
||||
# ASCII, ANSI_X3.4-1968 glibc solaris freebsd
|
||||
# ISO-8859-1 glibc aix hpux irix osf solaris freebsd yes
|
||||
# ISO-8859-2 glibc aix hpux irix osf solaris freebsd yes
|
||||
# ISO-8859-3 glibc yes
|
||||
# ISO-8859-4 osf solaris freebsd yes
|
||||
# ISO-8859-5 glibc aix hpux irix osf solaris freebsd yes
|
||||
# ISO-8859-6 glibc aix hpux solaris yes
|
||||
# ISO-8859-7 glibc aix hpux irix osf solaris yes
|
||||
# ISO-8859-8 glibc aix hpux osf solaris yes
|
||||
# ISO-8859-9 glibc aix hpux irix osf solaris yes
|
||||
# ISO-8859-13 glibc
|
||||
# ISO-8859-15 glibc aix osf solaris freebsd
|
||||
# KOI8-R glibc solaris freebsd yes
|
||||
# KOI8-U glibc freebsd yes
|
||||
# CP437 dos
|
||||
# CP775 dos
|
||||
# CP850 aix osf dos
|
||||
# CP852 dos
|
||||
# CP855 dos
|
||||
# CP856 aix
|
||||
# CP857 dos
|
||||
# CP861 dos
|
||||
# CP862 dos
|
||||
# CP864 dos
|
||||
# CP865 dos
|
||||
# CP866 freebsd dos
|
||||
# CP869 dos
|
||||
# CP874 win32 dos
|
||||
# CP922 aix
|
||||
# CP932 aix win32 dos
|
||||
# CP943 aix
|
||||
# CP949 osf win32 dos
|
||||
# CP950 win32 dos
|
||||
# CP1046 aix
|
||||
# CP1124 aix
|
||||
# CP1129 aix
|
||||
# CP1250 win32
|
||||
# CP1251 glibc win32
|
||||
# CP1252 aix win32
|
||||
# CP1253 win32
|
||||
# CP1254 win32
|
||||
# CP1255 win32
|
||||
# CP1256 win32
|
||||
# CP1257 win32
|
||||
# GB2312 glibc aix hpux irix solaris freebsd yes
|
||||
# EUC-JP glibc aix hpux irix osf solaris freebsd yes
|
||||
# EUC-KR glibc aix hpux irix osf solaris freebsd yes
|
||||
# EUC-TW glibc aix hpux irix osf solaris
|
||||
# BIG5 glibc aix hpux osf solaris freebsd yes
|
||||
# BIG5HKSCS glibc
|
||||
# GBK aix osf win32 dos
|
||||
# GB18030 glibc
|
||||
# SJIS hpux osf solaris freebsd
|
||||
# JOHAB glibc win32
|
||||
# TIS-620 glibc aix hpux osf solaris
|
||||
# VISCII glibc yes
|
||||
# HP-ROMAN8 hpux
|
||||
# HP-ARABIC8 hpux
|
||||
# HP-GREEK8 hpux
|
||||
# HP-HEBREW8 hpux
|
||||
# HP-TURKISH8 hpux
|
||||
# HP-KANA8 hpux
|
||||
# DEC-KANJI osf
|
||||
# DEC-HANYU osf
|
||||
# UTF-8 glibc aix hpux osf solaris yes
|
||||
#
|
||||
# Note: Names which are not marked as being a MIME name should not be used in
|
||||
# Internet protocols for information interchange (mail, news, etc.).
|
||||
#
|
||||
# Note: ASCII and ANSI_X3.4-1968 are synonymous canonical names. Applications
|
||||
# must understand both names and treat them as equivalent.
|
||||
#
|
||||
# The first argument passed to this file is the canonical host specification,
|
||||
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
|
||||
# or
|
||||
# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
|
||||
|
||||
host="$1"
|
||||
os=`echo "$host" | sed -e 's/^[^-]*-[^-]*-\(.*\)$/\1/'`
|
||||
echo "# This file contains a table of character encoding aliases,"
|
||||
echo "# suitable for operating system '${os}'."
|
||||
echo "# It was automatically generated from config.charset."
|
||||
# List of references, updated during installation:
|
||||
echo "# Packages using this file: "
|
||||
case "$os" in
|
||||
linux* | *-gnu*)
|
||||
# With glibc-2.1 or newer, we don't need any canonicalization,
|
||||
# because glibc has iconv and both glibc and libiconv support all
|
||||
# GNU canonical names directly. Therefore, the Makefile does not
|
||||
# need to install the alias file at all.
|
||||
# The following applies only to glibc-2.0.x and older libcs.
|
||||
echo "ISO_646.IRV:1983 ASCII"
|
||||
;;
|
||||
aix*)
|
||||
echo "ISO8859-1 ISO-8859-1"
|
||||
echo "ISO8859-2 ISO-8859-2"
|
||||
echo "ISO8859-5 ISO-8859-5"
|
||||
echo "ISO8859-6 ISO-8859-6"
|
||||
echo "ISO8859-7 ISO-8859-7"
|
||||
echo "ISO8859-8 ISO-8859-8"
|
||||
echo "ISO8859-9 ISO-8859-9"
|
||||
echo "ISO8859-15 ISO-8859-15"
|
||||
echo "IBM-850 CP850"
|
||||
echo "IBM-856 CP856"
|
||||
echo "IBM-921 ISO-8859-13"
|
||||
echo "IBM-922 CP922"
|
||||
echo "IBM-932 CP932"
|
||||
echo "IBM-943 CP943"
|
||||
echo "IBM-1046 CP1046"
|
||||
echo "IBM-1124 CP1124"
|
||||
echo "IBM-1129 CP1129"
|
||||
echo "IBM-1252 CP1252"
|
||||
echo "IBM-eucCN GB2312"
|
||||
echo "IBM-eucJP EUC-JP"
|
||||
echo "IBM-eucKR EUC-KR"
|
||||
echo "IBM-eucTW EUC-TW"
|
||||
echo "big5 BIG5"
|
||||
echo "GBK GBK"
|
||||
echo "TIS-620 TIS-620"
|
||||
echo "UTF-8 UTF-8"
|
||||
;;
|
||||
hpux*)
|
||||
echo "iso88591 ISO-8859-1"
|
||||
echo "iso88592 ISO-8859-2"
|
||||
echo "iso88595 ISO-8859-5"
|
||||
echo "iso88596 ISO-8859-6"
|
||||
echo "iso88597 ISO-8859-7"
|
||||
echo "iso88598 ISO-8859-8"
|
||||
echo "iso88599 ISO-8859-9"
|
||||
echo "iso885915 ISO-8859-15"
|
||||
echo "roman8 HP-ROMAN8"
|
||||
echo "arabic8 HP-ARABIC8"
|
||||
echo "greek8 HP-GREEK8"
|
||||
echo "hebrew8 HP-HEBREW8"
|
||||
echo "turkish8 HP-TURKISH8"
|
||||
echo "kana8 HP-KANA8"
|
||||
echo "tis620 TIS-620"
|
||||
echo "big5 BIG5"
|
||||
echo "eucJP EUC-JP"
|
||||
echo "eucKR EUC-KR"
|
||||
echo "eucTW EUC-TW"
|
||||
echo "hp15CN GB2312"
|
||||
#echo "ccdc ?" # what is this?
|
||||
echo "SJIS SJIS"
|
||||
echo "utf8 UTF-8"
|
||||
;;
|
||||
irix*)
|
||||
echo "ISO8859-1 ISO-8859-1"
|
||||
echo "ISO8859-2 ISO-8859-2"
|
||||
echo "ISO8859-5 ISO-8859-5"
|
||||
echo "ISO8859-7 ISO-8859-7"
|
||||
echo "ISO8859-9 ISO-8859-9"
|
||||
echo "eucCN GB2312"
|
||||
echo "eucJP EUC-JP"
|
||||
echo "eucKR EUC-KR"
|
||||
echo "eucTW EUC-TW"
|
||||
;;
|
||||
osf*)
|
||||
echo "ISO8859-1 ISO-8859-1"
|
||||
echo "ISO8859-2 ISO-8859-2"
|
||||
echo "ISO8859-4 ISO-8859-4"
|
||||
echo "ISO8859-5 ISO-8859-5"
|
||||
echo "ISO8859-7 ISO-8859-7"
|
||||
echo "ISO8859-8 ISO-8859-8"
|
||||
echo "ISO8859-9 ISO-8859-9"
|
||||
echo "ISO8859-15 ISO-8859-15"
|
||||
echo "cp850 CP850"
|
||||
echo "big5 BIG5"
|
||||
echo "dechanyu DEC-HANYU"
|
||||
echo "dechanzi GB2312"
|
||||
echo "deckanji DEC-KANJI"
|
||||
echo "deckorean EUC-KR"
|
||||
echo "eucJP EUC-JP"
|
||||
echo "eucKR EUC-KR"
|
||||
echo "eucTW EUC-TW"
|
||||
echo "GBK GBK"
|
||||
echo "KSC5601 CP949"
|
||||
echo "sdeckanji EUC-JP"
|
||||
echo "SJIS SJIS"
|
||||
echo "TACTIS TIS-620"
|
||||
echo "UTF-8 UTF-8"
|
||||
;;
|
||||
solaris*)
|
||||
echo "646 ASCII"
|
||||
echo "ISO8859-1 ISO-8859-1"
|
||||
echo "ISO8859-2 ISO-8859-2"
|
||||
echo "ISO8859-4 ISO-8859-4"
|
||||
echo "ISO8859-5 ISO-8859-5"
|
||||
echo "ISO8859-6 ISO-8859-6"
|
||||
echo "ISO8859-7 ISO-8859-7"
|
||||
echo "ISO8859-8 ISO-8859-8"
|
||||
echo "ISO8859-9 ISO-8859-9"
|
||||
echo "ISO8859-15 ISO-8859-15"
|
||||
echo "koi8-r KOI8-R"
|
||||
echo "BIG5 BIG5"
|
||||
echo "gb2312 GB2312"
|
||||
echo "cns11643 EUC-TW"
|
||||
echo "5601 EUC-KR"
|
||||
echo "eucJP EUC-JP"
|
||||
echo "PCK SJIS"
|
||||
echo "TIS620.2533 TIS-620"
|
||||
#echo "sun_eu_greek ?" # what is this?
|
||||
echo "UTF-8 UTF-8"
|
||||
;;
|
||||
freebsd*)
|
||||
# FreeBSD 4.2 doesn't have nl_langinfo(CODESET); therefore
|
||||
# localcharset.c falls back to using the full locale name
|
||||
# from the environment variables.
|
||||
echo "C ASCII"
|
||||
echo "US-ASCII ASCII"
|
||||
for l in la_LN lt_LN; do
|
||||
echo "$l.ASCII ASCII"
|
||||
done
|
||||
for l in da_DK de_AT de_CH de_DE en_AU en_CA en_GB en_US es_ES \
|
||||
fi_FI fr_BE fr_CA fr_CH fr_FR is_IS it_CH it_IT la_LN \
|
||||
lt_LN nl_BE nl_NL no_NO pt_PT sv_SE; do
|
||||
echo "$l.ISO_8859-1 ISO-8859-1"
|
||||
echo "$l.DIS_8859-15 ISO-8859-15"
|
||||
done
|
||||
for l in cs_CZ hr_HR hu_HU la_LN lt_LN pl_PL sl_SI; do
|
||||
echo "$l.ISO_8859-2 ISO-8859-2"
|
||||
done
|
||||
for l in la_LN lt_LT; do
|
||||
echo "$l.ISO_8859-4 ISO-8859-4"
|
||||
done
|
||||
for l in ru_RU ru_SU; do
|
||||
echo "$l.KOI8-R KOI8-R"
|
||||
echo "$l.ISO_8859-5 ISO-8859-5"
|
||||
echo "$l.CP866 CP866"
|
||||
done
|
||||
echo "uk_UA.KOI8-U KOI8-U"
|
||||
echo "zh_TW.BIG5 BIG5"
|
||||
echo "zh_TW.Big5 BIG5"
|
||||
echo "zh_CN.EUC GB2312"
|
||||
echo "ja_JP.EUC EUC-JP"
|
||||
echo "ja_JP.SJIS SJIS"
|
||||
echo "ja_JP.Shift_JIS SJIS"
|
||||
echo "ko_KR.EUC EUC-KR"
|
||||
;;
|
||||
beos*)
|
||||
# BeOS has a single locale, and it has UTF-8 encoding.
|
||||
echo "* UTF-8"
|
||||
;;
|
||||
msdosdjgpp*)
|
||||
# DJGPP 2.03 doesn't have nl_langinfo(CODESET); therefore
|
||||
# localcharset.c falls back to using the full locale name
|
||||
# from the environment variables.
|
||||
echo "#"
|
||||
echo "# The encodings given here may not all be correct."
|
||||
echo "# If you find that the encoding given for your language and"
|
||||
echo "# country is not the one your DOS machine actually uses, just"
|
||||
echo "# correct it in this file, and send a mail to"
|
||||
echo "# Juan Manuel Guerrero <st001906@hrz1.hrz.tu-darmstadt.de>"
|
||||
echo "# and Bruno Haible <haible@clisp.cons.org>."
|
||||
echo "#"
|
||||
echo "C ASCII"
|
||||
# ISO-8859-1 languages
|
||||
echo "ca CP850"
|
||||
echo "ca_ES CP850"
|
||||
echo "da CP865" # not CP850 ??
|
||||
echo "da_DK CP865" # not CP850 ??
|
||||
echo "de CP850"
|
||||
echo "de_AT CP850"
|
||||
echo "de_CH CP850"
|
||||
echo "de_DE CP850"
|
||||
echo "en CP850"
|
||||
echo "en_AU CP850" # not CP437 ??
|
||||
echo "en_CA CP850"
|
||||
echo "en_GB CP850"
|
||||
echo "en_NZ CP437"
|
||||
echo "en_US CP437"
|
||||
echo "en_ZA CP850" # not CP437 ??
|
||||
echo "es CP850"
|
||||
echo "es_AR CP850"
|
||||
echo "es_BO CP850"
|
||||
echo "es_CL CP850"
|
||||
echo "es_CO CP850"
|
||||
echo "es_CR CP850"
|
||||
echo "es_CU CP850"
|
||||
echo "es_DO CP850"
|
||||
echo "es_EC CP850"
|
||||
echo "es_ES CP850"
|
||||
echo "es_GT CP850"
|
||||
echo "es_HN CP850"
|
||||
echo "es_MX CP850"
|
||||
echo "es_NI CP850"
|
||||
echo "es_PA CP850"
|
||||
echo "es_PY CP850"
|
||||
echo "es_PE CP850"
|
||||
echo "es_SV CP850"
|
||||
echo "es_UY CP850"
|
||||
echo "es_VE CP850"
|
||||
echo "et CP850"
|
||||
echo "et_EE CP850"
|
||||
echo "eu CP850"
|
||||
echo "eu_ES CP850"
|
||||
echo "fi CP850"
|
||||
echo "fi_FI CP850"
|
||||
echo "fr CP850"
|
||||
echo "fr_BE CP850"
|
||||
echo "fr_CA CP850"
|
||||
echo "fr_CH CP850"
|
||||
echo "fr_FR CP850"
|
||||
echo "ga CP850"
|
||||
echo "ga_IE CP850"
|
||||
echo "gd CP850"
|
||||
echo "gd_GB CP850"
|
||||
echo "gl CP850"
|
||||
echo "gl_ES CP850"
|
||||
echo "id CP850" # not CP437 ??
|
||||
echo "id_ID CP850" # not CP437 ??
|
||||
echo "is CP861" # not CP850 ??
|
||||
echo "is_IS CP861" # not CP850 ??
|
||||
echo "it CP850"
|
||||
echo "it_CH CP850"
|
||||
echo "it_IT CP850"
|
||||
echo "lt CP775"
|
||||
echo "lt_LT CP775"
|
||||
echo "lv CP775"
|
||||
echo "lv_LV CP775"
|
||||
echo "nb CP865" # not CP850 ??
|
||||
echo "nb_NO CP865" # not CP850 ??
|
||||
echo "nl CP850"
|
||||
echo "nl_BE CP850"
|
||||
echo "nl_NL CP850"
|
||||
echo "nn CP865" # not CP850 ??
|
||||
echo "nn_NO CP865" # not CP850 ??
|
||||
echo "no CP865" # not CP850 ??
|
||||
echo "no_NO CP865" # not CP850 ??
|
||||
echo "pt CP850"
|
||||
echo "pt_BR CP850"
|
||||
echo "pt_PT CP850"
|
||||
echo "sv CP850"
|
||||
echo "sv_SE CP850"
|
||||
# ISO-8859-2 languages
|
||||
echo "cs CP852"
|
||||
echo "cs_CZ CP852"
|
||||
echo "hr CP852"
|
||||
echo "hr_HR CP852"
|
||||
echo "hu CP852"
|
||||
echo "hu_HU CP852"
|
||||
echo "pl CP852"
|
||||
echo "pl_PL CP852"
|
||||
echo "ro CP852"
|
||||
echo "ro_RO CP852"
|
||||
echo "sk CP852"
|
||||
echo "sk_SK CP852"
|
||||
echo "sl CP852"
|
||||
echo "sl_SI CP852"
|
||||
echo "sq CP852"
|
||||
echo "sq_AL CP852"
|
||||
echo "sr CP852" # CP852 or CP866 or CP855 ??
|
||||
echo "sr_YU CP852" # CP852 or CP866 or CP855 ??
|
||||
# ISO-8859-3 languages
|
||||
echo "mt CP850"
|
||||
echo "mt_MT CP850"
|
||||
# ISO-8859-5 languages
|
||||
echo "be CP866"
|
||||
echo "be_BE CP866"
|
||||
echo "bg CP866" # not CP855 ??
|
||||
echo "bg_BG CP866" # not CP855 ??
|
||||
echo "mk CP866" # not CP855 ??
|
||||
echo "mk_MK CP866" # not CP855 ??
|
||||
echo "ru KOI8-R" # not CP866 ??
|
||||
echo "ru_RU KOI8-R" # not CP866 ??
|
||||
# ISO-8859-6 languages
|
||||
echo "ar CP864"
|
||||
echo "ar_AE CP864"
|
||||
echo "ar_DZ CP864"
|
||||
echo "ar_EG CP864"
|
||||
echo "ar_IQ CP864"
|
||||
echo "ar_IR CP864"
|
||||
echo "ar_JO CP864"
|
||||
echo "ar_KW CP864"
|
||||
echo "ar_MA CP864"
|
||||
echo "ar_OM CP864"
|
||||
echo "ar_QA CP864"
|
||||
echo "ar_SA CP864"
|
||||
echo "ar_SY CP864"
|
||||
# ISO-8859-7 languages
|
||||
echo "el CP869"
|
||||
echo "el_GR CP869"
|
||||
# ISO-8859-8 languages
|
||||
echo "he CP862"
|
||||
echo "he_IL CP862"
|
||||
# ISO-8859-9 languages
|
||||
echo "tr CP857"
|
||||
echo "tr_TR CP857"
|
||||
# Japanese
|
||||
echo "ja CP932"
|
||||
echo "ja_JP CP932"
|
||||
# Chinese
|
||||
echo "zh_CN GBK"
|
||||
echo "zh_TW CP950" # not CP938 ??
|
||||
# Korean
|
||||
echo "kr CP949" # not CP934 ??
|
||||
echo "kr_KR CP949" # not CP934 ??
|
||||
# Thai
|
||||
echo "th CP874"
|
||||
echo "th_TH CP874"
|
||||
# Other
|
||||
echo "eo CP850"
|
||||
echo "eo_EO CP850"
|
||||
;;
|
||||
esac
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,59 @@
|
|||
/* Implementation of the dcngettext(3) function.
|
||||
Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software Foundation,
|
||||
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include "gettextP.h"
|
||||
#ifdef _LIBC
|
||||
# include <libintl.h>
|
||||
#else
|
||||
# include "libgnuintl.h"
|
||||
#endif
|
||||
|
||||
/* @@ end of prolog @@ */
|
||||
|
||||
/* Names for the libintl functions are a problem. They must not clash
|
||||
with existing names and they should follow ANSI C. But this source
|
||||
code is also used in GNU C Library where the names have a __
|
||||
prefix. So we have to make a difference here. */
|
||||
#ifdef _LIBC
|
||||
# define DCNGETTEXT __dcngettext
|
||||
# define DCIGETTEXT __dcigettext
|
||||
#else
|
||||
# define DCNGETTEXT dcngettext__
|
||||
# define DCIGETTEXT 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;
|
||||
{
|
||||
return DCIGETTEXT (domainname, msgid1, msgid2, 1, n, category);
|
||||
}
|
||||
|
||||
#ifdef _LIBC
|
||||
/* Alias for function name in GNU C Library. */
|
||||
weak_alias (__dcngettext, dcngettext);
|
||||
#endif
|
|
@ -0,0 +1,60 @@
|
|||
/* Implementation of the dngettext(3) function.
|
||||
Copyright (C) 1995-1997, 2000, 2001 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software Foundation,
|
||||
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include <locale.h>
|
||||
|
||||
#include "gettextP.h"
|
||||
#ifdef _LIBC
|
||||
# include <libintl.h>
|
||||
#else
|
||||
# include "libgnuintl.h"
|
||||
#endif
|
||||
|
||||
/* @@ end of prolog @@ */
|
||||
|
||||
/* Names for the libintl functions are a problem. They must not clash
|
||||
with existing names and they should follow ANSI C. But this source
|
||||
code is also used in GNU C Library where the names have a __
|
||||
prefix. So we have to make a difference here. */
|
||||
#ifdef _LIBC
|
||||
# define DNGETTEXT __dngettext
|
||||
# define DCNGETTEXT __dcngettext
|
||||
#else
|
||||
# define DNGETTEXT dngettext__
|
||||
# define DCNGETTEXT 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;
|
||||
{
|
||||
return DCNGETTEXT (domainname, msgid1, msgid2, n, LC_MESSAGES);
|
||||
}
|
||||
|
||||
#ifdef _LIBC
|
||||
/* Alias for function name in GNU C Library. */
|
||||
weak_alias (__dngettext, dngettext);
|
||||
#endif
|
|
@ -0,0 +1,127 @@
|
|||
/* 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 */
|
|
@ -0,0 +1,271 @@
|
|||
/* Determine a canonical name for the current locale's character encoding.
|
||||
|
||||
Copyright (C) 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 Library General Public License as published
|
||||
by the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||
USA. */
|
||||
|
||||
/* Written by Bruno Haible <haible@clisp.cons.org>. */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#if HAVE_STDDEF_H
|
||||
# include <stddef.h>
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
#if HAVE_STRING_H
|
||||
# include <string.h>
|
||||
#else
|
||||
# include <strings.h>
|
||||
#endif
|
||||
#if HAVE_STDLIB_H
|
||||
# include <stdlib.h>
|
||||
#endif
|
||||
|
||||
#if defined _WIN32 || defined __WIN32__
|
||||
# undef WIN32 /* avoid warning on mingw32 */
|
||||
# define WIN32
|
||||
#endif
|
||||
|
||||
#ifndef WIN32
|
||||
# if HAVE_LANGINFO_CODESET
|
||||
# include <langinfo.h>
|
||||
# else
|
||||
# if HAVE_SETLOCALE
|
||||
# include <locale.h>
|
||||
# endif
|
||||
# endif
|
||||
#else /* WIN32 */
|
||||
# define WIN32_LEAN_AND_MEAN
|
||||
# include <windows.h>
|
||||
#endif
|
||||
|
||||
#ifndef DIRECTORY_SEPARATOR
|
||||
# define DIRECTORY_SEPARATOR '/'
|
||||
#endif
|
||||
|
||||
#ifndef ISSLASH
|
||||
# define ISSLASH(C) ((C) == DIRECTORY_SEPARATOR)
|
||||
#endif
|
||||
|
||||
/* The following static variable is declared 'volatile' to avoid a
|
||||
possible multithread problem in the function get_charset_aliases. If we
|
||||
are running in a threaded environment, and if two threads initialize
|
||||
'charset_aliases' simultaneously, both will produce the same value,
|
||||
and everything will be ok if the two assignments to 'charset_aliases'
|
||||
are atomic. But I don't know what will happen if the two assignments mix. */
|
||||
#if __STDC__ != 1
|
||||
# define volatile /* empty */
|
||||
#endif
|
||||
/* Pointer to the contents of the charset.alias file, if it has already been
|
||||
read, else NULL. Its format is:
|
||||
ALIAS_1 '\0' CANONICAL_1 '\0' ... ALIAS_n '\0' CANONICAL_n '\0' '\0' */
|
||||
static char * volatile charset_aliases;
|
||||
|
||||
/* Return a pointer to the contents of the charset.alias file. */
|
||||
static const char *
|
||||
get_charset_aliases ()
|
||||
{
|
||||
char *cp;
|
||||
|
||||
cp = charset_aliases;
|
||||
if (cp == NULL)
|
||||
{
|
||||
#ifndef WIN32
|
||||
FILE *fp;
|
||||
const char *dir = LIBDIR;
|
||||
const char *base = "charset.alias";
|
||||
char *file_name;
|
||||
|
||||
/* Concatenate dir and base into freshly allocated file_name. */
|
||||
{
|
||||
size_t dir_len = strlen (dir);
|
||||
size_t base_len = strlen (base);
|
||||
int add_slash = (dir_len > 0 && !ISSLASH (dir[dir_len - 1]));
|
||||
file_name = (char *) malloc (dir_len + add_slash + base_len + 1);
|
||||
if (file_name != NULL)
|
||||
{
|
||||
memcpy (file_name, dir, dir_len);
|
||||
if (add_slash)
|
||||
file_name[dir_len] = DIRECTORY_SEPARATOR;
|
||||
memcpy (file_name + dir_len + add_slash, base, base_len + 1);
|
||||
}
|
||||
}
|
||||
|
||||
if (file_name == NULL || (fp = fopen (file_name, "r")) == NULL)
|
||||
/* Out of memory or file not found, treat it as empty. */
|
||||
cp = "";
|
||||
else
|
||||
{
|
||||
/* Parse the file's contents. */
|
||||
int c;
|
||||
char buf1[50+1];
|
||||
char buf2[50+1];
|
||||
char *res_ptr = NULL;
|
||||
size_t res_size = 0;
|
||||
size_t l1, l2;
|
||||
|
||||
for (;;)
|
||||
{
|
||||
c = getc (fp);
|
||||
if (c == EOF)
|
||||
break;
|
||||
if (c == '\n' || c == ' ' || c == '\t')
|
||||
continue;
|
||||
if (c == '#')
|
||||
{
|
||||
/* Skip comment, to end of line. */
|
||||
do
|
||||
c = getc (fp);
|
||||
while (!(c == EOF || c == '\n'));
|
||||
if (c == EOF)
|
||||
break;
|
||||
continue;
|
||||
}
|
||||
ungetc (c, fp);
|
||||
if (fscanf(fp, "%50s %50s", buf1, buf2) < 2)
|
||||
break;
|
||||
l1 = strlen (buf1);
|
||||
l2 = strlen (buf2);
|
||||
if (res_size == 0)
|
||||
{
|
||||
res_size = l1 + 1 + l2 + 1;
|
||||
res_ptr = malloc (res_size + 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
res_size += l1 + 1 + l2 + 1;
|
||||
res_ptr = realloc (res_ptr, res_size + 1);
|
||||
}
|
||||
if (res_ptr == NULL)
|
||||
{
|
||||
/* Out of memory. */
|
||||
res_size = 0;
|
||||
break;
|
||||
}
|
||||
strcpy (res_ptr + res_size - (l2 + 1) - (l1 + 1), buf1);
|
||||
strcpy (res_ptr + res_size - (l2 + 1), buf2);
|
||||
}
|
||||
fclose (fp);
|
||||
if (res_size == 0)
|
||||
cp = "";
|
||||
else
|
||||
{
|
||||
*(res_ptr + res_size) = '\0';
|
||||
cp = res_ptr;
|
||||
}
|
||||
}
|
||||
|
||||
if (file_name != NULL)
|
||||
free (file_name);
|
||||
|
||||
#else /* 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";
|
||||
#endif
|
||||
|
||||
charset_aliases = cp;
|
||||
}
|
||||
|
||||
return cp;
|
||||
}
|
||||
|
||||
/* Determine the current locale's character encoding, and canonicalize it
|
||||
into one of the canonical names listed in config.charset.
|
||||
The result must not be freed; it is statically allocated.
|
||||
If the canonical name cannot be determined, the result is a non-canonical
|
||||
name. */
|
||||
|
||||
#ifdef STATIC
|
||||
STATIC
|
||||
#endif
|
||||
const char *
|
||||
locale_charset ()
|
||||
{
|
||||
const char *codeset;
|
||||
const char *aliases;
|
||||
|
||||
#ifndef WIN32
|
||||
|
||||
# if HAVE_LANGINFO_CODESET
|
||||
|
||||
/* Most systems support nl_langinfo (CODESET) nowadays. */
|
||||
codeset = nl_langinfo (CODESET);
|
||||
|
||||
# else
|
||||
|
||||
/* On old systems which lack it, use setlocale or getenv. */
|
||||
const char *locale = NULL;
|
||||
|
||||
/* But most old systems don't have a complete set of locales. Some
|
||||
(like SunOS 4 or DJGPP) have only the C locale. Therefore we don't
|
||||
use setlocale here; it would return "C" when it doesn't support the
|
||||
locale name the user has set. */
|
||||
# if HAVE_SETLOCALE && 0
|
||||
locale = setlocale (LC_CTYPE, NULL);
|
||||
# endif
|
||||
if (locale == NULL || locale[0] == '\0')
|
||||
{
|
||||
locale = getenv ("LC_ALL");
|
||||
if (locale == NULL || locale[0] == '\0')
|
||||
{
|
||||
locale = getenv ("LC_CTYPE");
|
||||
if (locale == NULL || locale[0] == '\0')
|
||||
locale = getenv ("LANG");
|
||||
}
|
||||
}
|
||||
|
||||
/* On some old systems, one used to set locale = "iso8859_1". On others,
|
||||
you set it to "language_COUNTRY.charset". In any case, we resolve it
|
||||
through the charset.alias file. */
|
||||
codeset = locale;
|
||||
|
||||
# endif
|
||||
|
||||
#else /* WIN32 */
|
||||
|
||||
static char buf[2 + 10 + 1];
|
||||
|
||||
/* Win32 has a function returning the locale's codepage as a number. */
|
||||
sprintf (buf, "CP%u", GetACP ());
|
||||
codeset = buf;
|
||||
|
||||
#endif
|
||||
|
||||
if (codeset == NULL)
|
||||
/* The canonical name cannot be determined. */
|
||||
codeset = "";
|
||||
|
||||
/* Resolve alias. */
|
||||
for (aliases = get_charset_aliases ();
|
||||
*aliases != '\0';
|
||||
aliases += strlen (aliases) + 1, aliases += strlen (aliases) + 1)
|
||||
if (strcmp (codeset, aliases) == 0
|
||||
|| (aliases[0] == '*' && aliases[1] == '\0'))
|
||||
{
|
||||
codeset = aliases + strlen (aliases) + 1;
|
||||
break;
|
||||
}
|
||||
|
||||
return codeset;
|
||||
}
|
|
@ -0,0 +1,77 @@
|
|||
# Locale name alias data base.
|
||||
# Copyright (C) 1996,1997,1998,1999,2000,2001 Free Software Foundation, Inc.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2, or (at your option)
|
||||
# any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
# The format of this file is the same as for the corresponding file of
|
||||
# the X Window System, which normally can be found in
|
||||
# /usr/lib/X11/locale/locale.alias
|
||||
# A single line contains two fields: an alias and a substitution value.
|
||||
# All entries are case independent.
|
||||
|
||||
# Note: This file is far from being complete. If you have a value for
|
||||
# your own site which you think might be useful for others too, share
|
||||
# it with the rest of us. Send it using the `glibcbug' script to
|
||||
# bugs@gnu.org.
|
||||
|
||||
# Packages using this file:
|
||||
|
||||
bokmal no_NO.ISO-8859-1
|
||||
bokmål no_NO.ISO-8859-1
|
||||
catalan ca_ES.ISO-8859-1
|
||||
croatian hr_HR.ISO-8859-2
|
||||
czech cs_CZ.ISO-8859-2
|
||||
danish da_DK.ISO-8859-1
|
||||
dansk da_DK.ISO-8859-1
|
||||
deutsch de_DE.ISO-8859-1
|
||||
dutch nl_NL.ISO-8859-1
|
||||
eesti et_EE.ISO-8859-1
|
||||
estonian et_EE.ISO-8859-1
|
||||
finnish fi_FI.ISO-8859-1
|
||||
français fr_FR.ISO-8859-1
|
||||
french fr_FR.ISO-8859-1
|
||||
galego gl_ES.ISO-8859-1
|
||||
galician gl_ES.ISO-8859-1
|
||||
german de_DE.ISO-8859-1
|
||||
greek el_GR.ISO-8859-7
|
||||
hebrew iw_IL.ISO-8859-8
|
||||
hrvatski hr_HR.ISO-8859-2
|
||||
hungarian hu_HU.ISO-8859-2
|
||||
icelandic is_IS.ISO-8859-1
|
||||
italian it_IT.ISO-8859-1
|
||||
japanese ja_JP.eucJP
|
||||
japanese.euc ja_JP.eucJP
|
||||
ja_JP ja_JP.eucJP
|
||||
ja_JP.ujis ja_JP.eucJP
|
||||
japanese.sjis ja_JP.SJIS
|
||||
korean ko_KR.eucKR
|
||||
korean.euc ko_KR.eucKR
|
||||
ko_KR ko_KR.eucKR
|
||||
lithuanian lt_LT.ISO-8859-13
|
||||
nb_NO no_NO.ISO-8859-1
|
||||
nb_NO.ISO-8859-1 no_NO.ISO-8859-1
|
||||
norwegian no_NO.ISO-8859-1
|
||||
nynorsk nn_NO.ISO-8859-1
|
||||
polish pl_PL.ISO-8859-2
|
||||
portuguese pt_PT.ISO-8859-1
|
||||
romanian ro_RO.ISO-8859-2
|
||||
russian ru_RU.ISO-8859-5
|
||||
slovak sk_SK.ISO-8859-2
|
||||
slovene sl_SI.ISO-8859-2
|
||||
slovenian sl_SI.ISO-8859-2
|
||||
spanish es_ES.ISO-8859-1
|
||||
swedish sv_SE.ISO-8859-1
|
||||
thai th_TH.TIS-620
|
||||
turkish tr_TR.ISO-8859-9
|
|
@ -0,0 +1,67 @@
|
|||
/* Implementation of ngettext(3) function.
|
||||
Copyright (C) 1995, 1997, 2000, 2001 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software Foundation,
|
||||
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#ifdef _LIBC
|
||||
# define __need_NULL
|
||||
# include <stddef.h>
|
||||
#else
|
||||
# include <stdlib.h> /* Just for NULL. */
|
||||
#endif
|
||||
|
||||
#include "gettextP.h"
|
||||
#ifdef _LIBC
|
||||
# include <libintl.h>
|
||||
#else
|
||||
# include "libgnuintl.h"
|
||||
#endif
|
||||
|
||||
#include <locale.h>
|
||||
|
||||
/* @@ end of prolog @@ */
|
||||
|
||||
/* Names for the libintl functions are a problem. They must not clash
|
||||
with existing names and they should follow ANSI C. But this source
|
||||
code is also used in GNU C Library where the names have a __
|
||||
prefix. So we have to make a difference here. */
|
||||
#ifdef _LIBC
|
||||
# define NGETTEXT __ngettext
|
||||
# define DCNGETTEXT __dcngettext
|
||||
#else
|
||||
# define NGETTEXT ngettext__
|
||||
# define DCNGETTEXT 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;
|
||||
{
|
||||
return DCNGETTEXT (NULL, msgid1, msgid2, n, LC_MESSAGES);
|
||||
}
|
||||
|
||||
#ifdef _LIBC
|
||||
/* Alias for function name in GNU C Library. */
|
||||
weak_alias (__ngettext, ngettext);
|
||||
#endif
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,412 @@
|
|||
%{
|
||||
/* Expression parsing for plural form selection.
|
||||
Copyright (C) 2000, 2001 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)
|
||||
any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software Foundation,
|
||||
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
|
||||
/* The bison generated parser uses alloca. AIX 3 forces us to put this
|
||||
declaration at the beginning of the file. The declaration in bison's
|
||||
skeleton file comes too late. This must come before <config.h>
|
||||
because <config.h> may include arbitrary system headers. */
|
||||
#if defined _AIX && !defined __GNUC__
|
||||
#pragma alloca
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include <stdlib.h>
|
||||
#include "gettextP.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__
|
||||
#endif
|
||||
|
||||
#define YYLEX_PARAM &((struct parse_args *) arg)->cp
|
||||
#define YYPARSE_PARAM arg
|
||||
%}
|
||||
%pure_parser
|
||||
%expect 10
|
||||
|
||||
%union {
|
||||
unsigned long int num;
|
||||
enum operator op;
|
||||
struct expression *exp;
|
||||
}
|
||||
|
||||
%{
|
||||
/* 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));
|
||||
|
||||
/* Allocation of expressions. */
|
||||
|
||||
static struct expression *
|
||||
new_exp (nargs, op, args)
|
||||
int nargs;
|
||||
enum operator op;
|
||||
struct expression * const *args;
|
||||
{
|
||||
int i;
|
||||
struct expression *newp;
|
||||
|
||||
/* If any of the argument could not be malloc'ed, just return NULL. */
|
||||
for (i = nargs - 1; i >= 0; i--)
|
||||
if (args[i] == NULL)
|
||||
goto fail;
|
||||
|
||||
/* Allocate a new expression. */
|
||||
newp = (struct expression *) malloc (sizeof (*newp));
|
||||
if (newp != NULL)
|
||||
{
|
||||
newp->nargs = nargs;
|
||||
newp->operation = op;
|
||||
for (i = nargs - 1; i >= 0; i--)
|
||||
newp->val.args[i] = args[i];
|
||||
return newp;
|
||||
}
|
||||
|
||||
fail:
|
||||
for (i = nargs - 1; i >= 0; i--)
|
||||
FREE_EXPRESSION (args[i]);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static inline struct expression *
|
||||
new_exp_0 (op)
|
||||
enum operator op;
|
||||
{
|
||||
return new_exp (0, op, NULL);
|
||||
}
|
||||
|
||||
static inline struct expression *
|
||||
new_exp_1 (op, right)
|
||||
enum operator op;
|
||||
struct expression *right;
|
||||
{
|
||||
struct expression *args[1];
|
||||
|
||||
args[0] = right;
|
||||
return new_exp (1, op, args);
|
||||
}
|
||||
|
||||
static struct expression *
|
||||
new_exp_2 (op, left, right)
|
||||
enum operator op;
|
||||
struct expression *left;
|
||||
struct expression *right;
|
||||
{
|
||||
struct expression *args[2];
|
||||
|
||||
args[0] = left;
|
||||
args[1] = right;
|
||||
return new_exp (2, op, args);
|
||||
}
|
||||
|
||||
static inline struct expression *
|
||||
new_exp_3 (op, bexp, tbranch, fbranch)
|
||||
enum operator op;
|
||||
struct expression *bexp;
|
||||
struct expression *tbranch;
|
||||
struct expression *fbranch;
|
||||
{
|
||||
struct expression *args[3];
|
||||
|
||||
args[0] = bexp;
|
||||
args[1] = tbranch;
|
||||
args[2] = fbranch;
|
||||
return new_exp (3, op, args);
|
||||
}
|
||||
|
||||
%}
|
||||
|
||||
/* This declares that all operators have the same associativity and the
|
||||
precedence order as in C. See [Harbison, Steele: C, A Reference Manual].
|
||||
There is no unary minus and no bitwise operators.
|
||||
Operators with the same syntactic behaviour have been merged into a single
|
||||
token, to save space in the array generated by bison. */
|
||||
%right '?' /* ? */
|
||||
%left '|' /* || */
|
||||
%left '&' /* && */
|
||||
%left EQUOP2 /* == != */
|
||||
%left CMPOP2 /* < > <= >= */
|
||||
%left ADDOP2 /* + - */
|
||||
%left MULOP2 /* * / % */
|
||||
%right '!' /* ! */
|
||||
|
||||
%token <op> EQUOP2 CMPOP2 ADDOP2 MULOP2
|
||||
%token <num> NUMBER
|
||||
%type <exp> exp
|
||||
|
||||
%%
|
||||
|
||||
start: exp
|
||||
{
|
||||
if ($1 == NULL)
|
||||
YYABORT;
|
||||
((struct parse_args *) arg)->res = $1;
|
||||
}
|
||||
;
|
||||
|
||||
exp: exp '?' exp ':' exp
|
||||
{
|
||||
$$ = new_exp_3 (qmop, $1, $3, $5);
|
||||
}
|
||||
| exp '|' exp
|
||||
{
|
||||
$$ = new_exp_2 (lor, $1, $3);
|
||||
}
|
||||
| exp '&' exp
|
||||
{
|
||||
$$ = new_exp_2 (land, $1, $3);
|
||||
}
|
||||
| exp EQUOP2 exp
|
||||
{
|
||||
$$ = new_exp_2 ($2, $1, $3);
|
||||
}
|
||||
| exp CMPOP2 exp
|
||||
{
|
||||
$$ = new_exp_2 ($2, $1, $3);
|
||||
}
|
||||
| exp ADDOP2 exp
|
||||
{
|
||||
$$ = new_exp_2 ($2, $1, $3);
|
||||
}
|
||||
| exp MULOP2 exp
|
||||
{
|
||||
$$ = new_exp_2 ($2, $1, $3);
|
||||
}
|
||||
| '!' exp
|
||||
{
|
||||
$$ = new_exp_1 (lnot, $2);
|
||||
}
|
||||
| 'n'
|
||||
{
|
||||
$$ = new_exp_0 (var);
|
||||
}
|
||||
| NUMBER
|
||||
{
|
||||
if (($$ = new_exp_0 (num)) != NULL)
|
||||
$$->val.num = $1;
|
||||
}
|
||||
| '(' exp ')'
|
||||
{
|
||||
$$ = $2;
|
||||
}
|
||||
;
|
||||
|
||||
%%
|
||||
|
||||
void
|
||||
internal_function
|
||||
FREE_EXPRESSION (exp)
|
||||
struct expression *exp;
|
||||
{
|
||||
if (exp == NULL)
|
||||
return;
|
||||
|
||||
/* Handle the recursive case. */
|
||||
switch (exp->nargs)
|
||||
{
|
||||
case 3:
|
||||
FREE_EXPRESSION (exp->val.args[2]);
|
||||
/* FALLTHROUGH */
|
||||
case 2:
|
||||
FREE_EXPRESSION (exp->val.args[1]);
|
||||
/* FALLTHROUGH */
|
||||
case 1:
|
||||
FREE_EXPRESSION (exp->val.args[0]);
|
||||
/* FALLTHROUGH */
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
free (exp);
|
||||
}
|
||||
|
||||
|
||||
static int
|
||||
yylex (lval, pexp)
|
||||
YYSTYPE *lval;
|
||||
const char **pexp;
|
||||
{
|
||||
const char *exp = *pexp;
|
||||
int result;
|
||||
|
||||
while (1)
|
||||
{
|
||||
if (exp[0] == '\0')
|
||||
{
|
||||
*pexp = exp;
|
||||
return YYEOF;
|
||||
}
|
||||
|
||||
if (exp[0] != ' ' && exp[0] != '\t')
|
||||
break;
|
||||
|
||||
++exp;
|
||||
}
|
||||
|
||||
result = *exp++;
|
||||
switch (result)
|
||||
{
|
||||
case '0': case '1': case '2': case '3': case '4':
|
||||
case '5': case '6': case '7': case '8': case '9':
|
||||
{
|
||||
unsigned long int n = result - '0';
|
||||
while (exp[0] >= '0' && exp[0] <= '9')
|
||||
{
|
||||
n *= 10;
|
||||
n += exp[0] - '0';
|
||||
++exp;
|
||||
}
|
||||
lval->num = n;
|
||||
result = NUMBER;
|
||||
}
|
||||
break;
|
||||
|
||||
case '=':
|
||||
if (exp[0] == '=')
|
||||
{
|
||||
++exp;
|
||||
lval->op = equal;
|
||||
result = EQUOP2;
|
||||
}
|
||||
else
|
||||
result = YYERRCODE;
|
||||
break;
|
||||
|
||||
case '!':
|
||||
if (exp[0] == '=')
|
||||
{
|
||||
++exp;
|
||||
lval->op = not_equal;
|
||||
result = EQUOP2;
|
||||
}
|
||||
break;
|
||||
|
||||
case '&':
|
||||
case '|':
|
||||
if (exp[0] == result)
|
||||
++exp;
|
||||
else
|
||||
result = YYERRCODE;
|
||||
break;
|
||||
|
||||
case '<':
|
||||
if (exp[0] == '=')
|
||||
{
|
||||
++exp;
|
||||
lval->op = less_or_equal;
|
||||
}
|
||||
else
|
||||
lval->op = less_than;
|
||||
result = CMPOP2;
|
||||
break;
|
||||
|
||||
case '>':
|
||||
if (exp[0] == '=')
|
||||
{
|
||||
++exp;
|
||||
lval->op = greater_or_equal;
|
||||
}
|
||||
else
|
||||
lval->op = greater_than;
|
||||
result = CMPOP2;
|
||||
break;
|
||||
|
||||
case '*':
|
||||
lval->op = mult;
|
||||
result = MULOP2;
|
||||
break;
|
||||
|
||||
case '/':
|
||||
lval->op = divide;
|
||||
result = MULOP2;
|
||||
break;
|
||||
|
||||
case '%':
|
||||
lval->op = module;
|
||||
result = MULOP2;
|
||||
break;
|
||||
|
||||
case '+':
|
||||
lval->op = plus;
|
||||
result = ADDOP2;
|
||||
break;
|
||||
|
||||
case '-':
|
||||
lval->op = minus;
|
||||
result = ADDOP2;
|
||||
break;
|
||||
|
||||
case 'n':
|
||||
case '?':
|
||||
case ':':
|
||||
case '(':
|
||||
case ')':
|
||||
/* Nothing, just return the character. */
|
||||
break;
|
||||
|
||||
case ';':
|
||||
case '\n':
|
||||
case '\0':
|
||||
/* Be safe and let the user call this function again. */
|
||||
--exp;
|
||||
result = YYEOF;
|
||||
break;
|
||||
|
||||
default:
|
||||
result = YYERRCODE;
|
||||
#if YYDEBUG != 0
|
||||
--exp;
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
|
||||
*pexp = exp;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
yyerror (str)
|
||||
const char *str;
|
||||
{
|
||||
/* Do nothing. We don't print error messages here. */
|
||||
}
|
|
@ -0,0 +1,31 @@
|
|||
# Add this package to a list of references stored in a text file.
|
||||
#
|
||||
# Copyright (C) 2000 Free Software Foundation, Inc.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU Library General Public License as published
|
||||
# by the Free Software Foundation; either version 2, or (at your option)
|
||||
# any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
# Library General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Library General Public
|
||||
# License along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||
# USA.
|
||||
#
|
||||
# Written by Bruno Haible <haible@clisp.cons.org>.
|
||||
#
|
||||
/^# Packages using this file: / {
|
||||
s/# Packages using this file://
|
||||
ta
|
||||
:a
|
||||
s/ @PACKAGE@ / @PACKAGE@ /
|
||||
tb
|
||||
s/ $/ @PACKAGE@ /
|
||||
:b
|
||||
s/^/# Packages using this file:/
|
||||
}
|
|
@ -0,0 +1,26 @@
|
|||
# Remove this package from a list of references stored in a text file.
|
||||
#
|
||||
# Copyright (C) 2000 Free Software Foundation, Inc.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU Library General Public License as published
|
||||
# by the Free Software Foundation; either version 2, or (at your option)
|
||||
# any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
# Library General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Library General Public
|
||||
# License along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||
# USA.
|
||||
#
|
||||
# Written by Bruno Haible <haible@clisp.cons.org>.
|
||||
#
|
||||
/^# Packages using this file: / {
|
||||
s/# Packages using this file://
|
||||
s/ @PACKAGE@ / /
|
||||
s/^/# Packages using this file:/
|
||||
}
|
|
@ -151,7 +151,9 @@ static fingerPrint doLookup(fingerPrintCache cache,
|
|||
fp.baseName = baseName;
|
||||
if (!scareMemory && fp.subDir != NULL)
|
||||
fp.subDir = xstrdup(fp.subDir);
|
||||
/*@-compdef@*/ /* FIX: fp.entry.{dirName,dev,ino,isFake} undef @*/
|
||||
return fp;
|
||||
/*@=compdef@*/
|
||||
}
|
||||
|
||||
/* stat of '/' just failed! */
|
||||
|
@ -168,7 +170,9 @@ static fingerPrint doLookup(fingerPrintCache cache,
|
|||
|
||||
/*@notreached@*/
|
||||
|
||||
/*@-compdef@*/ /* FIX: fp.entry.{dirName,dev,ino,isFake} undef @*/
|
||||
/*@-nullret@*/ return fp; /*@=nullret@*/ /* LCL: can't happen. */
|
||||
/*@=compdef@*/
|
||||
}
|
||||
|
||||
fingerPrint fpLookup(fingerPrintCache cache, const char * dirName,
|
||||
|
|
|
@ -624,7 +624,7 @@ static int hdrNumCmp(const void * one, const void * two)
|
|||
*/
|
||||
static INLINE int dbiAppendSet(dbiIndexSet set, const void * recs,
|
||||
int nrecs, size_t recsize, int sortset)
|
||||
/*@modifies set @*/
|
||||
/*@modifies *set @*/
|
||||
{
|
||||
const char * rptr = recs;
|
||||
size_t rlen = (recsize < sizeof(*(set->recs)))
|
||||
|
@ -633,11 +633,13 @@ static INLINE int dbiAppendSet(dbiIndexSet set, const void * recs,
|
|||
if (set == NULL || recs == NULL || nrecs <= 0 || recsize == 0)
|
||||
return 1;
|
||||
|
||||
#ifdef DYING
|
||||
if (set->count == 0)
|
||||
set->recs = xmalloc(nrecs * sizeof(*(set->recs)));
|
||||
else
|
||||
set->recs = xrealloc(set->recs,
|
||||
(set->count + nrecs) * sizeof(*(set->recs)));
|
||||
#endif
|
||||
set->recs = xrealloc(set->recs,
|
||||
(set->count + nrecs) * sizeof(*(set->recs)));
|
||||
|
||||
memset(set->recs + set->count, 0, nrecs * sizeof(*(set->recs)));
|
||||
|
||||
|
@ -652,7 +654,9 @@ static INLINE int dbiAppendSet(dbiIndexSet set, const void * recs,
|
|||
if (set->count > 1 && sortset)
|
||||
qsort(set->recs, set->count, sizeof(*(set->recs)), hdrNumCmp);
|
||||
|
||||
/*@-compmempass@*/ /* FIX: set->recs.{hdrNum,tagNum,fpNum,dbNum} undef */
|
||||
return 0;
|
||||
/*@=compmempass@*/
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1485,9 +1489,9 @@ rpmdbMatchIterator rpmdbFreeIterator(rpmdbMatchIterator mi)
|
|||
mire->pattern = _free(mire->pattern);
|
||||
if (mire->preg != NULL) {
|
||||
regfree(mire->preg);
|
||||
/*@+voidabstract@*/
|
||||
/*@+voidabstract -usereleased @*/ /* FIX: ??? */
|
||||
mire->preg = _free(mire->preg);
|
||||
/*@=voidabstract@*/
|
||||
/*@=voidabstract =usereleased @*/
|
||||
}
|
||||
}
|
||||
mi->mi_re = _free(mi->mi_re);
|
||||
|
@ -1728,7 +1732,7 @@ int rpmdbSetIteratorRE(rpmdbMatchIterator mi, rpmTag tag,
|
|||
allpat = _free(allpat);
|
||||
if (preg) {
|
||||
regfree(preg);
|
||||
/*@+voidabstract@*/
|
||||
/*@+voidabstract -usereleased @*/ /* FIX: ??? */
|
||||
preg = _free(preg);
|
||||
/*@=voidabstract@*/
|
||||
}
|
||||
|
|
|
@ -513,7 +513,7 @@ unsigned int rpmdbGetIteratorFileNum(rpmdbMatchIterator mi)
|
|||
* @param db rpm database
|
||||
*/
|
||||
int rpmdbFindFpList(/*@null@*/ rpmdb db, fingerPrint * fpList,
|
||||
/*@out@*/dbiIndexSet * matchList, int numItems)
|
||||
/*@out@*/ dbiIndexSet * matchList, int numItems)
|
||||
/*@modifies db, *matchList @*/;
|
||||
|
||||
/** \ingroup dbi
|
||||
|
|
|
@ -43,8 +43,10 @@ tkey: librpmio.la tkey.o
|
|||
$(LINK) -o $@ tkey.o librpmio.la $(top_builddir)/popt/libpopt.la
|
||||
|
||||
tdigest.o: tdigest.c
|
||||
$(CC) $(DEFS) -I/usr/include/beecrypt $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -o $@ -c tdigest.c
|
||||
|
||||
tdigest: librpmio.la tdigest.o
|
||||
$(LINK) @LDFLAGS_STATIC@ -o $@ tdigest.o librpmio.la $(top_builddir)/popt/libpopt.la
|
||||
$(LINK) @LDFLAGS_STATIC@ -o $@ tdigest.o librpmio.la $(top_builddir)/popt/libpopt.la -lbeecrypt
|
||||
|
||||
tficl.o: tficl.c
|
||||
$(COMPILE) -I/usr/include/ficl -o $@ -c tficl.c
|
||||
|
|
|
@ -5,15 +5,6 @@
|
|||
#include "system.h"
|
||||
#include <stdarg.h>
|
||||
|
||||
#ifdef __LCLINT__
|
||||
/*@-incondefs@*/
|
||||
typedef unsigned int uint32_t;
|
||||
/*@=incondefs@*/
|
||||
#define INADDR_ANY ((uint32_t) 0x00000000)
|
||||
#define IPPROTO_IP 0
|
||||
|
||||
#else /* __LCLINT__ */
|
||||
|
||||
#if HAVE_MACHINE_TYPES_H
|
||||
# include <machine/types.h>
|
||||
#endif
|
||||
|
@ -30,8 +21,6 @@ typedef unsigned int uint32_t;
|
|||
#define _USE_LIBIO 1
|
||||
#endif
|
||||
|
||||
#endif /* __LCLINT__ */
|
||||
|
||||
#if !defined(HAVE_HERRNO) && defined(__hpux) /* XXX HP-UX w/o -D_XOPEN_SOURCE needs */
|
||||
extern int h_errno;
|
||||
#endif
|
||||
|
@ -106,7 +95,7 @@ int _rpmio_debug = 0;
|
|||
* @retval NULL always
|
||||
*/
|
||||
/*@unused@*/ static inline /*@null@*/ void *
|
||||
_free(/*@only@*/ /*@null@*/ const void * p)
|
||||
_free(/*@only@*/ /*@null@*/ /*@out@*/ const void * p)
|
||||
/*@modifies p@*/
|
||||
{
|
||||
if (p != NULL) free((void *)p);
|
||||
|
@ -676,12 +665,15 @@ static int mygethostbyname(const char * host,
|
|||
}
|
||||
#endif
|
||||
|
||||
/*@-compdef@*/ /* FIX: address->s_addr undefined. */
|
||||
static int getHostAddress(const char * host, /*@out@*/ struct in_addr * address)
|
||||
/*@modifies *address, fileSystem @*/
|
||||
{
|
||||
if (xisdigit(host[0])) {
|
||||
if (! /*@-unrecog@*/ inet_aton(host, address) /*@=unrecog@*/ )
|
||||
/*@-unrecog@*/
|
||||
if (!inet_aton(host, address))
|
||||
return FTPERR_BAD_HOST_ADDR;
|
||||
/*@=unrecog@*/
|
||||
} else {
|
||||
if (mygethostbyname(host, address)) {
|
||||
errno = /*@-unrecog@*/ h_errno /*@=unrecog@*/;
|
||||
|
@ -691,6 +683,7 @@ static int getHostAddress(const char * host, /*@out@*/ struct in_addr * address)
|
|||
|
||||
return 0;
|
||||
}
|
||||
/*@=compdef@*/
|
||||
|
||||
static int tcpConnect(FD_t ctrl, const char * host, int port)
|
||||
/*@modifies ctrl, fileSystem @*/
|
||||
|
|
|
@ -142,17 +142,29 @@ extern int _rpmio_debug;
|
|||
extern "C" {
|
||||
#endif
|
||||
|
||||
/** \ingroup rpmio
|
||||
*/
|
||||
int fdFgets(FD_t fd, char * buf, size_t len)
|
||||
/*@modifies *buf, fd, fileSystem @*/;
|
||||
|
||||
/** \ingroup rpmio
|
||||
*/
|
||||
/*@null@*/ FD_t ftpOpen(const char *url, /*@unused@*/ int flags,
|
||||
/*@unused@*/ mode_t mode, /*@out@*/ urlinfo *uret)
|
||||
/*@modifies *uret, fileSystem @*/;
|
||||
|
||||
/** \ingroup rpmio
|
||||
*/
|
||||
int ftpReq(FD_t data, const char * ftpCmd, const char * ftpArg)
|
||||
/*@modifies data, fileSystem @*/;
|
||||
|
||||
/** \ingroup rpmio
|
||||
*/
|
||||
int ftpCmd(const char * cmd, const char * url, const char * arg2)
|
||||
/*@modifies fileSystem @*/;
|
||||
|
||||
/** \ingroup rpmio
|
||||
*/
|
||||
int ufdClose( /*@only@*/ void * cookie)
|
||||
/*@modified cookie, fileSystem @*/;
|
||||
|
||||
|
@ -183,25 +195,23 @@ void fdSetIo(FD_t fd, /*@kept@*/ /*@null@*/ FDIO_t io)
|
|||
/** \ingroup rpmio
|
||||
*/
|
||||
/*@unused@*/ static inline
|
||||
/*@dependent@*/ /*@null@*/ FILE * fdGetFILE(FD_t fd)
|
||||
/*@exposed@*/ /*@dependent@*/ /*@null@*/ FILE * fdGetFILE(FD_t fd)
|
||||
/*@*/
|
||||
{
|
||||
FDSANE(fd);
|
||||
/*@+voidabstract -retexpose@*/
|
||||
/*@+voidabstract@*/
|
||||
return ((FILE *)fd->fps[fd->nfps].fp);
|
||||
/*@=voidabstract =retexpose@*/
|
||||
/*@=voidabstract@*/
|
||||
}
|
||||
|
||||
/** \ingroup rpmio
|
||||
*/
|
||||
/*@unused@*/ static inline
|
||||
/*@dependent@*/ /*@null@*/ void * fdGetFp(FD_t fd)
|
||||
/*@exposed@*/ /*@dependent@*/ /*@null@*/ void * fdGetFp(FD_t fd)
|
||||
/*@*/
|
||||
{
|
||||
FDSANE(fd);
|
||||
/*@-retexpose@*/
|
||||
return fd->fps[fd->nfps].fp;
|
||||
/*@=retexpose@*/
|
||||
}
|
||||
|
||||
/** \ingroup rpmio
|
||||
|
|
|
@ -30,7 +30,7 @@ static /*@only@*/ /*@null@*/ rpmlogRec recs = NULL;
|
|||
* @retval NULL always
|
||||
*/
|
||||
/*@unused@*/ static inline /*@null@*/ void *
|
||||
_free(/*@only@*/ /*@null@*/ const void * p) /*@modifies p@*/
|
||||
_free(/*@only@*/ /*@null@*/ /*@out@*/ const void * p) /*@modifies p@*/
|
||||
{
|
||||
if (p != NULL) free((void *)p);
|
||||
return NULL;
|
||||
|
@ -109,7 +109,7 @@ rpmlogCallback rpmlogSetCallback(rpmlogCallback cb)
|
|||
return ocb;
|
||||
}
|
||||
|
||||
/*@-readonlytrans@*/ /* FIX: double indeirection. */
|
||||
/*@-readonlytrans@*/ /* FIX: double indirection. */
|
||||
/*@observer@*/ static char *rpmlogMsgPrefix[] = {
|
||||
N_("fatal error: "),/*!< RPMLOG_EMERG */
|
||||
N_("fatal error: "),/*!< RPMLOG_ALERT */
|
||||
|
@ -152,10 +152,10 @@ static void vrpmlog (unsigned code, const char *fmt, va_list ap)
|
|||
while (1) {
|
||||
va_list apc;
|
||||
/*@-sysunrecog -usedef@*/ va_copy(apc, ap); /*@=sysunrecog =usedef@*/
|
||||
/*@-unrecog@*/ nb = vsnprintf(msgbuf, msgnb, fmt, apc); /*@=unrecog@*/
|
||||
nb = vsnprintf(msgbuf, msgnb, fmt, apc);
|
||||
if (nb > -1 && nb < msgnb)
|
||||
break;
|
||||
if (nb > -1) /* glibc 2.1 */
|
||||
if (nb > -1) /* glibc 2.1 (and later) */
|
||||
msgnb = nb+1;
|
||||
else /* glibc 2.0 */
|
||||
msgnb *= 2;
|
||||
|
|
|
@ -19,16 +19,14 @@
|
|||
|
||||
#if !(HAVE_MCHECK_H && defined(__GNUC__)) && !defined(__LCLINT__)
|
||||
|
||||
/*@only@*/ void * xmalloc (size_t size)
|
||||
/*@out@*/ /*@only@*/ void * xmalloc (size_t size)
|
||||
{
|
||||
register void *value;
|
||||
if (size == 0) size++;
|
||||
value = malloc (size);
|
||||
if (value == 0)
|
||||
value = vmefail(size);
|
||||
/*@-compdef@*/
|
||||
return value;
|
||||
/*@=compdef@*/
|
||||
}
|
||||
|
||||
/*@only@*/ void * xcalloc (size_t nmemb, size_t size)
|
||||
|
|
|
@ -1,16 +1,27 @@
|
|||
#define ENABLE_BEECRYPT 1
|
||||
|
||||
#include "system.h"
|
||||
#include "rpmio_internal.h"
|
||||
#include "popt.h"
|
||||
#ifdef ENABLE_BEECRYPT
|
||||
#define BEEDLLAPI
|
||||
typedef unsigned char byte;
|
||||
#include "beecrypt.h"
|
||||
#include "md5.h"
|
||||
#include "fips180.h"
|
||||
#include "sha256.h"
|
||||
#endif
|
||||
#include "debug.h"
|
||||
|
||||
|
||||
static rpmDigestFlags flags = RPMDIGEST_MD5;
|
||||
extern int _rpmio_debug;
|
||||
|
||||
static int fips = 0;
|
||||
|
||||
const char * adigest = "a9993e364706816aba3e25717850c26c9cd0d89d";
|
||||
const char * bdigest = "84983e441c3bd26ebaae4aa1f95129e5e54670f1";
|
||||
const char * cdigest = "34aa973cd4c4daa4f61eeb2bdbad27316534016f";
|
||||
const char * FIPSAdigest = "a9993e364706816aba3e25717850c26c9cd0d89d";
|
||||
const char * FIPSBdigest = "84983e441c3bd26ebaae4aa1f95129e5e54670f1";
|
||||
const char * FIPSCdigest = "34aa973cd4c4daa4f61eeb2bdbad27316534016f";
|
||||
|
||||
static struct poptOption optionsTable[] = {
|
||||
{ "md5", '\0', POPT_BIT_SET, &flags, RPMDIGEST_MD5, NULL, NULL },
|
||||
|
@ -45,6 +56,14 @@ main(int argc, const char *argv[])
|
|||
int rc;
|
||||
char appendix;
|
||||
int i;
|
||||
#ifdef ENABLE_BEECRYPT
|
||||
sha1Param sparam;
|
||||
md5Param mparam;
|
||||
uint32 bdigest[5];
|
||||
|
||||
memset(&sparam, 0, sizeof(sparam));
|
||||
memset(&mparam, 0, sizeof(mparam));
|
||||
#endif
|
||||
|
||||
optCon = poptGetContext(argv[0], argc, argv, optionsTable, 0);
|
||||
while ((rc = poptGetNextOpt(optCon)) > 0)
|
||||
|
@ -55,6 +74,9 @@ main(int argc, const char *argv[])
|
|||
if (fips) {
|
||||
flags &= ~RPMDIGEST_MD5;
|
||||
flags |= RPMDIGEST_SHA1;
|
||||
#ifdef ENABLE_BEECRYPT
|
||||
(void) sha1Reset(&sparam);
|
||||
#endif
|
||||
ctx = rpmDigestInit(flags);
|
||||
ifn = NULL;
|
||||
appendix = ' ';
|
||||
|
@ -62,26 +84,39 @@ main(int argc, const char *argv[])
|
|||
switch (fips) {
|
||||
case 1:
|
||||
ifn = "abc";
|
||||
#ifdef ENABLE_BEECRYPT
|
||||
(void) sha1Update(&sparam, (const unsigned char*) ifn, strlen(ifn));
|
||||
#endif
|
||||
rpmDigestUpdate(ctx, ifn, strlen(ifn));
|
||||
sdigest = adigest;
|
||||
sdigest = FIPSAdigest;
|
||||
appendix = 'A';
|
||||
break;
|
||||
case 2:
|
||||
ifn = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq";
|
||||
#ifdef ENABLE_BEECRYPT
|
||||
(void) sha1Update(&sparam, (const unsigned char*) ifn, strlen(ifn));
|
||||
#endif
|
||||
rpmDigestUpdate(ctx, ifn, strlen(ifn));
|
||||
sdigest = bdigest;
|
||||
sdigest = FIPSBdigest;
|
||||
appendix = 'B';
|
||||
break;
|
||||
case 3:
|
||||
ifn = "aaaaaaaaaaa ...";
|
||||
for (i = 0; i < 1000000; i++)
|
||||
for (i = 0; i < 1000000; i++) {
|
||||
#ifdef ENABLE_BEECRYPT
|
||||
(void) sha1Update(&sparam, (const unsigned char*) ifn, 1);
|
||||
#endif
|
||||
rpmDigestUpdate(ctx, ifn, 1);
|
||||
sdigest = cdigest;
|
||||
}
|
||||
sdigest = FIPSCdigest;
|
||||
appendix = 'C';
|
||||
break;
|
||||
}
|
||||
if (ifn == NULL)
|
||||
return 1;
|
||||
#ifdef ENABLE_BEECRYPT
|
||||
(void) sha1Digest(&sparam, bdigest);
|
||||
#endif
|
||||
rpmDigestFinal(ctx, (void **)&digest, &digestlen, asAscii);
|
||||
|
||||
if (digest) {
|
||||
|
@ -89,6 +124,11 @@ main(int argc, const char *argv[])
|
|||
fflush(stdout);
|
||||
free((void *)digest);
|
||||
}
|
||||
#ifdef ENABLE_BEECRYPT
|
||||
for (i = 0; i < 5; i++)
|
||||
fprintf(stdout, "%08x", bdigest[i]);
|
||||
fprintf(stdout, " BeeCrypt\n");
|
||||
#endif
|
||||
if (sdigest) {
|
||||
fprintf(stdout, "%s FIPS PUB 180-1 Appendix %c\n", sdigest,
|
||||
appendix);
|
||||
|
@ -145,9 +185,19 @@ main(int argc, const char *argv[])
|
|||
odigest = NULL;
|
||||
(flags & RPMDIGEST_SHA1) ? fdInitSHA1(ofd, reverse) : fdInitMD5(ofd, reverse);
|
||||
|
||||
#ifdef ENABLE_BEECRYPT
|
||||
(flags & RPMDIGEST_SHA1)
|
||||
? (void) sha1Reset(&sparam)
|
||||
: (void) md5Reset(&mparam);
|
||||
#endif
|
||||
ctx = rpmDigestInit(flags);
|
||||
|
||||
while ((nb = Fread(buf, 1, sizeof(buf), ifd)) > 0) {
|
||||
#ifdef ENABLE_BEECRYPT
|
||||
(flags & RPMDIGEST_SHA1)
|
||||
? (void) sha1Update(&sparam, (const unsigned char*) buf, nb)
|
||||
: (void) md5Update(&mparam, (const unsigned char*) buf, nb);
|
||||
#endif
|
||||
rpmDigestUpdate(ctx, buf, nb);
|
||||
(void) Fwrite(buf, 1, nb, ofd);
|
||||
}
|
||||
|
@ -163,10 +213,22 @@ main(int argc, const char *argv[])
|
|||
: fdFiniMD5(ofd, (void **)&odigest, NULL, asAscii);
|
||||
Fclose(ofd);
|
||||
|
||||
#ifdef ENABLE_BEECRYPT
|
||||
(flags & RPMDIGEST_SHA1)
|
||||
? (void) sha1Digest(&sparam, bdigest)
|
||||
: (void) md5Digest(&mparam, bdigest);
|
||||
#endif
|
||||
rpmDigestFinal(ctx, (void **)&digest, &digestlen, asAscii);
|
||||
|
||||
if (digest) {
|
||||
fprintf(stdout, "%s %s\n", digest, ifn);
|
||||
#ifdef ENABLE_BEECRYPT
|
||||
{ int imax = (flags & RPMDIGEST_SHA1) ? 5 : 4;
|
||||
for (i = 0; i < imax; i++)
|
||||
fprintf(stdout, "%08x", bdigest[i]);
|
||||
}
|
||||
fprintf(stdout, " BeeCrypt\n");
|
||||
#endif
|
||||
fflush(stdout);
|
||||
free((void *)digest);
|
||||
}
|
||||
|
|
|
@ -4,9 +4,7 @@
|
|||
|
||||
#include "system.h"
|
||||
|
||||
#if !defined(__LCLINT__)
|
||||
#include <netinet/in.h>
|
||||
#endif /* __LCLINT__ */
|
||||
|
||||
#include <rpmmacro.h>
|
||||
#include <rpmmessages.h>
|
||||
|
|
3
rpmqv.c
3
rpmqv.c
|
@ -1033,7 +1033,8 @@ int main(int argc, const char ** argv)
|
|||
ia->relocations = xmalloc(2 * sizeof(*ia->relocations));
|
||||
ia->relocations[0].oldPath = NULL; /* special case magic */
|
||||
ia->relocations[0].newPath = ia->prefix;
|
||||
ia->relocations[1].oldPath = ia->relocations[1].newPath = NULL;
|
||||
ia->relocations[1].oldPath = NULL;
|
||||
ia->relocations[1].newPath = NULL;
|
||||
} else if (ia->relocations) {
|
||||
ia->relocations = xrealloc(ia->relocations,
|
||||
sizeof(*ia->relocations) * (ia->numRelocations + 1));
|
||||
|
|
51
system.h
51
system.h
|
@ -38,7 +38,7 @@
|
|||
extern time_t timezone;
|
||||
#endif
|
||||
|
||||
#ifdef __LCLINT__
|
||||
#if defined(__LCLINT__)
|
||||
typedef unsigned int u_int32_t;
|
||||
typedef unsigned short u_int16_t;
|
||||
typedef unsigned char u_int8_t;
|
||||
|
@ -89,13 +89,15 @@ char *memchr ();
|
|||
|
||||
#if !defined(HAVE_STPCPY) || defined(__LCLINT__)
|
||||
/*@-declundef@*/
|
||||
char * stpcpy(char * dest, const char * src) /*@modifies *dest @*/;
|
||||
char * stpcpy(/*@out@*/ char * dest, const char * src)
|
||||
/*@modifies *dest @*/;
|
||||
/*@=declundef@*/
|
||||
#endif
|
||||
|
||||
#if !defined(HAVE_STPNCPY) || defined(__LCLINT__)
|
||||
/*@-declundef@*/
|
||||
char * stpncpy(char * dest, const char * src, size_t n) /*@modifies *dest @*/;
|
||||
char * stpncpy(/*@out@*/ char * dest, const char * src, size_t n)
|
||||
/*@modifies *dest @*/;
|
||||
/*@=declundef@*/
|
||||
#endif
|
||||
|
||||
|
@ -212,26 +214,45 @@ char *alloca ();
|
|||
#endif
|
||||
|
||||
/*@-declundef@*/
|
||||
/*@mayexit@*/ /*@only@*/ void * xmalloc (size_t size) /*@*/;
|
||||
/*@mayexit@*/ /*@only@*/ void * xcalloc (size_t nmemb, size_t size) /*@*/;
|
||||
/*@mayexit@*/ /*@only@*/ void * xrealloc (/*@only@*//*@null@*/ void * ptr,
|
||||
size_t size) /*@*/;
|
||||
/*@mayexit@*/ /*@only@*/ char * xstrdup (const char *str) /*@*/;
|
||||
/**
|
||||
*/
|
||||
/*@mayexit@*/ /*@only@*/ /*@out@*/ void * xmalloc (size_t size)
|
||||
/*@*/;
|
||||
|
||||
/**
|
||||
*/
|
||||
/*@mayexit@*/ /*@only@*/ void * xcalloc (size_t nmemb, size_t size)
|
||||
/*@*/;
|
||||
|
||||
/**
|
||||
* @todo Annotate ptr with returned/out.
|
||||
*/
|
||||
/*@mayexit@*/ /*@only@*/ void * xrealloc (/*@null@*/ /*@only@*/ void * ptr,
|
||||
size_t size)
|
||||
/*@modifies *ptr @*/;
|
||||
|
||||
/**
|
||||
*/
|
||||
/*@mayexit@*/ /*@only@*/ char * xstrdup (const char *str)
|
||||
/*@*/;
|
||||
/*@=declundef@*/
|
||||
/*@unused@*/ /*@exits@*/ /*@only@*/ void * vmefail(size_t size);
|
||||
|
||||
/**
|
||||
*/
|
||||
/*@unused@*/ /*@exits@*/ /*@only@*/ void * vmefail(size_t size)
|
||||
/*@*/;
|
||||
|
||||
#if HAVE_MCHECK_H
|
||||
#include <mcheck.h>
|
||||
#endif
|
||||
|
||||
|
||||
/* Memory allocation via macro defs to get meaningful locations from mtrace() */
|
||||
#if HAVE_MCHECK_H && defined(__GNUC__)
|
||||
#if defined(__GNUC__)
|
||||
#define xmalloc(_size) (malloc(_size) ? : vmefail(_size))
|
||||
#define xcalloc(_nmemb, _size) (calloc((_nmemb), (_size)) ? : vmefail(_size))
|
||||
#define xrealloc(_ptr, _size) (realloc((_ptr), (_size)) ? : vmefail(_size))
|
||||
#define xstrdup(_str) (strcpy((malloc(strlen(_str)+1) ? : vmefail(strlen(_str)+1)), (_str)))
|
||||
#endif /* HAVE_MCHECK_H && defined(__GNUC__) */
|
||||
#endif /* defined(__GNUC__) */
|
||||
#endif /* HAVE_MCHECK_H */
|
||||
|
||||
/* Retrofit glibc __progname */
|
||||
#if defined __GLIBC__ && __GLIBC__ >= 2
|
||||
|
@ -249,9 +270,7 @@ char *alloca ();
|
|||
const char *__progname;
|
||||
|
||||
#if HAVE_NETDB_H
|
||||
#ifndef __LCLINT__
|
||||
#include <netdb.h>
|
||||
#endif /* __LCLINT__ */
|
||||
#endif
|
||||
|
||||
#if HAVE_PWD_H
|
||||
|
@ -329,9 +348,7 @@ extern void unsetenv(const char *name);
|
|||
|
||||
#if HAVE_SYS_SOCKET_H
|
||||
#include <sys/types.h>
|
||||
#ifndef __LCLINT__
|
||||
#include <sys/socket.h>
|
||||
#endif /* __LCLINT__ */
|
||||
#endif
|
||||
|
||||
#if HAVE_SYS_SELECT_H
|
||||
|
|
Loading…
Reference in New Issue