- fix typos in linux.{req,prov}.
CVS patchset: 4834 CVS date: 2001/06/05 19:26:22
This commit is contained in:
parent
750d54d8a3
commit
4ae69250a2
84
.lclintrc
84
.lclintrc
|
@ -1,6 +1,7 @@
|
|||
-I. -I./build -I./lib -I./rpmdb -I./rpmio -I./popt -DHAVE_CONFIG_H -D_GNU_SOURCE
|
||||
|
||||
#+partial
|
||||
#+forcehints
|
||||
|
||||
-warnunixlib
|
||||
-warnposix
|
||||
|
@ -9,9 +10,9 @@
|
|||
|
||||
-unrecogcomments # XXX ignore doxygen markings
|
||||
|
||||
#+proto-param-match
|
||||
#-deepbreak # shortcut 485 occurences
|
||||
|
||||
#-deepbreak # shortcut 485 cases
|
||||
+checks # lclint level
|
||||
|
||||
# --- not-yet at strict level
|
||||
#+ptrarith
|
||||
|
@ -20,41 +21,41 @@
|
|||
#+sizeoftype
|
||||
|
||||
#+mod-uncon # shortcut alloca is painful
|
||||
#+mod-nomods
|
||||
#+modglobsnomods
|
||||
#+modstrictglobsnomods
|
||||
#+mod-nomods # 927 occurences
|
||||
+modglobsnomods
|
||||
+modstrictglobsnomods
|
||||
|
||||
#+mod-uncon-nomods
|
||||
#+mod-uncon-nomods # ~118 occurences
|
||||
#+mod-internal-strict
|
||||
#+mod-file-sys
|
||||
#+globnoglobs
|
||||
#+internalglobs
|
||||
#+internalglobnoglobs
|
||||
#+modglobsunchecked
|
||||
#+warnmissingglobs
|
||||
#+warnmissingglobsnomods
|
||||
#+impcheckedstrictglobs
|
||||
#+impcheckedstrictstatics
|
||||
#+mod-file-sys # 102 occurences
|
||||
#+globnoglobs # 1 occurence
|
||||
#+internalglobs # 38 occurences
|
||||
#+internalglobnoglobs # ???
|
||||
#+modglobsunchecked # 73 occurences
|
||||
+warnmissingglobs
|
||||
#+warnmissingglobsnomods # ???
|
||||
#+impcheckedstrictglobs # 358 occurences
|
||||
#+impcheckedstrictstatics # 1057 occurences
|
||||
#+strictusereleas
|
||||
#+strictbranchstate
|
||||
#+strictdestroy
|
||||
#+modobserveruncon
|
||||
#+modobserveruncon # 192 occurences
|
||||
#+macroempty
|
||||
#+ansi-reserved-internal
|
||||
#+evalorderuncon
|
||||
#+evalorderuncon # 32 occurences
|
||||
#+elseifcomplete
|
||||
#+loopswitchbreak
|
||||
#+switchswitchbreak
|
||||
#+looploopcontinue
|
||||
#+loopswitchbreak # 286 occurences
|
||||
#+switchswitchbreak # 32 occurences
|
||||
#+looploopcontinue # 86 occurences
|
||||
#+whileblock
|
||||
#+forempty
|
||||
+forempty
|
||||
#+forblock
|
||||
#+ifblock
|
||||
#+noeffectuncon
|
||||
#+noeffectuncon # 228 occurences
|
||||
+topuse
|
||||
#+unusedspecial
|
||||
#+export-local
|
||||
#+oldstyle
|
||||
+oldstyle
|
||||
#+sys-dir-errors
|
||||
#controlnestdepth 15
|
||||
#stringliterallen 509
|
||||
|
@ -62,36 +63,13 @@
|
|||
#numenummembers 127
|
||||
|
||||
# --- not-yet at checks level
|
||||
#+predboolptr
|
||||
-ptrnegate
|
||||
#-enumint
|
||||
-relaxquals
|
||||
#+mustmod # segfault in psm.c:597
|
||||
#+allglobs
|
||||
#+impcheckmodinternals
|
||||
#+uncheckedglobalias
|
||||
#+deparrays
|
||||
#+onlyunqglobaltrans
|
||||
#+staticinittrans
|
||||
#+unqualifiedinittrans
|
||||
#+retalias
|
||||
#+assignexpose
|
||||
#+castexpose
|
||||
#+retexpose
|
||||
#+readonlytrans
|
||||
#+sefuncon
|
||||
#+ansi-reserved
|
||||
+cpp-names # check for c++ names
|
||||
#+infloopsuncon
|
||||
#+looploopbreak
|
||||
#+switchloopbreak
|
||||
#+whileempty
|
||||
+declundef
|
||||
+export-header
|
||||
+export-header-var
|
||||
+redecl
|
||||
+noparams
|
||||
#includenest 8
|
||||
-predboolptr # 773 occurences
|
||||
+enumint # 93 occurences
|
||||
-allglobs # 131 occurrences
|
||||
-ansi-reserved # goofy
|
||||
-infloopsuncon # goofy
|
||||
|
||||
-proto-param-match # 59 occurences
|
||||
|
||||
# don't-bother-me-yet parameters
|
||||
-branchstate # painful
|
||||
|
|
|
@ -51,3 +51,5 @@ done | sort -u
|
|||
# --- Tcl modules.
|
||||
[ -x /usr/lib/rpm/tcl.prov -a -n "$tcllist" ] &&
|
||||
echo $tcllist | tr [:blank:] \\n | /usr/lib/rpm/tcl.prov | sort -u
|
||||
|
||||
exit 0
|
||||
|
|
|
@ -56,7 +56,7 @@ for f in $scriptlist; do
|
|||
interplist="$interplist $interp"
|
||||
case $interp in
|
||||
*/perl) perllist="$perllist $f" ;;
|
||||
*) [ "${f%.pm} != "${f}" ] && perllist="$perllist $f" ;;
|
||||
*) [ "${f%.pm}" != "${f}" ] && perllist="$perllist $f" ;;
|
||||
esac
|
||||
done
|
||||
[ -n "$interplist" ] && { echo "$interplist" | sort -u ; }
|
||||
|
|
6
build.c
6
build.c
|
@ -17,6 +17,7 @@
|
|||
/**
|
||||
*/
|
||||
static int checkSpec(Header h)
|
||||
/*@modifies h, fileSystem @*/
|
||||
{
|
||||
const char * rootdir = NULL;
|
||||
rpmdb db = NULL;
|
||||
|
@ -64,6 +65,7 @@ static int checkSpec(Header h)
|
|||
/**
|
||||
*/
|
||||
static int isSpecFile(const char * specfile)
|
||||
/*@modifies fileSystem @*/
|
||||
{
|
||||
char buf[256];
|
||||
const char * s;
|
||||
|
@ -102,6 +104,7 @@ static int isSpecFile(const char * specfile)
|
|||
*/
|
||||
static int buildForTarget(const char * arg, BTA_t ba,
|
||||
const char * passPhrase, char * cookie)
|
||||
/*@modifies fileSystem @*/
|
||||
{
|
||||
int buildAmount = ba->buildAmount;
|
||||
const char * buildRootURL = NULL;
|
||||
|
@ -125,7 +128,8 @@ static int buildForTarget(const char * arg, BTA_t ba,
|
|||
const char * tmpSpecFile;
|
||||
char * cmd, * s;
|
||||
rpmCompressedMagic res = COMPRESSED_OTHER;
|
||||
static const char *zcmds[] = { "cat", "gunzip", "bunzip2", "cat" };
|
||||
/*@observer@*/ static const char *zcmds[] =
|
||||
{ "cat", "gunzip", "bunzip2", "cat" };
|
||||
|
||||
specDir = rpmGetPath("%{_specdir}", NULL);
|
||||
|
||||
|
|
3
build.h
3
build.h
|
@ -6,7 +6,8 @@ extern "C" {
|
|||
#endif
|
||||
|
||||
int build(const char * arg, BTA_t ba, const char * passPhrase,
|
||||
char * cookie, /*@null@*/ const char * rcfile);
|
||||
char * cookie, /*@null@*/ const char * rcfile)
|
||||
/*@modifies ba->buildAmount, fileSystem @*/;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -268,7 +268,7 @@ static void timeCheck(int tc, Header h) /*@modifies internalState @*/
|
|||
/**
|
||||
*/
|
||||
typedef struct VFA {
|
||||
char * attribute;
|
||||
/*@observer@*/ /*@null@*/ const char * attribute;
|
||||
int flag;
|
||||
} VFA_t;
|
||||
|
||||
|
@ -326,7 +326,7 @@ static int parseForVerify(char * buf, FileList fl)
|
|||
/* Bracket %*verify args */
|
||||
*pe++ = ' ';
|
||||
for (p = pe; *pe && *pe != ')'; pe++)
|
||||
;
|
||||
{};
|
||||
|
||||
if (*pe == '\0') {
|
||||
rpmError(RPMERR_BADSPEC, _("Missing ')' in %s(%s\n"), name, p);
|
||||
|
@ -358,7 +358,7 @@ static int parseForVerify(char * buf, FileList fl)
|
|||
if (strcmp(p, vfa->attribute))
|
||||
continue;
|
||||
verifyFlags |= vfa->flag;
|
||||
break;
|
||||
/*@innerbreak@*/ break;
|
||||
}
|
||||
if (vfa->attribute)
|
||||
continue;
|
||||
|
@ -419,7 +419,7 @@ static int parseForAttr(char * buf, FileList fl)
|
|||
/* Bracket %*attr args */
|
||||
*pe++ = ' ';
|
||||
for (p = pe; *pe && *pe != ')'; pe++)
|
||||
;
|
||||
{};
|
||||
|
||||
if (ret_ar == &(fl->def_ar)) { /* %defattr */
|
||||
q = pe;
|
||||
|
@ -533,7 +533,7 @@ static int parseForConfig(char * buf, FileList fl)
|
|||
/* Bracket %config args */
|
||||
*pe++ = ' ';
|
||||
for (p = pe; *pe && *pe != ')'; pe++)
|
||||
;
|
||||
{};
|
||||
|
||||
if (*pe == '\0') {
|
||||
rpmError(RPMERR_BADSPEC, _("Missing ')' in %s(%s\n"), name, p);
|
||||
|
@ -602,7 +602,7 @@ static int parseForLang(char * buf, FileList fl)
|
|||
/* Bracket %lang args */
|
||||
*pe++ = ' ';
|
||||
for (pe = p; *pe && *pe != ')'; pe++)
|
||||
;
|
||||
{};
|
||||
|
||||
if (*pe == '\0') {
|
||||
rpmError(RPMERR_BADSPEC, _("Missing ')' in %s(%s\n"), name, p);
|
||||
|
@ -814,7 +814,7 @@ static int parseForSimple(/*@unused@*/Spec spec, Package pkg, char * buf,
|
|||
fl->currentFlags |= multiLib;
|
||||
} else
|
||||
fl->currentFlags |= vfa->flag;
|
||||
break;
|
||||
/*@innerbreak@*/ break;
|
||||
}
|
||||
/* if we got an attribute, continue with next token */
|
||||
if (vfa->attribute != NULL)
|
||||
|
@ -2117,8 +2117,8 @@ top:
|
|||
/**
|
||||
*/
|
||||
typedef struct {
|
||||
const char *msg;
|
||||
const char *argv[4];
|
||||
/*@observer@*/ /*@null@*/ const char *msg;
|
||||
/*@observer@*/ /*@null@*/ const char *argv[4];
|
||||
int ntag;
|
||||
int vtag;
|
||||
int ftag;
|
||||
|
@ -2231,7 +2231,9 @@ static int generateDepends(Spec spec, Package pkg, TFI_t cpioList, int multiLib)
|
|||
}
|
||||
|
||||
/* Get the script name to run */
|
||||
/*@-nullderef@*/ /* FIX: double indirection. @*/
|
||||
myargv[0] = (dm->argv[0] ? rpmExpand(dm->argv[0], NULL) : NULL);
|
||||
/*@=nullderef@*/
|
||||
|
||||
if (!(myargv[0] && *myargv[0] != '%')) {
|
||||
myargv[0] = _free(myargv[0]);
|
||||
|
@ -2250,7 +2252,9 @@ static int generateDepends(Spec spec, Package pkg, TFI_t cpioList, int multiLib)
|
|||
|
||||
/* Expand rest of script arguments (if any) */
|
||||
for (i = 1; i < 4; i++) {
|
||||
/*@-nullderef@*/ /* FIX: double indirection. @*/
|
||||
myargv[i] = dm->argv[i] ? rpmExpand(dm->argv[i], NULL) : NULL;
|
||||
/*@=nullderef@*/
|
||||
}
|
||||
|
||||
readBuf = getOutputFrom(NULL, myargv,
|
||||
|
|
|
@ -127,7 +127,9 @@ myftw_dir (DIR **dirs, int level, int descriptors,
|
|||
else
|
||||
flag = MYFTW_F;
|
||||
|
||||
/*@-modunconnomods@*/
|
||||
retval = (*func) (fl, dir, &s);
|
||||
/*@=modunconnomods@*/
|
||||
|
||||
if (flag == MYFTW_D)
|
||||
{
|
||||
|
@ -223,7 +225,9 @@ int myftw (const char *dir,
|
|||
len = strlen (dir);
|
||||
memcpy ((void *) buf, (void *) dir, len + 1);
|
||||
|
||||
/*@-modunconnomods@*/
|
||||
retval = (*func) (fl, buf, &s);
|
||||
/*@=modunconnomods@*/
|
||||
|
||||
if (flag == MYFTW_D)
|
||||
{
|
||||
|
|
|
@ -40,11 +40,13 @@ static int dateToTimet(const char * datestr, /*@out@*/ time_t * secs)
|
|||
struct tm time;
|
||||
char * p, * pe, * q, ** idx;
|
||||
char * date = strcpy(alloca(strlen(datestr) + 1), datestr);
|
||||
static char * days[] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat",
|
||||
NULL };
|
||||
static char * months[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun",
|
||||
/*@observer@*/ static char * days[] =
|
||||
{ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", NULL };
|
||||
/*@observer@*/ static char * months[] =
|
||||
{ "Jan", "Feb", "Mar", "Apr", "May", "Jun",
|
||||
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec", NULL };
|
||||
static char lengths[] = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
|
||||
/*@observer@*/ static char lengths[] =
|
||||
{ 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
|
||||
|
||||
memset(&time, 0, sizeof(time));
|
||||
|
||||
|
@ -55,7 +57,7 @@ static int dateToTimet(const char * datestr, /*@out@*/ time_t * secs)
|
|||
if (*p == '\0') return -1;
|
||||
pe = p; SKIPNONSPACE(pe); if (*pe != '\0') *pe++ = '\0';
|
||||
for (idx = days; *idx && strcmp(*idx, p); idx++)
|
||||
;
|
||||
{};
|
||||
if (*idx == NULL) return -1;
|
||||
|
||||
/* month */
|
||||
|
@ -63,7 +65,7 @@ static int dateToTimet(const char * datestr, /*@out@*/ time_t * secs)
|
|||
if (*p == '\0') return -1;
|
||||
pe = p; SKIPNONSPACE(pe); if (*pe != '\0') *pe++ = '\0';
|
||||
for (idx = months; *idx && strcmp(*idx, p); idx++)
|
||||
;
|
||||
{};
|
||||
if (*idx == NULL) return -1;
|
||||
time.tm_mon = idx - months;
|
||||
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
|
||||
/**
|
||||
*/
|
||||
static int_32 copyTagsDuringParse[] = {
|
||||
/*@observer@*/ static int_32 copyTagsDuringParse[] = {
|
||||
RPMTAG_EPOCH,
|
||||
RPMTAG_VERSION,
|
||||
RPMTAG_RELEASE,
|
||||
|
@ -33,7 +33,7 @@ static int_32 copyTagsDuringParse[] = {
|
|||
|
||||
/**
|
||||
*/
|
||||
static int requiredTags[] = {
|
||||
/*@observer@*/ static int requiredTags[] = {
|
||||
RPMTAG_NAME,
|
||||
RPMTAG_VERSION,
|
||||
RPMTAG_RELEASE,
|
||||
|
@ -46,6 +46,7 @@ static int requiredTags[] = {
|
|||
/**
|
||||
*/
|
||||
static void addOrAppendListEntry(Header h, int_32 tag, char * line)
|
||||
/*@modifies h @*/
|
||||
{
|
||||
int argc;
|
||||
const char **argv;
|
||||
|
@ -62,6 +63,7 @@ static void addOrAppendListEntry(Header h, int_32 tag, char *line)
|
|||
/**
|
||||
*/
|
||||
static int parseSimplePart(char *line, /*@out@*/char **name, /*@out@*/int *flag)
|
||||
/*@modifies *name, *flag @*/
|
||||
{
|
||||
char *tok;
|
||||
char linebuf[BUFSIZ];
|
||||
|
@ -93,6 +95,7 @@ static int parseSimplePart(char *line, /*@out@*/char **name, /*@out@*/int *flag)
|
|||
/**
|
||||
*/
|
||||
static inline int parseYesNo(const char * s)
|
||||
/*@*/
|
||||
{
|
||||
return ((!s || (s[0] == 'n' || s[0] == 'N' || s[0] == '0') ||
|
||||
!xstrcasecmp(s, "false") || !xstrcasecmp(s, "off"))
|
||||
|
@ -100,7 +103,7 @@ static inline int parseYesNo(const char *s)
|
|||
}
|
||||
|
||||
typedef struct tokenBits_s {
|
||||
const char * name;
|
||||
/*@observer@*/ /*@null@*/ const char * name;
|
||||
rpmsenseFlags bits;
|
||||
} * tokenBits;
|
||||
|
||||
|
@ -132,6 +135,7 @@ static struct tokenBits_s buildScriptBits[] = {
|
|||
*/
|
||||
static int parseBits(const char * s, const tokenBits tokbits,
|
||||
/*@out@*/ rpmsenseFlags * bp)
|
||||
/*@modifies *bp @*/
|
||||
{
|
||||
tokenBits tb;
|
||||
const char * se;
|
||||
|
@ -146,8 +150,9 @@ static int parseBits(const char * s, const tokenBits tokbits,
|
|||
if (s == se)
|
||||
break;
|
||||
for (tb = tokbits; tb->name; tb++) {
|
||||
if (strlen(tb->name) == (se-s) && !strncmp(tb->name, s, (se-s)))
|
||||
break;
|
||||
if (tb->name != NULL &&
|
||||
strlen(tb->name) == (se-s) && !strncmp(tb->name, s, (se-s)))
|
||||
/*@innerbreak@*/ break;
|
||||
}
|
||||
if (tb->name == NULL)
|
||||
break;
|
||||
|
@ -165,6 +170,7 @@ static int parseBits(const char * s, const tokenBits tokbits,
|
|||
/**
|
||||
*/
|
||||
static inline char * findLastChar(char * s)
|
||||
/*@*/
|
||||
{
|
||||
char *res = s;
|
||||
|
||||
|
@ -174,21 +180,22 @@ static inline char * findLastChar(char * s)
|
|||
s++;
|
||||
}
|
||||
|
||||
/*@-temptrans@*/
|
||||
/*@-temptrans -retalias@*/
|
||||
return res;
|
||||
/*@=temptrans@*/
|
||||
/*@=temptrans =retalias@*/
|
||||
}
|
||||
|
||||
/**
|
||||
*/
|
||||
static int isMemberInEntry(Header header, const char *name, int tag)
|
||||
static int isMemberInEntry(Header h, const char *name, int tag)
|
||||
/*@*/
|
||||
{
|
||||
HGE_t hge = (HGE_t)headerGetEntryMinMemory;
|
||||
HFD_t hfd = headerFreeData;
|
||||
const char ** names;
|
||||
int type, count;
|
||||
|
||||
if (!hge(header, tag, &type, (void **)&names, &count))
|
||||
if (!hge(h, tag, &type, &names, &count))
|
||||
return -1;
|
||||
while (count--) {
|
||||
if (!xstrcasecmp(names[count], name))
|
||||
|
@ -201,6 +208,7 @@ static int isMemberInEntry(Header header, const char *name, int tag)
|
|||
/**
|
||||
*/
|
||||
static int checkForValidArchitectures(Spec spec)
|
||||
/*@*/
|
||||
{
|
||||
#ifndef DYING
|
||||
const char *arch = NULL;
|
||||
|
@ -240,6 +248,7 @@ static int checkForValidArchitectures(Spec spec)
|
|||
/**
|
||||
*/
|
||||
static int checkForRequired(Header h, const char *name)
|
||||
/*@*/
|
||||
{
|
||||
int res = 0;
|
||||
int *p;
|
||||
|
@ -259,15 +268,12 @@ static int checkForRequired(Header h, const char *name)
|
|||
/**
|
||||
*/
|
||||
static int checkForDuplicates(Header h, const char *name)
|
||||
/*@modifies h @*/
|
||||
{
|
||||
int res = 0;
|
||||
int lastTag, tag;
|
||||
HeaderIterator hi;
|
||||
|
||||
#if 0 /* XXX harmless, but headerInitIterator() does this anyways */
|
||||
headerSort(h);
|
||||
#endif
|
||||
|
||||
for (hi = headerInitIterator(h), lastTag = 0;
|
||||
headerNextIterator(hi, &tag, NULL, NULL, NULL);
|
||||
lastTag = tag)
|
||||
|
@ -287,7 +293,7 @@ static int checkForDuplicates(Header h, const char *name)
|
|||
*/
|
||||
static struct optionalTag {
|
||||
int ot_tag;
|
||||
const char *ot_mac;
|
||||
/*@observer@*/ /*@null@*/ const char * ot_mac;
|
||||
} optionalTags[] = {
|
||||
{ RPMTAG_VENDOR, "%{vendor}" },
|
||||
{ RPMTAG_PACKAGER, "%{packager}" },
|
||||
|
@ -299,6 +305,7 @@ static struct optionalTag {
|
|||
/**
|
||||
*/
|
||||
static void fillOutMainPackage(Header h)
|
||||
/*@modifies h @*/
|
||||
{
|
||||
struct optionalTag *ot;
|
||||
|
||||
|
@ -315,6 +322,7 @@ static void fillOutMainPackage(Header h)
|
|||
/**
|
||||
*/
|
||||
static int readIcon(Header h, const char * file)
|
||||
/*@modifies h, fileSystem @*/
|
||||
{
|
||||
const char *fn = NULL;
|
||||
char *icon;
|
||||
|
@ -416,6 +424,11 @@ extern int noLang;
|
|||
*/
|
||||
static int handlePreambleTag(Spec spec, Package pkg, int tag, const char *macro,
|
||||
const char *lang)
|
||||
/*@modifies spec->macros, spec->st, spec->buildRootURL,
|
||||
spec->sources, spec->numSources, spec->noSource,
|
||||
spec->buildRestrictions, spec->BANames, spec->BACount,
|
||||
spec->line, spec->gotBuildRootURL,
|
||||
pkg->header, pkg->autoProv, pkg->autoReq, pkg->icon @*/
|
||||
{
|
||||
HGE_t hge = (HGE_t)headerGetEntryMinMemory;
|
||||
HFD_t hfd = headerFreeData;
|
||||
|
@ -670,7 +683,7 @@ typedef struct PreambleRec_s {
|
|||
int tag;
|
||||
int len;
|
||||
int multiLang;
|
||||
const char * token;
|
||||
/*@observer@*/ /*@null@*/ const char * token;
|
||||
} * PreambleRec;
|
||||
static struct PreambleRec_s preambleList[] = {
|
||||
{RPMTAG_NAME, 0, 0, "name"},
|
||||
|
@ -721,25 +734,27 @@ static struct PreambleRec_s preambleList[] = {
|
|||
/**
|
||||
*/
|
||||
static inline void initPreambleList(void)
|
||||
/*@modifies preambleList @*/
|
||||
{
|
||||
PreambleRec p;
|
||||
for (p = preambleList; p->token; p++)
|
||||
p->len = strlen(p->token);
|
||||
for (p = preambleList; p->token != NULL; p++)
|
||||
if (p->token) p->len = strlen(p->token);
|
||||
}
|
||||
|
||||
/**
|
||||
*/
|
||||
static int findPreambleTag(Spec spec, /*@out@*/int * tag,
|
||||
/*@null@*/ /*@out@*/ const char ** macro, char * lang)
|
||||
/*@modifies *tag, *macro, *lang @*/
|
||||
{
|
||||
char *s;
|
||||
PreambleRec p;
|
||||
char *s;
|
||||
|
||||
if (preambleList[0].len == 0)
|
||||
initPreambleList();
|
||||
|
||||
for (p = preambleList; p->token; p++) {
|
||||
if (!xstrncasecmp(spec->line, p->token, p->len))
|
||||
for (p = preambleList; p->token != NULL; p++) {
|
||||
if (p->token && !xstrncasecmp(spec->line, p->token, p->len))
|
||||
break;
|
||||
}
|
||||
if (p->token == NULL)
|
||||
|
@ -778,9 +793,9 @@ static int findPreambleTag(Spec spec, /*@out@*/int * tag,
|
|||
|
||||
*tag = p->tag;
|
||||
if (macro)
|
||||
/*@-onlytrans@*/ /* FIX: observer, but double indirection. */
|
||||
/*@-onlytrans -observertrans -dependenttrans@*/ /* FIX: double indirection. */
|
||||
*macro = p->token;
|
||||
/*@=onlytrans@*/
|
||||
/*@=onlytrans =observertrans =dependenttrans@*/
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -32,6 +32,7 @@
|
|||
* @return 0 on success
|
||||
*/
|
||||
static int checkOwners(const char * urlfn)
|
||||
/*@*/
|
||||
{
|
||||
struct stat sb;
|
||||
|
||||
|
@ -60,6 +61,7 @@ static int checkOwners(const char *urlfn)
|
|||
*/
|
||||
/*@observer@*/ static char *doPatch(Spec spec, int c, int strip, const char *db,
|
||||
int reverse, int removeEmpties)
|
||||
/*@modifies fileSystem @*/
|
||||
{
|
||||
const char *fn, *urlfn;
|
||||
static char buf[BUFSIZ];
|
||||
|
@ -150,6 +152,7 @@ static int checkOwners(const char *urlfn)
|
|||
* @return expanded %setup macro (NULL on error)
|
||||
*/
|
||||
/*@observer@*/ static const char *doUntar(Spec spec, int c, int quietly)
|
||||
/*@modifies fileSystem @*/
|
||||
{
|
||||
const char *fn, *urlfn;
|
||||
static char buf[BUFSIZ];
|
||||
|
@ -263,6 +266,8 @@ static int checkOwners(const char *urlfn)
|
|||
* @return 0 on success
|
||||
*/
|
||||
static int doSetupMacro(Spec spec, char *line)
|
||||
/*@modifies spec->buildSubdir, spec->macros, spec->prep,
|
||||
fileSystem @*/
|
||||
{
|
||||
char buf[BUFSIZ];
|
||||
StringBuf before;
|
||||
|
@ -388,13 +393,15 @@ static int doSetupMacro(Spec spec, char *line)
|
|||
|
||||
/* XXX FIXME: owner & group fixes were conditioned on !geteuid() */
|
||||
/* Fix the owner, group, and permissions of the setup build tree */
|
||||
{ static const char *fixmacs[] = {
|
||||
"%{_fixowner}", "%{_fixgroup}", "%{_fixperms}", NULL
|
||||
};
|
||||
{ /*@observer@*/ static const char *fixmacs[] =
|
||||
{ "%{_fixowner}", "%{_fixgroup}", "%{_fixperms}", NULL };
|
||||
const char ** fm;
|
||||
|
||||
for (fm = fixmacs; *fm; fm++) {
|
||||
const char *fix = rpmExpand(*fm, " .", NULL);
|
||||
const char *fix;
|
||||
/*@-nullpass@*/
|
||||
fix = rpmExpand(*fm, " .", NULL);
|
||||
/*@=nullpass@*/
|
||||
if (fix && *fix != '%')
|
||||
appendLineStringBuf(spec->prep, fix);
|
||||
fix = _free(fix);
|
||||
|
@ -411,6 +418,7 @@ static int doSetupMacro(Spec spec, char *line)
|
|||
* @return 0 on success
|
||||
*/
|
||||
static int doPatchMacro(Spec spec, char *line)
|
||||
/*@modifies spec->prep, fileSystem @*/
|
||||
{
|
||||
char *opt_b;
|
||||
int opt_P, opt_p, opt_R, opt_E;
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
/**
|
||||
*/
|
||||
static struct ReqComp {
|
||||
const char * token;
|
||||
/*@observer@*/ /*@null@*/ const char * token;
|
||||
rpmsenseFlags sense;
|
||||
} ReqComparisons[] = {
|
||||
{ "<=", RPMSENSE_LESS | RPMSENSE_EQUAL},
|
||||
|
@ -164,7 +164,7 @@ int parseRCPOT(Spec spec, Package pkg, const char *field, int tag,
|
|||
SKIPWHITE(v);
|
||||
ve = v;
|
||||
SKIPNONWHITE(ve);
|
||||
break;
|
||||
/*@innerbreak@*/ break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -415,6 +415,7 @@ fprintf(stderr, "*** PS buildRootURL(%s) %p macro set to %s\n", spec->buildRootU
|
|||
/* in the spec's line buffer. Except for parsePreamble(), */
|
||||
/* which handles the initial entry into a spec file. */
|
||||
|
||||
/*@-infloops@*/ /* LCL: parsePart is modified @*/
|
||||
while (parsePart < PART_LAST && parsePart != PART_NONE) {
|
||||
switch (parsePart) {
|
||||
case PART_PREAMBLE:
|
||||
|
@ -528,6 +529,7 @@ fprintf(stderr, "*** PS buildRootURL(%s) %p macro set to %s\n", spec->buildRootU
|
|||
return 0;
|
||||
}
|
||||
}
|
||||
/*@=infloops@*/ /* LCL: parsePart is modified @*/
|
||||
|
||||
/* Check for description in each package and add arch and os */
|
||||
{
|
||||
|
|
|
@ -136,7 +136,7 @@ void freeNames(void)
|
|||
*/
|
||||
int readLine(Spec spec, int strip)
|
||||
/*@modifies spec->fileStack, spec->readStack, spec->line, spec->lineNum,
|
||||
spec->sl @*/;
|
||||
spec->sl, fileSystem @*/;
|
||||
|
||||
/** \ingroup rpmbuild
|
||||
* Stop reading from spec file, freeing resources.
|
||||
|
@ -186,7 +186,7 @@ void addChangelogEntry(Header h, time_t time, const char * name,
|
|||
* @return >= 0 next rpmParseState, < 0 on error
|
||||
*/
|
||||
int parseBuildInstallClean(Spec spec, rpmParseState parsePart)
|
||||
/*@modifies spec->build, spec->install, spec->clean,
|
||||
/*@modifies spec->build, spec->install, spec->clean, spec->macros,
|
||||
spec->fileStack, spec->readStack, spec->line, spec->lineNum,
|
||||
spec->sl @*/;
|
||||
|
||||
|
@ -229,7 +229,11 @@ int parseFiles(Spec spec)
|
|||
int parsePreamble(Spec spec, int initialPackage)
|
||||
/*@modifies spec->packages,
|
||||
spec->fileStack, spec->readStack, spec->line, spec->lineNum,
|
||||
spec->sl @*/;
|
||||
spec->buildSubdir, spec->sl,
|
||||
spec->macros, spec->st, spec->buildRootURL,
|
||||
spec->sources, spec->numSources, spec->noSource,
|
||||
spec->buildRestrictions, spec->BANames, spec->BACount,
|
||||
spec->gotBuildRootURL @*/;
|
||||
|
||||
/** \ingroup rpmbuild
|
||||
* Parse %%prep section of a spec file.
|
||||
|
@ -237,7 +241,7 @@ int parsePreamble(Spec spec, int initialPackage)
|
|||
* @return >= 0 next rpmParseState, < 0 on error
|
||||
*/
|
||||
int parsePrep(Spec spec)
|
||||
/*@modifies spec->prep,
|
||||
/*@modifies spec->prep, spec->buildSubdir, spec->macros,
|
||||
spec->fileStack, spec->readStack, spec->line, spec->lineNum,
|
||||
spec->sl @*/;
|
||||
|
||||
|
@ -368,7 +372,8 @@ int rpmlibNeedsFeature(Header h, const char * feature, const char * featureEVR)
|
|||
int processBinaryFiles(Spec spec, int installSpecialDoc, int test)
|
||||
/*@modifies spec->macros,
|
||||
spec->packages->cpioList, spec->packages->fileList,
|
||||
spec->packages->specialDoc, spec->packages->header @*/;
|
||||
spec->packages->specialDoc, spec->packages->header,
|
||||
fileSystem @*/;
|
||||
|
||||
/** \ingroup rpmbuild
|
||||
* Create and initialize header for source package.
|
||||
|
@ -411,7 +416,8 @@ int parseSpec(/*@out@*/ Spec * specp, const char * specFile,
|
|||
/*@null@*/ const char * passPhrase,
|
||||
/*@null@*/ char * cookie,
|
||||
int anyarch, int force)
|
||||
/*@modifies *specp @*/;
|
||||
/*@modifies *specp,
|
||||
fileSystem @*/;
|
||||
|
||||
/** \ingroup rpmbuild
|
||||
* @retval specp spec file control structure
|
||||
|
@ -433,7 +439,8 @@ extern int (*parseSpecVec) (Spec * specp, const char * specFile,
|
|||
/*@null@*/ const char * passPhrase,
|
||||
/*@null@*/ char * cookie,
|
||||
int anyarch, int force)
|
||||
/*@modifies *specp @*/;
|
||||
/*@modifies *specp,
|
||||
fileSystem @*/;
|
||||
/*@=declundef@*/
|
||||
|
||||
/** \ingroup rpmbuild
|
||||
|
@ -449,7 +456,8 @@ int buildSpec(Spec spec, int what, int test)
|
|||
spec->BASpecs,
|
||||
spec->buildRestrictions, spec->BANames,
|
||||
spec->packages->cpioList, spec->packages->fileList,
|
||||
spec->packages->specialDoc, spec->packages->header @*/;
|
||||
spec->packages->specialDoc, spec->packages->header,
|
||||
fileSystem @*/;
|
||||
|
||||
/** \ingroup rpmbuild
|
||||
* Generate binary package(s).
|
||||
|
@ -458,7 +466,8 @@ int buildSpec(Spec spec, int what, int test)
|
|||
*/
|
||||
int packageBinaries(Spec spec)
|
||||
/*@modifies spec->packages->header,
|
||||
spec->sourceRpmName @*/;
|
||||
spec->sourceRpmName,
|
||||
fileSystem @*/;
|
||||
|
||||
/** \ingroup rpmbuild
|
||||
* Generate source package.
|
||||
|
@ -467,7 +476,8 @@ int packageBinaries(Spec spec)
|
|||
*/
|
||||
int packageSources(Spec spec)
|
||||
/*@modifies spec->sourceHeader, spec->cookie,
|
||||
spec->sourceRpmName @*/;
|
||||
spec->sourceRpmName,
|
||||
fileSystem @*/;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -139,7 +139,7 @@ Package newPackage(Spec spec)
|
|||
} else {
|
||||
/* Always add package to end of list */
|
||||
for (pp = spec->packages; pp->next != NULL; pp = pp->next)
|
||||
;
|
||||
{};
|
||||
pp->next = p;
|
||||
}
|
||||
p->next = NULL;
|
||||
|
|
|
@ -1066,6 +1066,11 @@ FINDPROVIDES="${RPMCONFIGDIR}/find-provides"
|
|||
AC_DEFINE_UNQUOTED(FINDPROVIDES, "$FINDPROVIDES")
|
||||
AC_SUBST(FINDPROVIDES)
|
||||
|
||||
dnl for Doxyfiles.in
|
||||
TOP_SOURCEDIR="`pwd`"
|
||||
AC_DEFINE_UNQUOTED(TOP_SOURCEDIR, "$TOP_SOURCEDIR")
|
||||
AC_SUBST(TOP_SOURCEDIR)
|
||||
|
||||
testdir="`pwd`/tests"
|
||||
dnl AC_DEFINE_UNQUOTED(testdir, "$testdir")
|
||||
AC_SUBST(testdir)
|
||||
|
|
|
@ -60,12 +60,14 @@ getdate.c: getdate.y
|
|||
-@if test -f y.tab.c; then \
|
||||
{ echo "/*@-globstate -statictrans -unqualifiedtrans -noparams @*/";\
|
||||
echo "/*@-retvalint -usedef -varuse -nullderef -nullassign @*/";\
|
||||
echo "/*@-readonlytrans -modunconnomods @*/";\
|
||||
sed -e 's,y.tab.c,getdate.c,' y.tab.c \
|
||||
-e 's,^YYSTYPE ,static &,' \
|
||||
-e 's,^short ,static &,' \
|
||||
-e 's,^const short ,static &,' \
|
||||
-e 's,^int yydebug,/*@unused@*/ static &,' \
|
||||
-e 's,^int ,static &,' ;\
|
||||
echo "/*@=readonlytrans =modunconnomods @*/";\
|
||||
echo "/*@=retvalint =usedef =varuse =nullderef =nullassign @*/";\
|
||||
echo "/*@=globstate =statictrans =unqualifiedtrans =noparams @*/";\
|
||||
} > getdate.c ;\
|
||||
|
|
|
@ -364,7 +364,8 @@ alAddPackage(availableList al,
|
|||
while (first < p->filesCount) {
|
||||
last = first;
|
||||
while ((last + 1) < p->filesCount) {
|
||||
if (dirIndexes[first] != dirIndexes[last + 1]) break;
|
||||
if (dirIndexes[first] != dirIndexes[last + 1])
|
||||
/*@innerbreak@*/ break;
|
||||
last++;
|
||||
}
|
||||
|
||||
|
@ -394,7 +395,7 @@ alAddPackage(availableList al,
|
|||
|
||||
if (relocs) {
|
||||
for (i = 0, r = relocs; r->oldPath || r->newPath; i++, r++)
|
||||
;
|
||||
{};
|
||||
p->relocs = xmalloc((i + 1) * sizeof(*p->relocs));
|
||||
|
||||
for (i = 0, r = relocs; r->oldPath || r->newPath; i++, r++) {
|
||||
|
@ -514,8 +515,8 @@ static void parseEVR(char * evr,
|
|||
if (rp) *rp = release;
|
||||
}
|
||||
|
||||
const char *rpmNAME = PACKAGE;
|
||||
const char *rpmEVR = VERSION;
|
||||
/*@observer@*/ const char *rpmNAME = PACKAGE;
|
||||
/*@observer@*/ const char *rpmEVR = VERSION;
|
||||
int rpmFLAGS = RPMSENSE_EQUAL;
|
||||
|
||||
int rpmRangesOverlap(const char * AName, const char * AEVR, int AFlags,
|
||||
|
@ -692,7 +693,9 @@ rpmTransactionSet rpmtransCreateSet(rpmdb rpmdb, const char * rootDir)
|
|||
ts->filesystemCount = 0;
|
||||
ts->filesystems = NULL;
|
||||
ts->di = NULL;
|
||||
/*@-assignexpose@*/
|
||||
ts->rpmdb = rpmdb;
|
||||
/*@=assignexpose@*/
|
||||
ts->scriptFd = NULL;
|
||||
ts->id = 0;
|
||||
ts->delta = 5;
|
||||
|
@ -979,7 +982,9 @@ alAllFileSatisfiesDepend(const availableList al,
|
|||
while (dirMatch > al->dirs && dirInfoCompare(dirMatch-1, &dirNeedle) == 0)
|
||||
dirMatch--;
|
||||
|
||||
/*@-nullptrarith@*/ /* FIX: fileName NULL ??? */
|
||||
baseName = strrchr(fileName, '/') + 1;
|
||||
/*@=nullptrarith@*/
|
||||
|
||||
for (found = 0, ret = NULL;
|
||||
dirMatch <= al->dirs + al->numDirs &&
|
||||
|
@ -1007,7 +1012,7 @@ alAllFileSatisfiesDepend(const availableList al,
|
|||
ret = xrealloc(ret, (found+2) * sizeof(*ret));
|
||||
if (ret) /* can't happen */
|
||||
ret[found++] = al->list + dirMatch->files[i].pkgNum;
|
||||
break;
|
||||
/*@innerbreak@*/ break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1103,7 +1108,8 @@ alAllSatisfiesDepend(const availableList al,
|
|||
proFlags = (p->provideFlags ? p->provideFlags[i] : 0);
|
||||
rc = rpmRangesOverlap(p->provides[i], proEVR, proFlags,
|
||||
keyName, keyEVR, keyFlags);
|
||||
if (rc) break;
|
||||
if (rc)
|
||||
/*@innerbreak@*/ break;
|
||||
}
|
||||
if (keyType && keyDepend && rc)
|
||||
rpmMessage(RPMMESS_DEBUG, _("%s: %-45s YES (added provide)\n"),
|
||||
|
@ -1423,7 +1429,7 @@ static int checkPackageDeps(rpmTransactionSet ts, problemsSet psp,
|
|||
if (suggestion) {
|
||||
int j;
|
||||
for (j = 0; suggestion[j]; j++)
|
||||
;
|
||||
{};
|
||||
psp->problems[psp->num].suggestedPackages =
|
||||
xmalloc( (j + 1) * sizeof(void *) );
|
||||
for (j = 0; suggestion[j]; j++)
|
||||
|
@ -1603,8 +1609,8 @@ static int checkDependentConflicts(rpmTransactionSet ts,
|
|||
|
||||
#if defined(DEPENDENCY_WHITEOUT)
|
||||
static struct badDeps_s {
|
||||
const char * pname;
|
||||
const char * qname;
|
||||
/*@observer@*/ /*@null@*/ const char * pname;
|
||||
/*@observer@*/ /*@null@*/ const char * qname;
|
||||
} badDeps[] = {
|
||||
{ "libtermcap", "bash" },
|
||||
{ "modutils", "vixie-cron" },
|
||||
|
@ -1632,11 +1638,12 @@ static int ignoreDep(const struct availablePackage * p,
|
|||
const struct availablePackage * q)
|
||||
/*@*/
|
||||
{
|
||||
struct badDeps_s *bdp;
|
||||
struct badDeps_s * bdp = badDeps;
|
||||
|
||||
for (bdp = badDeps; bdp->pname != NULL; bdp++) {
|
||||
while (bdp->pname != NULL && bdp->qname != NULL) {
|
||||
if (!strcmp(p->name, bdp->pname) && !strcmp(q->name, bdp->qname))
|
||||
return 1;
|
||||
bdp++;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
@ -1647,8 +1654,10 @@ static int ignoreDep(const struct availablePackage * p,
|
|||
* @param tsi successor chain
|
||||
* @param q predecessor
|
||||
*/
|
||||
static void markLoop(struct tsortInfo * tsi, struct availablePackage * q)
|
||||
/*@modifies *tsi @*/
|
||||
static void markLoop(/*@special@*/ struct tsortInfo * tsi,
|
||||
struct availablePackage * q)
|
||||
/*@uses tsi @*/
|
||||
/*@modifies internalState @*/
|
||||
{
|
||||
struct availablePackage * p;
|
||||
|
||||
|
@ -2022,7 +2031,7 @@ rescan:
|
|||
/* T12. Mark predecessor chain, looking for start of loop. */
|
||||
for (q = r->tsi.tsi_pkg; q != NULL; q = q->tsi.tsi_pkg) {
|
||||
if (q->tsi.tsi_reqx)
|
||||
break;
|
||||
/*@innerbreak@*/ break;
|
||||
q->tsi.tsi_reqx = 1;
|
||||
}
|
||||
|
||||
|
@ -2102,9 +2111,8 @@ rescan:
|
|||
if (ts->order[j].type == TR_REMOVED &&
|
||||
ts->order[j].u.removed.dependsOnIndex == needle->alIndex) {
|
||||
newOrder[newOrderCount++] = ts->order[j];
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
} else
|
||||
/*@innerbreak@*/ break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2175,7 +2183,7 @@ int rpmdepCheck(rpmTransactionSet ts,
|
|||
if (!checkDependentConflicts(ts, ps, p->provides[j]))
|
||||
continue;
|
||||
rc = 1;
|
||||
break;
|
||||
/*@innerbreak@*/ break;
|
||||
}
|
||||
if (rc)
|
||||
goto exit;
|
||||
|
@ -2214,7 +2222,7 @@ int rpmdepCheck(rpmTransactionSet ts,
|
|||
if (!checkDependentPackages(ts, ps, provides[j]))
|
||||
continue;
|
||||
rc = 1;
|
||||
break;
|
||||
/*@innerbreak@*/ break;
|
||||
}
|
||||
provides = hfd(provides, pnt);
|
||||
if (rc)
|
||||
|
@ -2248,7 +2256,7 @@ int rpmdepCheck(rpmTransactionSet ts,
|
|||
if (!checkDependentPackages(ts, ps, fileName))
|
||||
continue;
|
||||
rc = 1;
|
||||
break;
|
||||
/*@innerbreak@*/ break;
|
||||
}
|
||||
|
||||
fileName = _free(fileName);
|
||||
|
|
|
@ -179,7 +179,7 @@ static int instprefixTag(Header h, /*@null@*/ /*@out@*/ int_32 * type,
|
|||
/*@null@*/ /*@out@*/ const void ** data,
|
||||
/*@null@*/ /*@out@*/ int_32 * count,
|
||||
/*@null@*/ /*@out@*/ int * freeData)
|
||||
/*@modifies *type, *data, *count, *freeData @*/
|
||||
/*@modifies *type, *data, *freeData @*/
|
||||
{
|
||||
HGE_t hge = (HGE_t)headerGetEntryMinMemory;
|
||||
HFD_t hfd = headerFreeData;
|
||||
|
@ -211,7 +211,7 @@ static int instprefixTag(Header h, /*@null@*/ /*@out@*/ int_32 * type,
|
|||
static int fssizesTag(Header h, /*@out@*/ int_32 * type,
|
||||
/*@out@*/ const void ** data, /*@out@*/ int_32 * count,
|
||||
/*@out@*/ int * freeData)
|
||||
/*@modifies h, *type, *data, *count, *freeData @*/
|
||||
/*@modifies *type, *data, *count, *freeData @*/
|
||||
{
|
||||
HGE_t hge = (HGE_t)headerGetEntryMinMemory;
|
||||
const char ** filenames;
|
||||
|
@ -262,7 +262,7 @@ static int fssizesTag(Header h, /*@out@*/ int_32 * type,
|
|||
static int triggercondsTag(Header h, /*@out@*/ int_32 * type,
|
||||
/*@out@*/ const void ** data, /*@out@*/ int_32 * count,
|
||||
/*@out@*/ int * freeData)
|
||||
/*@modifies h, *type, *data, *count, *freeData @*/
|
||||
/*@modifies *type, *data, *count, *freeData @*/
|
||||
{
|
||||
HGE_t hge = (HGE_t)headerGetEntryMinMemory;
|
||||
HFD_t hfd = headerFreeData;
|
||||
|
@ -333,7 +333,7 @@ static int triggercondsTag(Header h, /*@out@*/ int_32 * type,
|
|||
static int triggertypeTag(Header h, /*@out@*/ int_32 * type,
|
||||
/*@out@*/ const void ** data, /*@out@*/ int_32 * count,
|
||||
/*@out@*/ int * freeData)
|
||||
/*@modifies h, *type, *data, *count, *freeData @*/
|
||||
/*@modifies *type, *data, *count, *freeData @*/
|
||||
{
|
||||
HGE_t hge = (HGE_t)headerGetEntryMinMemory;
|
||||
HFD_t hfd = headerFreeData;
|
||||
|
@ -367,7 +367,7 @@ static int triggertypeTag(Header h, /*@out@*/ int_32 * type,
|
|||
conds[i] = xstrdup("un");
|
||||
else
|
||||
conds[i] = xstrdup("postun");
|
||||
break;
|
||||
/*@innerbreak@*/ break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -402,9 +402,10 @@ static int filenamesTag(Header h, /*@out@*/ int_32 * type,
|
|||
/*@-exportlocal -exportheadervar@*/
|
||||
int _nl_msg_cat_cntr; /* XXX GNU gettext voodoo */
|
||||
/*@=exportlocal =exportheadervar@*/
|
||||
static const char * language = "LANGUAGE";
|
||||
/*@observer@*/ static const char * language = "LANGUAGE";
|
||||
|
||||
static char * _macro_i18ndomains = "%{?_i18ndomains:%{_i18ndomains}}";
|
||||
/*@observer@*/ static const char * _macro_i18ndomains =
|
||||
"%{?_i18ndomains:%{_i18ndomains}}";
|
||||
|
||||
/**
|
||||
* @param h header
|
||||
|
@ -534,7 +535,7 @@ static int descriptionTag(Header h, /*@out@*/ int_32 * type,
|
|||
static int groupTag(Header h, /*@out@*/ int_32 * type,
|
||||
/*@out@*/ const void ** data, /*@out@*/ int_32 * count,
|
||||
/*@out@*/ int * freeData)
|
||||
/*@modifies h, *type, *data, *count, *freeData @*/
|
||||
/*@modifies *type, *data, *count, *freeData @*/
|
||||
{
|
||||
return i18nTag(h, RPMTAG_GROUP, type, data, count, freeData);
|
||||
}
|
||||
|
|
5
lib/fs.c
5
lib/fs.c
|
@ -164,6 +164,7 @@ static int getFilesystemList(void)
|
|||
while (1) {
|
||||
# if GETMNTENT_ONE
|
||||
/* this is Linux */
|
||||
/*@-modunconnomods@*/
|
||||
our_mntent * itemptr = getmntent(mtab);
|
||||
if (!itemptr) break;
|
||||
item = *itemptr; /* structure assignment */
|
||||
|
@ -174,6 +175,7 @@ static int getFilesystemList(void)
|
|||
rdonly = 1;
|
||||
/*@=compdef@*/
|
||||
#endif
|
||||
/*@=modunconnomods@*/
|
||||
# elif GETMNTENT_TWO
|
||||
/* Solaris, maybe others */
|
||||
if (getmntent(mtab, &item)) break;
|
||||
|
@ -305,7 +307,8 @@ int rpmGetFilesystemUsage(const char ** fileList, int_32 * fssizes, int numFiles
|
|||
|
||||
if (lastDev != sb.st_dev) {
|
||||
for (j = 0; j < numFilesystems; j++)
|
||||
if (filesystems && filesystems[j].dev == sb.st_dev) break;
|
||||
if (filesystems && filesystems[j].dev == sb.st_dev)
|
||||
/*@innerbreak@*/ break;
|
||||
|
||||
if (j == numFilesystems) {
|
||||
rpmError(RPMERR_BADDEV,
|
||||
|
|
68
lib/fsm.c
68
lib/fsm.c
|
@ -26,13 +26,17 @@ int strict_erasures = 0;
|
|||
|
||||
rpmTransactionSet fsmGetTs(const FSM_t fsm) {
|
||||
const FSMI_t iter = fsm->iter;
|
||||
/*@-retexpose@*/
|
||||
return (iter ? iter->ts : NULL);
|
||||
/*@=retexpose@*/
|
||||
}
|
||||
|
||||
TFI_t fsmGetFi(const FSM_t fsm)
|
||||
{
|
||||
const FSMI_t iter = fsm->iter;
|
||||
/*@-retexpose@*/
|
||||
return (iter ? iter->fi : NULL);
|
||||
/*@=retexpose@*/
|
||||
}
|
||||
|
||||
#define SUFFIX_RPMORIG ".rpmorig"
|
||||
|
@ -100,8 +104,10 @@ mapInitIterator(/*@kept@*/ const void * a, /*@kept@*/ const void * b)
|
|||
FSMI_t iter = NULL;
|
||||
|
||||
iter = xcalloc(1, sizeof(*iter));
|
||||
/*@-assignexpose@*/
|
||||
iter->ts = ts;
|
||||
iter->fi = fi;
|
||||
/*@=assignexpose@*/
|
||||
iter->reverse = (fi->type == TR_REMOVED && fi->action != FA_COPYOUT);
|
||||
iter->i = (iter->reverse ? (fi->fc - 1) : 0);
|
||||
iter->isave = iter->i;
|
||||
|
@ -192,6 +198,7 @@ typedef struct dnli_s {
|
|||
* @retval NULL always
|
||||
*/
|
||||
static /*@null@*/ void * dnlFreeIterator(/*@only@*//*@null@*/ const void * a)
|
||||
/*@modifies a @*/
|
||||
{
|
||||
if (a) {
|
||||
DNLI_t dnli = (void *)a;
|
||||
|
@ -202,13 +209,17 @@ static /*@null@*/ void * dnlFreeIterator(/*@only@*//*@null@*/ const void * a)
|
|||
|
||||
/** \ingroup payload
|
||||
*/
|
||||
static inline int dnlCount(const DNLI_t dnli) {
|
||||
static inline int dnlCount(const DNLI_t dnli)
|
||||
/*@*/
|
||||
{
|
||||
return (dnli ? dnli->fi->dc : 0);
|
||||
}
|
||||
|
||||
/** \ingroup payload
|
||||
*/
|
||||
static inline int dnlIndex(const DNLI_t dnli) {
|
||||
static inline int dnlIndex(const DNLI_t dnli)
|
||||
/*@*/
|
||||
{
|
||||
return (dnli ? dnli->isave : -1);
|
||||
}
|
||||
|
||||
|
@ -221,6 +232,7 @@ static inline int dnlIndex(const DNLI_t dnli) {
|
|||
static /*@only@*/ void * dnlInitIterator(/*@special@*/ const FSM_t fsm,
|
||||
int reverse)
|
||||
/*@uses fsm->iter @*/
|
||||
/*@*/
|
||||
{
|
||||
TFI_t fi = fsmGetFi(fsm);
|
||||
DNLI_t dnli;
|
||||
|
@ -265,7 +277,7 @@ static /*@only@*/ void * dnlInitIterator(/*@special@*/ const FSM_t fsm,
|
|||
continue;
|
||||
/* This directory is included in the package. */
|
||||
dnli->active[j] = 0;
|
||||
break;
|
||||
/*@innerbreak@*/ break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -294,6 +306,7 @@ static /*@only@*/ void * dnlInitIterator(/*@special@*/ const FSM_t fsm,
|
|||
* @return next directory name
|
||||
*/
|
||||
static /*@observer@*/ const char * dnlNextIterator(/*@null@*/ DNLI_t dnli)
|
||||
/*@modifies dnli @*/
|
||||
{
|
||||
const char * dn = NULL;
|
||||
|
||||
|
@ -325,6 +338,7 @@ static int saveHardLink(/*@special@*/ /*@partial@*/ FSM_t fsm)
|
|||
/*@uses fsm->links, fsm->ix, fsm->sb, fsm->goal, fsm->nsuffix @*/
|
||||
/*@defines fsm->li @*/
|
||||
/*@releases fsm->path @*/
|
||||
/*@modifies fsm @*/
|
||||
{
|
||||
struct stat * st = &fsm->sb;
|
||||
int rc = 0;
|
||||
|
@ -413,6 +427,7 @@ fprintf(stderr, "*** %p link[%d:%d] %d filex %d %s\n", fsm->li, fsm->li->linksLe
|
|||
* @param li set of hard links
|
||||
*/
|
||||
static /*@null@*/ void * freeHardLink(/*@only@*/ /*@null@*/ struct hardLink * li)
|
||||
/*@modifies li @*/
|
||||
{
|
||||
if (li) {
|
||||
li->nsuffix = _free(li->nsuffix); /* XXX elements are shared */
|
||||
|
@ -465,12 +480,14 @@ int fsmSetup(FSM_t fsm, fileStage goal,
|
|||
}
|
||||
}
|
||||
|
||||
/*@-assignexpose@*/
|
||||
fsm->archiveSize = archiveSize;
|
||||
if (fsm->archiveSize)
|
||||
*fsm->archiveSize = 0;
|
||||
fsm->failedFile = failedFile;
|
||||
if (fsm->failedFile)
|
||||
*fsm->failedFile = NULL;
|
||||
/*@=assignexpose@*/
|
||||
|
||||
memset(fsm->sufbuf, 0, sizeof(fsm->sufbuf));
|
||||
if (fsm->goal == FSM_PKGINSTALL) {
|
||||
|
@ -634,6 +651,7 @@ int fsmMapAttrs(FSM_t fsm)
|
|||
*/
|
||||
static int expandRegular(/*@special@*/ FSM_t fsm)
|
||||
/*@uses fsm->sb @*/
|
||||
/*@modifies fsm, fileSystem @*/
|
||||
{
|
||||
const char * fmd5sum;
|
||||
const struct stat * st = &fsm->sb;
|
||||
|
@ -697,6 +715,7 @@ exit:
|
|||
*/
|
||||
static int writeFile(/*@special@*/ FSM_t fsm, int writeData)
|
||||
/*@uses fsm->path, fsm->opath, fsm->sb, fsm->osb, fsm->cfd @*/
|
||||
/*@modifies fsm, fileSystem @*/
|
||||
{
|
||||
const char * path = fsm->path;
|
||||
const char * opath = fsm->opath;
|
||||
|
@ -804,8 +823,10 @@ static int writeFile(/*@special@*/ FSM_t fsm, int writeData)
|
|||
TFI_t fi = fsmGetFi(fsm);
|
||||
if (ts && fi && ts->notify) {
|
||||
size_t size = (fdGetCpioPos(fsm->cfd) - pos);
|
||||
/*@-modunconnomods@*/
|
||||
(void)ts->notify(fi->h, RPMCALLBACK_INST_PROGRESS, size, size,
|
||||
(fi->ap ? fi->ap->key : NULL), ts->notifyData);
|
||||
/*@=modunconnomods@*/
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -828,6 +849,7 @@ exit:
|
|||
*/
|
||||
static int writeLinkedFile(/*@special@*/ FSM_t fsm)
|
||||
/*@uses fsm->path, fsm->nsuffix, fsm->ix, fsm->li, fsm->failedFile @*/
|
||||
/*@modifies fsm, fileSystem @*/
|
||||
{
|
||||
const char * path = fsm->path;
|
||||
const char * nsuffix = fsm->nsuffix;
|
||||
|
@ -870,6 +892,7 @@ static int writeLinkedFile(/*@special@*/ FSM_t fsm)
|
|||
*/
|
||||
static int fsmMakeLinks(/*@special@*/ FSM_t fsm)
|
||||
/*@uses fsm->path, fsm->opath, fsm->nsuffix, fsm->ix, fsm->li @*/
|
||||
/*@modifies fsm, fileSystem @*/
|
||||
{
|
||||
const char * path = fsm->path;
|
||||
const char * opath = fsm->opath;
|
||||
|
@ -924,6 +947,7 @@ static int fsmMakeLinks(/*@special@*/ FSM_t fsm)
|
|||
static int fsmCommitLinks(/*@special@*/ FSM_t fsm)
|
||||
/*@uses fsm->path, fsm->nsuffix, fsm->ix, fsm->sb,
|
||||
fsm->li, fsm->links @*/
|
||||
/*@modifies fsm, fileSystem @*/
|
||||
{
|
||||
const char * path = fsm->path;
|
||||
const char * nsuffix = fsm->nsuffix;
|
||||
|
@ -964,6 +988,7 @@ static int fsmCommitLinks(/*@special@*/ FSM_t fsm)
|
|||
/*@-compdef@*/
|
||||
static int fsmRmdirs(/*@special@*/ FSM_t fsm)
|
||||
/*@uses fsm->path, fsm->dnlx, fsm->ldn, fsm->rdbuf, fsm->iter @*/
|
||||
/*@modifies fsm, fileSystem @*/
|
||||
{
|
||||
const char * path = fsm->path;
|
||||
void * dnli = dnlInitIterator(fsm, 1);
|
||||
|
@ -994,7 +1019,8 @@ static int fsmRmdirs(/*@special@*/ FSM_t fsm)
|
|||
rc = fsmStage(fsm, FSM_RMDIR);
|
||||
*te = '/';
|
||||
}
|
||||
if (rc) break;
|
||||
if (rc)
|
||||
/*@innerbreak@*/ break;
|
||||
te--;
|
||||
} while ((te - dn) > fsm->dnlx[dc]);
|
||||
}
|
||||
|
@ -1015,6 +1041,7 @@ static int fsmMkdirs(/*@special@*/ FSM_t fsm)
|
|||
/*@uses fsm->path, fsm->sb, fsm->osb, fsm->rdbuf, fsm->iter,
|
||||
fsm->ldn, fsm->ldnlen, fsm->ldnalloc @*/
|
||||
/*@defines fsm->dnlx, fsm->ldn @*/
|
||||
/*@modifies fsm, fileSystem @*/
|
||||
{
|
||||
struct stat * st = &fsm->sb;
|
||||
struct stat * ost = &fsm->osb;
|
||||
|
@ -1089,7 +1116,8 @@ static int fsmMkdirs(/*@special@*/ FSM_t fsm)
|
|||
fsm->path, (unsigned)(st->st_mode & 07777));
|
||||
*te = '/';
|
||||
}
|
||||
if (rc) break;
|
||||
if (rc)
|
||||
/*@innerbreak@*/ break;
|
||||
}
|
||||
if (rc) break;
|
||||
|
||||
|
@ -1165,28 +1193,28 @@ int fsmStage(FSM_t fsm, fileStage stage)
|
|||
/* Exit on end-of-payload. */
|
||||
if (rc == CPIOERR_HDR_TRAILER) {
|
||||
rc = 0;
|
||||
break;
|
||||
/*@loopbreak@*/ break;
|
||||
}
|
||||
|
||||
/* Exit on error. */
|
||||
if (rc) {
|
||||
fsm->postpone = 1;
|
||||
(void) fsmStage(fsm, FSM_UNDO);
|
||||
break;
|
||||
/*@loopbreak@*/ break;
|
||||
}
|
||||
|
||||
/* Extract file from archive. */
|
||||
rc = fsmStage(fsm, FSM_PROCESS);
|
||||
if (rc) {
|
||||
(void) fsmStage(fsm, FSM_UNDO);
|
||||
break;
|
||||
/*@loopbreak@*/ break;
|
||||
}
|
||||
|
||||
/* Notify on success. */
|
||||
(void) fsmStage(fsm, FSM_NOTIFY);
|
||||
|
||||
if (fsmStage(fsm, FSM_FINI))
|
||||
break;
|
||||
/*@loopbreak@*/ break;
|
||||
}
|
||||
break;
|
||||
case FSM_PKGERASE:
|
||||
|
@ -1198,12 +1226,12 @@ int fsmStage(FSM_t fsm, fileStage stage)
|
|||
/* Exit on end-of-payload. */
|
||||
if (rc == CPIOERR_HDR_TRAILER) {
|
||||
rc = 0;
|
||||
break;
|
||||
/*@loopbreak@*/ break;
|
||||
}
|
||||
|
||||
/* Rename/erase next item. */
|
||||
if (fsmStage(fsm, FSM_FINI))
|
||||
break;
|
||||
/*@loopbreak@*/ break;
|
||||
}
|
||||
break;
|
||||
case FSM_PKGBUILD:
|
||||
|
@ -1214,25 +1242,25 @@ int fsmStage(FSM_t fsm, fileStage stage)
|
|||
/* Exit on end-of-payload. */
|
||||
if (rc == CPIOERR_HDR_TRAILER) {
|
||||
rc = 0;
|
||||
break;
|
||||
/*@loopbreak@*/ break;
|
||||
}
|
||||
|
||||
/* Exit on error. */
|
||||
if (rc) {
|
||||
fsm->postpone = 1;
|
||||
(void) fsmStage(fsm, FSM_UNDO);
|
||||
break;
|
||||
/*@loopbreak@*/ break;
|
||||
}
|
||||
|
||||
/* Copy file into archive. */
|
||||
rc = fsmStage(fsm, FSM_PROCESS);
|
||||
if (rc) {
|
||||
(void) fsmStage(fsm, FSM_UNDO);
|
||||
break;
|
||||
/*@loopbreak@*/ break;
|
||||
}
|
||||
|
||||
if (fsmStage(fsm, FSM_FINI))
|
||||
break;
|
||||
/*@loopbreak@*/ break;
|
||||
}
|
||||
|
||||
if (!rc)
|
||||
|
@ -1339,8 +1367,10 @@ int fsmStage(FSM_t fsm, fileStage stage)
|
|||
|
||||
fsm->postpone = XFA_SKIPPING(fsm->action);
|
||||
if (fsm->goal == FSM_PKGINSTALL || fsm->goal == FSM_PKGBUILD) {
|
||||
/*@-evalorder@*/
|
||||
if (!S_ISDIR(st->st_mode) && st->st_nlink > 1)
|
||||
fsm->postpone = saveHardLink(fsm);
|
||||
/*@=evalorder@*/
|
||||
}
|
||||
break;
|
||||
case FSM_PRE:
|
||||
|
@ -1369,7 +1399,8 @@ int fsmStage(FSM_t fsm, fileStage stage)
|
|||
if (rc) break; /* W2DO? */
|
||||
|
||||
for (li = fsm->links, prev = NULL; li; prev = li, li = li->next)
|
||||
if (li == fsm->li) break;
|
||||
if (li == fsm->li)
|
||||
/*@loopbreak@*/ break;
|
||||
|
||||
if (prev == NULL)
|
||||
fsm->links = fsm->li->next;
|
||||
|
@ -1632,7 +1663,7 @@ int fsmStage(FSM_t fsm, fileStage stage)
|
|||
fsm->path = NULL;
|
||||
}
|
||||
}
|
||||
break;
|
||||
/*@loopbreak@*/ break;
|
||||
}
|
||||
}
|
||||
if (fsm->goal == FSM_PKGBUILD) {
|
||||
|
@ -1844,7 +1875,8 @@ int fsmStage(FSM_t fsm, fileStage stage)
|
|||
for (left = st->st_size; left > 0; left -= fsm->rdnb) {
|
||||
fsm->wrlen = (left > fsm->wrsize ? fsm->wrsize : left);
|
||||
rc = fsmStage(fsm, FSM_DREAD);
|
||||
if (rc) break;
|
||||
if (rc)
|
||||
/*@loopbreak@*/ break;
|
||||
}
|
||||
break;
|
||||
case FSM_POS:
|
||||
|
|
14
lib/fsm.h
14
lib/fsm.h
|
@ -173,28 +173,30 @@ extern "C" {
|
|||
* @param a file stage
|
||||
* @return formatted string
|
||||
*/
|
||||
/*@observer@*/ const char *const fileStageString(fileStage a);
|
||||
/*@observer@*/ const char *const fileStageString(fileStage a) /*@*/;
|
||||
|
||||
/**
|
||||
* Return formatted string representation of file disposition.
|
||||
* @param a file dispostion
|
||||
* @return formatted string
|
||||
*/
|
||||
/*@observer@*/ const char *const fileActionString(fileAction a);
|
||||
/*@observer@*/ const char *const fileActionString(fileAction a) /*@*/;
|
||||
/*@=exportlocal@*/
|
||||
|
||||
/**
|
||||
* Create file state machine instance.
|
||||
* @return file state machine data
|
||||
*/
|
||||
/*@only@*/ FSM_t newFSM(void);
|
||||
/*@only@*/ FSM_t newFSM(void)
|
||||
/*@*/;
|
||||
|
||||
/**
|
||||
* Destroy file state machine instance.
|
||||
* @param fsm file state machine data
|
||||
* @return always NULL
|
||||
*/
|
||||
/*@null@*/ FSM_t freeFSM(/*@only@*/ /*@null@*/ FSM_t fsm);
|
||||
/*@null@*/ FSM_t freeFSM(/*@only@*/ /*@null@*/ FSM_t fsm)
|
||||
/*@modifies fsm @*/;
|
||||
|
||||
/**
|
||||
* Load external data into file state machine.
|
||||
|
@ -212,7 +214,7 @@ int fsmSetup(FSM_t fsm, fileStage goal,
|
|||
FD_t cfd,
|
||||
/*@out@*/ unsigned int * archiveSize,
|
||||
/*@out@*/ const char ** failedFile)
|
||||
/*@modifies fsm, *archiveSize, *failedFile @*/;
|
||||
/*@modifies fsm, *archiveSize, *failedFile, fileSystem @*/;
|
||||
|
||||
/**
|
||||
* Clean file state machine.
|
||||
|
@ -261,7 +263,7 @@ int fsmMapAttrs(FSM_t fsm)
|
|||
* @return 0 on success
|
||||
*/
|
||||
int fsmStage(/*@partial@*/ FSM_t fsm, fileStage stage)
|
||||
/*@modifies fsm @*/;
|
||||
/*@modifies fsm, fileSystem @*/;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
104
lib/header.c
104
lib/header.c
|
@ -172,7 +172,7 @@ _free(/*@only@*/ /*@null@*/ const void * p) /*@modifies *p @*/
|
|||
*/
|
||||
/*@mayexit@*/
|
||||
static int dataLength(int_32 type, const void * p, int_32 count, int onDisk)
|
||||
/*@*/
|
||||
/*@modifies fileSystem @*/
|
||||
{
|
||||
int length = 0;
|
||||
|
||||
|
@ -1145,7 +1145,7 @@ void headerDump(Header h, FILE *f, int flags,
|
|||
ct++;
|
||||
dp += sizeof(int_8);
|
||||
if (! (ct % 8)) {
|
||||
break;
|
||||
/*@loopbreak@*/ break;
|
||||
}
|
||||
}
|
||||
fprintf(f, "\n");
|
||||
|
@ -1320,19 +1320,19 @@ static int headerMatchLocale(const char *td, const char *l, const char *le)
|
|||
|
||||
/* Next, try stripping optional dialect and matching. */
|
||||
for (fe = l; fe < le && *fe != '@'; fe++)
|
||||
;
|
||||
{};
|
||||
if (fe < le && !strncmp(td, l, (fe - l)))
|
||||
return 1;
|
||||
|
||||
/* Next, try stripping optional codeset and matching. */
|
||||
for (fe = l; fe < le && *fe != '.'; fe++)
|
||||
;
|
||||
{};
|
||||
if (fe < le && !strncmp(td, l, (fe - l)))
|
||||
return 1;
|
||||
|
||||
/* Finally, try stripping optional country code and matching. */
|
||||
for (fe = l; fe < le && *fe != '_'; fe++)
|
||||
;
|
||||
{};
|
||||
if (fe < le && !strncmp(td, l, (fe - l)))
|
||||
return 1;
|
||||
|
||||
|
@ -1356,10 +1356,10 @@ headerFindI18NString(Header h, struct indexEntry *entry)
|
|||
(lang = getenv("LC_ALL")) == NULL &&
|
||||
(lang = getenv("LC_MESSAGES")) == NULL &&
|
||||
(lang = getenv("LANG")) == NULL)
|
||||
return entry->data;
|
||||
/*@-retalias@*/ return entry->data; /*@=retalias@*/
|
||||
|
||||
if ((table = findEntry(h, HEADER_I18NTABLE, RPM_STRING_ARRAY_TYPE)) == NULL)
|
||||
return entry->data;
|
||||
/*@-retalias@*/ return entry->data; /*@=retalias@*/
|
||||
|
||||
for (l = lang; *l != '\0'; l = le) {
|
||||
const char *td;
|
||||
|
@ -1371,7 +1371,7 @@ headerFindI18NString(Header h, struct indexEntry *entry)
|
|||
if (*l == '\0')
|
||||
break;
|
||||
for (le = l; *le && *le != ':'; le++) /* find end of this locale */
|
||||
;
|
||||
{};
|
||||
|
||||
/* For each entry in the header ... */
|
||||
for (langNum = 0, td = table->data, ed = entry->data;
|
||||
|
@ -1384,7 +1384,7 @@ headerFindI18NString(Header h, struct indexEntry *entry)
|
|||
}
|
||||
}
|
||||
|
||||
return entry->data;
|
||||
/*@-retalias@*/ return entry->data; /*@=retalias@*/
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1619,8 +1619,12 @@ int headerAddEntry(Header h, int_32 tag, int_32 type, const void *p, int_32 c)
|
|||
struct indexEntry *entry;
|
||||
|
||||
if (c <= 0) {
|
||||
#ifdef DYING
|
||||
fprintf(stderr, _("Bad count for headerAddEntry(): %d\n"), (int) c);
|
||||
exit(EXIT_FAILURE);
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
/*@notreached@*/
|
||||
}
|
||||
|
||||
|
@ -1685,13 +1689,13 @@ int headerAddI18NString(Header h, int_32 tag, const char * string, const char *
|
|||
const char * charArray[2];
|
||||
int count = 0;
|
||||
if (!lang || (lang[0] == 'C' && lang[1] == '\0')) {
|
||||
/*@-observertrans@*/
|
||||
/*@-observertrans -readonlytrans@*/
|
||||
charArray[count++] = "C";
|
||||
/*@=observertrans@*/
|
||||
/*@=observertrans =readonlytrans@*/
|
||||
} else {
|
||||
/*@-observertrans@*/
|
||||
/*@-observertrans -readonlytrans@*/
|
||||
charArray[count++] = "C";
|
||||
/*@=observertrans@*/
|
||||
/*@=observertrans =readonlytrans@*/
|
||||
charArray[count++] = lang;
|
||||
}
|
||||
if (!headerAddEntry(h, HEADER_I18NTABLE, RPM_STRING_ARRAY_TYPE,
|
||||
|
@ -1985,6 +1989,8 @@ static void findTag(char * name, const struct headerTagTableEntry * tags,
|
|||
/* Search extensions first to permit overriding header tags. */
|
||||
ext = extensions;
|
||||
while (ext->type != HEADER_EXT_LAST) {
|
||||
if (ext->name == NULL) /* XXX programmer error. */
|
||||
continue;
|
||||
if (ext->type == HEADER_EXT_TAG && !xstrcasecmp(ext->name, tagname))
|
||||
break;
|
||||
|
||||
|
@ -2001,7 +2007,8 @@ static void findTag(char * name, const struct headerTagTableEntry * tags,
|
|||
|
||||
/* Search header tags. */
|
||||
for (entry = tags; entry->name; entry++)
|
||||
if (!xstrcasecmp(entry->name, tagname)) break;
|
||||
if (entry->name && !xstrcasecmp(entry->name, tagname))
|
||||
break;
|
||||
|
||||
if (entry->name) {
|
||||
*tagMatch = entry;
|
||||
|
@ -2091,9 +2098,9 @@ static int parseFormat(char * str, const struct headerTagTableEntry * tags,
|
|||
chptr = start;
|
||||
while (*chptr && *chptr != '{' && *chptr != '%') chptr++;
|
||||
if (!*chptr || *chptr == '%') {
|
||||
/*@-observertrans@*/
|
||||
/*@-observertrans -readonlytrans@*/
|
||||
if (errmsg) *errmsg = _("missing { after %");
|
||||
/*@=observertrans@*/
|
||||
/*@=observertrans =readonlytrans@*/
|
||||
format = freeFormat(format, numTokens);
|
||||
return 1;
|
||||
}
|
||||
|
@ -2121,9 +2128,9 @@ static int parseFormat(char * str, const struct headerTagTableEntry * tags,
|
|||
next = start;
|
||||
while (*next && *next != '}') next++;
|
||||
if (!*next) {
|
||||
/*@-observertrans@*/
|
||||
/*@-observertrans -readonlytrans@*/
|
||||
if (errmsg) *errmsg = _("missing } after %{");
|
||||
/*@=observertrans@*/
|
||||
/*@=observertrans =readonlytrans@*/
|
||||
format = freeFormat(format, numTokens);
|
||||
return 1;
|
||||
}
|
||||
|
@ -2135,9 +2142,9 @@ static int parseFormat(char * str, const struct headerTagTableEntry * tags,
|
|||
if (*chptr != '\0') {
|
||||
*chptr++ = '\0';
|
||||
if (!*chptr) {
|
||||
/*@-observertrans@*/
|
||||
/*@-observertrans -readonlytrans@*/
|
||||
if (errmsg) *errmsg = _("empty tag format");
|
||||
/*@=observertrans@*/
|
||||
/*@=observertrans =readonlytrans@*/
|
||||
format = freeFormat(format, numTokens);
|
||||
return 1;
|
||||
}
|
||||
|
@ -2147,9 +2154,9 @@ static int parseFormat(char * str, const struct headerTagTableEntry * tags,
|
|||
}
|
||||
|
||||
if (!*start) {
|
||||
/*@-observertrans@*/
|
||||
/*@-observertrans -readonlytrans@*/
|
||||
if (errmsg) *errmsg = _("empty tag name");
|
||||
/*@=observertrans@*/
|
||||
/*@=observertrans =readonlytrans@*/
|
||||
format = freeFormat(format, numTokens);
|
||||
return 1;
|
||||
}
|
||||
|
@ -2164,9 +2171,9 @@ static int parseFormat(char * str, const struct headerTagTableEntry * tags,
|
|||
format[currToken].u.tag.ext = ext->u.tagFunction;
|
||||
format[currToken].u.tag.extNum = ext - extensions;
|
||||
} else {
|
||||
/*@-observertrans@*/
|
||||
/*@-observertrans -readonlytrans@*/
|
||||
if (errmsg) *errmsg = _("unknown tag");
|
||||
/*@=observertrans@*/
|
||||
/*@=observertrans =readonlytrans@*/
|
||||
format = freeFormat(format, numTokens);
|
||||
return 1;
|
||||
}
|
||||
|
@ -2191,9 +2198,9 @@ static int parseFormat(char * str, const struct headerTagTableEntry * tags,
|
|||
}
|
||||
|
||||
if (!start) {
|
||||
/*@-observertrans@*/
|
||||
/*@-observertrans -readonlytrans@*/
|
||||
if (errmsg) *errmsg = _("] expected at end of array");
|
||||
/*@=observertrans@*/
|
||||
/*@=observertrans =readonlytrans@*/
|
||||
format = freeFormat(format, numTokens);
|
||||
return 1;
|
||||
}
|
||||
|
@ -2209,13 +2216,13 @@ static int parseFormat(char * str, const struct headerTagTableEntry * tags,
|
|||
if ((*start == ']' && state != PARSER_IN_ARRAY) ||
|
||||
(*start == '}' && state != PARSER_IN_EXPR)) {
|
||||
if (*start == ']') {
|
||||
/*@-observertrans@*/
|
||||
/*@-observertrans -readonlytrans@*/
|
||||
if (errmsg) *errmsg = _("unexpected ]");
|
||||
/*@=observertrans@*/
|
||||
/*@=observertrans =readonlytrans@*/
|
||||
} else {
|
||||
/*@-observertrans@*/
|
||||
/*@-observertrans -readonlytrans@*/
|
||||
if (errmsg) *errmsg = _("unexpected }");
|
||||
/*@=observertrans@*/
|
||||
/*@=observertrans =readonlytrans@*/
|
||||
}
|
||||
format = freeFormat(format, numTokens);
|
||||
return 1;
|
||||
|
@ -2278,18 +2285,18 @@ static int parseExpression(struct sprintfToken * token, char * str,
|
|||
while (*chptr && *chptr != '?') chptr++;
|
||||
|
||||
if (*chptr != '?') {
|
||||
/*@-observertrans@*/
|
||||
/*@-observertrans -readonlytrans@*/
|
||||
if (errmsg) *errmsg = _("? expected in expression");
|
||||
/*@=observertrans@*/
|
||||
/*@=observertrans =readonlytrans@*/
|
||||
return 1;
|
||||
}
|
||||
|
||||
*chptr++ = '\0';;
|
||||
|
||||
if (*chptr != '{') {
|
||||
/*@-observertrans@*/
|
||||
/*@-observertrans -readonlytrans@*/
|
||||
if (errmsg) *errmsg = _("{ expected after ? in expression");
|
||||
/*@=observertrans@*/
|
||||
/*@=observertrans =readonlytrans@*/
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -2300,9 +2307,9 @@ static int parseExpression(struct sprintfToken * token, char * str,
|
|||
return 1;
|
||||
|
||||
if (!*end) {
|
||||
/*@-observertrans@*/
|
||||
/*@-observertrans -readonlytrans@*/
|
||||
if (errmsg) *errmsg = _("} expected in expression");
|
||||
/*@=observertrans@*/
|
||||
/*@=observertrans =readonlytrans@*/
|
||||
token->u.cond.ifFormat =
|
||||
freeFormat(token->u.cond.ifFormat, token->u.cond.numIfTokens);
|
||||
return 1;
|
||||
|
@ -2310,9 +2317,9 @@ static int parseExpression(struct sprintfToken * token, char * str,
|
|||
|
||||
chptr = end;
|
||||
if (*chptr != ':' && *chptr != '|') {
|
||||
/*@-observertrans@*/
|
||||
/*@-observertrans -readonlytrans@*/
|
||||
if (errmsg) *errmsg = _(": expected following ? subexpression");
|
||||
/*@=observertrans@*/
|
||||
/*@=observertrans =readonlytrans@*/
|
||||
token->u.cond.ifFormat =
|
||||
freeFormat(token->u.cond.ifFormat, token->u.cond.numIfTokens);
|
||||
return 1;
|
||||
|
@ -2327,9 +2334,9 @@ static int parseExpression(struct sprintfToken * token, char * str,
|
|||
chptr++;
|
||||
|
||||
if (*chptr != '{') {
|
||||
/*@-observertrans@*/
|
||||
/*@-observertrans -readonlytrans@*/
|
||||
if (errmsg) *errmsg = _("{ expected after : in expression");
|
||||
/*@=observertrans@*/
|
||||
/*@=observertrans =readonlytrans@*/
|
||||
token->u.cond.ifFormat =
|
||||
freeFormat(token->u.cond.ifFormat, token->u.cond.numIfTokens);
|
||||
return 1;
|
||||
|
@ -2342,9 +2349,9 @@ static int parseExpression(struct sprintfToken * token, char * str,
|
|||
errmsg))
|
||||
return 1;
|
||||
if (!*end) {
|
||||
/*@-observertrans@*/
|
||||
/*@-observertrans -readonlytrans@*/
|
||||
if (errmsg) *errmsg = _("} expected in expression");
|
||||
/*@=observertrans@*/
|
||||
/*@=observertrans =readonlytrans@*/
|
||||
token->u.cond.ifFormat =
|
||||
freeFormat(token->u.cond.ifFormat, token->u.cond.numIfTokens);
|
||||
return 1;
|
||||
|
@ -2352,9 +2359,9 @@ static int parseExpression(struct sprintfToken * token, char * str,
|
|||
|
||||
chptr = end;
|
||||
if (*chptr != '|') {
|
||||
/*@-observertrans@*/
|
||||
/*@-observertrans -readonlytrans@*/
|
||||
if (errmsg) *errmsg = _("| expected at end of expression");
|
||||
/*@=observertrans@*/
|
||||
/*@=observertrans =readonlytrans@*/
|
||||
token->u.cond.ifFormat =
|
||||
freeFormat(token->u.cond.ifFormat, token->u.cond.numIfTokens);
|
||||
token->u.cond.elseFormat =
|
||||
|
@ -2457,8 +2464,10 @@ static char * formatValue(struct sprintfTag * tag, Header h,
|
|||
if (tag->type) {
|
||||
ext = extensions;
|
||||
while (ext->type != HEADER_EXT_LAST) {
|
||||
if (ext->type == HEADER_EXT_FORMAT &&
|
||||
!strcmp(ext->name, tag->type)) {
|
||||
if (ext->name == NULL) /* XXX programmer error. */
|
||||
continue;
|
||||
if (ext->type == HEADER_EXT_FORMAT && !strcmp(ext->name, tag->type))
|
||||
{
|
||||
tagtype = ext->u.formatFunction;
|
||||
break;
|
||||
}
|
||||
|
@ -2583,6 +2592,7 @@ static const char * singleSprintf(Header h, struct sprintfToken * token,
|
|||
*val = '\0';
|
||||
len = 0;
|
||||
|
||||
if (condFormat)
|
||||
for (i = 0; i < condNumFormats; i++) {
|
||||
thisItem = singleSprintf(h, condFormat + i,
|
||||
extensions, extCache, element);
|
||||
|
@ -2618,7 +2628,7 @@ static const char * singleSprintf(Header h, struct sprintfToken * token,
|
|||
continue;
|
||||
val = headerFreeData(val, type);
|
||||
}
|
||||
break;
|
||||
/*@loopbreak@*/ break;
|
||||
}
|
||||
|
||||
if (numElements == -1) {
|
||||
|
|
15
lib/header.h
15
lib/header.h
|
@ -106,7 +106,7 @@ typedef /*@abstract@*/ struct headerIteratorS *HeaderIterator;
|
|||
* Associate tag names with numeric values.
|
||||
*/
|
||||
struct headerTagTableEntry {
|
||||
const char * name; /*!< Tag name. */
|
||||
/*@observer@*/ /*@null@*/ const char * name; /*!< Tag name. */
|
||||
int val; /*!< Tag numeric value. */
|
||||
};
|
||||
|
||||
|
@ -145,15 +145,18 @@ typedef /*only@*/ char * (*headerTagFormatFunction)(int_32 type,
|
|||
* @retval freedata address of data-was-malloc'ed indicator
|
||||
* @return 0 on success
|
||||
*/
|
||||
typedef int (*headerTagTagFunction)(Header h, int_32 * type, const void ** data,
|
||||
int_32 * count, int * freeData);
|
||||
typedef int (*headerTagTagFunction) (Header h,
|
||||
/*@null@*/ /*@out@*/ int_32 * type,
|
||||
/*@null@*/ /*@out@*/ const void ** data,
|
||||
/*@null@*/ /*@out@*/ int_32 * count,
|
||||
/*@null@*/ /*@out@*/ int * freeData);
|
||||
|
||||
/** \ingroup header
|
||||
* Define header tag output formats.
|
||||
*/
|
||||
struct headerSprintfExtension {
|
||||
enum headerSprintfExtenstionType type; /*!< Type of extension. */
|
||||
char * name; /*!< Name of extension. */
|
||||
/*@observer@*/ /*@null@*/ const char * name; /*!< Name of extension. */
|
||||
union {
|
||||
/*@unused@*/ void * generic; /*!< Private extension. */
|
||||
headerTagFormatFunction formatFunction; /*!< HEADER_EXT_TAG extension. */
|
||||
|
@ -184,7 +187,7 @@ enum hMagic {
|
|||
* @return header (or NULL on error)
|
||||
*/
|
||||
/*@null@*/ Header headerRead(FD_t fd, enum hMagic magicp)
|
||||
/*@modifies fd @*/;
|
||||
/*@modifies fd, fileSystem @*/;
|
||||
|
||||
/** \ingroup header
|
||||
* Write (with unload) header to file handle.
|
||||
|
@ -194,7 +197,7 @@ enum hMagic {
|
|||
* @return 0 on success, 1 on error
|
||||
*/
|
||||
int headerWrite(FD_t fd, /*@null@*/ Header h, enum hMagic magicp)
|
||||
/*@modifies fd, h @*/;
|
||||
/*@modifies fd, h, fileSystem @*/;
|
||||
|
||||
/** \ingroup header
|
||||
* Return size of on-disk header representation in bytes.
|
||||
|
|
|
@ -25,7 +25,7 @@ char * rpmPermsString(int mode)
|
|||
* @retval argvPtr args themselves
|
||||
*/
|
||||
int rpmReadPackageManifest(FD_t fd, int * argcPtr, const char *** argvPtr)
|
||||
/*@modifies fd, *argcPtr, *argvPtr @*/;
|
||||
/*@modifies fd, *argcPtr, *argvPtr, fileSystem @*/;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
24
lib/md5.h
24
lib/md5.h
|
@ -37,7 +37,8 @@ extern "C" {
|
|||
* @param ctx MD5 private data
|
||||
* @param brokenEndian calculate broken MD5 sum?
|
||||
*/
|
||||
void rpmMD5Init( /*@out@*/ struct MD5Context * ctx, int brokenEndian);
|
||||
void rpmMD5Init( /*@out@*/ struct MD5Context * ctx, int brokenEndian)
|
||||
/*@modifies *ctx @*/;
|
||||
|
||||
/**
|
||||
* Update context to reflect the concatenation of another buffer full.
|
||||
|
@ -47,14 +48,16 @@ void rpmMD5Init( /*@out@*/ struct MD5Context * ctx, int brokenEndian);
|
|||
* @param len no. bytes of data
|
||||
*/
|
||||
void rpmMD5Update(struct MD5Context * ctx, unsigned char const *buf,
|
||||
unsigned len);
|
||||
unsigned len)
|
||||
/*@modifies ctx @*/;
|
||||
/**
|
||||
* Return MD5 digest, and reset context.
|
||||
* @retval MD5 digest
|
||||
* @param ctx MD5 private data
|
||||
*/
|
||||
/*@-fixedformalarray@*/
|
||||
void rpmMD5Final(unsigned char digest[16], struct MD5Context * ctx);
|
||||
void rpmMD5Final(unsigned char digest[16], struct MD5Context * ctx)
|
||||
/*@modifies digest, ctx @*/;
|
||||
/*@=fixedformalarray@*/
|
||||
|
||||
/**
|
||||
|
@ -65,7 +68,8 @@ void rpmMD5Final(unsigned char digest[16], struct MD5Context * ctx);
|
|||
* @param in next block of data to add
|
||||
*/
|
||||
/*@-fixedformalarray -exportlocal@*/
|
||||
void rpmMD5Transform(uint32 buf[4], uint32 const in[16]);
|
||||
void rpmMD5Transform(uint32 buf[4], uint32 const in[16])
|
||||
/*@modifies *buf @*/;
|
||||
/*@=fixedformalarray =exportlocal@*/
|
||||
|
||||
/**
|
||||
|
@ -74,7 +78,8 @@ void rpmMD5Transform(uint32 buf[4], uint32 const in[16]);
|
|||
* @retval digest MD5 digest
|
||||
* @return 0 on success, 1 on error
|
||||
*/
|
||||
int mdfile(const char *fn, unsigned char *digest);
|
||||
int mdfile(const char * fn, unsigned char * digest)
|
||||
/*@modifies digest @*/;
|
||||
|
||||
/**
|
||||
* Return MD5 sum of file as binary data.
|
||||
|
@ -82,7 +87,8 @@ int mdfile(const char *fn, unsigned char *digest);
|
|||
* @retval bindigest MD5 digest
|
||||
* @return 0 on success, 1 on error
|
||||
*/
|
||||
int mdbinfile(const char *fn, unsigned char *bindigest);
|
||||
int mdbinfile(const char * fn, unsigned char * bindigest)
|
||||
/*@modifies *bindigest @*/;
|
||||
|
||||
/* These assume a little endian machine and return incorrect results!
|
||||
They are here for compatibility with old (broken) versions of RPM */
|
||||
|
@ -94,7 +100,8 @@ int mdbinfile(const char *fn, unsigned char *bindigest);
|
|||
* @retval digest MD5 digest
|
||||
* @return 0 on success, 1 on error
|
||||
*/
|
||||
int mdfileBroken(const char *fn, unsigned char *digest);
|
||||
int mdfileBroken(const char * fn, unsigned char * digest)
|
||||
/*@modifies *digest @*/;
|
||||
|
||||
/**
|
||||
* Return (broken!) MD5 sum of file as binary data.
|
||||
|
@ -103,7 +110,8 @@ int mdfileBroken(const char *fn, unsigned char *digest);
|
|||
* @retval bindigest MD5 digest
|
||||
* @return 0 on success, 1 on error
|
||||
*/
|
||||
int mdbinfileBroken(const char *fn, unsigned char *bindigest);
|
||||
int mdbinfileBroken(const char * fn, unsigned char * bindigest)
|
||||
/*@modifies *bindigest @*/;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
15
lib/misc.c
15
lib/misc.c
|
@ -17,7 +17,8 @@ static int _debug = 0;
|
|||
/*@access FD_t@*/ /* XXX compared with NULL */
|
||||
|
||||
/*@-exportheadervar@*/
|
||||
/*@unused@*/ char * RPMVERSION = VERSION; /* just to put a marker in librpm.a */
|
||||
/* just to put a marker in librpm.a */
|
||||
/*@unused@*/ /*@observer@*/ char * RPMVERSION = VERSION;
|
||||
/*@=exportheadervar@*/
|
||||
|
||||
char ** splitString(const char * str, int length, char sep)
|
||||
|
@ -414,6 +415,8 @@ void compressFilelist(Header h)
|
|||
|
||||
if (!hge(h, RPMTAG_OLDFILENAMES, &fnt, (void **) &fileNames, &count))
|
||||
return; /* no file list */
|
||||
if (fileNames == NULL || count <= 0)
|
||||
return;
|
||||
|
||||
dirNames = alloca(sizeof(*dirNames) * count); /* worst case */
|
||||
baseNames = alloca(sizeof(*dirNames) * count);
|
||||
|
@ -432,10 +435,14 @@ void compressFilelist(Header h)
|
|||
|
||||
for (i = 0; i < count; i++) {
|
||||
const char ** needle;
|
||||
char *baseName = strrchr(fileNames[i], '/') + 1;
|
||||
char savechar;
|
||||
int len = baseName - fileNames[i];
|
||||
char * baseName;
|
||||
int len;
|
||||
|
||||
if (fileNames[i] == NULL) /* XXX can't happen */
|
||||
continue;
|
||||
baseName = strrchr(fileNames[i], '/') + 1;
|
||||
len = baseName - fileNames[i];
|
||||
needle = dirNames;
|
||||
savechar = *baseName;
|
||||
*baseName = '\0';
|
||||
|
@ -454,12 +461,14 @@ void compressFilelist(Header h)
|
|||
}
|
||||
|
||||
exit:
|
||||
if (count > 0) {
|
||||
(void) headerAddEntry(h, RPMTAG_DIRINDEXES, RPM_INT32_TYPE,
|
||||
dirIndexes, count);
|
||||
(void) headerAddEntry(h, RPMTAG_BASENAMES, RPM_STRING_ARRAY_TYPE,
|
||||
baseNames, count);
|
||||
(void) headerAddEntry(h, RPMTAG_DIRNAMES, RPM_STRING_ARRAY_TYPE,
|
||||
dirNames, dirIndex + 1);
|
||||
}
|
||||
|
||||
fileNames = headerFreeData(fileNames, fnt);
|
||||
|
||||
|
|
|
@ -104,7 +104,7 @@ int myGlobPatternP (const char *patternURL) /*@*/;
|
|||
*/
|
||||
int rpmGlob(const char * patterns, /*@out@*/ int * argcPtr,
|
||||
/*@out@*/ const char *** argvPtr)
|
||||
/*@modifies *argcPtr, *argvPtr @*/;
|
||||
/*@modifies *argcPtr, *argvPtr, fileSystem @*/;
|
||||
|
||||
/**
|
||||
*/
|
||||
|
|
|
@ -69,7 +69,7 @@ void printDepProblems(FILE * fp,
|
|||
/* Filter already displayed problems. */
|
||||
for (j = 0; j < i; j++) {
|
||||
if (!sameProblem(conflicts + i, conflicts + j))
|
||||
break;
|
||||
/*@innerbreak@*/ break;
|
||||
}
|
||||
if (j < i)
|
||||
continue;
|
||||
|
@ -101,7 +101,9 @@ static inline int snprintf(char * buf, int nb, const char * fmt, ...)
|
|||
va_list ap;
|
||||
int rc;
|
||||
va_start(ap, fmt);
|
||||
/*@-modunconnomods@*/
|
||||
rc = vsnprintf(buf, nb, fmt, ap);
|
||||
/*@=modunconnomods@*/
|
||||
va_end(ap);
|
||||
return rc;
|
||||
}
|
||||
|
|
32
lib/psm.c
32
lib/psm.c
|
@ -220,7 +220,8 @@ void freeFi(TFI_t fi)
|
|||
/*@=nullstate@*/
|
||||
}
|
||||
|
||||
/*@observer@*/ const char *const fiTypeString(TFI_t fi) {
|
||||
/*@observer@*/ const char *const fiTypeString(TFI_t fi)
|
||||
{
|
||||
switch(fi->type) {
|
||||
case TR_ADDED: return " install";
|
||||
case TR_REMOVED: return " erase";
|
||||
|
@ -234,7 +235,7 @@ void freeFi(TFI_t fi)
|
|||
* @todo Should other macros be added from header when installing a package?
|
||||
*/
|
||||
static struct tagMacro {
|
||||
const char * macroname; /*!< Macro name to define. */
|
||||
/*@observer@*/ /*@null@*/ const char * macroname; /*!< Macro name to define. */
|
||||
int tag; /*!< Header tag to use for value. */
|
||||
} tagMacros[] = {
|
||||
{ "name", RPMTAG_NAME },
|
||||
|
@ -252,6 +253,7 @@ static struct tagMacro {
|
|||
* @return 0 always
|
||||
*/
|
||||
static int rpmInstallLoadMacros(TFI_t fi, Header h)
|
||||
/*@modifies internalState @*/
|
||||
{
|
||||
HGE_t hge = (HGE_t)fi->hge;
|
||||
struct tagMacro *tagm;
|
||||
|
@ -286,6 +288,7 @@ static int rpmInstallLoadMacros(TFI_t fi, Header h)
|
|||
* @return 0 on success, 1 on failure
|
||||
*/
|
||||
static int mergeFiles(TFI_t fi, Header h, Header newH)
|
||||
/*@modifies h @*/
|
||||
{
|
||||
HGE_t hge = (HGE_t)fi->hge;
|
||||
HFD_t hfd = (fi->hfd ? fi->hfd : headerFreeData);
|
||||
|
@ -393,7 +396,7 @@ static int mergeFiles(TFI_t fi, Header h, Header newH)
|
|||
continue;
|
||||
for (j = 0; j < dirCount; j++)
|
||||
if (!strcmp(dirNames[j], newDirNames[newDirIndexes[i]]))
|
||||
break;
|
||||
/*@innerbreak@*/ break;
|
||||
if (j == dirCount)
|
||||
dirNames[dirCount++] = newDirNames[newDirIndexes[i]];
|
||||
((int_32 *) newdata)[k++] = j;
|
||||
|
@ -431,7 +434,7 @@ static int mergeFiles(TFI_t fi, Header h, Header newH)
|
|||
(Flags[k] & RPMSENSE_SENSEMASK))
|
||||
{
|
||||
newNames[j] = NULL;
|
||||
break;
|
||||
/*@innerbreak@*/ break;
|
||||
}
|
||||
}
|
||||
for (j = 0, k = 0; j < newCount; j++) {
|
||||
|
@ -465,6 +468,7 @@ static int mergeFiles(TFI_t fi, Header h, Header newH)
|
|||
* @return 0 always
|
||||
*/
|
||||
static int markReplacedFiles(PSM_t psm)
|
||||
/*@modifies psm, fileSystem @*/
|
||||
{
|
||||
const rpmTransactionSet ts = psm->ts;
|
||||
TFI_t fi = psm->fi;
|
||||
|
@ -538,6 +542,7 @@ static int markReplacedFiles(PSM_t psm)
|
|||
/**
|
||||
*/
|
||||
static rpmRC chkdir (const char * dpath, const char * dname)
|
||||
/*@modifies fileSystem @*/
|
||||
{
|
||||
struct stat st;
|
||||
int rc;
|
||||
|
@ -592,11 +597,13 @@ rpmRC rpmInstallSourcePackage(const char * rootDir, FD_t fd,
|
|||
int i;
|
||||
|
||||
ts->notify = notify;
|
||||
/*@-temptrans@*/
|
||||
/*@-temptrans -assignexpose@*/
|
||||
ts->notifyData = notifyData;
|
||||
/*@=temptrans@*/
|
||||
/*@=temptrans =assignexpose@*/
|
||||
|
||||
/*@-mustmod@*/ /* LCL: segfault */
|
||||
rc = rpmReadPackageHeader(fd, &h, &isSource, NULL, NULL);
|
||||
/*@=mustmod@*/
|
||||
if (rc)
|
||||
goto exit;
|
||||
|
||||
|
@ -744,7 +751,8 @@ exit:
|
|||
return rc;
|
||||
}
|
||||
|
||||
static char * SCRIPT_PATH = "PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin";
|
||||
/*@observer@*/ static char * SCRIPT_PATH =
|
||||
"PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin";
|
||||
|
||||
/**
|
||||
* Return scriptlet name from tag.
|
||||
|
@ -752,6 +760,7 @@ static char * SCRIPT_PATH = "PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin";
|
|||
* @return name of scriptlet
|
||||
*/
|
||||
static /*@observer@*/ const char * const tag2sln(int tag)
|
||||
/*@*/
|
||||
{
|
||||
switch (tag) {
|
||||
case RPMTAG_PREIN: return "%pre";
|
||||
|
@ -785,6 +794,7 @@ static int runScript(PSM_t psm, Header h,
|
|||
const char * sln,
|
||||
int progArgc, const char ** progArgv,
|
||||
const char * script, int arg1, int arg2)
|
||||
/*@modifies psm, fileSystem @*/
|
||||
{
|
||||
const rpmTransactionSet ts = psm->ts;
|
||||
TFI_t fi = psm->fi;
|
||||
|
@ -921,7 +931,9 @@ static int runScript(PSM_t psm, Header h,
|
|||
if (ipath && ipath[5] != '%')
|
||||
path = ipath;
|
||||
(void) doputenv(path);
|
||||
/*@-modobserver@*/
|
||||
ipath = _free(ipath);
|
||||
/*@=modobserver@*/
|
||||
}
|
||||
|
||||
for (i = 0; i < numPrefixes; i++) {
|
||||
|
@ -990,6 +1002,7 @@ static int runScript(PSM_t psm, Header h,
|
|||
* @return rpmRC return code
|
||||
*/
|
||||
static rpmRC runInstScript(PSM_t psm)
|
||||
/*@modifies psm, fileSystem @*/
|
||||
{
|
||||
TFI_t fi = psm->fi;
|
||||
HGE_t hge = fi->hge;
|
||||
|
@ -1033,6 +1046,7 @@ static rpmRC runInstScript(PSM_t psm)
|
|||
*/
|
||||
static int handleOneTrigger(PSM_t psm, Header sourceH, Header triggeredH,
|
||||
int arg2, unsigned char * triggersAlreadyRun)
|
||||
/*@modifies psm, *triggersAlreadyRun, fileSystem @*/
|
||||
{
|
||||
const rpmTransactionSet ts = psm->ts;
|
||||
TFI_t fi = psm->fi;
|
||||
|
@ -1143,6 +1157,7 @@ static int handleOneTrigger(PSM_t psm, Header sourceH, Header triggeredH,
|
|||
* @return 0 on success, 1 on error
|
||||
*/
|
||||
static int runTriggers(PSM_t psm)
|
||||
/*@modifies psm, fileSystem @*/
|
||||
{
|
||||
const rpmTransactionSet ts = psm->ts;
|
||||
TFI_t fi = psm->fi;
|
||||
|
@ -1176,6 +1191,7 @@ static int runTriggers(PSM_t psm)
|
|||
* @return 0 on success, 1 on error
|
||||
*/
|
||||
static int runImmedTriggers(PSM_t psm)
|
||||
/*@modifies psm, fileSystem @*/
|
||||
{
|
||||
const rpmTransactionSet ts = psm->ts;
|
||||
TFI_t fi = psm->fi;
|
||||
|
@ -1306,7 +1322,7 @@ assert(psm->mi == NULL);
|
|||
psm->oh = headerCopy(psm->oh);
|
||||
else
|
||||
psm->oh = NULL;
|
||||
break;
|
||||
/*@loopbreak@*/ break;
|
||||
}
|
||||
psm->mi = rpmdbFreeIterator(psm->mi);
|
||||
rc = RPMRC_OK;
|
||||
|
|
|
@ -190,7 +190,7 @@ void freeFi(TFI_t fi)
|
|||
* @return 0 on success
|
||||
*/
|
||||
int psmStage(PSM_t psm, pkgStage stage)
|
||||
/*@modifies psm @*/;
|
||||
/*@modifies psm, fileSystem @*/;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
30
lib/query.c
30
lib/query.c
|
@ -431,28 +431,29 @@ printNewSpecfile(Spec spec)
|
|||
}
|
||||
}
|
||||
|
||||
void rpmDisplayQueryTags(FILE * f)
|
||||
void rpmDisplayQueryTags(FILE * fp)
|
||||
{
|
||||
const struct headerTagTableEntry * t;
|
||||
int i;
|
||||
const struct headerSprintfExtension * ext = rpmHeaderFormats;
|
||||
|
||||
for (i = 0, t = rpmTagTable; i < rpmTagTableSize; i++, t++) {
|
||||
fprintf(f, "%s\n", t->name + 7);
|
||||
}
|
||||
for (i = 0, t = rpmTagTable; i < rpmTagTableSize; i++, t++)
|
||||
if (t->name) fprintf(fp, "%s\n", t->name + 7);
|
||||
|
||||
while (ext->name) {
|
||||
while (ext->name != NULL) {
|
||||
if (ext->type == HEADER_EXT_MORE) {
|
||||
ext = ext->u.more;
|
||||
continue;
|
||||
}
|
||||
/* XXX don't print query tags twice. */
|
||||
for (i = 0, t = rpmTagTable; i < rpmTagTableSize; i++, t++) {
|
||||
if (t->name == NULL) /* XXX programmer error. */
|
||||
continue;
|
||||
if (!strcmp(t->name, ext->name))
|
||||
break;
|
||||
/*@innerbreak@*/ break;
|
||||
}
|
||||
if (i >= rpmTagTableSize && ext->type == HEADER_EXT_TAG)
|
||||
fprintf(f, "%s\n", ext->name + 7);
|
||||
fprintf(fp, "%s\n", ext->name + 7);
|
||||
ext++;
|
||||
}
|
||||
}
|
||||
|
@ -522,22 +523,24 @@ restart:
|
|||
Fstrerror(fd));
|
||||
if (fd) (void) Fclose(fd);
|
||||
retcode = 1;
|
||||
break;
|
||||
/*@loopbreak@*/ break;
|
||||
}
|
||||
|
||||
/*@-mustmod@*/ /* LCL: segfault. */
|
||||
rpmrc = rpmReadPackageHeader(fd, &h, &isSource, NULL, NULL);
|
||||
/*@=mustmod@*/
|
||||
(void) Fclose(fd);
|
||||
|
||||
if (!(rpmrc == RPMRC_OK || rpmrc == RPMRC_BADMAGIC)) {
|
||||
rpmError(RPMERR_QUERY, _("query of %s failed\n"), fileURL);
|
||||
retcode = 1;
|
||||
break;
|
||||
/*@loopbreak@*/ break;
|
||||
}
|
||||
if (rpmrc == RPMRC_OK && h == NULL) {
|
||||
rpmError(RPMERR_QUERY,
|
||||
_("old format source packages cannot be queried\n"));
|
||||
retcode = 1;
|
||||
break;
|
||||
/*@loopbreak@*/ break;
|
||||
}
|
||||
|
||||
/* Query a package file. */
|
||||
|
@ -554,7 +557,7 @@ restart:
|
|||
Fstrerror(fd));
|
||||
if (fd) (void) Fclose(fd);
|
||||
retcode = 1;
|
||||
break;
|
||||
/*@loopbreak@*/ break;
|
||||
}
|
||||
|
||||
/* Read list of packages from manifest. */
|
||||
|
@ -570,7 +573,7 @@ restart:
|
|||
if (retcode == 0)
|
||||
goto restart;
|
||||
|
||||
break;
|
||||
/*@loopbreak@*/ break;
|
||||
}
|
||||
|
||||
fileURL = _free(fileURL);
|
||||
|
@ -680,7 +683,8 @@ restart:
|
|||
char * fn;
|
||||
|
||||
for (s = arg; *s != '\0'; s++)
|
||||
if (!(*s == '.' || *s == '/')) break;
|
||||
if (!(*s == '.' || *s == '/'))
|
||||
/*@loopbreak@*/ break;
|
||||
|
||||
if (*s == '\0') {
|
||||
char fnbuf[PATH_MAX];
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
|
||||
static int manageFile(FD_t *fdp, const char **fnp, int flags,
|
||||
/*@unused@*/ int rc)
|
||||
/*@modifies *fdp, *fnp, fileSystem @*/
|
||||
{
|
||||
const char *fn;
|
||||
FD_t fd;
|
||||
|
@ -69,6 +70,7 @@ static int manageFile(FD_t *fdp, const char **fnp, int flags,
|
|||
|
||||
static int copyFile(FD_t *sfdp, const char **sfnp,
|
||||
FD_t *tfdp, const char **tfnp)
|
||||
/*@modifies *sfdp, *sfnp, *tfdp, *tfnp, fileSystem @*/
|
||||
{
|
||||
unsigned char buffer[BUFSIZ];
|
||||
ssize_t count;
|
||||
|
|
|
@ -33,6 +33,7 @@ static int progressCurrent = 0;
|
|||
/**
|
||||
*/
|
||||
static void printHash(const unsigned long amount, const unsigned long total)
|
||||
/*@modifies fileSystem @*/
|
||||
{
|
||||
int hashesNeeded;
|
||||
int hashesTotal = 50;
|
||||
|
@ -85,8 +86,11 @@ void * showProgress(/*@null@*/ const void * arg, const rpmCallbackType what,
|
|||
const unsigned long total,
|
||||
/*@null@*/ const void * pkgKey,
|
||||
/*@null@*/ void * data)
|
||||
/*@modifies fileSystem @*/
|
||||
{
|
||||
/*@-castexpose@*/
|
||||
Header h = (Header) arg;
|
||||
/*@=castexpose@*/
|
||||
char * s;
|
||||
int flags = (int) ((long)data);
|
||||
void * rc = NULL;
|
||||
|
@ -325,7 +329,9 @@ restart:
|
|||
continue;
|
||||
}
|
||||
|
||||
/*@-mustmod@*/ /* LCL: segfault */
|
||||
rpmrc = rpmReadPackageHeader(fd, &h, &isSource, NULL, NULL);
|
||||
/*@-mustmod@*/
|
||||
(void) Fclose(fd);
|
||||
|
||||
if (rpmrc == RPMRC_FAIL || rpmrc == RPMRC_SHORTREAD) {
|
||||
|
@ -399,7 +405,7 @@ restart:
|
|||
continue;
|
||||
/* same or newer package already installed */
|
||||
count = 0;
|
||||
break;
|
||||
/*@innerbreak@*/ break;
|
||||
}
|
||||
mi = rpmdbFreeIterator(mi);
|
||||
if (count == 0) {
|
||||
|
|
124
lib/rpmlib.h
124
lib/rpmlib.h
|
@ -37,7 +37,8 @@ extern "C" {
|
|||
* @return NULL always
|
||||
*/
|
||||
/*@unused@*/ static inline /*@null@*/ void *
|
||||
_free(/*@only@*/ /*@null@*/ const void * p) /*@modifies p@*/
|
||||
_free(/*@only@*/ /*@null@*/ const void * p)
|
||||
/*@modifies p @*/
|
||||
{
|
||||
if (p != NULL) free((void *)p);
|
||||
return NULL;
|
||||
|
@ -54,7 +55,7 @@ _free(/*@only@*/ /*@null@*/ const void * p) /*@modifies p@*/
|
|||
*/
|
||||
rpmRC rpmReadPackageInfo(FD_t fd, /*@null@*/ /*@out@*/ Header * sigp,
|
||||
/*@null@*/ /*@out@*/ Header * hdrp)
|
||||
/*@modifies fd, *sigp, *hdrp @*/;
|
||||
/*@modifies fd, *sigp, *hdrp, fileSystem @*/;
|
||||
|
||||
/**
|
||||
* Return package header and lead info from file handle.
|
||||
|
@ -66,9 +67,10 @@ rpmRC rpmReadPackageInfo(FD_t fd, /*@null@*/ /*@out@*/ Header * sigp,
|
|||
* @return rpmRC return code
|
||||
*/
|
||||
rpmRC rpmReadPackageHeader(FD_t fd, /*@null@*/ /*@out@*/ Header * hdrp,
|
||||
/*@null@*/ /*@out@*/ int * isSource, /*@null@*/ /*@out@*/ int * major,
|
||||
/*@null@*/ /*@out@*/ int * isSource,
|
||||
/*@null@*/ /*@out@*/ int * major,
|
||||
/*@null@*/ /*@out@*/ int * minor)
|
||||
/*@modifies fd, *hdrp, *isSource, *major, *minor @*/;
|
||||
/*@modifies fd, *hdrp, *isSource, *major, *minor, fileSystem @*/;
|
||||
|
||||
/** \ingroup header
|
||||
* Return name, version, release strings from header.
|
||||
|
@ -97,7 +99,8 @@ void headerMergeLegacySigs(Header h, const Header sig)
|
|||
* @param h header
|
||||
* @return regenerated signature header
|
||||
*/
|
||||
Header headerRegenSigHeader(const Header h) /*@*/;
|
||||
Header headerRegenSigHeader(const Header h)
|
||||
/*@*/;
|
||||
|
||||
/**
|
||||
* Retrieve file names from header.
|
||||
|
@ -465,7 +468,8 @@ typedef enum rpmsenseFlags_e {
|
|||
* @todo Eliminate from API.
|
||||
*/
|
||||
/*@-redecl@*/
|
||||
/*@observer@*/ /*@null@*/ extern const char * rpmGetVar(int var) /*@*/;
|
||||
/*@observer@*/ /*@null@*/ extern const char * rpmGetVar(int var)
|
||||
/*@*/;
|
||||
/*@=redecl@*/
|
||||
|
||||
/** \ingroup rpmrc
|
||||
|
@ -473,7 +477,8 @@ typedef enum rpmsenseFlags_e {
|
|||
* @deprecated Use rpmDefineMacro() to change appropriate macro instead.
|
||||
* @todo Eliminate from API.
|
||||
*/
|
||||
void rpmSetVar(int var, const char *val);
|
||||
void rpmSetVar(int var, const char * val)
|
||||
/*@modifies internalState @*/;
|
||||
|
||||
/** \ingroup rpmrc
|
||||
* List of macro files to read when configuring rpm.
|
||||
|
@ -481,7 +486,7 @@ void rpmSetVar(int var, const char *val);
|
|||
* identified by the token '://', so file paths must not begin with '//'.
|
||||
*/
|
||||
/*@-redecl@*/
|
||||
extern const char * macrofiles;
|
||||
/*@observer@*/ extern const char * macrofiles;
|
||||
/*@=redecl@*/
|
||||
|
||||
/** \ingroup rpmrc
|
||||
|
@ -503,14 +508,16 @@ enum rpm_machtable_e {
|
|||
* @return 0 on success, -1 on error
|
||||
*/
|
||||
int rpmReadConfigFiles(/*@null@*/ const char * file,
|
||||
/*@null@*/ const char * target);
|
||||
/*@null@*/ const char * target)
|
||||
/*@modifies fileSystem @*/;
|
||||
|
||||
/** \ingroup rpmrc
|
||||
* Read rpmrc (and macro) configuration file(s).
|
||||
* @param rcfiles colon separated files to read (NULL uses default)
|
||||
* @return 0 on succes
|
||||
*/
|
||||
int rpmReadRC(/*@null@*/ const char * rcfiles);
|
||||
int rpmReadRC(/*@null@*/ const char * rcfiles)
|
||||
/*@modifies fileSystem @*/;
|
||||
|
||||
/** \ingroup rpmrc
|
||||
* Return current arch name and/or number.
|
||||
|
@ -545,22 +552,26 @@ void rpmGetOsInfo( /*@null@*/ /*@out@*/ const char ** name,
|
|||
* @param name name
|
||||
* @return arch score (0 is no match, lower is preferred)
|
||||
*/
|
||||
int rpmMachineScore(int type, const char * name);
|
||||
int rpmMachineScore(int type, const char * name)
|
||||
/*@*/;
|
||||
|
||||
/** \ingroup rpmrc
|
||||
* Display current rpmrc (and macro) configuration.
|
||||
* @param fp output file handle
|
||||
* @return 0 always
|
||||
*/
|
||||
int rpmShowRC(FILE * fp);
|
||||
int rpmShowRC(FILE * fp)
|
||||
/*@modifies *fp, fileSystem @*/;
|
||||
|
||||
/** \ingroup rpmrc
|
||||
* @deprecated Use addMacro to set _target_* macros.
|
||||
* @todo Eliminate from API.
|
||||
# @note Only used by build code.
|
||||
* @param archTable
|
||||
* @param osTable
|
||||
*/
|
||||
void rpmSetTables(int archTable, int osTable); /* only used by build code */
|
||||
void rpmSetTables(int archTable, int osTable)
|
||||
/*@modifies internalState @*/;
|
||||
|
||||
/** \ingroup rpmrc
|
||||
* Set current arch/os names.
|
||||
|
@ -572,7 +583,8 @@ void rpmSetTables(int archTable, int osTable); /* only used by build code */
|
|||
* @param arch arch name (or NULL)
|
||||
* @param os os name (or NULL)
|
||||
*/
|
||||
void rpmSetMachine(/*@null@*/ const char * arch, /*@null@*/ const char * os);
|
||||
void rpmSetMachine(/*@null@*/ const char * arch, /*@null@*/ const char * os)
|
||||
/*@modifies internalState @*/;
|
||||
|
||||
/** \ingroup rpmrc
|
||||
* Return current arch/os names.
|
||||
|
@ -591,7 +603,8 @@ void rpmGetMachine( /*@null@*/ /*@out@*/ const char **arch,
|
|||
* Destroy rpmrc arch/os compatibility tables.
|
||||
* @todo Eliminate from API.
|
||||
*/
|
||||
void rpmFreeRpmrc(void);
|
||||
void rpmFreeRpmrc(void)
|
||||
/*@modifies internalState @*/;
|
||||
|
||||
/*@}*/
|
||||
/* ==================================================================== */
|
||||
|
@ -694,14 +707,16 @@ typedef /*@abstract@*/ struct _rpmdbMatchIterator * rpmdbMatchIterator;
|
|||
* @param mi rpm database iterator
|
||||
* @return current join key
|
||||
*/
|
||||
unsigned int rpmdbGetIteratorOffset(/*@null@*/ rpmdbMatchIterator mi) /*@*/;
|
||||
unsigned int rpmdbGetIteratorOffset(/*@null@*/ rpmdbMatchIterator mi)
|
||||
/*@*/;
|
||||
|
||||
/** \ingroup rpmdb
|
||||
* Return number of elements in rpm database iterator.
|
||||
* @param mi rpm database iterator
|
||||
* @return number of elements
|
||||
*/
|
||||
int rpmdbGetIteratorCount(/*@null@*/ rpmdbMatchIterator mi) /*@*/;
|
||||
int rpmdbGetIteratorCount(/*@null@*/ rpmdbMatchIterator mi)
|
||||
/*@*/;
|
||||
|
||||
/** \ingroup rpmdb
|
||||
* Append items to set of package instances to iterate.
|
||||
|
@ -724,7 +739,7 @@ int rpmdbAppendIterator(/*@null@*/ rpmdbMatchIterator mi,
|
|||
*/
|
||||
int rpmdbPruneIterator(/*@null@*/ rpmdbMatchIterator mi,
|
||||
/*@null@*/ int * hdrNums, int nHdrNums, int sorted)
|
||||
/*@modifies mi @*/;
|
||||
/*@modifies mi, *hdrNums @*/;
|
||||
|
||||
/** \ingroup rpmdb
|
||||
* Modify iterator to filter out headers that do not match version.
|
||||
|
@ -865,7 +880,7 @@ typedef /*@abstract@*/ struct rpmProblemSet_s {
|
|||
/**
|
||||
*/
|
||||
void printDepFlags(FILE *fp, const char *version, int flags)
|
||||
/*@modifies *fp @*/;
|
||||
/*@modifies *fp, fileSystem @*/;
|
||||
|
||||
/**
|
||||
*/
|
||||
|
@ -896,7 +911,7 @@ typedef /*@abstract@*/ struct rpmDependencyConflict_s {
|
|||
*/
|
||||
void printDepProblems(FILE * fp, const rpmDependencyConflict conflicts,
|
||||
int numConflicts)
|
||||
/*@modifies *fp @*/;
|
||||
/*@modifies *fp, fileSystem @*/;
|
||||
|
||||
/**
|
||||
* Return formatted string representation of problem.
|
||||
|
@ -914,7 +929,8 @@ void printDepProblems(FILE * fp, const rpmDependencyConflict conflicts,
|
|||
* @param fp file handle
|
||||
* @param prob rpm problem
|
||||
*/
|
||||
void rpmProblemPrint(FILE *fp, rpmProblem prob) /*@modifies *fp, prob @*/;
|
||||
void rpmProblemPrint(FILE *fp, rpmProblem prob)
|
||||
/*@modifies prob, *fp, fileSystem @*/;
|
||||
|
||||
/**
|
||||
* Print problems to file handle.
|
||||
|
@ -922,13 +938,14 @@ void rpmProblemPrint(FILE *fp, rpmProblem prob) /*@modifies *fp, prob @*/;
|
|||
* @param probs problem set
|
||||
*/
|
||||
void rpmProblemSetPrint(FILE *fp, rpmProblemSet probs)
|
||||
/*@modifies *fp, probs @*/;
|
||||
/*@modifies probs, *fp, fileSystem @*/;
|
||||
|
||||
/**
|
||||
* Destroy problem set.
|
||||
* @param probs problem set
|
||||
*/
|
||||
void rpmProblemSetFree( /*@only@*/ rpmProblemSet probs);
|
||||
void rpmProblemSetFree( /*@only@*/ rpmProblemSet probs)
|
||||
/*@modifies probs @*/;
|
||||
|
||||
/*@}*/
|
||||
/* ==================================================================== */
|
||||
|
@ -983,7 +1000,8 @@ rpmRC rpmInstallSourcePackage(/*@null@*/ const char * rootDir, FD_t fd,
|
|||
* @param second 2nd header
|
||||
* @return result of comparison
|
||||
*/
|
||||
int rpmVersionCompare(Header first, Header second);
|
||||
int rpmVersionCompare(Header first, Header second)
|
||||
/*@*/;
|
||||
|
||||
/**
|
||||
* File disposition(s) during package install/erase transaction.
|
||||
|
@ -1127,7 +1145,8 @@ void rpmtransSetScriptFd(rpmTransactionSet ts, FD_t fd)
|
|||
*/
|
||||
/*@unused@*/
|
||||
int rpmtransGetKeys(const rpmTransactionSet ts,
|
||||
/*@null@*/ /*@out@*/ const void *** ep, /*@null@*/ /*@out@*/ int * nep)
|
||||
/*@null@*/ /*@out@*/ const void *** ep,
|
||||
/*@null@*/ /*@out@*/ int * nep)
|
||||
/*@modifies ep, nep @*/;
|
||||
|
||||
/** \ingroup rpmtrans
|
||||
|
@ -1140,7 +1159,7 @@ int rpmtransGetKeys(const rpmTransactionSet ts,
|
|||
int rpmdepCheck(rpmTransactionSet ts,
|
||||
/*@exposed@*/ /*@out@*/ rpmDependencyConflict * conflicts,
|
||||
/*@exposed@*/ /*@out@*/ int * numConflicts)
|
||||
/*@modifies ts, *conflicts, *numConflicts @*/;
|
||||
/*@modifies ts, *conflicts, *numConflicts, fileSystem @*/;
|
||||
|
||||
/** \ingroup rpmtrans
|
||||
* Determine package order in a transaction set according to dependencies.
|
||||
|
@ -1162,7 +1181,7 @@ int rpmdepCheck(rpmTransactionSet ts,
|
|||
* @return 0 if packages are successfully ordered, 1 otherwise
|
||||
*/
|
||||
int rpmdepOrder(rpmTransactionSet ts)
|
||||
/*@modifies ts @*/;
|
||||
/*@modifies ts, fileSystem @*/;
|
||||
|
||||
/** \ingroup rpmtrans
|
||||
* Destroy dependency conflicts storage.
|
||||
|
@ -1171,7 +1190,8 @@ int rpmdepOrder(rpmTransactionSet ts)
|
|||
* @retrun NULL always
|
||||
*/
|
||||
/*@null@*/ rpmDependencyConflict rpmdepFreeConflicts(
|
||||
/*@only@*/ /*@null@*/ rpmDependencyConflict conflicts, int numConflicts)
|
||||
/*@only@*/ /*@null@*/ rpmDependencyConflict conflicts,
|
||||
int numConflicts)
|
||||
/*@modifies conflicts @*/;
|
||||
|
||||
/** \ingroup rpmtrans
|
||||
|
@ -1241,8 +1261,9 @@ typedef enum rpmtransFlags_e {
|
|||
* @return no. of entries
|
||||
*/
|
||||
/*@unused@*/
|
||||
int rpmGetRpmlibProvides(/*@out@*/ const char *** provNames,
|
||||
/*@out@*/ int ** provFlags, /*@out@*/ const char *** provVersions)
|
||||
int rpmGetRpmlibProvides(/*@null@*/ /*@out@*/ const char *** provNames,
|
||||
/*@null@*/ /*@out@*/ int ** provFlags,
|
||||
/*@null@*/ /*@out@*/ const char *** provVersions)
|
||||
/*@ modifies *provNames, *provFlags, *provVersions @*/;
|
||||
|
||||
/** \ingroup rpmtrans
|
||||
|
@ -1273,7 +1294,8 @@ int rpmCheckRpmlibProvides(const char * keyName, const char * keyEVR,
|
|||
* Display current rpmlib feature provides.
|
||||
* @param fp output file handle
|
||||
*/
|
||||
void rpmShowRpmlibProvides(FILE * fp) /*@modifies *fp @*/;
|
||||
void rpmShowRpmlibProvides(FILE * fp)
|
||||
/*@modifies *fp, fileSystem @*/;
|
||||
|
||||
/**
|
||||
* @todo Generalize filter mechanism.
|
||||
|
@ -1309,7 +1331,7 @@ int rpmRunTransactions(rpmTransactionSet ts,
|
|||
/*@out@*/ rpmProblemSet * newProbs,
|
||||
rpmtransFlags transFlags,
|
||||
rpmprobFilterFlags ignoreSet)
|
||||
/*@modifies ts, *newProbs @*/;
|
||||
/*@modifies ts, *newProbs, fileSystem @*/;
|
||||
|
||||
/*@}*/
|
||||
|
||||
|
@ -1319,7 +1341,8 @@ int rpmRunTransactions(rpmTransactionSet ts,
|
|||
* @return name of tag
|
||||
*/
|
||||
/*@-redecl@*/
|
||||
/*@observer@*/ extern const char *const tagName(int tag) /*@*/;
|
||||
/*@observer@*/ extern const char *const tagName(int tag)
|
||||
/*@*/;
|
||||
/*@=redecl@*/
|
||||
|
||||
/**
|
||||
|
@ -1327,7 +1350,8 @@ int rpmRunTransactions(rpmTransactionSet ts,
|
|||
* @param targstr name of tag
|
||||
* @return tag value
|
||||
*/
|
||||
int tagValue(const char *tagstr) /*@*/;
|
||||
int tagValue(const char *tagstr)
|
||||
/*@*/;
|
||||
|
||||
#define RPMLEAD_BINARY 0
|
||||
#define RPMLEAD_SOURCE 1
|
||||
|
@ -1359,7 +1383,8 @@ struct rpmlead {
|
|||
/**
|
||||
* Release storage used by file system usage cache.
|
||||
*/
|
||||
void freeFilesystems(void) /*@modifies internalState@*/;
|
||||
void freeFilesystems(void)
|
||||
/*@modifies internalState@*/;
|
||||
|
||||
/**
|
||||
* Return (cached) file system mount points.
|
||||
|
@ -1381,7 +1406,8 @@ int rpmGetFilesystemList( /*@null@*/ /*@out@*/ const char *** listptr,
|
|||
* @return 0 on success, 1 on error
|
||||
*/
|
||||
int rpmGetFilesystemUsage(const char ** fileList, int_32 * fssizes,
|
||||
int numFiles, /*@null@*/ /*@out@*/ uint_32 ** usagesPtr, int flags)
|
||||
int numFiles, /*@null@*/ /*@out@*/ uint_32 ** usagesPtr,
|
||||
int flags)
|
||||
/*@modifies *usagesPtr @*/;
|
||||
|
||||
/* ==================================================================== */
|
||||
|
@ -1404,7 +1430,7 @@ struct rpmBuildArguments_s {
|
|||
int useCatalog; /*!< from --usecatalog */
|
||||
char buildMode; /*!< Build mode (one of "btBC") */
|
||||
char buildChar; /*!< Build stage (one of "abcilps ") */
|
||||
/*@dependent@*/ /*@null@*/ const char * rootdir;
|
||||
/*@observer@*/ /*@null@*/ const char * rootdir;
|
||||
};
|
||||
/** \ingroup rpmcli
|
||||
*/
|
||||
|
@ -1516,7 +1542,7 @@ typedef struct rpmQVArguments_s {
|
|||
int qva_flags; /*!< Bit(s) to control operation. */
|
||||
/*@unused@*/ int qva_verbose; /*!< (unused) */
|
||||
/*@only@*/ /*@null@*/ const char * qva_queryFormat; /*!< Format for headerSprintf(). */
|
||||
/*@dependent@*/ /*@null@*/ const char * qva_prefix; /*!< Path to top of install tree. */
|
||||
/*@observer@*/ /*@null@*/ const char * qva_prefix; /*!< Path to top of install tree. */
|
||||
char qva_mode; /*!< 'q' is query, 'v' is verify mode. */
|
||||
char qva_char; /*!< (unused) always ' ' */
|
||||
} * QVA_t;
|
||||
|
@ -1535,7 +1561,7 @@ extern struct poptOption rpmQVSourcePoptTable[];
|
|||
* @param h header to use for query/verify
|
||||
*/
|
||||
typedef int (*QVF_t) (QVA_t qva, rpmdb db, Header h)
|
||||
/*@modifies db @*/;
|
||||
/*@modifies db, fileSystem @*/;
|
||||
|
||||
/** \ingroup rpmcli
|
||||
* Display query/verify information for each header in iterator.
|
||||
|
@ -1558,9 +1584,10 @@ extern struct poptOption rpmQueryPoptTable[];
|
|||
|
||||
/** \ingroup rpmcli
|
||||
* Display list of tags that can be used in --queryformat.
|
||||
* @param f file handle to use for display
|
||||
* @param fp file handle to use for display
|
||||
*/
|
||||
void rpmDisplayQueryTags(FILE * f) /*@modifies f @*/;
|
||||
void rpmDisplayQueryTags(FILE * fp)
|
||||
/*@modifies *fp, fileSystem @*/;
|
||||
|
||||
/** \ingroup rpmcli
|
||||
* Common query/verify source interface, called once for each CLI arg.
|
||||
|
@ -1608,7 +1635,7 @@ extern struct poptOption rpmVerifyPoptTable[];
|
|||
* @return result of last non-zero verify return
|
||||
*/
|
||||
int showVerifyPackage(QVA_t qva, /*@only@*/ rpmdb db, Header h)
|
||||
/*@modifies db, fileSystem@*/;
|
||||
/*@modifies db, h, fileSystem @*/;
|
||||
|
||||
/** \ingroup rpmcli
|
||||
* Verify package install.
|
||||
|
@ -1656,7 +1683,7 @@ int rpmInstall(/*@null@*/ const char * rootdir,
|
|||
rpmInstallInterfaceFlags interfaceFlags,
|
||||
rpmprobFilterFlags probFilter,
|
||||
/*@null@*/ rpmRelocation * relocations)
|
||||
/*@modifies fileSystem, *relocations @*/;
|
||||
/*@modifies *relocations, fileSystem @*/;
|
||||
|
||||
/** \ingroup rpmcli
|
||||
* Install source rpm package.
|
||||
|
@ -1669,7 +1696,7 @@ int rpmInstall(/*@null@*/ const char * rootdir,
|
|||
int rpmInstallSource(const char * rootdir, const char * arg,
|
||||
/*@null@*/ /*@out@*/ const char ** specFile,
|
||||
/*@null@*/ /*@out@*/ char ** cookie)
|
||||
/*@modifies fileSystem, *specFile, *cookie @*/;
|
||||
/*@modifies *specFile, *cookie, fileSystem @*/;
|
||||
|
||||
/** \ingroup rpmcli
|
||||
* Bit(s) to control rpmErase() operation.
|
||||
|
@ -1690,7 +1717,8 @@ typedef enum rpmEraseInterfaceFlags_e {
|
|||
*/
|
||||
int rpmErase(/*@null@*/ const char * rootdir, /*@null@*/ const char ** argv,
|
||||
rpmtransFlags transFlags,
|
||||
rpmEraseInterfaceFlags interfaceFlags);
|
||||
rpmEraseInterfaceFlags interfaceFlags)
|
||||
/*@modifies fileSystem @*/;
|
||||
|
||||
/*@}*/
|
||||
/* ==================================================================== */
|
||||
|
@ -1755,14 +1783,16 @@ typedef enum rpmVerifySignatureReturn_e {
|
|||
* @return result of signature verification
|
||||
*/
|
||||
rpmVerifySignatureReturn rpmVerifySignature(const char *file,
|
||||
int_32 sigTag, const void * sig, int count, char *result);
|
||||
int_32 sigTag, const void * sig, int count, char * result)
|
||||
/*@modifies *result, fileSystem @*/;
|
||||
|
||||
/** \ingroup signature
|
||||
* Destroy signature header from package.
|
||||
* @param h signature header
|
||||
* @return NULL always
|
||||
*/
|
||||
/*@null@*/ Header rpmFreeSignature(/*@null@*/ /*@killref@*/ Header h);
|
||||
/*@null@*/ Header rpmFreeSignature(/*@null@*/ /*@killref@*/ Header h)
|
||||
/*@modifies h @*/;
|
||||
|
||||
/* --- checksig/resign */
|
||||
|
||||
|
|
|
@ -8,10 +8,10 @@
|
|||
#include "debug.h"
|
||||
|
||||
static struct rpmlibProvides {
|
||||
const char * featureName;
|
||||
const char * featureEVR;
|
||||
/*@observer@*/ /*@null@*/ const char * featureName;
|
||||
/*@observer@*/ /*@null@*/ const char * featureEVR;
|
||||
int featureFlags;
|
||||
const char * featureDescription;
|
||||
/*@observer@*/ /*@null@*/ const char * featureDescription;
|
||||
} rpmlibProvides[] = {
|
||||
{ "rpmlib(VersionedDependencies)", "3.0.3-1",
|
||||
(RPMSENSE_RPMLIB|RPMSENSE_EQUAL),
|
||||
|
@ -40,9 +40,10 @@ void rpmShowRpmlibProvides(FILE * fp)
|
|||
|
||||
for (rlp = rpmlibProvides; rlp->featureName != NULL; rlp++) {
|
||||
fprintf(fp, " %s", rlp->featureName);
|
||||
if (rlp->featureFlags)
|
||||
if (rlp->featureEVR && rlp->featureFlags)
|
||||
printDepFlags(fp, rlp->featureEVR, rlp->featureFlags);
|
||||
fprintf(fp, "\n");
|
||||
if (rlp->featureDescription)
|
||||
fprintf(fp, "\t%s\n", rlp->featureDescription);
|
||||
}
|
||||
}
|
||||
|
@ -54,6 +55,7 @@ int rpmCheckRpmlibProvides(const char * keyName, const char * keyEVR,
|
|||
int rc = 0;
|
||||
|
||||
for (rlp = rpmlibProvides; rlp->featureName != NULL; rlp++) {
|
||||
if (rlp->featureEVR && rlp->featureFlags)
|
||||
rc = rpmRangesOverlap(keyName, keyEVR, keyFlags,
|
||||
rlp->featureName, rlp->featureEVR, rlp->featureFlags);
|
||||
if (rc)
|
||||
|
@ -72,9 +74,9 @@ int rpmGetRpmlibProvides(const char *** provNames, int ** provFlags,
|
|||
while (rpmlibProvides[n].featureName != NULL)
|
||||
n++;
|
||||
|
||||
names = xmalloc(sizeof(*names) * (n+1));
|
||||
versions = xmalloc(sizeof(*versions) * (n+1));
|
||||
flags = xmalloc(sizeof(*flags) * (n+1));
|
||||
names = xcalloc((n+1), sizeof(*names));
|
||||
versions = xcalloc((n+1), sizeof(*versions));
|
||||
flags = xcalloc((n+1), sizeof(*flags));
|
||||
|
||||
for (n = 0; rpmlibProvides[n].featureName != NULL; n++) {
|
||||
names[n] = rpmlibProvides[n].featureName;
|
||||
|
@ -82,12 +84,20 @@ int rpmGetRpmlibProvides(const char *** provNames, int ** provFlags,
|
|||
versions[n] = rpmlibProvides[n].featureEVR;
|
||||
}
|
||||
|
||||
names[n] = NULL;
|
||||
versions[n] = NULL;
|
||||
flags[n] = -1;
|
||||
|
||||
if (provNames)
|
||||
*provNames = names;
|
||||
else
|
||||
names = _free(names);
|
||||
|
||||
if (provFlags)
|
||||
*provFlags = flags;
|
||||
else
|
||||
flags = _free(flags);
|
||||
|
||||
if (provVersions)
|
||||
*provVersions = versions;
|
||||
else
|
||||
versions = _free(versions);
|
||||
|
||||
return n;
|
||||
}
|
||||
|
|
102
lib/rpmrc.c
102
lib/rpmrc.c
|
@ -16,9 +16,10 @@
|
|||
|
||||
/*@access FD_t@*/ /* compared with NULL */
|
||||
|
||||
static const char *defrcfiles = LIBRPMRC_FILENAME ":/etc/rpmrc:~/.rpmrc";
|
||||
/*@observer@*/ static const char *defrcfiles =
|
||||
LIBRPMRC_FILENAME ":/etc/rpmrc:~/.rpmrc";
|
||||
|
||||
const char * macrofiles = MACROFILES;
|
||||
/*@observer@*/ const char * macrofiles = MACROFILES;
|
||||
|
||||
typedef /*@owned@*/ const char * cptr_t;
|
||||
|
||||
|
@ -48,7 +49,7 @@ struct rpmvarValue {
|
|||
const char * value;
|
||||
/* eventually, this arch will be replaced with a generic condition */
|
||||
const char * arch;
|
||||
struct rpmvarValue * next;
|
||||
/*@only@*/ /*@null@*/ struct rpmvarValue * next;
|
||||
};
|
||||
|
||||
struct rpmOption {
|
||||
|
@ -77,7 +78,7 @@ typedef struct canonEntry_s {
|
|||
* for giggles, 'key'_canon, 'key'_compat, and 'key'_canon will also work
|
||||
*/
|
||||
typedef struct tableType_s {
|
||||
const char * const key;
|
||||
/*@observer@*/ const char * const key;
|
||||
const int hasCanon;
|
||||
const int hasTranslate;
|
||||
struct machEquivTable_s equiv;
|
||||
|
@ -117,10 +118,13 @@ static struct rpmvarValue values[RPMVAR_NUM];
|
|||
static int defaultsInitialized = 0;
|
||||
|
||||
/* prototypes */
|
||||
static int doReadRC( /*@killref@*/ FD_t fd, const char * urlfn);
|
||||
static int doReadRC( /*@killref@*/ FD_t fd, const char * urlfn)
|
||||
/*@modifies fd, fileSystem @*/;
|
||||
static void rpmSetVarArch(int var, const char * val,
|
||||
/*@null@*/ const char * arch);
|
||||
static void rebuildCompatTables(int type, const char * name);
|
||||
/*@null@*/ const char * arch)
|
||||
/*@modifies internalState @*/;
|
||||
static void rebuildCompatTables(int type, const char * name)
|
||||
/*@modifies internalState @*/;
|
||||
|
||||
static int optionCompare(const void * a, const void * b)
|
||||
/*@*/
|
||||
|
@ -145,11 +149,13 @@ machCacheFindEntry(const machCache cache, const char * key)
|
|||
|
||||
static int machCompatCacheAdd(char * name, const char * fn, int linenum,
|
||||
machCache cache)
|
||||
/*@modifies *name, cache->cache, cache->size @*/
|
||||
{
|
||||
char * chptr, * equivs;
|
||||
machCacheEntry entry = NULL;
|
||||
char * chptr;
|
||||
char * equivs;
|
||||
int delEntry = 0;
|
||||
int i;
|
||||
machCacheEntry entry = NULL;
|
||||
|
||||
while (*name && xisspace(*name)) name++;
|
||||
|
||||
|
@ -212,6 +218,7 @@ static int machCompatCacheAdd(char * name, const char * fn, int linenum,
|
|||
|
||||
static /*@observer@*/ /*@null@*/ machEquivInfo
|
||||
machEquivSearch(const machEquivTable table, const char * name)
|
||||
/*@*/
|
||||
{
|
||||
int i;
|
||||
|
||||
|
@ -242,9 +249,8 @@ static void machAddEquiv(machEquivTable table, const char * name,
|
|||
}
|
||||
|
||||
static void machCacheEntryVisit(machCache cache,
|
||||
machEquivTable table,
|
||||
const char * name,
|
||||
int distance)
|
||||
machEquivTable table, const char * name, int distance)
|
||||
/*@modifies table->list, table->count @*/
|
||||
{
|
||||
machCacheEntry entry;
|
||||
int i;
|
||||
|
@ -265,6 +271,7 @@ static void machCacheEntryVisit(machCache cache,
|
|||
|
||||
static void machFindEquivs(machCache cache, machEquivTable table,
|
||||
const char * key)
|
||||
/*@modifies cache->cache, table->list, table->count @*/
|
||||
{
|
||||
int i;
|
||||
|
||||
|
@ -292,6 +299,7 @@ static void machFindEquivs(machCache cache, machEquivTable table,
|
|||
|
||||
static int addCanon(canonEntry * table, int * tableLen, char * line,
|
||||
const char * fn, int lineNum)
|
||||
/*@modifies *table, *tableLen, *line @*/
|
||||
{
|
||||
canonEntry t;
|
||||
char *s, *s1;
|
||||
|
@ -348,6 +356,7 @@ static int addCanon(canonEntry * table, int * tableLen, char * line,
|
|||
|
||||
static int addDefault(defaultEntry * table, int * tableLen, char * line,
|
||||
const char * fn, int lineNum)
|
||||
/*@modifies *table, *tableLen, *line @*/
|
||||
{
|
||||
defaultEntry t;
|
||||
|
||||
|
@ -391,9 +400,9 @@ static /*@null@*/ const canonEntry lookupInCanonTable(const char *name,
|
|||
tableLen--;
|
||||
if (strcmp(name, table[tableLen].name))
|
||||
continue;
|
||||
/*@-immediatetrans@*/
|
||||
/*@-immediatetrans -retalias@*/
|
||||
return &(table[tableLen]);
|
||||
/*@=immediatetrans@*/
|
||||
/*@=immediatetrans =retalias@*/
|
||||
}
|
||||
|
||||
return NULL;
|
||||
|
@ -402,6 +411,7 @@ static /*@null@*/ const canonEntry lookupInCanonTable(const char *name,
|
|||
static /*@observer@*/ /*@null@*/
|
||||
const char * lookupInDefaultTable(const char * name,
|
||||
const defaultEntry table, int tableLen)
|
||||
/*@*/
|
||||
{
|
||||
while (tableLen) {
|
||||
tableLen--;
|
||||
|
@ -439,6 +449,7 @@ int rpmReadConfigFiles(const char * file, const char * target)
|
|||
|
||||
static void setVarDefault(int var, const char * macroname, const char * val,
|
||||
/*@null@*/ const char * body)
|
||||
/*@modifies internalState @*/
|
||||
{
|
||||
if (var >= 0) { /* XXX Dying ... */
|
||||
if (rpmGetVar(var)) return;
|
||||
|
@ -450,6 +461,7 @@ static void setVarDefault(int var, const char *macroname, const char *val,
|
|||
}
|
||||
|
||||
static void setPathDefault(int var, const char * macroname, const char * subdir)
|
||||
/*@modifies internalState @*/
|
||||
{
|
||||
|
||||
if (var >= 0) { /* XXX Dying ... */
|
||||
|
@ -480,7 +492,7 @@ static void setPathDefault(int var, const char *macroname, const char *subdir)
|
|||
}
|
||||
}
|
||||
|
||||
static const char *prescriptenviron = "\n\
|
||||
/*@observer@*/ static const char * prescriptenviron = "\n\
|
||||
RPM_SOURCE_DIR=\"%{_sourcedir}\"\n\
|
||||
RPM_BUILD_DIR=\"%{_builddir}\"\n\
|
||||
RPM_OPT_FLAGS=\"%{optflags}\"\n\
|
||||
|
@ -497,7 +509,9 @@ export RPM_PACKAGE_NAME RPM_PACKAGE_VERSION RPM_PACKAGE_RELEASE\n\
|
|||
export RPM_BUILD_ROOT\n}\
|
||||
";
|
||||
|
||||
static void setDefaults(void) {
|
||||
static void setDefaults(void)
|
||||
/*@modifies internalState @*/
|
||||
{
|
||||
|
||||
addMacro(NULL, "_usr", NULL, "/usr", RMIL_DEFAULT);
|
||||
addMacro(NULL, "_var", NULL, "/var", RMIL_DEFAULT);
|
||||
|
@ -553,7 +567,7 @@ int rpmReadRC(const char * rcfiles)
|
|||
/* Get pointer to rest of files */
|
||||
for (re = r; (re = strchr(re, ':')) != NULL; re++) {
|
||||
if (!(re[1] == '/' && re[2] == '/'))
|
||||
break;
|
||||
/*@innerbreak@*/ break;
|
||||
}
|
||||
if (re && *re == ':')
|
||||
*re++ = '\0';
|
||||
|
@ -618,6 +632,7 @@ int rpmReadRC(const char * rcfiles)
|
|||
|
||||
/*@-usedef@*/ /*@ FIX: se usage inconsistent, W2DO? */
|
||||
static int doReadRC( /*@killref@*/ FD_t fd, const char * urlfn)
|
||||
/*@modifies fd, fileSystem @*/
|
||||
{
|
||||
const char *s;
|
||||
char *se, *next;
|
||||
|
@ -794,7 +809,7 @@ static int doReadRC( /*@killref@*/ FD_t fd, const char * urlfn)
|
|||
|
||||
for (i = 0; i < RPM_MACHTABLE_COUNT; i++) {
|
||||
if (!strncmp(tables[i].key, s, strlen(tables[i].key)))
|
||||
break;
|
||||
/*@innerbreak@*/ break;
|
||||
}
|
||||
|
||||
if (i < RPM_MACHTABLE_COUNT) {
|
||||
|
@ -841,7 +856,11 @@ static int doReadRC( /*@killref@*/ FD_t fd, const char * urlfn)
|
|||
* Generic CPUID function
|
||||
*/
|
||||
static inline void cpuid(int op, int *eax, int *ebx, int *ecx, int *edx)
|
||||
/*@modifies *eax, *ebx, *ecx, *edx @*/
|
||||
{
|
||||
#ifdef __LCLINT__
|
||||
*eax = *ebx = *ecx = *edx = 0;
|
||||
#endif
|
||||
#ifdef PIC
|
||||
__asm__("pushl %%ebx; cpuid; movl %%ebx,%1; popl %%ebx"
|
||||
: "=a"(*eax), "=g"(*ebx), "=&c"(*ecx), "=&d"(*edx)
|
||||
|
@ -858,6 +877,7 @@ static inline void cpuid(int op, int *eax, int *ebx, int *ecx, int *edx)
|
|||
* CPUID functions returning a single datum
|
||||
*/
|
||||
static inline unsigned int cpuid_eax(unsigned int op)
|
||||
/*@*/
|
||||
{
|
||||
unsigned int val;
|
||||
|
||||
|
@ -872,6 +892,7 @@ static inline unsigned int cpuid_eax(unsigned int op)
|
|||
}
|
||||
|
||||
static inline unsigned int cpuid_ebx(unsigned int op)
|
||||
/*@*/
|
||||
{
|
||||
unsigned int tmp, val;
|
||||
|
||||
|
@ -886,6 +907,7 @@ static inline unsigned int cpuid_ebx(unsigned int op)
|
|||
}
|
||||
|
||||
static inline unsigned int cpuid_ecx(unsigned int op)
|
||||
/*@*/
|
||||
{
|
||||
unsigned int tmp, val;
|
||||
#ifdef PIC
|
||||
|
@ -900,6 +922,7 @@ static inline unsigned int cpuid_ecx(unsigned int op)
|
|||
}
|
||||
|
||||
static inline unsigned int cpuid_edx(unsigned int op)
|
||||
/*@*/
|
||||
{
|
||||
unsigned int tmp, val;
|
||||
#ifdef PIC
|
||||
|
@ -916,11 +939,13 @@ static inline unsigned int cpuid_edx(unsigned int op)
|
|||
static sigjmp_buf jenv;
|
||||
|
||||
static inline void model3(int _unused)
|
||||
/*@modifies internalState @*/
|
||||
{
|
||||
siglongjmp(jenv, 1);
|
||||
}
|
||||
|
||||
static inline int RPMClass(void)
|
||||
/*@modifies internalState @*/
|
||||
{
|
||||
int cpu;
|
||||
unsigned int tfms, junk, cap;
|
||||
|
@ -946,7 +971,9 @@ static inline int RPMClass(void)
|
|||
}
|
||||
|
||||
/* should only be called for model 6 CPU's */
|
||||
static int is_athlon(void) {
|
||||
static int is_athlon(void)
|
||||
/*@*/
|
||||
{
|
||||
unsigned int eax, ebx, ecx, edx;
|
||||
char vendor[16];
|
||||
int i;
|
||||
|
@ -972,7 +999,9 @@ static int is_athlon(void) {
|
|||
|
||||
#endif
|
||||
|
||||
static void defaultMachine(/*@out@*/ const char ** arch, /*@out@*/ const char ** os)
|
||||
static void defaultMachine(/*@out@*/ const char ** arch,
|
||||
/*@out@*/ const char ** os)
|
||||
/*@modifies *arch, *os @*/
|
||||
{
|
||||
static struct utsname un;
|
||||
static int gotDefaults = 0;
|
||||
|
@ -1193,6 +1222,7 @@ static void defaultMachine(/*@out@*/ const char ** arch, /*@out@*/ const char **
|
|||
|
||||
static /*@observer@*/ /*@null@*/
|
||||
const char * rpmGetVarArch(int var, /*@null@*/ const char * arch)
|
||||
/*@*/
|
||||
{
|
||||
const struct rpmvarValue * next;
|
||||
|
||||
|
@ -1218,7 +1248,9 @@ const char *rpmGetVar(int var)
|
|||
}
|
||||
|
||||
/* this doesn't free the passed pointer! */
|
||||
static void freeRpmVar(/*@only@*/ struct rpmvarValue * orig) {
|
||||
static void freeRpmVar(/*@only@*/ struct rpmvarValue * orig)
|
||||
/*@modifies *orig @*/
|
||||
{
|
||||
struct rpmvarValue * next, * var = orig;
|
||||
|
||||
while (var) {
|
||||
|
@ -1231,14 +1263,17 @@ static void freeRpmVar(/*@only@*/ struct rpmvarValue * orig) {
|
|||
}
|
||||
}
|
||||
|
||||
void rpmSetVar(int var, const char *val) {
|
||||
void rpmSetVar(int var, const char * val)
|
||||
{
|
||||
/*@-immediatetrans@*/
|
||||
freeRpmVar(&values[var]);
|
||||
/*@=immediatetrans@*/
|
||||
values[var].value = (val ? xstrdup(val) : NULL);
|
||||
}
|
||||
|
||||
static void rpmSetVarArch(int var, const char * val, const char * arch) {
|
||||
static void rpmSetVarArch(int var, const char * val, const char * arch)
|
||||
/*@*/
|
||||
{
|
||||
struct rpmvarValue * next = values + var;
|
||||
|
||||
if (next->value) {
|
||||
|
@ -1272,7 +1307,8 @@ static void rpmSetVarArch(int var, const char * val, const char * arch) {
|
|||
next->arch = (arch ? xstrdup(arch) : NULL);
|
||||
}
|
||||
|
||||
void rpmSetTables(int archTable, int osTable) {
|
||||
void rpmSetTables(int archTable, int osTable)
|
||||
{
|
||||
const char * arch, * os;
|
||||
|
||||
defaultMachine(&arch, &os);
|
||||
|
@ -1288,7 +1324,8 @@ void rpmSetTables(int archTable, int osTable) {
|
|||
}
|
||||
}
|
||||
|
||||
int rpmMachineScore(int type, const char * name) {
|
||||
int rpmMachineScore(int type, const char * name)
|
||||
{
|
||||
machEquivInfo info = machEquivSearch(&tables[type].equiv, name);
|
||||
return (info != NULL ? info->score : 0);
|
||||
}
|
||||
|
@ -1302,7 +1339,8 @@ void rpmGetMachine(const char **arch, const char **os)
|
|||
*os = current[OS];
|
||||
}
|
||||
|
||||
void rpmSetMachine(const char * arch, const char * os) {
|
||||
void rpmSetMachine(const char * arch, const char * os)
|
||||
{
|
||||
const char * host_cpu, * host_os;
|
||||
|
||||
defaultMachine(&host_cpu, &host_os);
|
||||
|
@ -1350,7 +1388,9 @@ void rpmSetMachine(const char * arch, const char * os) {
|
|||
}
|
||||
}
|
||||
|
||||
static void rebuildCompatTables(int type, const char * name) {
|
||||
static void rebuildCompatTables(int type, const char * name)
|
||||
/*@*/
|
||||
{
|
||||
machFindEquivs(&tables[currTables[type]].cache,
|
||||
&tables[currTables[type]].equiv,
|
||||
name);
|
||||
|
@ -1384,11 +1424,13 @@ static void getMachineInfo(int type, /*@null@*/ /*@out@*/ const char ** name,
|
|||
}
|
||||
}
|
||||
|
||||
void rpmGetArchInfo(const char ** name, int * num) {
|
||||
void rpmGetArchInfo(const char ** name, int * num)
|
||||
{
|
||||
getMachineInfo(ARCH, name, num);
|
||||
}
|
||||
|
||||
void rpmGetOsInfo(const char ** name, int * num) {
|
||||
void rpmGetOsInfo(const char ** name, int * num)
|
||||
{
|
||||
getMachineInfo(OS, name, num);
|
||||
}
|
||||
|
||||
|
@ -1533,7 +1575,7 @@ void rpmFreeRpmrc(void)
|
|||
}
|
||||
|
||||
for (i = 0; i < RPMVAR_NUM; i++) {
|
||||
struct rpmvarValue * vp;
|
||||
/*@only@*/ /*@null@*/ struct rpmvarValue * vp;
|
||||
while ((vp = values[i].next) != NULL) {
|
||||
values[i].next = vp->next;
|
||||
vp->value = _free(vp->value);
|
||||
|
|
|
@ -114,6 +114,7 @@ const char * rpmDetectPGPVersion(pgpVersion * pgpVer)
|
|||
* @return rpmRC return code
|
||||
*/
|
||||
static inline rpmRC checkSize(FD_t fd, int siglen, int pad, int datalen)
|
||||
/*@modifies fileSystem @*/
|
||||
{
|
||||
struct stat st;
|
||||
rpmRC rc;
|
||||
|
@ -242,6 +243,7 @@ Header rpmFreeSignature(Header h)
|
|||
|
||||
static int makePGPSignature(const char * file, /*@out@*/ void ** sig,
|
||||
/*@out@*/ int_32 * size, /*@null@*/ const char * passPhrase)
|
||||
/*@modifies *sig, *size, fileSystem @*/
|
||||
{
|
||||
char * sigfile = alloca(1024);
|
||||
int pid, status;
|
||||
|
@ -339,6 +341,7 @@ static int makePGPSignature(const char * file, /*@out@*/ void ** sig,
|
|||
*/
|
||||
static int makeGPGSignature(const char * file, /*@out@*/ void ** sig,
|
||||
/*@out@*/ int_32 * size, /*@null@*/ const char * passPhrase)
|
||||
/*@modifies *sig, *size, fileSystem @*/
|
||||
{
|
||||
char * sigfile = alloca(1024);
|
||||
int pid, status;
|
||||
|
@ -454,6 +457,7 @@ int rpmAddSignature(Header h, const char * file, int_32 sigTag,
|
|||
|
||||
static rpmVerifySignatureReturn
|
||||
verifySizeSignature(const char * datafile, int_32 size, char * result)
|
||||
/*@modifies *result, fileSystem @*/
|
||||
{
|
||||
struct stat st;
|
||||
|
||||
|
@ -474,6 +478,7 @@ verifySizeSignature(const char * datafile, int_32 size, char * result)
|
|||
static rpmVerifySignatureReturn
|
||||
verifyMD5Signature(const char * datafile, const byte * sig,
|
||||
char * result, md5func fn)
|
||||
/*@modifies *result, fileSystem @*/
|
||||
{
|
||||
byte md5sum[16];
|
||||
|
||||
|
@ -508,6 +513,7 @@ verifyMD5Signature(const char * datafile, const byte * sig,
|
|||
static rpmVerifySignatureReturn
|
||||
verifyPGPSignature(const char * datafile, const void * sig, int count,
|
||||
char * result)
|
||||
/*@modifies *result, fileSystem @*/
|
||||
{
|
||||
int pid, status, outpipe[2];
|
||||
FD_t sfd;
|
||||
|
@ -624,6 +630,7 @@ verifyPGPSignature(const char * datafile, const void * sig, int count,
|
|||
static rpmVerifySignatureReturn
|
||||
verifyGPGSignature(const char * datafile, const void * sig, int count,
|
||||
char * result)
|
||||
/*@modifies *result, fileSystem @*/
|
||||
{
|
||||
int pid, status, outpipe[2];
|
||||
FD_t sfd;
|
||||
|
@ -689,6 +696,7 @@ verifyGPGSignature(const char * datafile, const void * sig, int count,
|
|||
}
|
||||
|
||||
static int checkPassPhrase(const char * passPhrase, const int sigTag)
|
||||
/*@modifies fileSystem @*/
|
||||
{
|
||||
int passPhrasePipe[2];
|
||||
int pid, status;
|
||||
|
|
|
@ -63,7 +63,7 @@ rpmRC rpmReadSignature(FD_t fd, /*@null@*/ /*@out@*/ Header *headerp,
|
|||
* @return 0 on success, 1 on error
|
||||
*/
|
||||
int rpmWriteSignature(FD_t fd, Header h)
|
||||
/*@modifies fd, h @*/;
|
||||
/*@modifies fd, h, fileSystem @*/;
|
||||
|
||||
/** \ingroup signature
|
||||
* Generate a signature of data in file, insert in header.
|
||||
|
|
|
@ -40,6 +40,8 @@ const char *const tagName(int tag)
|
|||
for (i = 0; i < rpmTagTableSize; i++) {
|
||||
if (tag != rpmTagTable[i].val)
|
||||
continue;
|
||||
nameBuf[0] = nameBuf[1] = '\0';
|
||||
if (rpmTagTable[i].name != NULL) /* XXX programmer error. */
|
||||
strcpy(nameBuf, rpmTagTable[i].name + 7);
|
||||
for (s = nameBuf+1; *s != '\0'; s++)
|
||||
*s = xtolower(*s);
|
||||
|
|
|
@ -62,7 +62,9 @@ struct diskspaceInfo {
|
|||
|
||||
#define XSTRCMP(a, b) ((!(a) && !(b)) || ((a) && (b) && !strcmp((a), (b))))
|
||||
|
||||
static /*@null@*/ void * freeFl(rpmTransactionSet ts, /*@only@*/ /*@null@*/ TFI_t flList)
|
||||
static /*@null@*/ void * freeFl(rpmTransactionSet ts,
|
||||
/*@only@*/ /*@null@*/ TFI_t flList)
|
||||
/*@*/
|
||||
{
|
||||
if (flList) {
|
||||
TFI_t fi;
|
||||
|
@ -93,14 +95,20 @@ int rpmtransGetKeys(const rpmTransactionSet ts, const void *** ep, int * nep)
|
|||
|
||||
*ep = e = xmalloc(ts->orderCount * sizeof(*e));
|
||||
for (oc = 0; oc < ts->orderCount; oc++, e++) {
|
||||
struct availablePackage * alp;
|
||||
switch (ts->order[oc].type) {
|
||||
case TR_ADDED:
|
||||
if (ts->addedPackages.list) {
|
||||
struct availablePackage * alp;
|
||||
alp = ts->addedPackages.list + ts->order[oc].u.addedIndex;
|
||||
*e = alp->key;
|
||||
break;
|
||||
}
|
||||
/*@fallthrough@*/
|
||||
default:
|
||||
case TR_REMOVED:
|
||||
/*@-mods@*/ /* FIX: double indirection. */
|
||||
*e = NULL;
|
||||
/*@=mods@*/
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -109,6 +117,7 @@ int rpmtransGetKeys(const rpmTransactionSet ts, const void *** ep, int * nep)
|
|||
}
|
||||
|
||||
static rpmProblemSet psCreate(void)
|
||||
/*@*/
|
||||
{
|
||||
rpmProblemSet probs;
|
||||
|
||||
|
@ -123,6 +132,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 @*/
|
||||
{
|
||||
rpmProblem p;
|
||||
char *t;
|
||||
|
@ -138,7 +148,9 @@ static void psAppend(rpmProblemSet probs, rpmProblemType type,
|
|||
|
||||
p = probs->probs + probs->numProblems++;
|
||||
p->type = type;
|
||||
/*@-assignexpose@*/
|
||||
p->key = alp->key;
|
||||
/*@=assignexpose@*/
|
||||
p->ulong1 = ulong1;
|
||||
p->ignoreProblem = 0;
|
||||
|
||||
|
@ -181,6 +193,7 @@ static void psAppend(rpmProblemSet probs, rpmProblemType type,
|
|||
}
|
||||
|
||||
static int archOkay(Header h)
|
||||
/*@*/
|
||||
{
|
||||
void * pkgArch;
|
||||
int type, count;
|
||||
|
@ -211,6 +224,7 @@ static int archOkay(Header h)
|
|||
}
|
||||
|
||||
static int osOkay(Header h)
|
||||
/*@*/
|
||||
{
|
||||
void * pkgOs;
|
||||
int type, count;
|
||||
|
@ -249,6 +263,7 @@ void rpmProblemSetFree(rpmProblemSet probs)
|
|||
}
|
||||
|
||||
static /*@observer@*/ const char *const ftstring (fileTypes ft)
|
||||
/*@*/
|
||||
{
|
||||
switch (ft) {
|
||||
case XDIR: return "directory";
|
||||
|
@ -264,6 +279,7 @@ static /*@observer@*/ const char *const ftstring (fileTypes ft)
|
|||
}
|
||||
|
||||
static fileTypes whatis(uint_16 mode)
|
||||
/*@*/
|
||||
{
|
||||
if (S_ISDIR(mode)) return XDIR;
|
||||
if (S_ISCHR(mode)) return CDEV;
|
||||
|
@ -289,6 +305,7 @@ static fileTypes whatis(uint_16 mode)
|
|||
static Header relocateFileList(const rpmTransactionSet ts, TFI_t fi,
|
||||
struct availablePackage * alp,
|
||||
Header origH, fileAction * actions)
|
||||
/*@modifies ts, fi, alp, origH, actions @*/
|
||||
{
|
||||
HGE_t hge = fi->hge;
|
||||
HFD_t hfd = (fi->hfd ? fi->hfd : headerFreeData);
|
||||
|
@ -382,7 +399,8 @@ static Header relocateFileList(const rpmTransactionSet ts, TFI_t fi,
|
|||
|
||||
/* Verify that the relocation's old path is in the header. */
|
||||
for (j = 0; j < numValid; j++)
|
||||
if (!strcmp(validRelocations[j], relocations[i].oldPath)) break;
|
||||
if (!strcmp(validRelocations[j], relocations[i].oldPath))
|
||||
/*@innerbreak@*/ break;
|
||||
/* XXX actions check prevents problem from being appended twice. */
|
||||
if (j == numValid && !allowBadRelocate && actions)
|
||||
psAppend(probs, RPMPROB_BADRELOCATE, alp,
|
||||
|
@ -445,7 +463,7 @@ static Header relocateFileList(const rpmTransactionSet ts, TFI_t fi,
|
|||
actualRelocations[numActual] = relocations[j].newPath;
|
||||
numActual++;
|
||||
}
|
||||
break;
|
||||
/*@innerbreak@*/ break;
|
||||
}
|
||||
if (j == numRelocations) {
|
||||
actualRelocations[numActual] = validRelocations[i];
|
||||
|
@ -532,7 +550,7 @@ static Header relocateFileList(const rpmTransactionSet ts, TFI_t fi,
|
|||
|
||||
if (strncmp(relocations[j].oldPath, fn, len))
|
||||
continue;
|
||||
break;
|
||||
/*@innerbreak@*/ break;
|
||||
}
|
||||
if (j < 0) continue;
|
||||
|
||||
|
@ -549,7 +567,7 @@ static Header relocateFileList(const rpmTransactionSet ts, TFI_t fi,
|
|||
continue;
|
||||
if (strncmp(fn, dirNames[j], fnlen))
|
||||
continue;
|
||||
break;
|
||||
/*@innerbreak@*/ break;
|
||||
}
|
||||
if (j < dirCount)
|
||||
skipDirList[j] = 1;
|
||||
|
@ -590,7 +608,7 @@ static Header relocateFileList(const rpmTransactionSet ts, TFI_t fi,
|
|||
continue;
|
||||
if (strncmp(fn, dirNames[j], fnlen))
|
||||
continue;
|
||||
break;
|
||||
/*@innerbreak@*/ break;
|
||||
}
|
||||
|
||||
if (j < dirCount) {
|
||||
|
@ -704,6 +722,7 @@ static Header relocateFileList(const rpmTransactionSet ts, TFI_t fi,
|
|||
* then logarithmic or quadratic.
|
||||
*/
|
||||
static int psTrim(rpmProblemSet filter, rpmProblemSet target)
|
||||
/*@modifies target @*/
|
||||
{
|
||||
rpmProblem f = filter->probs;
|
||||
rpmProblem t = target->probs;
|
||||
|
@ -718,7 +737,7 @@ static int psTrim(rpmProblemSet filter, rpmProblemSet target)
|
|||
/*@-nullpass@*/ /* LCL: looks good to me */
|
||||
if (f->h == t->h && f->type == t->type && t->key == f->key &&
|
||||
XSTRCMP(f->str1, t->str1))
|
||||
break;
|
||||
/*@innerbreak@*/ break;
|
||||
/*@=nullpass@*/
|
||||
t++;
|
||||
gotProblems = 1;
|
||||
|
@ -740,6 +759,7 @@ static int psTrim(rpmProblemSet filter, rpmProblemSet target)
|
|||
}
|
||||
|
||||
static int sharedCmp(const void * one, const void * two)
|
||||
/*@*/
|
||||
{
|
||||
const struct sharedFileInfo * a = one;
|
||||
const struct sharedFileInfo * b = two;
|
||||
|
@ -757,6 +777,7 @@ static fileAction decideFileFate(const char * dirName,
|
|||
const char * dbMd5, const char * dbLink, short newMode,
|
||||
const char * newMd5, const char * newLink, int newFlags,
|
||||
int brokenMd5, rpmtransFlags transFlags)
|
||||
/*@*/
|
||||
{
|
||||
char buffer[1024];
|
||||
const char * dbAttr, * newAttr;
|
||||
|
@ -850,6 +871,7 @@ static fileAction decideFileFate(const char * dirName,
|
|||
|
||||
static int filecmp(short mode1, const char * md51, const char * link1,
|
||||
short mode2, const char * md52, const char * link2)
|
||||
/*@*/
|
||||
{
|
||||
fileTypes what1 = whatis(mode1);
|
||||
fileTypes what2 = whatis(mode2);
|
||||
|
@ -869,6 +891,7 @@ static int handleInstInstalledFiles(TFI_t fi, /*@null@*/ rpmdb db,
|
|||
int sharedCount, int reportConflicts,
|
||||
rpmProblemSet probs,
|
||||
rpmtransFlags transFlags)
|
||||
/*@modifies fi, db, probs @*/
|
||||
{
|
||||
HGE_t hge = fi->hge;
|
||||
HFD_t hfd = (fi->hfd ? fi->hfd : headerFreeData);
|
||||
|
@ -924,8 +947,10 @@ static int handleInstInstalledFiles(TFI_t fi, /*@null@*/ rpmdb db,
|
|||
fi->dnl[fi->dil[fileNum]], fi->bnl[fileNum], h, 0);
|
||||
if (!(otherFlags[otherFileNum] | fi->fflags[fileNum])
|
||||
& RPMFILE_CONFIG) {
|
||||
/*@-assignexpose@*/
|
||||
if (!shared->isRemoved)
|
||||
fi->replaced[numReplaced++] = *shared;
|
||||
/*@=assignexpose@*/
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -961,6 +986,7 @@ static int handleInstInstalledFiles(TFI_t fi, /*@null@*/ rpmdb db,
|
|||
static int handleRmvdInstalledFiles(TFI_t fi, /*@null@*/ rpmdb db,
|
||||
struct sharedFileInfo * shared,
|
||||
int sharedCount)
|
||||
/*@modifies fi, db @*/
|
||||
{
|
||||
HGE_t hge = fi->hge;
|
||||
Header h;
|
||||
|
@ -1000,6 +1026,7 @@ static int handleRmvdInstalledFiles(TFI_t fi, /*@null@*/ rpmdb db,
|
|||
*/
|
||||
static void handleOverlappedFiles(TFI_t fi, hashTable ht,
|
||||
rpmProblemSet probs, struct diskspaceInfo * dsl)
|
||||
/*@modifies fi, probs, dsl @*/
|
||||
{
|
||||
int i, j;
|
||||
struct diskspaceInfo * ds = NULL;
|
||||
|
@ -1060,7 +1087,7 @@ static void handleOverlappedFiles(TFI_t fi, hashTable ht,
|
|||
|
||||
/* Locate this overlapped file in the set of added/removed packages. */
|
||||
for (j = 0; j < numRecs && recs[j] != fi; j++)
|
||||
;
|
||||
{};
|
||||
|
||||
/* Find what the previous disposition of this file was. */
|
||||
otherFileNum = -1; /* keep gcc quiet */
|
||||
|
@ -1075,18 +1102,18 @@ static void handleOverlappedFiles(TFI_t fi, hashTable ht,
|
|||
|
||||
/* If the addresses are the same, so are the values. */
|
||||
if ((fi->fps + i) == (recs[otherPkgNum]->fps + otherFileNum))
|
||||
break;
|
||||
/*@innerbreak@*/ break;
|
||||
|
||||
/* Otherwise, compare fingerprints by value. */
|
||||
/*@-nullpass@*/ /* LCL: looks good to me */
|
||||
if (FP_EQUAL(fi->fps[i], recs[otherPkgNum]->fps[otherFileNum]))
|
||||
break;
|
||||
/*@innerbreak@*/ break;
|
||||
/*@=nullpass@*/
|
||||
|
||||
}
|
||||
/* XXX is this test still necessary? */
|
||||
if (recs[otherPkgNum]->actions[otherFileNum] != FA_UNKNOWN)
|
||||
break;
|
||||
/*@innerbreak@*/ break;
|
||||
}
|
||||
|
||||
switch (fi->type) {
|
||||
|
@ -1198,6 +1225,7 @@ static void handleOverlappedFiles(TFI_t fi, hashTable ht,
|
|||
|
||||
static int ensureOlder(struct availablePackage * alp, Header old,
|
||||
rpmProblemSet probs)
|
||||
/*@modifies alp, probs @*/
|
||||
{
|
||||
int result, rc = 0;
|
||||
|
||||
|
@ -1215,6 +1243,7 @@ static int ensureOlder(struct availablePackage * alp, Header old,
|
|||
}
|
||||
|
||||
static void skipFiles(const rpmTransactionSet ts, TFI_t fi)
|
||||
/*@modifies fi @*/
|
||||
{
|
||||
int noDocs = (ts->transFlags & RPMTRANS_FLAG_NODOCS);
|
||||
char ** netsharedPaths = NULL;
|
||||
|
@ -1289,7 +1318,7 @@ static void skipFiles(const rpmTransactionSet ts, TFI_t fi)
|
|||
if (!((*nsp)[len] == '/' || (*nsp)[len] == '\0')) continue;
|
||||
}
|
||||
|
||||
break;
|
||||
/*@innerbreak@*/ break;
|
||||
}
|
||||
|
||||
if (nsp && *nsp) {
|
||||
|
@ -1305,15 +1334,16 @@ static void skipFiles(const rpmTransactionSet ts, TFI_t fi)
|
|||
const char **lang, *l, *le;
|
||||
for (lang = languages; *lang != '\0'; lang++) {
|
||||
if (!strcmp(*lang, "all"))
|
||||
break;
|
||||
/*@innerbreak@*/ break;
|
||||
for (l = fi->flangs[i]; *l != '\0'; l = le) {
|
||||
for (le = l; *le != '\0' && *le != '|'; le++)
|
||||
;
|
||||
{};
|
||||
if ((le-l) > 0 && !strncmp(*lang, l, (le-l)))
|
||||
break;
|
||||
/*@innerbreak@*/ break;
|
||||
if (*le == '|') le++; /* skip over | */
|
||||
}
|
||||
if (*l != '\0') break;
|
||||
if (*l != '\0')
|
||||
/*@innerbreak@*/ break;
|
||||
}
|
||||
if (*lang == NULL) {
|
||||
drc[ix]--; dff[ix] = 1;
|
||||
|
@ -1366,7 +1396,7 @@ static void skipFiles(const rpmTransactionSet ts, TFI_t fi)
|
|||
continue;
|
||||
rpmMessage(RPMMESS_DEBUG, _("excluding directory %s\n"), dn);
|
||||
fi->actions[i] = FA_SKIPNSTATE;
|
||||
break;
|
||||
/*@innerbreak@*/ break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1392,7 +1422,9 @@ struct tsIterator_s {
|
|||
* @param a transaction element iterator
|
||||
* @return element order count
|
||||
*/
|
||||
static int tsGetOc(void * a) {
|
||||
static int tsGetOc(void * a)
|
||||
/*@*/
|
||||
{
|
||||
struct tsIterator_s * iter = a;
|
||||
int oc = iter->ocsave;
|
||||
return oc;
|
||||
|
@ -1403,7 +1435,9 @@ static int tsGetOc(void * a) {
|
|||
* @param a transaction element iterator
|
||||
* @return available package pointer
|
||||
*/
|
||||
static /*@dependent@*/ struct availablePackage * tsGetAlp(void * a) {
|
||||
static /*@dependent@*/ struct availablePackage * tsGetAlp(void * a)
|
||||
/*@*/
|
||||
{
|
||||
struct tsIterator_s * iter = a;
|
||||
struct availablePackage * alp = NULL;
|
||||
int oc = iter->ocsave;
|
||||
|
@ -1411,7 +1445,7 @@ static /*@dependent@*/ struct availablePackage * tsGetAlp(void * a) {
|
|||
if (oc != -1) {
|
||||
rpmTransactionSet ts = iter->ts;
|
||||
TFI_t fi = ts->flList + oc;
|
||||
if (fi->type == TR_ADDED)
|
||||
if (ts->addedPackages.list && fi->type == TR_ADDED)
|
||||
alp = ts->addedPackages.list + ts->order[oc].u.addedIndex;
|
||||
}
|
||||
return alp;
|
||||
|
@ -1423,6 +1457,7 @@ static /*@dependent@*/ struct availablePackage * tsGetAlp(void * a) {
|
|||
* @return NULL always
|
||||
*/
|
||||
static /*@null@*/ void * tsFreeIterator(/*@only@*//*@null@*/ const void * a)
|
||||
/*@modifies a @*/
|
||||
{
|
||||
return _free(a);
|
||||
}
|
||||
|
@ -1433,6 +1468,7 @@ static /*@null@*/ void * tsFreeIterator(/*@only@*//*@null@*/ const void * a)
|
|||
* @return transaction element iterator
|
||||
*/
|
||||
static void * tsInitIterator(/*@kept@*/ const void * a)
|
||||
/*@*/
|
||||
{
|
||||
rpmTransactionSet ts = (void *)a;
|
||||
struct tsIterator_s * iter = NULL;
|
||||
|
@ -1450,7 +1486,9 @@ static void * tsInitIterator(/*@kept@*/ const void * a)
|
|||
* @param a file info iterator
|
||||
* @return next index, -1 on termination
|
||||
*/
|
||||
static /*@dependent@*/ TFI_t tsNextIterator(void * a) {
|
||||
static /*@dependent@*/ TFI_t tsNextIterator(void * a)
|
||||
/*@*/
|
||||
{
|
||||
struct tsIterator_s * iter = a;
|
||||
rpmTransactionSet ts = iter->ts;
|
||||
TFI_t fi = NULL;
|
||||
|
@ -1506,7 +1544,9 @@ int rpmRunTransactions( rpmTransactionSet ts,
|
|||
|
||||
ts->notify = notify;
|
||||
ts->notifyData = notifyData;
|
||||
/*@-assignexpose@*/
|
||||
ts->probs = *newProbs = psCreate();
|
||||
/*@=assignexpose@*/
|
||||
ts->ignoreSet = ignoreSet;
|
||||
ts->currDir = _free(ts->currDir);
|
||||
ts->currDir = currentDirectory();
|
||||
|
@ -1514,7 +1554,9 @@ int rpmRunTransactions( rpmTransactionSet ts,
|
|||
ts->id = time(NULL);
|
||||
|
||||
memset(psm, 0, sizeof(*psm));
|
||||
/*@-assignexpose@*/
|
||||
psm->ts = ts;
|
||||
/*@=assignexpose@*/
|
||||
|
||||
/* Get available space on mounted file systems. */
|
||||
if (!(ts->ignoreSet & RPMPROB_FILTER_DISKSPACE) &&
|
||||
|
@ -1611,7 +1653,7 @@ int rpmRunTransactions( rpmTransactionSet ts,
|
|||
while (rpmdbNextIterator(mi) != NULL) {
|
||||
psAppend(ts->probs, RPMPROB_PKG_INSTALLED, alp,
|
||||
NULL, NULL, NULL, 0);
|
||||
break;
|
||||
/*@innerbreak@*/ break;
|
||||
}
|
||||
mi = rpmdbFreeIterator(mi);
|
||||
}
|
||||
|
@ -1726,8 +1768,10 @@ int rpmRunTransactions( rpmTransactionSet ts,
|
|||
}
|
||||
tsi = tsFreeIterator(tsi);
|
||||
|
||||
/*@-moduncon@*/
|
||||
NOTIFY(ts, (NULL, RPMCALLBACK_TRANS_START, 6, ts->flEntries,
|
||||
NULL, ts->notifyData));
|
||||
/*@=moduncon@*/
|
||||
|
||||
/* ===============================================
|
||||
* Compute file disposition for each package in transaction set.
|
||||
|
@ -1737,8 +1781,10 @@ int rpmRunTransactions( rpmTransactionSet ts,
|
|||
dbiIndexSet * matches;
|
||||
int knownBad;
|
||||
|
||||
/*@-moduncon@*/
|
||||
NOTIFY(ts, (NULL, RPMCALLBACK_TRANS_PROGRESS, (fi - ts->flList),
|
||||
ts->flEntries, NULL, ts->notifyData));
|
||||
/*@=moduncon@*/
|
||||
|
||||
if (fi->fc == 0) continue;
|
||||
|
||||
|
@ -1800,7 +1846,7 @@ int rpmRunTransactions( rpmTransactionSet ts,
|
|||
/* Find the end of the files in the other package. */
|
||||
for (nexti = i + 1; nexti < numShared; nexti++) {
|
||||
if (sharedList[nexti].otherPkg != shared->otherPkg)
|
||||
break;
|
||||
/*@innerbreak@*/ break;
|
||||
}
|
||||
|
||||
/* Is this file from a package being removed? */
|
||||
|
@ -1809,7 +1855,7 @@ int rpmRunTransactions( rpmTransactionSet ts,
|
|||
if (ts->removedPackages[j] != shared->otherPkg)
|
||||
continue;
|
||||
beingRemoved = 1;
|
||||
break;
|
||||
/*@innerbreak@*/ break;
|
||||
}
|
||||
|
||||
/* Determine the fate of each file. */
|
||||
|
@ -1869,8 +1915,10 @@ int rpmRunTransactions( rpmTransactionSet ts,
|
|||
(void) chdir(ts->currDir);
|
||||
}
|
||||
|
||||
/*@-moduncon@*/
|
||||
NOTIFY(ts, (NULL, RPMCALLBACK_TRANS_STOP, 6, ts->flEntries,
|
||||
NULL, ts->notifyData));
|
||||
/*@=moduncon@*/
|
||||
|
||||
/* ===============================================
|
||||
* Free unused memory as soon as possible.
|
||||
|
@ -1956,7 +2004,9 @@ assert(alp == fi->ap);
|
|||
rpmRC rpmrc;
|
||||
|
||||
hdrs[i] = headerFree(hdrs[i]);
|
||||
/*@-mustmod@*/ /* LCL: segfault */
|
||||
rpmrc = rpmReadPackageHeader(alp->fd, &h, NULL, NULL, NULL);
|
||||
/*@=mustmod@*/
|
||||
if (!(rpmrc == RPMRC_OK || rpmrc == RPMRC_BADSIZE)) {
|
||||
(void)ts->notify(fi->h, RPMCALLBACK_INST_CLOSE_FILE,
|
||||
0, 0, alp->key, ts->notifyData);
|
||||
|
|
|
@ -38,6 +38,7 @@ static void verifyArgCallback(/*@unused@*/poptContext con,
|
|||
/*@unused@*/enum poptCallbackReason reason,
|
||||
const struct poptOption * opt, /*@unused@*/const char * arg,
|
||||
/*@unused@*/ const void * data)
|
||||
/*@*/
|
||||
{
|
||||
QVA_t qva = &rpmQVArgs;
|
||||
switch (opt->val) {
|
||||
|
@ -335,6 +336,7 @@ int rpmVerifyScript(const char * rootDir, Header h, /*@null@*/ FD_t scriptFd)
|
|||
* @return 0 no problems, 1 problems found
|
||||
*/
|
||||
static int verifyHeader(QVA_t qva, Header h)
|
||||
/*@*/
|
||||
{
|
||||
HGE_t hge = (HGE_t)headerGetEntryMinMemory;
|
||||
char buf[BUFSIZ];
|
||||
|
@ -426,6 +428,7 @@ exit:
|
|||
* @return 0 no problems, 1 problems found
|
||||
*/
|
||||
static int verifyDependencies(rpmdb rpmdb, Header h)
|
||||
/*@modifies h @*/
|
||||
{
|
||||
rpmTransactionSet rpmdep;
|
||||
rpmDependencyConflict conflicts;
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
* @param argv0 name of executable
|
||||
* @return (malloc'd) absolute path to executable (or NULL)
|
||||
*/
|
||||
/*@null@*/ const char * findProgramPath(/*@null@*/ const char * argv0);
|
||||
/*@null@*/ const char * findProgramPath(/*@null@*/ const char * argv0)
|
||||
/*@modifies fileSystem @*/;
|
||||
|
||||
#endif
|
||||
|
|
40
popt/popt.c
40
popt/popt.c
|
@ -66,7 +66,9 @@ static void invokeCallbacksPRE(poptContext con, const struct poptOption * opt)
|
|||
poptCallbackType cb = (poptCallbackType)opt->arg;
|
||||
/*@=castfcnptr@*/
|
||||
/* Perform callback. */
|
||||
/*@-moduncon@*/
|
||||
cb(con, POPT_CALLBACK_REASON_PRE, NULL, NULL, opt->descrip);
|
||||
/*@=moduncon@*/
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -86,7 +88,9 @@ static void invokeCallbacksPOST(poptContext con, const struct poptOption * opt)
|
|||
poptCallbackType cb = (poptCallbackType)opt->arg;
|
||||
/*@=castfcnptr@*/
|
||||
/* Perform callback. */
|
||||
/*@-moduncon@*/
|
||||
cb(con, POPT_CALLBACK_REASON_POST, NULL, NULL, opt->descrip);
|
||||
/*@=moduncon@*/
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -123,8 +127,10 @@ static void invokeCallbacksOPTION(poptContext con,
|
|||
const void * cbData = (cbopt->descrip ? cbopt->descrip : myData);
|
||||
/* Perform callback. */
|
||||
if (cb != NULL) { /* XXX program error */
|
||||
/*@-moduncon@*/
|
||||
cb(con, POPT_CALLBACK_REASON_OPTION, myOpt,
|
||||
con->os->nextArg, cbData);
|
||||
/*@=moduncon@*/
|
||||
}
|
||||
/* Terminate (unless explcitly continuing). */
|
||||
if (!(cbopt->argInfo & POPT_CBFLAG_CONTINUE))
|
||||
|
@ -143,18 +149,18 @@ poptContext poptGetContext(const char * name, int argc, const char ** argv,
|
|||
|
||||
con->os = con->optionStack;
|
||||
con->os->argc = argc;
|
||||
/*@-dependenttrans@*/ /* FIX: W2DO? */
|
||||
/*@-dependenttrans -assignexpose@*/ /* FIX: W2DO? */
|
||||
con->os->argv = argv;
|
||||
/*@=dependenttrans@*/
|
||||
/*@=dependenttrans =assignexpose@*/
|
||||
con->os->argb = NULL;
|
||||
|
||||
if (!(flags & POPT_CONTEXT_KEEP_FIRST))
|
||||
con->os->next = 1; /* skip argv[0] */
|
||||
|
||||
con->leftovers = calloc( (argc + 1), sizeof(char *) );
|
||||
/*@-dependenttrans@*/ /* FIX: W2DO? */
|
||||
/*@-dependenttrans -assignexpose@*/ /* FIX: W2DO? */
|
||||
con->options = options;
|
||||
/*@=dependenttrans@*/
|
||||
/*@=dependenttrans =assignexpose@*/
|
||||
con->aliases = NULL;
|
||||
con->numAliases = 0;
|
||||
con->flags = flags;
|
||||
|
@ -181,6 +187,7 @@ poptContext poptGetContext(const char * name, int argc, const char ** argv,
|
|||
static void cleanOSE(/*@special@*/ struct optionStackEntry *os)
|
||||
/*@uses os @*/
|
||||
/*@releases os->nextArg, os->argv, os->argb @*/
|
||||
/*@modifies os @*/
|
||||
{
|
||||
os->nextArg = _free(os->nextArg);
|
||||
os->argv = _free(os->argv);
|
||||
|
@ -224,6 +231,7 @@ static int handleExec(/*@special@*/ poptContext con,
|
|||
/*@null@*/ const char * longName, char shortName)
|
||||
/*@uses con->execs, con->numExecs, con->flags, con->doExec,
|
||||
con->finalArgv, con->finalArgvAlloced, con->finalArgvCount @*/
|
||||
/*@modifies con @*/
|
||||
{
|
||||
int i;
|
||||
|
||||
|
@ -280,6 +288,7 @@ static int handleAlias(/*@special@*/ poptContext con,
|
|||
/*@keep@*/ /*@null@*/ const char * nextCharArg)
|
||||
/*@uses con->aliases, con->numAliases, con->optionStack,
|
||||
con->os, con->os->currAlias, con->os->currAlias->longName @*/
|
||||
/*@modifies con @*/
|
||||
{
|
||||
int rc;
|
||||
int i;
|
||||
|
@ -480,6 +489,7 @@ static const char * findNextArg(/*@special@*/ poptContext con,
|
|||
unsigned argx, int delete_arg)
|
||||
/*@uses con->optionStack, con->os,
|
||||
con->os->next, con->os->argb, con->os->argc, con->os->argv @*/
|
||||
/*@modifies con @*/
|
||||
{
|
||||
struct optionStackEntry * os = con->os;
|
||||
const char * arg;
|
||||
|
@ -500,7 +510,7 @@ static const char * findNextArg(/*@special@*/ poptContext con,
|
|||
if (os->argb != NULL) /* XXX can't happen */
|
||||
PBM_SET(i, os->argb);
|
||||
}
|
||||
break;
|
||||
/*@innerbreak@*/ break;
|
||||
}
|
||||
if (os > con->optionStack) os--;
|
||||
} while (arg == NULL);
|
||||
|
@ -555,7 +565,9 @@ expandNextArg(/*@special@*/ poptContext con, const char * s)
|
|||
return t;
|
||||
}
|
||||
|
||||
static void poptStripArg(poptContext con, int which)
|
||||
static void poptStripArg(/*@special@*/ poptContext con, int which)
|
||||
/*@uses con->arg_strip, con->optionStack @*/
|
||||
/*@defines con->arg_strip @*/
|
||||
/*@modifies con @*/
|
||||
{
|
||||
if (con->arg_strip == NULL)
|
||||
|
@ -699,7 +711,7 @@ int poptGetNextOpt(poptContext con)
|
|||
|
||||
/* Check for "--long=arg" option. */
|
||||
for (oe = optString; *oe && *oe != '='; oe++)
|
||||
;
|
||||
{};
|
||||
if (*oe == '=') {
|
||||
*oe++ = '\0';
|
||||
/* XXX longArg is mapped back to persistent storage. */
|
||||
|
@ -993,15 +1005,16 @@ int poptAddAlias(poptContext con, struct poptAlias newAlias,
|
|||
/*@unused@*/ int flags)
|
||||
{
|
||||
int aliasNum = con->numAliases++;
|
||||
struct poptAlias * alias;
|
||||
|
||||
/* SunOS won't realloc(NULL, ...) */
|
||||
if (!con->aliases)
|
||||
con->aliases = malloc(sizeof(newAlias) * con->numAliases);
|
||||
if (con->aliases == NULL)
|
||||
con->aliases = malloc(con->numAliases * sizeof(newAlias));
|
||||
else
|
||||
con->aliases = realloc(con->aliases,
|
||||
sizeof(newAlias) * con->numAliases);
|
||||
alias = con->aliases + aliasNum;
|
||||
con->numAliases * sizeof(newAlias));
|
||||
|
||||
if (con->aliases) {
|
||||
struct poptAlias * alias = con->aliases + aliasNum;
|
||||
|
||||
alias->longName = (newAlias.longName)
|
||||
/*@-nullpass@*/ /* FIX: malloc can return NULL. */
|
||||
|
@ -1011,6 +1024,7 @@ int poptAddAlias(poptContext con, struct poptAlias newAlias,
|
|||
alias->shortName = newAlias.shortName;
|
||||
alias->argc = newAlias.argc;
|
||||
alias->argv = newAlias.argv;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -1064,7 +1078,7 @@ int poptStuffArgs(poptContext con, const char ** argv)
|
|||
return POPT_ERROR_OPTSTOODEEP;
|
||||
|
||||
for (argc = 0; argv[argc]; argc++)
|
||||
;
|
||||
{};
|
||||
|
||||
con->os++;
|
||||
con->os->next = 0;
|
||||
|
|
14
popt/popt.h
14
popt/popt.h
|
@ -195,7 +195,7 @@ void poptResetContext(/*@null@*/poptContext con)
|
|||
* @return next option val, -1 on last item, POPT_ERROR_* on error
|
||||
*/
|
||||
int poptGetNextOpt(/*@null@*/poptContext con)
|
||||
/*@modifies con @*/;
|
||||
/*@modifies con, fileSystem @*/;
|
||||
|
||||
/*@-redecl@*/
|
||||
/** \ingroup popt
|
||||
|
@ -340,20 +340,20 @@ void poptSetExecPath(poptContext con, const char * path, int allowAbsolute)
|
|||
/** \ingroup popt
|
||||
* Print detailed description of options.
|
||||
* @param con context
|
||||
* @param f ouput file handle
|
||||
* @param fp ouput file handle
|
||||
* @param flags (unused)
|
||||
*/
|
||||
void poptPrintHelp(poptContext con, FILE * f, /*@unused@*/ int flags)
|
||||
/*@modifies *f @*/;
|
||||
void poptPrintHelp(poptContext con, FILE * fp, /*@unused@*/ int flags)
|
||||
/*@modifies *fp, fileSystem @*/;
|
||||
|
||||
/** \ingroup popt
|
||||
* Print terse description of options.
|
||||
* @param con context
|
||||
* @param f ouput file handle
|
||||
* @param fp ouput file handle
|
||||
* @param flags (unused)
|
||||
*/
|
||||
void poptPrintUsage(poptContext con, FILE * f, /*@unused@*/ int flags)
|
||||
/*@modifies *f @*/;
|
||||
void poptPrintUsage(poptContext con, FILE * fp, /*@unused@*/ int flags)
|
||||
/*@modifies *fp, fileSystem @*/;
|
||||
|
||||
/** \ingroup popt
|
||||
* Provide text to replace default "[OPTION...]" in help/usage output.
|
||||
|
|
|
@ -9,9 +9,9 @@
|
|||
#include "system.h"
|
||||
#include "poptint.h"
|
||||
|
||||
/*@-mustmod@*/ /* LCL: *line is modified @*/
|
||||
static void configLine(poptContext con, char * line)
|
||||
/*@modifies *line,
|
||||
con->execs, con->numExecs @*/
|
||||
/*@modifies *line, con->execs, con->numExecs @*/
|
||||
{
|
||||
int nameLength = strlen(con->appName);
|
||||
const char * opt;
|
||||
|
@ -63,6 +63,7 @@ static void configLine(poptContext con, char * line)
|
|||
/*@=noeffect@*/
|
||||
}
|
||||
}
|
||||
/*@=mustmod@*/
|
||||
|
||||
int poptReadConfigFile(poptContext con, const char * fn)
|
||||
{
|
||||
|
|
|
@ -34,6 +34,7 @@ struct poptOption poptHelpOptions[] = {
|
|||
|
||||
/*@observer@*/ /*@null@*/ static const char *const
|
||||
getTableTranslationDomain(/*@null@*/ const struct poptOption *table)
|
||||
/*@*/
|
||||
{
|
||||
const struct poptOption *opt;
|
||||
|
||||
|
@ -50,6 +51,7 @@ getArgDescrip(const struct poptOption * opt,
|
|||
/*@-paramuse@*/ /* FIX: wazzup? */
|
||||
/*@null@*/ const char * translation_domain)
|
||||
/*@=paramuse@*/
|
||||
/*@*/
|
||||
{
|
||||
if (!(opt->argInfo & POPT_ARG_MASK)) return NULL;
|
||||
|
||||
|
@ -70,9 +72,10 @@ getArgDescrip(const struct poptOption * opt,
|
|||
}
|
||||
}
|
||||
|
||||
static void singleOptionHelp(FILE * f, int maxLeftCol,
|
||||
static void singleOptionHelp(FILE * fp, int maxLeftCol,
|
||||
const struct poptOption * opt,
|
||||
/*@null@*/ const char *translation_domain)
|
||||
/*@modifies *fp, fileSystem @*/
|
||||
{
|
||||
int indentLength = maxLeftCol + 5;
|
||||
int lineLength = 79 - indentLength;
|
||||
|
@ -146,9 +149,9 @@ static void singleOptionHelp(FILE * f, int maxLeftCol,
|
|||
}
|
||||
|
||||
if (help)
|
||||
fprintf(f," %-*s ", maxLeftCol, left);
|
||||
fprintf(fp," %-*s ", maxLeftCol, left);
|
||||
else {
|
||||
fprintf(f," %s\n", left);
|
||||
fprintf(fp," %s\n", left);
|
||||
goto out;
|
||||
}
|
||||
|
||||
|
@ -164,20 +167,21 @@ static void singleOptionHelp(FILE * f, int maxLeftCol,
|
|||
ch++;
|
||||
|
||||
sprintf(format, "%%.%ds\n%%%ds", (int) (ch - help), indentLength);
|
||||
fprintf(f, format, help, " ");
|
||||
fprintf(fp, format, help, " ");
|
||||
help = ch;
|
||||
while (isspace(*help) && *help) help++;
|
||||
helpLength = strlen(help);
|
||||
}
|
||||
|
||||
if (helpLength) fprintf(f, "%s\n", help);
|
||||
if (helpLength) fprintf(fp, "%s\n", help);
|
||||
|
||||
out:
|
||||
free(left);
|
||||
left = _free(left);
|
||||
}
|
||||
|
||||
static int maxArgWidth(const struct poptOption * opt,
|
||||
/*@null@*/ const char * translation_domain)
|
||||
/*@*/
|
||||
{
|
||||
int max = 0;
|
||||
int len = 0;
|
||||
|
@ -212,9 +216,10 @@ static int maxArgWidth(const struct poptOption * opt,
|
|||
return max;
|
||||
}
|
||||
|
||||
static void singleTableHelp(FILE * f,
|
||||
static void singleTableHelp(FILE * fp,
|
||||
/*@null@*/ const struct poptOption * table, int left,
|
||||
/*@null@*/ const char * translation_domain)
|
||||
/*@modifies *fp, fileSystem @*/
|
||||
{
|
||||
const struct poptOption * opt;
|
||||
const char *sub_transdom;
|
||||
|
@ -223,7 +228,7 @@ static void singleTableHelp(FILE * f,
|
|||
for (opt = table; (opt->longName || opt->shortName || opt->arg); opt++) {
|
||||
if ((opt->longName || opt->shortName) &&
|
||||
!(opt->argInfo & POPT_ARGFLAG_DOC_HIDDEN))
|
||||
singleOptionHelp(f, left, opt, translation_domain);
|
||||
singleOptionHelp(fp, left, opt, translation_domain);
|
||||
}
|
||||
|
||||
if (table != NULL)
|
||||
|
@ -234,49 +239,51 @@ static void singleTableHelp(FILE * f,
|
|||
sub_transdom = translation_domain;
|
||||
|
||||
if (opt->descrip)
|
||||
fprintf(f, "\n%s\n", D_(sub_transdom, opt->descrip));
|
||||
fprintf(fp, "\n%s\n", D_(sub_transdom, opt->descrip));
|
||||
|
||||
singleTableHelp(f, opt->arg, left, sub_transdom);
|
||||
singleTableHelp(fp, opt->arg, left, sub_transdom);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static int showHelpIntro(poptContext con, FILE * f)
|
||||
static int showHelpIntro(poptContext con, FILE * fp)
|
||||
/*@modifies *fp, fileSystem @*/
|
||||
{
|
||||
int len = 6;
|
||||
const char * fn;
|
||||
|
||||
fprintf(f, POPT_("Usage:"));
|
||||
fprintf(fp, POPT_("Usage:"));
|
||||
if (!(con->flags & POPT_CONTEXT_KEEP_FIRST)) {
|
||||
/*@-nullderef@*/ /* LCL: wazzup? */
|
||||
fn = con->optionStack->argv[0];
|
||||
/*@=nullderef@*/
|
||||
if (fn == NULL) return len;
|
||||
if (strchr(fn, '/')) fn = strrchr(fn, '/') + 1;
|
||||
fprintf(f, " %s", fn);
|
||||
fprintf(fp, " %s", fn);
|
||||
len += strlen(fn) + 1;
|
||||
}
|
||||
|
||||
return len;
|
||||
}
|
||||
|
||||
void poptPrintHelp(poptContext con, FILE * f, /*@unused@*/ int flags)
|
||||
void poptPrintHelp(poptContext con, FILE * fp, /*@unused@*/ int flags)
|
||||
{
|
||||
int leftColWidth;
|
||||
|
||||
(void) showHelpIntro(con, f);
|
||||
(void) showHelpIntro(con, fp);
|
||||
if (con->otherHelp)
|
||||
fprintf(f, " %s\n", con->otherHelp);
|
||||
fprintf(fp, " %s\n", con->otherHelp);
|
||||
else
|
||||
fprintf(f, " %s\n", POPT_("[OPTION...]"));
|
||||
fprintf(fp, " %s\n", POPT_("[OPTION...]"));
|
||||
|
||||
leftColWidth = maxArgWidth(con->options, NULL);
|
||||
singleTableHelp(f, con->options, leftColWidth, NULL);
|
||||
singleTableHelp(fp, con->options, leftColWidth, NULL);
|
||||
}
|
||||
|
||||
static int singleOptionUsage(FILE * f, int cursor,
|
||||
static int singleOptionUsage(FILE * fp, int cursor,
|
||||
const struct poptOption * opt,
|
||||
/*@null@*/ const char *translation_domain)
|
||||
/*@modifies *fp, fileSystem @*/
|
||||
{
|
||||
int len = 3;
|
||||
char shortStr[2] = { '\0', '\0' };
|
||||
|
@ -300,11 +307,11 @@ static int singleOptionUsage(FILE * f, int cursor,
|
|||
len += strlen(argDescrip) + 1;
|
||||
|
||||
if ((cursor + len) > 79) {
|
||||
fprintf(f, "\n ");
|
||||
fprintf(fp, "\n ");
|
||||
cursor = 7;
|
||||
}
|
||||
|
||||
fprintf(f, " [-%s%s%s%s]",
|
||||
fprintf(fp, " [-%s%s%s%s]",
|
||||
((opt->shortName || (opt->argInfo & POPT_ARGFLAG_ONEDASH)) ? "" : "-"),
|
||||
item,
|
||||
(argDescrip ? (opt->shortName != '\0' ? " " : "=") : ""),
|
||||
|
@ -313,9 +320,10 @@ static int singleOptionUsage(FILE * f, int cursor,
|
|||
return cursor + len + 1;
|
||||
}
|
||||
|
||||
static int singleTableUsage(FILE * f,
|
||||
static int singleTableUsage(FILE * fp,
|
||||
int cursor, const struct poptOption * opt,
|
||||
/*@null@*/ const char * translation_domain)
|
||||
/*@modifies *fp, fileSystem @*/
|
||||
{
|
||||
/*@-branchstate@*/ /* FIX: W2DO? */
|
||||
if (opt != NULL)
|
||||
|
@ -324,10 +332,10 @@ static int singleTableUsage(FILE * f,
|
|||
translation_domain = (const char *)opt->arg;
|
||||
} else if ((opt->argInfo & POPT_ARG_MASK) == POPT_ARG_INCLUDE_TABLE) {
|
||||
if (opt->arg) /* XXX program error */
|
||||
cursor = singleTableUsage(f, cursor, opt->arg, translation_domain);
|
||||
cursor = singleTableUsage(fp, cursor, opt->arg, translation_domain);
|
||||
} else if ((opt->longName || opt->shortName) &&
|
||||
!(opt->argInfo & POPT_ARGFLAG_DOC_HIDDEN)) {
|
||||
cursor = singleOptionUsage(f, cursor, opt, translation_domain);
|
||||
cursor = singleOptionUsage(fp, cursor, opt, translation_domain);
|
||||
}
|
||||
}
|
||||
/*@=branchstate@*/
|
||||
|
@ -335,8 +343,9 @@ static int singleTableUsage(FILE * f,
|
|||
return cursor;
|
||||
}
|
||||
|
||||
static int showShortOptions(const struct poptOption * opt, FILE * f,
|
||||
static int showShortOptions(const struct poptOption * opt, FILE * fp,
|
||||
/*@null@*/ char * str)
|
||||
/*@modifies *str, *fp, fileSystem @*/
|
||||
{
|
||||
char * s = alloca(300); /* larger then the ascii set */
|
||||
|
||||
|
@ -354,34 +363,35 @@ static int showShortOptions(const struct poptOption * opt, FILE * f,
|
|||
str[strlen(str)] = opt->shortName;
|
||||
else if ((opt->argInfo & POPT_ARG_MASK) == POPT_ARG_INCLUDE_TABLE)
|
||||
if (opt->arg) /* XXX program error */
|
||||
(void) showShortOptions(opt->arg, f, str);
|
||||
(void) showShortOptions(opt->arg, fp, str);
|
||||
}
|
||||
|
||||
if (s != str || *s != '\0')
|
||||
return 0;
|
||||
|
||||
fprintf(f, " [-%s]", s);
|
||||
fprintf(fp, " [-%s]", s);
|
||||
return strlen(s) + 4;
|
||||
}
|
||||
|
||||
void poptPrintUsage(poptContext con, FILE * f, /*@unused@*/ int flags)
|
||||
void poptPrintUsage(poptContext con, FILE * fp, /*@unused@*/ int flags)
|
||||
{
|
||||
int cursor;
|
||||
|
||||
cursor = showHelpIntro(con, f);
|
||||
cursor += showShortOptions(con->options, f, NULL);
|
||||
(void) singleTableUsage(f, cursor, con->options, NULL);
|
||||
cursor = showHelpIntro(con, fp);
|
||||
cursor += showShortOptions(con->options, fp, NULL);
|
||||
(void) singleTableUsage(fp, cursor, con->options, NULL);
|
||||
|
||||
if (con->otherHelp) {
|
||||
cursor += strlen(con->otherHelp) + 1;
|
||||
if (cursor > 79) fprintf(f, "\n ");
|
||||
fprintf(f, " %s", con->otherHelp);
|
||||
if (cursor > 79) fprintf(fp, "\n ");
|
||||
fprintf(fp, " %s", con->otherHelp);
|
||||
}
|
||||
|
||||
fprintf(f, "\n");
|
||||
fprintf(fp, "\n");
|
||||
}
|
||||
|
||||
void poptSetOtherOptionHelp(poptContext con, const char * text) {
|
||||
if (con->otherHelp) free((void *)con->otherHelp);
|
||||
void poptSetOtherOptionHelp(poptContext con, const char * text)
|
||||
{
|
||||
con->otherHelp = _free(con->otherHelp);
|
||||
con->otherHelp = xstrdup(text);
|
||||
}
|
||||
|
|
|
@ -14,7 +14,10 @@
|
|||
* @param p memory to free
|
||||
* @retval NULL always
|
||||
*/
|
||||
/*@unused@*/ static inline /*@null@*/ void * _free(/*@only@*/ /*@null@*/ const void * p) {
|
||||
/*@unused@*/ static inline /*@null@*/ void *
|
||||
_free(/*@only@*/ /*@null@*/ const void * p)
|
||||
/*@modifies p @*/
|
||||
{
|
||||
if (p != NULL) free((void *)p);
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
@ -128,6 +128,7 @@ RPMGROUP = @RPMGROUP@
|
|||
RPMUID = @RPMUID@
|
||||
RPMUSER = @RPMUSER@
|
||||
SYSCONFIGDIR = @SYSCONFIGDIR@
|
||||
TOP_SOURCEDIR = @TOP_SOURCEDIR@
|
||||
U = @U@
|
||||
UNZIPBIN = @UNZIPBIN@
|
||||
USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
|
||||
|
|
34
rpmdb/db1.c
34
rpmdb/db1.c
|
@ -83,7 +83,9 @@ static /*@observer@*/ char * db_strerror(int error)
|
|||
/*@notreached@*/
|
||||
}
|
||||
|
||||
static int cvtdberr(dbiIndex dbi, const char * msg, int error, int printit) {
|
||||
static int cvtdberr(dbiIndex dbi, const char * msg, int error, int printit)
|
||||
/*@modifies dbi, fileSystem @*/
|
||||
{
|
||||
int rc = 0;
|
||||
|
||||
if (error == 0)
|
||||
|
@ -106,7 +108,9 @@ static int cvtdberr(dbiIndex dbi, const char * msg, int error, int printit) {
|
|||
}
|
||||
#endif /* DYING */
|
||||
|
||||
static int db1sync(dbiIndex dbi, /*@unused@*/ unsigned int flags) {
|
||||
static int db1sync(dbiIndex dbi, /*@unused@*/ unsigned int flags)
|
||||
/*@modifies fileSystem @*/
|
||||
{
|
||||
int rc = 0;
|
||||
|
||||
if (dbi->dbi_db) {
|
||||
|
@ -129,6 +133,7 @@ static int db1sync(dbiIndex dbi, /*@unused@*/ unsigned int flags) {
|
|||
}
|
||||
|
||||
/*@null@*/ static void * doGetRecord(dbiIndex dbi, unsigned int offset)
|
||||
/*@modifies dbi, fileSystem @*/
|
||||
{
|
||||
FD_t pkgs = dbi->dbi_db;
|
||||
void * uh = NULL;
|
||||
|
@ -234,22 +239,32 @@ exit:
|
|||
return uh;
|
||||
}
|
||||
|
||||
static int db1copen(/*@unused@*/ dbiIndex dbi, /*@unused@*/ DBC ** dbcp, unsigned int flags) {
|
||||
static int db1copen(/*@unused@*/ dbiIndex dbi,
|
||||
/*@unused@*/ DBC ** dbcp, unsigned int flags)
|
||||
/*@modifies *dbcp @*/
|
||||
{
|
||||
/* XXX per-iterator cursors need to be set to non-NULL. */
|
||||
if (flags)
|
||||
*dbcp = (DBC *)-1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int db1cclose(dbiIndex dbi, /*@unused@*/ DBC * dbcursor, /*@unused@*/ unsigned int flags) {
|
||||
static int db1cclose(dbiIndex dbi,
|
||||
/*@unused@*/ DBC * dbcursor, /*@unused@*/ unsigned int flags)
|
||||
/*@modifies dbi @*/
|
||||
{
|
||||
dbi->dbi_lastoffset = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*@-compmempass@*/
|
||||
static int db1cget(dbiIndex dbi, /*@unused@*/ DBC * dbcursor, void ** keyp,
|
||||
size_t * keylen, void ** datap, size_t * datalen,
|
||||
static int db1cget(dbiIndex dbi, /*@unused@*/ DBC * dbcursor,
|
||||
/*@null@*/ void ** keyp,
|
||||
/*@null@*/ size_t * keylen,
|
||||
/*@null@*/ void ** datap,
|
||||
/*@null@*/ size_t * datalen,
|
||||
/*@unused@*/ unsigned int flags)
|
||||
/*@modifies dbi, *keyp, *keylen, *datap, *datalen, fileSystem @*/
|
||||
{
|
||||
DBT key, data;
|
||||
int rc = 0;
|
||||
|
@ -339,6 +354,7 @@ static int db1cget(dbiIndex dbi, /*@unused@*/ DBC * dbcursor, void ** keyp,
|
|||
|
||||
static int db1cdel(dbiIndex dbi, /*@unused@*/ DBC * dbcursor, const void * keyp,
|
||||
size_t keylen, /*@unused@*/ unsigned int flags)
|
||||
/*@modifies dbi, fileSystem @*/
|
||||
{
|
||||
DBT key;
|
||||
int rc = 0;
|
||||
|
@ -373,6 +389,7 @@ static int db1cput(dbiIndex dbi, /*@unused@*/ DBC * dbcursor,
|
|||
const void * keyp, size_t keylen,
|
||||
const void * datap, size_t datalen,
|
||||
/*@unused@*/ unsigned int flags)
|
||||
/*@modifies dbi, datap, fileSystem @*/
|
||||
{
|
||||
DBT key, data;
|
||||
int rc = 0;
|
||||
|
@ -426,21 +443,25 @@ static int db1cput(dbiIndex dbi, /*@unused@*/ DBC * dbcursor,
|
|||
static int db1ccount(/*@unused@*/ dbiIndex dbi, /*@unused@*/ DBC * dbcursor,
|
||||
/*@unused@*/ /*@out@*/ unsigned int * countp,
|
||||
/*@unused@*/ unsigned int flags)
|
||||
/*@*/
|
||||
{
|
||||
return EINVAL;
|
||||
}
|
||||
|
||||
static int db1byteswapped(/*@unused@*/dbiIndex dbi)
|
||||
/*@*/
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int db1stat(/*@unused@*/ dbiIndex dbi, /*@unused@*/ unsigned int flags)
|
||||
/*@*/
|
||||
{
|
||||
return EINVAL;
|
||||
}
|
||||
|
||||
static int db1close(/*@only@*/ dbiIndex dbi, /*@unused@*/ unsigned int flags)
|
||||
/*@modifies dbi, fileSystem @*/
|
||||
{
|
||||
rpmdb rpmdb = dbi->dbi_rpmdb;
|
||||
const char * base = db1basename(dbi->dbi_rpmtag);
|
||||
|
@ -483,6 +504,7 @@ static int db1close(/*@only@*/ dbiIndex dbi, /*@unused@*/ unsigned int flags)
|
|||
|
||||
static int db1open(/*@keep@*/ rpmdb rpmdb, int rpmtag,
|
||||
/*@out@*/ dbiIndex * dbip)
|
||||
/*@modifies *dbip, fileSystem @*/
|
||||
{
|
||||
/*@-nestedextern@*/
|
||||
extern struct _dbiVec db1vec;
|
||||
|
|
40
rpmdb/db3.c
40
rpmdb/db3.c
|
@ -138,7 +138,9 @@ static int db_env_create(DB_ENV **dbenvp, int foo)
|
|||
}
|
||||
#endif /* __USE_DB2 */
|
||||
|
||||
static int cvtdberr(dbiIndex dbi, const char * msg, int error, int printit) {
|
||||
static int cvtdberr(dbiIndex dbi, const char * msg, int error, int printit)
|
||||
/*@modifies fileSystem @*/
|
||||
{
|
||||
int rc = 0;
|
||||
|
||||
rc = error;
|
||||
|
@ -158,6 +160,7 @@ static int cvtdberr(dbiIndex dbi, const char * msg, int error, int printit) {
|
|||
static int db_fini(dbiIndex dbi, const char * dbhome,
|
||||
/*@null@*/ const char * dbfile,
|
||||
/*@unused@*/ /*@null@*/ const char * dbsubfile)
|
||||
/*@modifies dbi, fileSystem @*/
|
||||
{
|
||||
rpmdb rpmdb = dbi->dbi_rpmdb;
|
||||
DB_ENV * dbenv = dbi->dbi_dbenv;
|
||||
|
@ -204,7 +207,9 @@ static int db_fini(dbiIndex dbi, const char * dbhome,
|
|||
return rc;
|
||||
}
|
||||
|
||||
static int db3_fsync_disable(/*@unused@*/ int fd) {
|
||||
static int db3_fsync_disable(/*@unused@*/ int fd)
|
||||
/*@*/
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -212,6 +217,7 @@ static int db_init(dbiIndex dbi, const char *dbhome,
|
|||
/*@null@*/ const char * dbfile,
|
||||
/*@unused@*/ /*@null@*/ const char * dbsubfile,
|
||||
/*@out@*/ DB_ENV ** dbenvp)
|
||||
/*@modifies dbi, *dbenvp, fileSystem @*/
|
||||
{
|
||||
rpmdb rpmdb = dbi->dbi_rpmdb;
|
||||
DB_ENV *dbenv = NULL;
|
||||
|
@ -222,8 +228,10 @@ static int db_init(dbiIndex dbi, const char *dbhome,
|
|||
return 1;
|
||||
|
||||
/* XXX HACK */
|
||||
/*@-assignexpose@*/
|
||||
if (rpmdb->db_errfile == NULL)
|
||||
rpmdb->db_errfile = stderr;
|
||||
/*@=assignexpose@*/
|
||||
|
||||
eflags = (dbi->dbi_oeflags | dbi->dbi_eflags);
|
||||
if (eflags & DB_JOINENV) eflags &= DB_JOINENV;
|
||||
|
@ -351,6 +359,7 @@ errxit:
|
|||
#endif /* __USE_DB2 || __USE_DB3 */
|
||||
|
||||
static int db3sync(dbiIndex dbi, unsigned int flags)
|
||||
/*@modifies fileSystem @*/
|
||||
{
|
||||
DB * db = dbi->dbi_db;
|
||||
int rc = 0;
|
||||
|
@ -371,6 +380,7 @@ static int db3sync(dbiIndex dbi, unsigned int flags)
|
|||
}
|
||||
|
||||
static int db3c_del(dbiIndex dbi, DBC * dbcursor, u_int32_t flags)
|
||||
/*@modifies fileSystem @*/
|
||||
{
|
||||
int rc;
|
||||
|
||||
|
@ -381,9 +391,11 @@ static int db3c_del(dbiIndex dbi, DBC * dbcursor, u_int32_t flags)
|
|||
|
||||
/*@unused@*/ static int db3c_dup(dbiIndex dbi, DBC * dbcursor, DBC ** dbcp,
|
||||
u_int32_t flags)
|
||||
/*@modifies *dbcp, fileSystem @*/
|
||||
{
|
||||
int rc;
|
||||
|
||||
if (dbcp) *dbcp = NULL;
|
||||
rc = dbcursor->c_dup(dbcursor, dbcp, flags);
|
||||
rc = cvtdberr(dbi, "dbcursor->c_dup", rc, _debug);
|
||||
return rc;
|
||||
|
@ -391,6 +403,7 @@ static int db3c_del(dbiIndex dbi, DBC * dbcursor, u_int32_t flags)
|
|||
|
||||
static int db3c_get(dbiIndex dbi, DBC * dbcursor,
|
||||
DBT * key, DBT * data, u_int32_t flags)
|
||||
/*@modifies fileSystem @*/
|
||||
{
|
||||
int _printit;
|
||||
int rc;
|
||||
|
@ -413,6 +426,7 @@ static int db3c_get(dbiIndex dbi, DBC * dbcursor,
|
|||
|
||||
static int db3c_put(dbiIndex dbi, DBC * dbcursor,
|
||||
DBT * key, DBT * data, u_int32_t flags)
|
||||
/*@modifies fileSystem @*/
|
||||
{
|
||||
int rc;
|
||||
|
||||
|
@ -423,6 +437,7 @@ static int db3c_put(dbiIndex dbi, DBC * dbcursor,
|
|||
}
|
||||
|
||||
static inline int db3c_close(dbiIndex dbi, /*@only@*/ /*@null@*/ DBC * dbcursor)
|
||||
/*@modifies fileSystem @*/
|
||||
{
|
||||
int rc;
|
||||
|
||||
|
@ -433,7 +448,9 @@ static inline int db3c_close(dbiIndex dbi, /*@only@*/ /*@null@*/ DBC * dbcursor)
|
|||
return rc;
|
||||
}
|
||||
|
||||
static inline int db3c_open(dbiIndex dbi, /*@out@*/ DBC ** dbcp, int dbiflags)
|
||||
static inline int db3c_open(dbiIndex dbi, /*@null@*/ /*@out@*/ DBC ** dbcp,
|
||||
int dbiflags)
|
||||
/*@modifies *dbcp, fileSystem @*/
|
||||
{
|
||||
DB * db = dbi->dbi_db;
|
||||
DB_TXN * txnid = NULL;
|
||||
|
@ -448,6 +465,7 @@ static inline int db3c_open(dbiIndex dbi, /*@out@*/ DBC ** dbcp, int dbiflags)
|
|||
flags = DB_WRITECURSOR;
|
||||
} else
|
||||
flags = 0;
|
||||
if (dbcp) *dbcp = NULL;
|
||||
rc = db->cursor(db, txnid, dbcp, flags);
|
||||
#else /* __USE_DB3 */
|
||||
rc = db->cursor(db, txnid, dbcp);
|
||||
|
@ -459,6 +477,7 @@ static inline int db3c_open(dbiIndex dbi, /*@out@*/ DBC ** dbcp, int dbiflags)
|
|||
|
||||
static int db3cclose(dbiIndex dbi, /*@only@*/ /*@null@*/ DBC * dbcursor,
|
||||
unsigned int flags)
|
||||
/*@modifies dbi, fileSystem @*/
|
||||
{
|
||||
int rc = 0;
|
||||
|
||||
|
@ -479,7 +498,9 @@ static int db3cclose(dbiIndex dbi, /*@only@*/ /*@null@*/ DBC * dbcursor,
|
|||
/*@-usereleased -compdef@*/ return rc; /*@=usereleased =compdef@*/
|
||||
}
|
||||
|
||||
static int db3copen(dbiIndex dbi, /*@out@*/ DBC ** dbcp, unsigned int flags)
|
||||
static int db3copen(dbiIndex dbi,
|
||||
/*@null@*/ /*@out@*/ DBC ** dbcp, unsigned int flags)
|
||||
/*@modifies dbi, *dbcp, fileSystem @*/
|
||||
{
|
||||
DBC * dbcursor;
|
||||
int rc = 0;
|
||||
|
@ -508,6 +529,7 @@ static int db3cput(dbiIndex dbi, DBC * dbcursor,
|
|||
const void * keyp, size_t keylen,
|
||||
const void * datap, size_t datalen,
|
||||
/*@unused@*/ unsigned int flags)
|
||||
/*@modifies fileSystem @*/
|
||||
{
|
||||
DB * db = dbi->dbi_db;
|
||||
DB_TXN * txnid = NULL;
|
||||
|
@ -537,6 +559,7 @@ static int db3cput(dbiIndex dbi, DBC * dbcursor,
|
|||
static int db3cdel(dbiIndex dbi, DBC * dbcursor,
|
||||
const void * keyp, size_t keylen,
|
||||
/*@unused@*/ unsigned int flags)
|
||||
/*@modifies fileSystem @*/
|
||||
{
|
||||
DB * db = dbi->dbi_db;
|
||||
DB_TXN * txnid = NULL;
|
||||
|
@ -571,6 +594,7 @@ static int db3cget(dbiIndex dbi, DBC * dbcursor,
|
|||
void ** keyp, size_t * keylen,
|
||||
void ** datap, size_t * datalen,
|
||||
/*@unused@*/ unsigned int flags)
|
||||
/*@modifies *keyp, *keylen, *datap, *datalen, fileSystem @*/
|
||||
{
|
||||
DB * db = dbi->dbi_db;
|
||||
DB_TXN * txnid = NULL;
|
||||
|
@ -618,8 +642,9 @@ static int db3cget(dbiIndex dbi, DBC * dbcursor,
|
|||
}
|
||||
|
||||
static int db3ccount(dbiIndex dbi, DBC * dbcursor,
|
||||
/*@out@*/ unsigned int * countp,
|
||||
/*@null@*/ /*@out@*/ unsigned int * countp,
|
||||
/*@unused@*/ unsigned int flags)
|
||||
/*@modifies *countp, fileSystem @*/
|
||||
{
|
||||
db_recno_t count = 0;
|
||||
int rc = 0;
|
||||
|
@ -633,7 +658,7 @@ static int db3ccount(dbiIndex dbi, DBC * dbcursor,
|
|||
return rc;
|
||||
}
|
||||
|
||||
static int db3byteswapped(dbiIndex dbi)
|
||||
static int db3byteswapped(dbiIndex dbi) /*@*/
|
||||
{
|
||||
DB * db = dbi->dbi_db;
|
||||
int rc = 0;
|
||||
|
@ -647,6 +672,7 @@ static int db3byteswapped(dbiIndex dbi)
|
|||
}
|
||||
|
||||
static int db3stat(dbiIndex dbi, unsigned int flags)
|
||||
/*@modifies dbi, fileSystem @*/
|
||||
{
|
||||
DB * db = dbi->dbi_db;
|
||||
int rc = 0;
|
||||
|
@ -671,6 +697,7 @@ static int db3stat(dbiIndex dbi, unsigned int flags)
|
|||
|
||||
/** @todo Add/use per-rpmdb verify_on_close. */
|
||||
static int db3close(/*@only@*/ dbiIndex dbi, /*@unused@*/ unsigned int flags)
|
||||
/*@modifies dbi, fileSystem @*/
|
||||
{
|
||||
rpmdb rpmdb = dbi->dbi_rpmdb;
|
||||
const char * urlfn = NULL;
|
||||
|
@ -772,6 +799,7 @@ exit:
|
|||
}
|
||||
|
||||
static int db3open(/*@keep@*/ rpmdb rpmdb, int rpmtag, dbiIndex * dbip)
|
||||
/*@modifies *dbip, fileSystem @*/
|
||||
{
|
||||
/*@-nestedextern@*/
|
||||
extern struct _dbiVec db3vec;
|
||||
|
|
|
@ -27,7 +27,7 @@ struct _dbiIndex db3dbi;
|
|||
* Analogue to struct poptOption
|
||||
*/
|
||||
struct dbOption {
|
||||
/*@null@*/const char * longName;/* may be NULL */
|
||||
/*@observer@*/ /*@null@*/const char * longName; /* may be NULL */
|
||||
const char shortName; /* may be '\0' */
|
||||
int argInfo;
|
||||
/*@null@*/ void * arg; /* depends on argInfo */
|
||||
|
@ -315,7 +315,7 @@ dbiIndex db3Free(dbiIndex dbi) {
|
|||
}
|
||||
|
||||
/** @todo Set a reasonable "last gasp" default db config. */
|
||||
static const char *db3_config_default =
|
||||
/*@observer@*/ static const char *db3_config_default =
|
||||
"db3:hash:mpool:cdb:usecursors:verbose:mp_mmapsize=8Mb:mp_size=512Kb:pagesize=512:perms=0644";
|
||||
|
||||
dbiIndex db3New(rpmdb rpmdb, int rpmtag)
|
||||
|
@ -356,9 +356,9 @@ dbiIndex db3New(rpmdb rpmdb, int rpmtag)
|
|||
/* Find and terminate next key=value pair. Save next start point. */
|
||||
for (oe = o; oe && *oe; oe++) {
|
||||
if (xisspace(*oe))
|
||||
break;
|
||||
/*@innerbreak@*/ break;
|
||||
if (oe[0] == ':' && !(oe[1] == '/' && oe[2] == '/'))
|
||||
break;
|
||||
/*@innerbreak@*/ break;
|
||||
}
|
||||
if (oe && *oe)
|
||||
*oe++ = '\0';
|
||||
|
@ -367,18 +367,18 @@ dbiIndex db3New(rpmdb rpmdb, int rpmtag)
|
|||
|
||||
/* Separate key from value, save value start (if any). */
|
||||
for (pe = o; pe && *pe && *pe != '='; pe++)
|
||||
;
|
||||
{};
|
||||
p = (pe ? *pe++ = '\0', pe : NULL);
|
||||
|
||||
/* Skip over negation at start of token. */
|
||||
for (tok = o; *tok == '!'; tok++)
|
||||
;
|
||||
{};
|
||||
|
||||
/* Find key in option table. */
|
||||
for (opt = rdbOptions; opt->longName != NULL; opt++) {
|
||||
if (strcmp(tok, opt->longName))
|
||||
continue;
|
||||
break;
|
||||
/*@innerbreak@*/ break;
|
||||
}
|
||||
if (opt->longName == NULL) {
|
||||
rpmError(RPMERR_DBCONFIG,
|
||||
|
@ -452,8 +452,10 @@ dbiIndex db3New(rpmdb rpmdb, int rpmtag)
|
|||
|
||||
dbOpts = _free(dbOpts);
|
||||
|
||||
*dbi = db3dbi; /* structure assignment */
|
||||
memset(&db3dbi, 0, sizeof(db3dbi));
|
||||
/*@-assignexpose@*/
|
||||
*dbi = db3dbi; /* structure assignment */
|
||||
/*@=assignexpose@*/
|
||||
|
||||
if (!(dbi->dbi_perms & 0600))
|
||||
dbi->dbi_perms = 0644;
|
||||
|
@ -472,7 +474,9 @@ dbiIndex db3New(rpmdb rpmdb, int rpmtag)
|
|||
dbi->dbi_jlen = 2 * sizeof(int_32);
|
||||
break;
|
||||
}
|
||||
/*@-globstate@*/
|
||||
return dbi;
|
||||
/*@=globstate@*/
|
||||
}
|
||||
|
||||
const char *const prDbiOpenFlags(int dbflags, int print_dbenv_flags)
|
||||
|
|
|
@ -16,45 +16,56 @@
|
|||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*@unused@*/ static inline long int fadGetFileSize(FD_t fd) {
|
||||
/*@unused@*/ static inline long int fadGetFileSize(FD_t fd) /*@*/ {
|
||||
return fd->fileSize;
|
||||
}
|
||||
|
||||
/*@unused@*/ static inline void fadSetFileSize(FD_t fd, long int fileSize) {
|
||||
/*@unused@*/ static inline void fadSetFileSize(FD_t fd, long int fileSize)
|
||||
/*@modifies fd @*/
|
||||
{
|
||||
fd->fileSize = fileSize;
|
||||
}
|
||||
|
||||
/*@unused@*/ static inline unsigned int fadGetFirstFree(FD_t fd) {
|
||||
/*@unused@*/ static inline unsigned int fadGetFirstFree(FD_t fd) /*@*/ {
|
||||
return fd->firstFree;
|
||||
}
|
||||
|
||||
/*@unused@*/ static inline void fadSetFirstFree(FD_t fd, unsigned int firstFree) {
|
||||
/*@unused@*/ static inline void fadSetFirstFree(FD_t fd, unsigned int firstFree)
|
||||
/*@modifies fd @*/
|
||||
{
|
||||
fd->firstFree = firstFree;
|
||||
}
|
||||
|
||||
/** \ingroup db1
|
||||
*/
|
||||
/*@null@*/ FD_t fadOpen (const char * path, int flags, mode_t perms);
|
||||
/*@null@*/ FD_t fadOpen(const char * path, int flags, mode_t perms)
|
||||
/*@modifies fileSystem @*/;
|
||||
|
||||
/** \ingroup db1
|
||||
* @param fd file handle
|
||||
* @return 0 on failure
|
||||
*/
|
||||
unsigned int fadAlloc(FD_t fd, unsigned int size)
|
||||
/*@modifies fd, fileSystem @*/;
|
||||
|
||||
/** \ingroup db1
|
||||
* @param fd file handle
|
||||
*/
|
||||
unsigned int fadAlloc (FD_t fd, unsigned int size); /* 0 on failure */
|
||||
void fadFree(FD_t fd, unsigned int offset)
|
||||
/*@modifies fd, fileSystem @*/;
|
||||
|
||||
/** \ingroup db1
|
||||
* @param fd file handle
|
||||
*/
|
||||
void fadFree (FD_t fd, unsigned int offset);
|
||||
int fadFirstOffset(FD_t fd)
|
||||
/*@modifies fd, fileSystem @*/;
|
||||
|
||||
/** \ingroup db1
|
||||
* @param fd file handle
|
||||
* @return next offset, 0 to terminate
|
||||
*/
|
||||
int fadFirstOffset (FD_t fd);
|
||||
|
||||
/** \ingroup db1
|
||||
* @param fd file handle
|
||||
*/
|
||||
int fadNextOffset (FD_t fd, unsigned int lastoff); /* 0 at end */
|
||||
int fadNextOffset(FD_t fd, unsigned int lastoff)
|
||||
/*@modifies fd, fileSystem @*/;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -34,6 +34,7 @@ void fpCacheFree(fingerPrintCache cache)
|
|||
static /*@null@*/ const struct fprintCacheEntry_s * cacheContainsDirectory(
|
||||
fingerPrintCache cache,
|
||||
const char * dirName)
|
||||
/*@*/
|
||||
{
|
||||
const void ** data;
|
||||
|
||||
|
@ -52,6 +53,7 @@ static /*@null@*/ const struct fprintCacheEntry_s * cacheContainsDirectory(
|
|||
*/
|
||||
static fingerPrint doLookup(fingerPrintCache cache,
|
||||
const char * dirName, const char * baseName, int scareMemory)
|
||||
/*@modifies cache @*/
|
||||
{
|
||||
char dir[PATH_MAX];
|
||||
const char * cleanDirName;
|
||||
|
|
|
@ -68,13 +68,15 @@ extern "C" {
|
|||
* @param sizeHint number of elements expected
|
||||
* @return pointer to initialized fingerprint cache
|
||||
*/
|
||||
/*@only@*/ fingerPrintCache fpCacheCreate(int sizeHint) /*@*/;
|
||||
/*@only@*/ fingerPrintCache fpCacheCreate(int sizeHint)
|
||||
/*@*/;
|
||||
|
||||
/**
|
||||
* Destroy finger print cache.
|
||||
* @param cache pointer to fingerprint cache
|
||||
*/
|
||||
void fpCacheFree(/*@only@*/ fingerPrintCache cache);
|
||||
void fpCacheFree(/*@only@*/ fingerPrintCache cache)
|
||||
/*@modifies cache @*/;
|
||||
|
||||
/**
|
||||
* Return finger print of a file path.
|
||||
|
@ -85,7 +87,8 @@ void fpCacheFree(/*@only@*/ fingerPrintCache cache);
|
|||
* @return pointer to the finger print associated with a file path.
|
||||
*/
|
||||
fingerPrint fpLookup(fingerPrintCache cache, const char * dirName,
|
||||
const char * baseName, int scareMemory) /*@*/;
|
||||
const char * baseName, int scareMemory)
|
||||
/*@modifies cache @*/;
|
||||
|
||||
/**
|
||||
* Return hash value for a finger print.
|
||||
|
@ -93,7 +96,8 @@ fingerPrint fpLookup(fingerPrintCache cache, const char * dirName,
|
|||
* @param key pointer to finger print entry
|
||||
* @return hash value
|
||||
*/
|
||||
unsigned int fpHashFunction(const void * key) /*@*/;
|
||||
unsigned int fpHashFunction(const void * key)
|
||||
/*@*/;
|
||||
|
||||
/**
|
||||
* Compare two finger print entries.
|
||||
|
@ -102,7 +106,8 @@ unsigned int fpHashFunction(const void * key) /*@*/;
|
|||
* @param key2 finger print 2
|
||||
* @return result of comparing key1 and key2
|
||||
*/
|
||||
int fpEqual(const void * key1, const void * key2) /*@*/;
|
||||
int fpEqual(const void * key1, const void * key2)
|
||||
/*@*/;
|
||||
|
||||
/**
|
||||
* Return finger prints of an array of file paths.
|
||||
|
|
219
rpmdb/rpmdb.c
219
rpmdb/rpmdb.c
|
@ -46,11 +46,11 @@ static int dbiTagsMax = 0;
|
|||
* @param rpmtag rpm header tag
|
||||
* @return dbi index, -1 on error
|
||||
*/
|
||||
static int dbiTagToDbix(int rpmtag)
|
||||
static int dbiTagToDbix(int rpmtag) /*@*/
|
||||
{
|
||||
int dbix;
|
||||
|
||||
if (!(dbiTags != NULL && dbiTagsMax > 0))
|
||||
if (dbiTags == NULL || dbiTagsMax <= 0)
|
||||
return -1;
|
||||
for (dbix = 0; dbix < dbiTagsMax; dbix++) {
|
||||
if (rpmtag == dbiTags[dbix])
|
||||
|
@ -63,6 +63,7 @@ static int dbiTagToDbix(int rpmtag)
|
|||
* Initialize database (index, tag) tuple from configuration.
|
||||
*/
|
||||
static void dbiTagsInit(void)
|
||||
/*@modifies dbiTags, dbiTagsMax @*/
|
||||
{
|
||||
/*@observer@*/ static const char * const _dbiTagStr_default =
|
||||
"Packages:Name:Basenames:Group:Requirename:Providename:Conflictname:Triggername:Dirnames:Requireversion:Provideversion:Installtid:Removetid";
|
||||
|
@ -94,9 +95,9 @@ static void dbiTagsInit(void)
|
|||
break;
|
||||
for (oe = o; oe && *oe; oe++) {
|
||||
if (xisspace(*oe))
|
||||
break;
|
||||
/*@innerbreak@*/ break;
|
||||
if (oe[0] == ':' && !(oe[1] == '/' && oe[2] == '/'))
|
||||
break;
|
||||
/*@innerbreak@*/ break;
|
||||
}
|
||||
if (oe && *oe)
|
||||
*oe++ = '\0';
|
||||
|
@ -307,14 +308,14 @@ fprintf(stderr, " Close %s\n", tagName(dbi->dbi_rpmtag));
|
|||
return (*dbi->dbi_vec->close) (dbi, flags);
|
||||
}
|
||||
|
||||
dbiIndex dbiOpen(rpmdb rpmdb, int rpmtag, /*@unused@*/ unsigned int flags)
|
||||
dbiIndex dbiOpen(rpmdb db, int rpmtag, /*@unused@*/ unsigned int flags)
|
||||
{
|
||||
int dbix;
|
||||
dbiIndex dbi = NULL;
|
||||
int _dbapi, _dbapi_rebuild, _dbapi_wanted;
|
||||
int rc = 0;
|
||||
|
||||
if (rpmdb == NULL)
|
||||
if (db == NULL)
|
||||
return NULL;
|
||||
|
||||
dbix = dbiTagToDbix(rpmtag);
|
||||
|
@ -322,13 +323,13 @@ dbiIndex dbiOpen(rpmdb rpmdb, int rpmtag, /*@unused@*/ unsigned int flags)
|
|||
return NULL;
|
||||
|
||||
/* Is this index already open ? */
|
||||
if ((dbi = rpmdb->_dbi[dbix]) != NULL)
|
||||
if ((dbi = db->_dbi[dbix]) != NULL)
|
||||
return dbi;
|
||||
|
||||
_dbapi_rebuild = rpmExpandNumeric("%{_dbapi_rebuild}");
|
||||
if (_dbapi_rebuild < 1 || _dbapi_rebuild > 3)
|
||||
_dbapi_rebuild = 3;
|
||||
_dbapi_wanted = (_rebuildinprogress ? -1 : rpmdb->db_api);
|
||||
_dbapi_wanted = (_rebuildinprogress ? -1 : db->db_api);
|
||||
|
||||
switch (_dbapi_wanted) {
|
||||
default:
|
||||
|
@ -338,7 +339,7 @@ dbiIndex dbiOpen(rpmdb rpmdb, int rpmtag, /*@unused@*/ unsigned int flags)
|
|||
}
|
||||
errno = 0;
|
||||
dbi = NULL;
|
||||
rc = (*mydbvecs[_dbapi]->open) (rpmdb, rpmtag, &dbi);
|
||||
rc = (*mydbvecs[_dbapi]->open) (db, rpmtag, &dbi);
|
||||
if (rc) {
|
||||
static int _printed[32];
|
||||
if (!_printed[dbix & 0x1f]++)
|
||||
|
@ -356,9 +357,9 @@ dbiIndex dbiOpen(rpmdb rpmdb, int rpmtag, /*@unused@*/ unsigned int flags)
|
|||
continue;
|
||||
errno = 0;
|
||||
dbi = NULL;
|
||||
rc = (*mydbvecs[_dbapi]->open) (rpmdb, rpmtag, &dbi);
|
||||
rc = (*mydbvecs[_dbapi]->open) (db, rpmtag, &dbi);
|
||||
if (rc == 0 && dbi)
|
||||
break;
|
||||
/*@loopbreak@*/ break;
|
||||
}
|
||||
if (_dbapi <= 0) {
|
||||
static int _printed[32];
|
||||
|
@ -368,8 +369,8 @@ dbiIndex dbiOpen(rpmdb rpmdb, int rpmtag, /*@unused@*/ unsigned int flags)
|
|||
rc = 1;
|
||||
goto exit;
|
||||
}
|
||||
if (rpmdb->db_api == -1 && _dbapi > 0)
|
||||
rpmdb->db_api = _dbapi;
|
||||
if (db->db_api == -1 && _dbapi > 0)
|
||||
db->db_api = _dbapi;
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -393,7 +394,7 @@ dbiIndex dbiOpen(rpmdb rpmdb, int rpmtag, /*@unused@*/ unsigned int flags)
|
|||
|
||||
exit:
|
||||
if (rc == 0 && dbi)
|
||||
rpmdb->_dbi[dbix] = dbi;
|
||||
db->_dbi[dbix] = dbi;
|
||||
else
|
||||
dbi = db3Free(dbi);
|
||||
|
||||
|
@ -406,7 +407,8 @@ exit:
|
|||
* @param tagNum tag index in header
|
||||
* @return new item
|
||||
*/
|
||||
static INLINE dbiIndexItem dbiIndexNewItem(unsigned int hdrNum, unsigned int tagNum) {
|
||||
static INLINE dbiIndexItem dbiIndexNewItem(unsigned int hdrNum, unsigned int tagNum)
|
||||
{
|
||||
dbiIndexItem rec = xcalloc(1, sizeof(*rec));
|
||||
rec->hdrNum = hdrNum;
|
||||
rec->tagNum = tagNum;
|
||||
|
@ -435,6 +437,7 @@ union _dbswap {
|
|||
*/
|
||||
static int dbiSearch(dbiIndex dbi, DBC * dbcursor,
|
||||
const char * keyp, size_t keylen, /*@out@*/ dbiIndexSet * setp)
|
||||
/*@modifies *dbcursor, *setp @*/
|
||||
{
|
||||
void * datap = NULL;
|
||||
size_t datalen = 0;
|
||||
|
@ -443,7 +446,9 @@ static int dbiSearch(dbiIndex dbi, DBC * dbcursor,
|
|||
if (setp) *setp = NULL;
|
||||
if (keylen == 0) keylen = strlen(keyp);
|
||||
|
||||
/*@-mods@*/ /* FIX: indirection @*/
|
||||
rc = dbiGet(dbi, dbcursor, (void **)&keyp, &keylen, &datap, &datalen, 0);
|
||||
/*@=mods@*/
|
||||
|
||||
if (rc > 0) {
|
||||
rpmError(RPMERR_DBGETINDEX,
|
||||
|
@ -514,9 +519,10 @@ static int dbiSearch(dbiIndex dbi, DBC * dbcursor,
|
|||
* @param set items to update in index database
|
||||
* @return 0 success, 1 not found
|
||||
*/
|
||||
/*@-compmempass@*/
|
||||
/*@-compmempass -mustmod@*/
|
||||
static int dbiUpdateIndex(dbiIndex dbi, DBC * dbcursor,
|
||||
const void * keyp, size_t keylen, dbiIndexSet set)
|
||||
/*@modifies *dbcursor, set, fileSystem @*/
|
||||
{
|
||||
void * datap;
|
||||
size_t datalen;
|
||||
|
@ -590,7 +596,7 @@ static int dbiUpdateIndex(dbiIndex dbi, DBC * dbcursor,
|
|||
|
||||
return rc;
|
||||
}
|
||||
/*@=compmempass@*/
|
||||
/*@=compmempass =mustmod@*/
|
||||
|
||||
/* XXX assumes hdrNum is first int in dbiIndexItem */
|
||||
static int hdrNumCmp(const void * one, const void * two) {
|
||||
|
@ -609,6 +615,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 @*/
|
||||
{
|
||||
const char * rptr = recs;
|
||||
size_t rlen = (recsize < sizeof(*(set->recs)))
|
||||
|
@ -650,6 +657,7 @@ static INLINE int dbiAppendSet(dbiIndexSet set, const void * recs,
|
|||
*/
|
||||
static INLINE int dbiPruneSet(dbiIndexSet set, void * recs, int nrecs,
|
||||
size_t recsize, int sorted)
|
||||
/*@modifies set, recs @*/
|
||||
{
|
||||
int from;
|
||||
int to = 0;
|
||||
|
@ -699,12 +707,16 @@ void dbiFreeIndexSet(dbiIndexSet set) {
|
|||
/**
|
||||
* Disable all signals, returning previous signal mask.
|
||||
*/
|
||||
static void blockSignals(rpmdb rpmdb, /*@out@*/ sigset_t * oldMask)
|
||||
static void blockSignals(/*@unused@*/ rpmdb db, /*@out@*/ sigset_t * oldMask)
|
||||
/*@modifies *oldMask, internalState @*/
|
||||
{
|
||||
sigset_t newMask;
|
||||
|
||||
#ifdef DYING
|
||||
/* XXX HACK (disabled) permit ^C aborts for now ... */
|
||||
if (!(rpmdb && rpmdb->db_api == 4)) {
|
||||
if (!(db && db->db_api == 4))
|
||||
#endif
|
||||
{
|
||||
(void) sigfillset(&newMask); /* block all signals */
|
||||
(void) sigprocmask(SIG_BLOCK, &newMask, oldMask);
|
||||
}
|
||||
|
@ -713,10 +725,14 @@ static void blockSignals(rpmdb rpmdb, /*@out@*/ sigset_t * oldMask)
|
|||
/**
|
||||
* Restore signal mask.
|
||||
*/
|
||||
static void unblockSignals(rpmdb rpmdb, sigset_t * oldMask)
|
||||
static void unblockSignals(/*@unused@*/ rpmdb db, sigset_t * oldMask)
|
||||
/*@modifies internalState @*/
|
||||
{
|
||||
#ifdef DYING
|
||||
/* XXX HACK (disabled) permit ^C aborts for now ... */
|
||||
if (!(rpmdb && rpmdb->db_api == 4)) {
|
||||
if (!(db && db->db_api == 4))
|
||||
#endif
|
||||
{
|
||||
(void) sigprocmask(SIG_SETMASK, oldMask, NULL);
|
||||
}
|
||||
}
|
||||
|
@ -739,59 +755,59 @@ static void unblockSignals(rpmdb rpmdb, sigset_t * oldMask)
|
|||
};
|
||||
/*@=fullinitblock@*/
|
||||
|
||||
int rpmdbOpenAll(rpmdb rpmdb)
|
||||
int rpmdbOpenAll(rpmdb db)
|
||||
{
|
||||
int dbix;
|
||||
int rc = 0;
|
||||
|
||||
if (rpmdb == NULL) return -2;
|
||||
if (db == NULL) return -2;
|
||||
|
||||
if (dbiTags != NULL)
|
||||
for (dbix = 0; dbix < dbiTagsMax; dbix++) {
|
||||
if (rpmdb->_dbi[dbix] != NULL)
|
||||
if (db->_dbi[dbix] != NULL)
|
||||
continue;
|
||||
(void) dbiOpen(rpmdb, dbiTags[dbix], rpmdb->db_flags);
|
||||
(void) dbiOpen(db, dbiTags[dbix], db->db_flags);
|
||||
}
|
||||
return rc;
|
||||
}
|
||||
|
||||
/* XXX query.c, rpminstall.c, verify.c */
|
||||
int rpmdbClose(rpmdb rpmdb)
|
||||
int rpmdbClose(rpmdb db)
|
||||
{
|
||||
int dbix;
|
||||
int rc = 0;
|
||||
|
||||
if (rpmdb == NULL) return 0;
|
||||
if (rpmdb->_dbi)
|
||||
for (dbix = rpmdb->db_ndbi; --dbix >= 0; ) {
|
||||
if (db == NULL) return 0;
|
||||
if (db->_dbi)
|
||||
for (dbix = db->db_ndbi; --dbix >= 0; ) {
|
||||
int xx;
|
||||
if (rpmdb->_dbi[dbix] == NULL)
|
||||
if (db->_dbi[dbix] == NULL)
|
||||
continue;
|
||||
/*@-unqualifiedtrans@*/ /* FIX: double indirection. */
|
||||
xx = dbiClose(rpmdb->_dbi[dbix], 0);
|
||||
xx = dbiClose(db->_dbi[dbix], 0);
|
||||
if (xx && rc == 0) rc = xx;
|
||||
rpmdb->_dbi[dbix] = NULL;
|
||||
db->_dbi[dbix] = NULL;
|
||||
/*@=unqualifiedtrans@*/
|
||||
}
|
||||
rpmdb->db_errpfx = _free(rpmdb->db_errpfx);
|
||||
rpmdb->db_root = _free(rpmdb->db_root);
|
||||
rpmdb->db_home = _free(rpmdb->db_home);
|
||||
rpmdb->_dbi = _free(rpmdb->_dbi);
|
||||
rpmdb = _free(rpmdb);
|
||||
db->db_errpfx = _free(db->db_errpfx);
|
||||
db->db_root = _free(db->db_root);
|
||||
db->db_home = _free(db->db_home);
|
||||
db->_dbi = _free(db->_dbi);
|
||||
db = _free(db);
|
||||
return rc;
|
||||
}
|
||||
|
||||
int rpmdbSync(rpmdb rpmdb)
|
||||
int rpmdbSync(rpmdb db)
|
||||
{
|
||||
int dbix;
|
||||
int rc = 0;
|
||||
|
||||
if (rpmdb == NULL) return 0;
|
||||
for (dbix = 0; dbix < rpmdb->db_ndbi; dbix++) {
|
||||
if (db == NULL) return 0;
|
||||
for (dbix = 0; dbix < db->db_ndbi; dbix++) {
|
||||
int xx;
|
||||
if (rpmdb->_dbi[dbix] == NULL)
|
||||
if (db->_dbi[dbix] == NULL)
|
||||
continue;
|
||||
xx = dbiSync(rpmdb->_dbi[dbix], 0);
|
||||
xx = dbiSync(db->_dbi[dbix], 0);
|
||||
if (xx && rc == 0) rc = xx;
|
||||
}
|
||||
return rc;
|
||||
|
@ -801,8 +817,9 @@ static /*@only@*/ /*@null@*/
|
|||
rpmdb newRpmdb(/*@kept@*/ /*@null@*/ const char * root,
|
||||
/*@kept@*/ /*@null@*/ const char * home,
|
||||
int mode, int perms, int flags)
|
||||
/*@modifies _filterDbDups @*/
|
||||
{
|
||||
rpmdb rpmdb = xcalloc(sizeof(*rpmdb), 1);
|
||||
rpmdb db = xcalloc(sizeof(*db), 1);
|
||||
const char * epfx = _DB_ERRPFX;
|
||||
static int _initialized = 0;
|
||||
|
||||
|
@ -811,39 +828,42 @@ rpmdb newRpmdb(/*@kept@*/ /*@null@*/ const char * root,
|
|||
_initialized = 1;
|
||||
}
|
||||
|
||||
*rpmdb = dbTemplate; /* structure assignment */
|
||||
/*@-assignexpose@*/
|
||||
*db = dbTemplate; /* structure assignment */
|
||||
/*@=assignexpose@*/
|
||||
|
||||
if (!(perms & 0600)) perms = 0644; /* XXX sanity */
|
||||
|
||||
if (mode >= 0) rpmdb->db_mode = mode;
|
||||
if (perms >= 0) rpmdb->db_perms = perms;
|
||||
if (flags >= 0) rpmdb->db_flags = flags;
|
||||
if (mode >= 0) db->db_mode = mode;
|
||||
if (perms >= 0) db->db_perms = perms;
|
||||
if (flags >= 0) db->db_flags = flags;
|
||||
|
||||
/*@-nullpass@*/
|
||||
rpmdb->db_root = rpmGetPath( (root && *root ? root : _DB_ROOT), NULL);
|
||||
rpmdb->db_home = rpmGetPath( (home && *home ? home : _DB_HOME), NULL);
|
||||
db->db_root = rpmGetPath( (root && *root ? root : _DB_ROOT), NULL);
|
||||
db->db_home = rpmGetPath( (home && *home ? home : _DB_HOME), NULL);
|
||||
/*@=nullpass@*/
|
||||
if (!(rpmdb->db_home && rpmdb->db_home[0] != '%')) {
|
||||
if (!(db->db_home && db->db_home[0] != '%')) {
|
||||
rpmError(RPMERR_DBOPEN, _("no dbpath has been set\n"));
|
||||
(void) rpmdbClose(rpmdb);
|
||||
(void) rpmdbClose(db);
|
||||
/*@-globstate@*/ return NULL; /*@=globstate@*/
|
||||
}
|
||||
/*@-nullpass@*/
|
||||
rpmdb->db_errpfx = rpmExpand( (epfx && *epfx ? epfx : _DB_ERRPFX), NULL);
|
||||
db->db_errpfx = rpmExpand( (epfx && *epfx ? epfx : _DB_ERRPFX), NULL);
|
||||
/*@=nullpass@*/
|
||||
rpmdb->db_remove_env = 0;
|
||||
rpmdb->db_filter_dups = _filterDbDups;
|
||||
rpmdb->db_ndbi = dbiTagsMax;
|
||||
rpmdb->_dbi = xcalloc(rpmdb->db_ndbi, sizeof(*rpmdb->_dbi));
|
||||
/*@-globstate@*/ return rpmdb; /*@=globstate@*/
|
||||
db->db_remove_env = 0;
|
||||
db->db_filter_dups = _filterDbDups;
|
||||
db->db_ndbi = dbiTagsMax;
|
||||
db->_dbi = xcalloc(db->db_ndbi, sizeof(*db->_dbi));
|
||||
/*@-globstate@*/ return db; /*@=globstate@*/
|
||||
}
|
||||
|
||||
static int openDatabase(/*@null@*/ const char * prefix,
|
||||
/*@null@*/ const char * dbpath,
|
||||
int _dbapi, /*@null@*/ /*@out@*/ rpmdb *dbp,
|
||||
int mode, int perms, int flags)
|
||||
/*@modifies *dbp, fileSystem @*/
|
||||
{
|
||||
rpmdb rpmdb;
|
||||
rpmdb db;
|
||||
int rc;
|
||||
static int _initialized = 0;
|
||||
int justCheck = flags & RPMDB_FLAG_JUSTCHECK;
|
||||
|
@ -865,10 +885,10 @@ static int openDatabase(/*@null@*/ const char * prefix,
|
|||
if (mode & O_WRONLY)
|
||||
return 1;
|
||||
|
||||
rpmdb = newRpmdb(prefix, dbpath, mode, perms, flags);
|
||||
if (rpmdb == NULL)
|
||||
db = newRpmdb(prefix, dbpath, mode, perms, flags);
|
||||
if (db == NULL)
|
||||
return 1;
|
||||
rpmdb->db_api = _dbapi;
|
||||
db->db_api = _dbapi;
|
||||
|
||||
{ int dbix;
|
||||
|
||||
|
@ -890,7 +910,7 @@ static int openDatabase(/*@null@*/ const char * prefix,
|
|||
break;
|
||||
}
|
||||
|
||||
dbi = dbiOpen(rpmdb, rpmtag, 0);
|
||||
dbi = dbiOpen(db, rpmtag, 0);
|
||||
if (dbi == NULL) {
|
||||
rc = -2;
|
||||
break;
|
||||
|
@ -901,7 +921,7 @@ static int openDatabase(/*@null@*/ const char * prefix,
|
|||
if (dbi == NULL) rc |= 1;
|
||||
/* XXX open only Packages, indices created on the fly. */
|
||||
#if 0
|
||||
if (rpmdb->db_api == 3)
|
||||
if (db->db_api == 3)
|
||||
#endif
|
||||
goto exit;
|
||||
/*@notreached@*/ break;
|
||||
|
@ -945,9 +965,9 @@ static int openDatabase(/*@null@*/ const char * prefix,
|
|||
|
||||
exit:
|
||||
if (rc || justCheck || dbp == NULL)
|
||||
(void) rpmdbClose(rpmdb);
|
||||
(void) rpmdbClose(db);
|
||||
else
|
||||
*dbp = rpmdb;
|
||||
*dbp = db;
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
@ -961,58 +981,59 @@ int rpmdbOpen (const char * prefix, rpmdb *dbp, int mode, int perms)
|
|||
|
||||
int rpmdbInit (const char * prefix, int perms)
|
||||
{
|
||||
rpmdb rpmdb = NULL;
|
||||
rpmdb db = NULL;
|
||||
int _dbapi = rpmExpandNumeric("%{_dbapi}");
|
||||
int rc;
|
||||
|
||||
rc = openDatabase(prefix, NULL, _dbapi, &rpmdb, (O_CREAT | O_RDWR),
|
||||
rc = openDatabase(prefix, NULL, _dbapi, &db, (O_CREAT | O_RDWR),
|
||||
perms, RPMDB_FLAG_JUSTCHECK);
|
||||
if (rpmdb) {
|
||||
if (db != NULL) {
|
||||
int xx;
|
||||
xx = rpmdbOpenAll(rpmdb);
|
||||
xx = rpmdbOpenAll(db);
|
||||
if (xx && rc == 0) rc = xx;
|
||||
xx = rpmdbClose(rpmdb);
|
||||
xx = rpmdbClose(db);
|
||||
if (xx && rc == 0) rc = xx;
|
||||
rpmdb = NULL;
|
||||
db = NULL;
|
||||
}
|
||||
return rc;
|
||||
}
|
||||
|
||||
int rpmdbVerify(const char * prefix)
|
||||
{
|
||||
rpmdb rpmdb = NULL;
|
||||
rpmdb db = NULL;
|
||||
int _dbapi = rpmExpandNumeric("%{_dbapi}");
|
||||
int rc = 0;
|
||||
|
||||
rc = openDatabase(prefix, NULL, _dbapi, &rpmdb, O_RDONLY, 0644, 0);
|
||||
rc = openDatabase(prefix, NULL, _dbapi, &db, O_RDONLY, 0644, 0);
|
||||
if (rc) return rc;
|
||||
|
||||
if (rpmdb) {
|
||||
if (db != NULL) {
|
||||
int dbix;
|
||||
int xx;
|
||||
rc = rpmdbOpenAll(rpmdb);
|
||||
rc = rpmdbOpenAll(db);
|
||||
|
||||
for (dbix = rpmdb->db_ndbi; --dbix >= 0; ) {
|
||||
if (rpmdb->_dbi[dbix] == NULL)
|
||||
for (dbix = db->db_ndbi; --dbix >= 0; ) {
|
||||
if (db->_dbi[dbix] == NULL)
|
||||
continue;
|
||||
/*@-unqualifiedtrans@*/ /* FIX: double indirection. */
|
||||
xx = dbiVerify(rpmdb->_dbi[dbix], 0);
|
||||
xx = dbiVerify(db->_dbi[dbix], 0);
|
||||
if (xx && rc == 0) rc = xx;
|
||||
rpmdb->_dbi[dbix] = NULL;
|
||||
db->_dbi[dbix] = NULL;
|
||||
/*@=unqualifiedtrans@*/
|
||||
}
|
||||
|
||||
/*@-nullstate@*/ /* FIX: rpmdb->_dbi[] may be NULL. */
|
||||
xx = rpmdbClose(rpmdb);
|
||||
/*@-nullstate@*/ /* FIX: db->_dbi[] may be NULL. */
|
||||
xx = rpmdbClose(db);
|
||||
/*@=nullstate@*/
|
||||
if (xx && rc == 0) rc = xx;
|
||||
rpmdb = NULL;
|
||||
db = NULL;
|
||||
}
|
||||
return rc;
|
||||
}
|
||||
|
||||
static int rpmdbFindByFile(rpmdb rpmdb, /*@null@*/ const char * filespec,
|
||||
static int rpmdbFindByFile(rpmdb db, /*@null@*/ const char * filespec,
|
||||
/*@out@*/ dbiIndexSet * matches)
|
||||
/*@modifies db, *matches, fileSystem @*/
|
||||
{
|
||||
HGE_t hge = (HGE_t)headerGetEntryMinMemory;
|
||||
HFD_t hfd = headerFreeData;
|
||||
|
@ -1050,7 +1071,7 @@ static int rpmdbFindByFile(rpmdb rpmdb, /*@null@*/ const char * filespec,
|
|||
fpc = fpCacheCreate(20);
|
||||
fp1 = fpLookup(fpc, dirName, baseName, 1);
|
||||
|
||||
dbi = dbiOpen(rpmdb, RPMTAG_BASENAMES, 0);
|
||||
dbi = dbiOpen(db, RPMTAG_BASENAMES, 0);
|
||||
if (dbi != NULL) {
|
||||
dbcursor = NULL;
|
||||
xx = dbiCopen(dbi, &dbcursor, 0);
|
||||
|
@ -1079,7 +1100,7 @@ static int rpmdbFindByFile(rpmdb rpmdb, /*@null@*/ const char * filespec,
|
|||
Header h;
|
||||
|
||||
{ rpmdbMatchIterator mi;
|
||||
mi = rpmdbInitIterator(rpmdb, RPMDBI_PACKAGES, &offset, sizeof(offset));
|
||||
mi = rpmdbInitIterator(db, RPMDBI_PACKAGES, &offset, sizeof(offset));
|
||||
h = rpmdbNextIterator(mi);
|
||||
if (h)
|
||||
h = headerLink(h);
|
||||
|
@ -1137,7 +1158,7 @@ static int rpmdbFindByFile(rpmdb rpmdb, /*@null@*/ const char * filespec,
|
|||
}
|
||||
|
||||
/* XXX python/upgrade.c, install.c, uninstall.c */
|
||||
int rpmdbCountPackages(rpmdb rpmdb, const char * name)
|
||||
int rpmdbCountPackages(rpmdb db, const char * name)
|
||||
{
|
||||
dbiIndex dbi;
|
||||
dbiIndexSet matches = NULL;
|
||||
|
@ -1151,7 +1172,7 @@ int rpmdbCountPackages(rpmdb rpmdb, const char * name)
|
|||
if (name == NULL || *name == '\0')
|
||||
return 0;
|
||||
|
||||
dbi = dbiOpen(rpmdb, RPMTAG_NAME, 0);
|
||||
dbi = dbiOpen(db, RPMTAG_NAME, 0);
|
||||
if (dbi) {
|
||||
DBC * dbcursor = NULL;
|
||||
xx = dbiCopen(dbi, &dbcursor, 0);
|
||||
|
@ -1184,6 +1205,7 @@ static int dbiFindMatches(dbiIndex dbi, DBC * dbcursor,
|
|||
/*@null@*/ const char * version,
|
||||
/*@null@*/ const char * release,
|
||||
/*@out@*/ dbiIndexSet * matches)
|
||||
/*@modifies dbi, *dbcursor, *matches @*/
|
||||
{
|
||||
int gotMatches;
|
||||
int rc;
|
||||
|
@ -1269,7 +1291,8 @@ exit:
|
|||
* @return 0 on success, 1 on no mtches, 2 on error
|
||||
*/
|
||||
static int dbiFindByLabel(dbiIndex dbi, DBC * dbcursor,
|
||||
/*@null@*/ const char * arg, dbiIndexSet * matches)
|
||||
/*@null@*/ const char * arg, /*@out@*/ dbiIndexSet * matches)
|
||||
/*@modifies dbi, *dbcursor, *matches @*/
|
||||
{
|
||||
char * localarg, * chptr;
|
||||
char * release;
|
||||
|
@ -1324,6 +1347,7 @@ static int dbiFindByLabel(dbiIndex dbi, DBC * dbcursor,
|
|||
* @return 0 on success
|
||||
*/
|
||||
static int dbiUpdateRecord(dbiIndex dbi, DBC * dbcursor, int offset, Header h)
|
||||
/*@modifies *dbcursor, h, fileSystem @*/
|
||||
{
|
||||
sigset_t signalMask;
|
||||
void * uh;
|
||||
|
@ -1405,7 +1429,9 @@ rpmdbMatchIterator rpmdbFreeIterator(rpmdbMatchIterator mi)
|
|||
rpmdb rpmdbGetIteratorRpmDB(rpmdbMatchIterator mi) {
|
||||
if (mi == NULL)
|
||||
return NULL;
|
||||
/*@-retexpose -retalias@*/
|
||||
return mi->mi_rpmdb;
|
||||
/*@=retexpose =retalias@*/
|
||||
}
|
||||
|
||||
unsigned int rpmdbGetIteratorOffset(rpmdbMatchIterator mi) {
|
||||
|
@ -1587,7 +1613,9 @@ exit:
|
|||
mi->mi_offset, mi->mi_h);
|
||||
}
|
||||
#endif
|
||||
/*@-retexpose -retalias@*/
|
||||
/*@-compdef -usereleased@*/ return mi->mi_h; /*@=compdef =usereleased@*/
|
||||
/*@=retexpose =retalias@*/
|
||||
}
|
||||
|
||||
static void rpmdbSortIterator(/*@null@*/ rpmdbMatchIterator mi) {
|
||||
|
@ -1650,8 +1678,10 @@ int rpmdbPruneIterator(rpmdbMatchIterator mi, int * hdrNums,
|
|||
if (mi == NULL || hdrNums == NULL || nHdrNums <= 0)
|
||||
return 1;
|
||||
|
||||
/*@-mods@*/ /* FIX: wazzup? */
|
||||
if (mi->mi_set)
|
||||
(void) dbiPruneSet(mi->mi_set, hdrNums, nHdrNums, sizeof(*hdrNums), sorted);
|
||||
/*@=mods@*/
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1742,7 +1772,9 @@ fprintf(stderr, "*** RMW %s %p\n", tagName(rpmtag), dbi->dbi_rmw);
|
|||
mi->mi_keyp = mi_keyp;
|
||||
mi->mi_keylen = keylen;
|
||||
|
||||
/*@-assignexpose@*/
|
||||
mi->mi_rpmdb = rpmdb;
|
||||
/*@=assignexpose@*/
|
||||
mi->mi_rpmtag = rpmtag;
|
||||
|
||||
mi->mi_dbc = NULL;
|
||||
|
@ -2193,7 +2225,7 @@ int rpmdbAdd(rpmdb rpmdb, int iid, Header h)
|
|||
if (i) { /* don't add duplicates */
|
||||
for (j = 0; j < i; j++) {
|
||||
if (!strcmp(rpmvals[i], rpmvals[j]))
|
||||
break;
|
||||
/*@innerbreak@*/ break;
|
||||
}
|
||||
if (j < i)
|
||||
continue;
|
||||
|
@ -2312,7 +2344,7 @@ int rpmdbFindFpList(rpmdb rpmdb, fingerPrint * fpList, dbiIndexSet * matchList,
|
|||
/* Find the end of the set of matched files in this package. */
|
||||
for (end = start + 1; end < mi->mi_set->count; end++) {
|
||||
if (im->hdrNum != mi->mi_set->recs[end].hdrNum)
|
||||
break;
|
||||
/*@innerbreak@*/ break;
|
||||
}
|
||||
num = end - start;
|
||||
|
||||
|
@ -2359,7 +2391,8 @@ int rpmdbFindFpList(rpmdb rpmdb, fingerPrint * fpList, dbiIndexSet * matchList,
|
|||
|
||||
}
|
||||
|
||||
char * db1basename (int rpmtag) {
|
||||
char * db1basename (int rpmtag)
|
||||
{
|
||||
char * base = NULL;
|
||||
switch (rpmtag) {
|
||||
case RPMDBI_PACKAGES: base = "packages.rpm"; break;
|
||||
|
@ -2381,6 +2414,7 @@ char * db1basename (int rpmtag) {
|
|||
|
||||
static int rpmdbRemoveDatabase(const char * rootdir,
|
||||
const char * dbpath, int _dbapi)
|
||||
/*@modifies fileSystem @*/
|
||||
{
|
||||
int i;
|
||||
char * filename;
|
||||
|
@ -2436,6 +2470,7 @@ static int rpmdbRemoveDatabase(const char * rootdir,
|
|||
static int rpmdbMoveDatabase(const char * rootdir,
|
||||
const char * olddbpath, int _olddbapi,
|
||||
const char * newdbpath, int _newdbapi)
|
||||
/*@modifies fileSystem @*/
|
||||
{
|
||||
int i;
|
||||
char * ofilename, * nfilename;
|
||||
|
@ -2678,7 +2713,7 @@ int rpmdbRebuild(const char * rootdir)
|
|||
rpmdbSetIteratorRelease(mi, release);
|
||||
while (rpmdbNextIterator(mi)) {
|
||||
skip = 1;
|
||||
break;
|
||||
/*@innerbreak@*/ break;
|
||||
}
|
||||
mi = rpmdbFreeIterator(mi);
|
||||
}
|
||||
|
|
|
@ -433,7 +433,7 @@ int dbiGet(dbiIndex dbi, DBC * dbcursor, void ** keypp,
|
|||
/*@null@*/ void ** datapp,
|
||||
/*@null@*/ size_t * datalenp,
|
||||
unsigned int flags)
|
||||
/*@modifies *dbcursor, *keypp, *keylenp, *datapp, *datalenp,
|
||||
/*@modifies *dbcursor, **keypp, *keylenp, **datapp, *datalenp,
|
||||
fileSystem @*/;
|
||||
|
||||
/** \ingroup dbi
|
||||
|
|
|
@ -36,15 +36,18 @@ struct hashTable_s {
|
|||
*/
|
||||
static /*@shared@*/ /*@null@*/
|
||||
struct hashBucket *findEntry(hashTable ht, const void * key)
|
||||
/*@*/
|
||||
{
|
||||
unsigned int hash;
|
||||
struct hashBucket * b;
|
||||
|
||||
/*@-modunconnomods@*/
|
||||
hash = ht->fn(key) % ht->numBuckets;
|
||||
b = ht->buckets[hash];
|
||||
|
||||
while (b && b->key && ht->eq(b->key, key))
|
||||
b = b->next;
|
||||
/*@=modunconnomods@*/
|
||||
|
||||
return b;
|
||||
}
|
||||
|
|
|
@ -6,24 +6,31 @@
|
|||
* Hash table implemenation.
|
||||
*/
|
||||
|
||||
/**
|
||||
*/
|
||||
typedef struct hashTable_s * hashTable;
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/** */
|
||||
typedef unsigned int (*hashFunctionType) (const void * string) /*@*/;
|
||||
/**
|
||||
*/
|
||||
typedef unsigned int (*hashFunctionType) (const void * string)
|
||||
/*@*/;
|
||||
|
||||
/** */
|
||||
typedef int (*hashEqualityType) (const void * key1, const void * key2) /*@*/;
|
||||
/**
|
||||
*/
|
||||
typedef int (*hashEqualityType) (const void * key1, const void * key2)
|
||||
/*@*/;
|
||||
|
||||
/**
|
||||
* Return hash value of a string
|
||||
* @param string string on which to calculate hash value
|
||||
* @return hash value
|
||||
*/
|
||||
unsigned int hashFunctionString(const void * string) /*@*/;
|
||||
unsigned int hashFunctionString(const void * string)
|
||||
/*@*/;
|
||||
|
||||
/**
|
||||
* Compare two hash table entries for equality.
|
||||
|
@ -31,7 +38,8 @@ unsigned int hashFunctionString(const void * string) /*@*/;
|
|||
* @param key2 entry 2
|
||||
* @return 0 if entries are equal
|
||||
*/
|
||||
int hashEqualityString(const void * key1, const void * key2) /*@*/;
|
||||
int hashEqualityString(const void * key1, const void * key2)
|
||||
/*@*/;
|
||||
|
||||
/**
|
||||
* Create hash table.
|
||||
|
@ -45,13 +53,15 @@ int hashEqualityString(const void * key1, const void * key2) /*@*/;
|
|||
* @return pointer to initialized hash table
|
||||
*/
|
||||
hashTable htCreate(int numBuckets, int keySize, int freeData,
|
||||
hashFunctionType fn, hashEqualityType eq) /*@*/;
|
||||
hashFunctionType fn, hashEqualityType eq)
|
||||
/*@*/;
|
||||
|
||||
/**
|
||||
* Destroy hash table.
|
||||
* @param ht pointer to hash table
|
||||
*/
|
||||
void htFree( /*@only@*/ hashTable ht);
|
||||
void htFree( /*@only@*/ hashTable ht)
|
||||
/*@modifies ht @*/;
|
||||
|
||||
/**
|
||||
* Add item to hash table.
|
||||
|
@ -85,7 +95,8 @@ int htGetEntry(hashTable ht, const void * key,
|
|||
* @return 1 if the key is present, 0 otherwise
|
||||
*/
|
||||
/*@unused@*/
|
||||
int htHasEntry(hashTable ht, const void * key) /*@*/;
|
||||
int htHasEntry(hashTable ht, const void * key)
|
||||
/*@*/;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -377,6 +377,7 @@ static union _mendian {
|
|||
/*@-shadow@*/
|
||||
static void
|
||||
byteReverse(byte *buf, unsigned nbytes)
|
||||
/*@modifies *buf @*/
|
||||
{
|
||||
unsigned nlongs = nbytes / sizeof(uint32);
|
||||
uint32 t;
|
||||
|
@ -455,7 +456,9 @@ rpmDigestUpdate(DIGEST_CTX ctx, const void * data, size_t len)
|
|||
memcpy(p, buf, t);
|
||||
if (ctx->doByteReverse)
|
||||
byteReverse(ctx->in, ctx->datalen);
|
||||
/*@-moduncon@*/
|
||||
ctx->transform(ctx);
|
||||
/*@=moduncon@*/
|
||||
buf += t;
|
||||
len -= t;
|
||||
}
|
||||
|
@ -467,7 +470,9 @@ rpmDigestUpdate(DIGEST_CTX ctx, const void * data, size_t len)
|
|||
/*@=mayaliasunique@*/
|
||||
if (ctx->doByteReverse)
|
||||
byteReverse(ctx->in, ctx->datalen);
|
||||
/*@-moduncon@*/
|
||||
ctx->transform(ctx);
|
||||
/*@=moduncon@*/
|
||||
}
|
||||
|
||||
/* Handle any remaining bytes of data. */
|
||||
|
@ -495,7 +500,9 @@ rpmDigestFinal(/*@only@*/ DIGEST_CTX ctx, /*@out@*/ void ** datap,
|
|||
memset(p, 0, count);
|
||||
if (ctx->doByteReverse)
|
||||
byteReverse(ctx->in, ctx->datalen);
|
||||
/*@-moduncon@*/
|
||||
ctx->transform(ctx);
|
||||
/*@=moduncon@*/
|
||||
p = ctx->in;
|
||||
count = ctx->datalen;
|
||||
}
|
||||
|
@ -506,7 +513,9 @@ rpmDigestFinal(/*@only@*/ DIGEST_CTX ctx, /*@out@*/ void ** datap,
|
|||
byteReverse(ctx->in, ctx->datalen - sizeof(ctx->bits));
|
||||
((uint32 *) ctx->in)[14] = ctx->bits[0];
|
||||
((uint32 *) ctx->in)[15] = ctx->bits[1];
|
||||
/*@-moduncon@*/
|
||||
ctx->transform(ctx);
|
||||
/*@=moduncon@*/
|
||||
|
||||
/* Return final digest. */
|
||||
if (ctx->doByteReverse)
|
||||
|
|
153
rpmio/macro.c
153
rpmio/macro.c
|
@ -2,7 +2,7 @@
|
|||
* \file rpmio/macro.c
|
||||
*/
|
||||
|
||||
static int _debug = 0;
|
||||
/*@unused@*/ static int _debug = 0;
|
||||
|
||||
#include "system.h"
|
||||
#include <stdarg.h>
|
||||
|
@ -61,7 +61,7 @@ struct MacroContext_s rpmCLIMacroContext;
|
|||
/**
|
||||
* Macro expansion state.
|
||||
*/
|
||||
typedef struct MacroBuf {
|
||||
typedef /*@abstract@*/ struct MacroBuf_s {
|
||||
/*@shared@*/ const char * s; /*!< Text to expand. */
|
||||
/*@shared@*/ char * t; /*!< Expansion buffer. */
|
||||
size_t nb; /*!< No. bytes remaining in expansion buffer. */
|
||||
|
@ -70,11 +70,12 @@ typedef struct MacroBuf {
|
|||
int expand_trace; /*!< Post-print macro expansion? */
|
||||
/*@shared@*/ /*@null@*/ void * spec; /*!< (future) %file expansion info?. */
|
||||
/*@dependent@*/ MacroContext mc;
|
||||
} MacroBuf;
|
||||
} * MacroBuf;
|
||||
|
||||
#define SAVECHAR(_mb, _c) { *(_mb)->t = (_c), (_mb)->t++, (_mb)->nb--; }
|
||||
|
||||
static int expandMacro(MacroBuf *mb);
|
||||
static int expandMacro(MacroBuf mb)
|
||||
/*@modifies mb @*/;
|
||||
|
||||
/*@-exportlocal -exportheadervar@*/
|
||||
#define MAX_MACRO_DEPTH 16
|
||||
|
@ -97,7 +98,8 @@ int print_expand_trace = 0;
|
|||
* @retval NULL always
|
||||
*/
|
||||
/*@unused@*/ static inline /*@null@*/ void *
|
||||
_free(/*@only@*/ /*@null@*/ const void * p) /*@modifies p@*/
|
||||
_free(/*@only@*/ /*@null@*/ const void * p)
|
||||
/*@modifies p@*/
|
||||
{
|
||||
if (p != NULL) free((void *)p);
|
||||
return NULL;
|
||||
|
@ -113,6 +115,7 @@ _free(/*@only@*/ /*@null@*/ const void * p) /*@modifies p@*/
|
|||
*/
|
||||
static int
|
||||
compareMacroName(const void * ap, const void * bp)
|
||||
/*@*/
|
||||
{
|
||||
MacroEntry ame = *((MacroEntry *)ap);
|
||||
MacroEntry bme = *((MacroEntry *)bp);
|
||||
|
@ -132,6 +135,7 @@ compareMacroName(const void *ap, const void *bp)
|
|||
*/
|
||||
static void
|
||||
expandMacroTable(MacroContext mc)
|
||||
/*@modifies mc @*/
|
||||
{
|
||||
if (mc->macroTable == NULL) {
|
||||
mc->macrosAllocated = MACRO_CHUNK_SIZE;
|
||||
|
@ -153,6 +157,7 @@ expandMacroTable(MacroContext mc)
|
|||
*/
|
||||
static void
|
||||
sortMacroTable(MacroContext mc)
|
||||
/*@modifies mc @*/
|
||||
{
|
||||
int i;
|
||||
|
||||
|
@ -213,6 +218,7 @@ rpmDumpMacroTable(MacroContext mc, FILE * fp)
|
|||
*/
|
||||
/*@dependent@*/ /*@null@*/ static MacroEntry *
|
||||
findEntry(MacroContext mc, const char * name, size_t namelen)
|
||||
/*@*/
|
||||
{
|
||||
MacroEntry key, *ret;
|
||||
struct MacroEntry_s keybuf;
|
||||
|
@ -230,9 +236,9 @@ findEntry(MacroContext mc, const char *name, size_t namelen)
|
|||
|
||||
key = &keybuf;
|
||||
memset(key, 0, sizeof(*key));
|
||||
/*@-temptrans@*/
|
||||
/*@-temptrans -assignexpose@*/
|
||||
key->name = (char *)name;
|
||||
/*@=temptrans@*/
|
||||
/*@=temptrans =assignexpose@*/
|
||||
ret = (MacroEntry *) bsearch(&key, mc->macroTable, mc->firstFree,
|
||||
sizeof(*(mc->macroTable)), compareMacroName);
|
||||
/* XXX TODO: find 1st empty slot and return that */
|
||||
|
@ -246,6 +252,7 @@ findEntry(MacroContext mc, const char *name, size_t namelen)
|
|||
*/
|
||||
/*@dependent@*/ static char *
|
||||
rdcl(char * buf, size_t size, FD_t fd, int escapes)
|
||||
/*@modifies buf, fileSystem @*/
|
||||
{
|
||||
char *q = buf;
|
||||
size_t nb = 0;
|
||||
|
@ -275,7 +282,7 @@ rdcl(char *buf, size_t size, FD_t fd, int escapes)
|
|||
*q = '\n';
|
||||
*(++q) = '\0'; /* next char in buf */
|
||||
} while (size > 0);
|
||||
return (nread > 0 ? buf : NULL);
|
||||
/*@-retalias@*/ return (nread > 0 ? buf : NULL); /*@=retalias@*/
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -287,6 +294,7 @@ rdcl(char *buf, size_t size, FD_t fd, int escapes)
|
|||
*/
|
||||
static const char *
|
||||
matchchar(const char * p, char pl, char pr)
|
||||
/*@*/
|
||||
{
|
||||
int lvl = 0;
|
||||
char c;
|
||||
|
@ -311,7 +319,8 @@ matchchar(const char *p, char pl, char pr)
|
|||
* @param se end of string
|
||||
*/
|
||||
static void
|
||||
printMacro(MacroBuf *mb, const char *s, const char *se)
|
||||
printMacro(MacroBuf mb, const char * s, const char * se)
|
||||
/*@modifies fileSystem @*/
|
||||
{
|
||||
const char *senl;
|
||||
const char *ellipsis;
|
||||
|
@ -328,7 +337,7 @@ printMacro(MacroBuf *mb, const char *s, const char *se)
|
|||
|
||||
/* Print only to first end-of-line (or end-of-string). */
|
||||
for (senl = se; *senl && !iseol(*senl); senl++)
|
||||
;
|
||||
{};
|
||||
|
||||
/* Limit trailing non-trace output */
|
||||
choplen = 61 - (2 * mb->depth);
|
||||
|
@ -353,7 +362,8 @@ printMacro(MacroBuf *mb, const char *s, const char *se)
|
|||
* @param te end of string
|
||||
*/
|
||||
static void
|
||||
printExpansion(MacroBuf *mb, const char *t, const char *te)
|
||||
printExpansion(MacroBuf mb, const char * t, const char * te)
|
||||
/*@modifies fileSystem @*/
|
||||
{
|
||||
const char *ellipsis;
|
||||
int choplen;
|
||||
|
@ -426,7 +436,8 @@ printExpansion(MacroBuf *mb, const char *t, const char *te)
|
|||
* @return result of expansion
|
||||
*/
|
||||
static int
|
||||
expandT(MacroBuf *mb, const char *f, size_t flen)
|
||||
expandT(MacroBuf mb, const char * f, size_t flen)
|
||||
/*@modifies mb @*/
|
||||
{
|
||||
char *sbuf;
|
||||
const char *s = mb->s;
|
||||
|
@ -452,7 +463,8 @@ expandT(MacroBuf *mb, const char *f, size_t flen)
|
|||
* @return result of expansion
|
||||
*/
|
||||
static int
|
||||
expandS(MacroBuf *mb, char *tbuf, size_t tbuflen)
|
||||
expandS(MacroBuf mb, char * tbuf, size_t tbuflen)
|
||||
/*@modifies mb, *tbuf @*/
|
||||
{
|
||||
const char *t = mb->t;
|
||||
size_t nb = mb->nb;
|
||||
|
@ -475,7 +487,8 @@ expandS(MacroBuf *mb, char *tbuf, size_t tbuflen)
|
|||
* @return result of expansion
|
||||
*/
|
||||
static int
|
||||
expandU(MacroBuf *mb, char *u, size_t ulen)
|
||||
expandU(MacroBuf mb, char * u, size_t ulen)
|
||||
/*@modifies mb, *u @*/
|
||||
{
|
||||
const char *s = mb->s;
|
||||
char *t = mb->t;
|
||||
|
@ -486,9 +499,9 @@ expandU(MacroBuf *mb, char *u, size_t ulen)
|
|||
tbuf = alloca(ulen + 1);
|
||||
memset(tbuf, 0, (ulen + 1));
|
||||
|
||||
/*@-temptrans@*/
|
||||
/*@-temptrans -assignexpose@*/
|
||||
mb->s = u;
|
||||
/*@=temptrans@*/
|
||||
/*@=temptrans =assignexpose@*/
|
||||
mb->t = tbuf;
|
||||
mb->nb = ulen;
|
||||
rc = expandMacro(mb);
|
||||
|
@ -512,7 +525,8 @@ expandU(MacroBuf *mb, char *u, size_t ulen)
|
|||
* @return result of expansion
|
||||
*/
|
||||
static int
|
||||
doShellEscape(MacroBuf *mb, const char *cmd, size_t clen)
|
||||
doShellEscape(MacroBuf mb, const char * cmd, size_t clen)
|
||||
/*@modifies mb, fileSystem @*/
|
||||
{
|
||||
char pcmd[BUFSIZ];
|
||||
FILE *shf;
|
||||
|
@ -548,7 +562,8 @@ doShellEscape(MacroBuf *mb, const char *cmd, size_t clen)
|
|||
* @return address to continue parsing
|
||||
*/
|
||||
/*@dependent@*/ static const char *
|
||||
doDefine(MacroBuf *mb, const char *se, int level, int expandbody)
|
||||
doDefine(MacroBuf mb, const char * se, int level, int expandbody)
|
||||
/*@modifies mb @*/
|
||||
{
|
||||
const char *s = se;
|
||||
char buf[BUFSIZ], *n = buf, *ne = n;
|
||||
|
@ -577,7 +592,7 @@ doDefine(MacroBuf *mb, const char *se, int level, int expandbody)
|
|||
rpmError(RPMERR_BADSPEC,
|
||||
_("Macro %%%s has unterminated body\n"), n);
|
||||
se = s; /* XXX W2DO? */
|
||||
return se;
|
||||
/*@-retalias@*/ return se; /*@=retalias@*/
|
||||
}
|
||||
s++; /* XXX skip { */
|
||||
strncpy(b, s, (se - s));
|
||||
|
@ -590,7 +605,7 @@ doDefine(MacroBuf *mb, const char *se, int level, int expandbody)
|
|||
|
||||
/* Trim trailing blanks/newlines */
|
||||
while (--be >= b && (c = *be) && (isblank(c) || iseol(c)))
|
||||
;
|
||||
{};
|
||||
*(++be) = '\0'; /* one too far */
|
||||
}
|
||||
|
||||
|
@ -603,29 +618,28 @@ doDefine(MacroBuf *mb, const char *se, int level, int expandbody)
|
|||
if (!((c = *n) && (xisalpha(c) || c == '_') && (ne - n) > 2)) {
|
||||
rpmError(RPMERR_BADSPEC,
|
||||
_("Macro %%%s has illegal name (%%define)\n"), n);
|
||||
return se;
|
||||
/*@-retalias@*/ return se; /*@=retalias@*/
|
||||
}
|
||||
|
||||
/* Options must be terminated with ')' */
|
||||
if (o && oc != ')') {
|
||||
rpmError(RPMERR_BADSPEC,
|
||||
_("Macro %%%s has unterminated opts\n"), n);
|
||||
return se;
|
||||
rpmError(RPMERR_BADSPEC, _("Macro %%%s has unterminated opts\n"), n);
|
||||
/*@-retalias@*/ return se; /*@=retalias@*/
|
||||
}
|
||||
|
||||
if ((be - b) < 1) {
|
||||
rpmError(RPMERR_BADSPEC, _("Macro %%%s has empty body\n"), n);
|
||||
return se;
|
||||
/*@-retalias@*/ return se; /*@=retalias@*/
|
||||
}
|
||||
|
||||
if (expandbody && expandU(mb, b, (&buf[sizeof(buf)] - b))) {
|
||||
rpmError(RPMERR_BADSPEC, _("Macro %%%s failed to expand\n"), n);
|
||||
return se;
|
||||
/*@-retalias@*/ return se; /*@=retalias@*/
|
||||
}
|
||||
|
||||
addMacro(mb->mc, n, o, b, (level - 1));
|
||||
|
||||
return se;
|
||||
/*@-retalias@*/ return se; /*@=retalias@*/
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -636,6 +650,7 @@ doDefine(MacroBuf *mb, const char *se, int level, int expandbody)
|
|||
*/
|
||||
/*@dependent@*/ static const char *
|
||||
doUndefine(MacroContext mc, const char * se)
|
||||
/*@modifies mc @*/
|
||||
{
|
||||
const char *s = se;
|
||||
char buf[BUFSIZ], *n = buf, *ne = n;
|
||||
|
@ -652,17 +667,18 @@ doUndefine(MacroContext mc, const char *se)
|
|||
if (!((c = *n) && (xisalpha(c) || c == '_') && (ne - n) > 2)) {
|
||||
rpmError(RPMERR_BADSPEC,
|
||||
_("Macro %%%s has illegal name (%%undefine)\n"), n);
|
||||
return se;
|
||||
/*@-retalias@*/ return se; /*@=retalias@*/
|
||||
}
|
||||
|
||||
delMacro(mc, n);
|
||||
|
||||
return se;
|
||||
/*@-retalias@*/ return se; /*@=retalias@*/
|
||||
}
|
||||
|
||||
#ifdef DYING
|
||||
static void
|
||||
dumpME(const char * msg, MacroEntry me)
|
||||
/*@modifies fileSystem @*/
|
||||
{
|
||||
if (msg)
|
||||
fprintf(stderr, "%s", msg);
|
||||
|
@ -686,13 +702,16 @@ static void
|
|||
pushMacro(/*@out@*/ MacroEntry * mep,
|
||||
const char * n, /*@null@*/ const char * o,
|
||||
/*@null@*/ const char * b, int level)
|
||||
/*@modifies *mep @*/
|
||||
{
|
||||
/*@-usedef@*/
|
||||
MacroEntry prev = (mep && *mep ? *mep : NULL);
|
||||
/*@=usedef@*/
|
||||
MacroEntry me = (MacroEntry) xmalloc(sizeof(*me));
|
||||
|
||||
/*@-assignexpose@*/
|
||||
me->prev = prev;
|
||||
/*@=assignexpose@*/
|
||||
me->name = (prev ? prev->name : xstrdup(n));
|
||||
me->opts = (o ? xstrdup(o) : NULL);
|
||||
me->body = xstrdup(b ? b : "");
|
||||
|
@ -710,6 +729,7 @@ pushMacro(/*@out@*/ MacroEntry *mep,
|
|||
*/
|
||||
static void
|
||||
popMacro(MacroEntry * mep)
|
||||
/*@modifies *mep @*/
|
||||
{
|
||||
MacroEntry me = (*mep ? *mep : NULL);
|
||||
|
||||
|
@ -730,7 +750,8 @@ popMacro(MacroEntry *mep)
|
|||
* @param mb macro expansion state
|
||||
*/
|
||||
static void
|
||||
freeArgs(MacroBuf *mb)
|
||||
freeArgs(MacroBuf mb)
|
||||
/*@modifies mb @*/
|
||||
{
|
||||
MacroContext mc = mb->mc;
|
||||
int ndeleted = 0;
|
||||
|
@ -779,7 +800,8 @@ freeArgs(MacroBuf *mb)
|
|||
* @return address to continue parsing
|
||||
*/
|
||||
/*@dependent@*/ static const char *
|
||||
grabArgs(MacroBuf *mb, const MacroEntry me, const char *se, char lastc)
|
||||
grabArgs(MacroBuf mb, const MacroEntry me, const char * se, char lastc)
|
||||
/*@modifies mb @*/
|
||||
{
|
||||
char buf[BUFSIZ], *b, *be;
|
||||
char aname[16];
|
||||
|
@ -852,7 +874,7 @@ grabArgs(MacroBuf *mb, const MacroEntry me, const char *se, char lastc)
|
|||
if (c == '?' || (o = strchr(opts, c)) == NULL) {
|
||||
rpmError(RPMERR_BADSPEC, _("Unknown option %c in %s(%s)\n"),
|
||||
(char)c, me->name, opts);
|
||||
return se;
|
||||
/*@-retalias@*/ return se; /*@=retalias@*/
|
||||
}
|
||||
*be++ = '-';
|
||||
*be++ = c;
|
||||
|
@ -890,7 +912,7 @@ grabArgs(MacroBuf *mb, const MacroEntry me, const char *se, char lastc)
|
|||
/* Add unexpanded args as macro. */
|
||||
addMacro(mb->mc, "*", NULL, b, mb->depth);
|
||||
|
||||
return se;
|
||||
/*@-retalias@*/ return se; /*@=retalias@*/
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -901,7 +923,8 @@ grabArgs(MacroBuf *mb, const MacroEntry me, const char *se, char lastc)
|
|||
* @param msglen no. of bytes in message
|
||||
*/
|
||||
static void
|
||||
doOutput(MacroBuf *mb, int waserror, const char *msg, size_t msglen)
|
||||
doOutput(MacroBuf mb, int waserror, const char * msg, size_t msglen)
|
||||
/*@modifies mb, fileSystem @*/
|
||||
{
|
||||
char buf[BUFSIZ];
|
||||
|
||||
|
@ -924,7 +947,9 @@ doOutput(MacroBuf *mb, int waserror, const char *msg, size_t msglen)
|
|||
* @param gn length of field g
|
||||
*/
|
||||
static void
|
||||
doFoo(MacroBuf *mb, int negate, const char *f, size_t fn, const char *g, size_t glen)
|
||||
doFoo(MacroBuf mb, int negate, const char * f, size_t fn,
|
||||
const char * g, size_t glen)
|
||||
/*@modifies mb @*/
|
||||
{
|
||||
char buf[BUFSIZ], *b = NULL, *be;
|
||||
int c;
|
||||
|
@ -1017,7 +1042,8 @@ doFoo(MacroBuf *mb, int negate, const char *f, size_t fn, const char *g, size_t
|
|||
* @return 0 on success, 1 on failure
|
||||
*/
|
||||
static int
|
||||
expandMacro(MacroBuf *mb)
|
||||
expandMacro(MacroBuf mb)
|
||||
/*@modifies mb @*/
|
||||
{
|
||||
MacroEntry *mep;
|
||||
MacroEntry me;
|
||||
|
@ -1334,7 +1360,7 @@ expandMacro(MacroBuf *mb)
|
|||
int
|
||||
expandMacros(void * spec, MacroContext mc, char * s, size_t slen)
|
||||
{
|
||||
MacroBuf macrobuf, *mb = ¯obuf;
|
||||
MacroBuf mb = alloca(sizeof(*mb));
|
||||
char *tbuf;
|
||||
int rc;
|
||||
|
||||
|
@ -1345,19 +1371,19 @@ expandMacros(void *spec, MacroContext mc, char *s, size_t slen)
|
|||
tbuf = alloca(slen + 1);
|
||||
memset(tbuf, 0, (slen + 1));
|
||||
|
||||
/*@-temptrans@*/
|
||||
/*@-temptrans -assignexpose@*/
|
||||
mb->s = s;
|
||||
/*@=temptrans@*/
|
||||
/*@=temptrans =assignexpose@*/
|
||||
mb->t = tbuf;
|
||||
mb->nb = slen;
|
||||
mb->depth = 0;
|
||||
mb->macro_trace = print_macro_trace;
|
||||
mb->expand_trace = print_expand_trace;
|
||||
|
||||
/*@-temptrans@*/
|
||||
/*@-temptrans -assignexpose@*/
|
||||
mb->spec = spec; /* (future) %file expansion info */
|
||||
mb->mc = mc;
|
||||
/*@=temptrans@*/
|
||||
/*@=temptrans =assignexpose@*/
|
||||
|
||||
rc = expandMacro(mb);
|
||||
|
||||
|
@ -1371,7 +1397,8 @@ expandMacros(void *spec, MacroContext mc, char *s, size_t slen)
|
|||
}
|
||||
|
||||
void
|
||||
addMacro(MacroContext mc, const char *n, const char *o, const char *b, int level)
|
||||
addMacro(MacroContext mc,
|
||||
const char * n, const char * o, const char * b, int level)
|
||||
{
|
||||
MacroEntry * mep;
|
||||
|
||||
|
@ -1381,9 +1408,11 @@ addMacro(MacroContext mc, const char *n, const char *o, const char *b, int level
|
|||
if ((mep = findEntry(mc, n, 0)) == NULL) {
|
||||
if (mc->firstFree == mc->macrosAllocated)
|
||||
expandMacroTable(mc);
|
||||
if (mc->macroTable != NULL)
|
||||
mep = mc->macroTable + mc->firstFree++;
|
||||
}
|
||||
|
||||
if (mep != NULL) {
|
||||
/* Push macro over previous definition */
|
||||
pushMacro(mep, n, o, b, level);
|
||||
|
||||
|
@ -1391,6 +1420,7 @@ addMacro(MacroContext mc, const char *n, const char *o, const char *b, int level
|
|||
if ((*mep)->prev == NULL)
|
||||
sortMacroTable(mc);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
delMacro(MacroContext mc, const char * n)
|
||||
|
@ -1410,13 +1440,13 @@ delMacro(MacroContext mc, const char *n)
|
|||
int
|
||||
rpmDefineMacro(MacroContext mc, const char * macro, int level)
|
||||
{
|
||||
MacroBuf macrobuf, *mb = ¯obuf;
|
||||
MacroBuf mb = alloca(sizeof(*mb));
|
||||
|
||||
memset(mb, 0, sizeof(*mb));
|
||||
/* XXX just enough to get by */
|
||||
/*@-temptrans@*/
|
||||
/*@-temptrans -assignexpose@*/
|
||||
mb->mc = (mc ? mc : &rpmGlobalMacroContext);
|
||||
/*@=temptrans@*/
|
||||
/*@=temptrans =assignexpose@*/
|
||||
(void)doDefine(mb, macro, level, 0);
|
||||
return 0;
|
||||
}
|
||||
|
@ -1457,7 +1487,7 @@ rpmInitMacros(MacroContext mc, const char *macrofiles)
|
|||
|
||||
for (me = mfile; (me = strchr(me, ':')) != NULL; me++) {
|
||||
if (!(me[1] == '/' && me[2] == '/'))
|
||||
break;
|
||||
/*@innerbreak@*/ break;
|
||||
}
|
||||
|
||||
if (me && *me == ':')
|
||||
|
@ -1660,7 +1690,7 @@ char *rpmCleanPath(char * path)
|
|||
case '/':
|
||||
/* Move parent dir forward */
|
||||
for (se = te + 1; se < t && *se != '/'; se++)
|
||||
;
|
||||
{};
|
||||
if (se < t && *se == '/') {
|
||||
te = se;
|
||||
/*fprintf(stderr, "*** next pdir \"%.*s\"\n", (te-path), path); */
|
||||
|
@ -1692,7 +1722,7 @@ char *rpmCleanPath(char * path)
|
|||
/* Move parent dir forward */
|
||||
if (te > path)
|
||||
for (--te; te > path && *te != '/'; te--)
|
||||
;
|
||||
{};
|
||||
/*fprintf(stderr, "*** prev pdir \"%.*s\"\n", (te-path), path); */
|
||||
s++;
|
||||
s++;
|
||||
|
@ -1712,7 +1742,7 @@ char *rpmCleanPath(char * path)
|
|||
*t = '\0';
|
||||
|
||||
/*fprintf(stderr, "\t%s\n", path); */
|
||||
/*@-temptrans@*/ return path; /*@=temptrans@*/
|
||||
/*@-temptrans -retalias@*/ return path; /*@=temptrans =retalias@*/
|
||||
}
|
||||
|
||||
/* Return concatenated and expanded canonical path. */
|
||||
|
@ -1761,14 +1791,16 @@ const char * rpmGenPath(const char * urlroot, const char * urlmdir,
|
|||
int nurl = 0;
|
||||
int ut;
|
||||
|
||||
if (_debug)
|
||||
fprintf(stderr, "*** RGP xroot %s xmdir %s xfile %s\n", xroot, xmdir, xfile);
|
||||
#if 0
|
||||
if (_debug) fprintf(stderr, "*** RGP xroot %s xmdir %s xfile %s\n", xroot, xmdir, xfile);
|
||||
#endif
|
||||
ut = urlPath(xroot, &root);
|
||||
if (url == NULL && ut > URL_IS_DASH) {
|
||||
url = xroot;
|
||||
nurl = root - xroot;
|
||||
if (_debug)
|
||||
fprintf(stderr, "*** RGP ut %d root %s nurl %d\n", ut, root, nurl);
|
||||
#if 0
|
||||
if (_debug) fprintf(stderr, "*** RGP ut %d root %s nurl %d\n", ut, root, nurl);
|
||||
#endif
|
||||
}
|
||||
if (root == NULL || *root == '\0') root = "/";
|
||||
|
||||
|
@ -1776,8 +1808,9 @@ fprintf(stderr, "*** RGP ut %d root %s nurl %d\n", ut, root, nurl);
|
|||
if (url == NULL && ut > URL_IS_DASH) {
|
||||
url = xmdir;
|
||||
nurl = mdir - xmdir;
|
||||
if (_debug)
|
||||
fprintf(stderr, "*** RGP ut %d mdir %s nurl %d\n", ut, mdir, nurl);
|
||||
#if 0
|
||||
if (_debug) fprintf(stderr, "*** RGP ut %d mdir %s nurl %d\n", ut, mdir, nurl);
|
||||
#endif
|
||||
}
|
||||
if (mdir == NULL || *mdir == '\0') mdir = "/";
|
||||
|
||||
|
@ -1785,8 +1818,9 @@ fprintf(stderr, "*** RGP ut %d mdir %s nurl %d\n", ut, mdir, nurl);
|
|||
if (url == NULL && ut > URL_IS_DASH) {
|
||||
url = xfile;
|
||||
nurl = file - xfile;
|
||||
if (_debug)
|
||||
fprintf(stderr, "*** RGP ut %d file %s nurl %d\n", ut, file, nurl);
|
||||
#if 0
|
||||
if (_debug) fprintf(stderr, "*** RGP ut %d file %s nurl %d\n", ut, file, nurl);
|
||||
#endif
|
||||
}
|
||||
|
||||
if (url && nurl > 0) {
|
||||
|
@ -1801,8 +1835,9 @@ fprintf(stderr, "*** RGP ut %d file %s nurl %d\n", ut, file, nurl);
|
|||
xroot = _free(xroot);
|
||||
xmdir = _free(xmdir);
|
||||
xfile = _free(xfile);
|
||||
if (_debug)
|
||||
fprintf(stderr, "*** RGP result %s\n", result);
|
||||
#if 0
|
||||
if (_debug) fprintf(stderr, "*** RGP result %s\n", result);
|
||||
#endif
|
||||
return result;
|
||||
}
|
||||
|
||||
|
|
209
rpmio/rpmio.c
209
rpmio/rpmio.c
|
@ -99,7 +99,8 @@ int _rpmio_debug = 0;
|
|||
* @retval NULL always
|
||||
*/
|
||||
/*@unused@*/ static inline /*@null@*/ void *
|
||||
_free(/*@only@*/ /*@null@*/ const void * p) /*@modifies p@*/
|
||||
_free(/*@only@*/ /*@null@*/ const void * p)
|
||||
/*@modifies p@*/
|
||||
{
|
||||
if (p != NULL) free((void *)p);
|
||||
return NULL;
|
||||
|
@ -108,6 +109,7 @@ _free(/*@only@*/ /*@null@*/ const void * p) /*@modifies p@*/
|
|||
/* =============================================================== */
|
||||
|
||||
static /*@observer@*/ const char * fdbg(/*@null@*/ FD_t fd)
|
||||
/*@modifies fileSystem @*/
|
||||
{
|
||||
static char buf[BUFSIZ];
|
||||
char *be = buf;
|
||||
|
@ -168,7 +170,8 @@ static /*@observer@*/ const char * fdbg(/*@null@*/ FD_t fd)
|
|||
}
|
||||
|
||||
/* =============================================================== */
|
||||
off_t fdSize(FD_t fd) {
|
||||
off_t fdSize(FD_t fd)
|
||||
{
|
||||
struct stat sb;
|
||||
off_t rc = -1;
|
||||
|
||||
|
@ -192,7 +195,8 @@ DBGIO(0, (stderr, "==>\tfdSize(%p) rc %ld\n", fd, (long)rc));
|
|||
return rc;
|
||||
}
|
||||
|
||||
FD_t fdDup(int fdno) {
|
||||
FD_t fdDup(int fdno)
|
||||
{
|
||||
FD_t fd;
|
||||
int nfdno;
|
||||
|
||||
|
@ -204,14 +208,18 @@ DBGIO(fd, (stderr, "==> fdDup(%d) fd %p %s\n", fdno, (fd ? fd : NULL), fdbg(fd))
|
|||
/*@-refcounttrans@*/ return fd; /*@=refcounttrans@*/
|
||||
}
|
||||
|
||||
static inline /*@unused@*/ int fdSeekNot(void * cookie, /*@unused@*/ _libio_pos_t pos, /*@unused@*/ int whence) {
|
||||
static inline /*@unused@*/ int fdSeekNot(void * cookie,
|
||||
/*@unused@*/ _libio_pos_t pos, /*@unused@*/ int whence)
|
||||
/*@*/
|
||||
{
|
||||
FD_t fd = c2f(cookie);
|
||||
FDSANE(fd); /* XXX keep gcc quiet */
|
||||
return -2;
|
||||
}
|
||||
|
||||
#ifdef UNUSED
|
||||
FILE *fdFdopen(void * cookie, const char *fmode) {
|
||||
FILE *fdFdopen(void * cookie, const char *fmode)
|
||||
{
|
||||
FD_t fd = c2f(cookie);
|
||||
int fdno;
|
||||
FILE * fp;
|
||||
|
@ -233,10 +241,15 @@ DBGIO(fd, (stderr, "==> fdFdopen(%p,\"%s\") fdno %d -> fp %p fdno %d\n", cookie,
|
|||
#endif
|
||||
|
||||
/* =============================================================== */
|
||||
static inline /*@null@*/ FD_t XfdLink(void * cookie, const char *msg, const char *file, unsigned line) {
|
||||
static inline /*@null@*/ FD_t XfdLink(void * cookie, const char * msg,
|
||||
const char * file, unsigned line)
|
||||
/*@modifies internalState @*/
|
||||
{
|
||||
FD_t fd;
|
||||
if (cookie == NULL)
|
||||
/*@-castexpose@*/
|
||||
DBGREFS(0, (stderr, "--> fd %p ++ %d %s at %s:%u\n", cookie, FDNREFS(cookie)+1, msg, file, line));
|
||||
/*@=castexpose@*/
|
||||
fd = c2f(cookie);
|
||||
if (fd) {
|
||||
fd->nrefs++;
|
||||
|
@ -245,14 +258,17 @@ DBGREFS(fd, (stderr, "--> fd %p ++ %d %s at %s:%u %s\n", fd, fd->nrefs, msg, fi
|
|||
return fd;
|
||||
}
|
||||
|
||||
static inline /*@null@*/ FD_t XfdFree( /*@killref@*/ FD_t fd, const char *msg, const char *file, unsigned line) {
|
||||
static inline /*@null@*/ FD_t XfdFree( /*@killref@*/ FD_t fd, const char *msg,
|
||||
const char *file, unsigned line)
|
||||
/*@modifies fd @*/
|
||||
{
|
||||
if (fd == NULL)
|
||||
DBGREFS(0, (stderr, "--> fd %p -- %d %s at %s:%u\n", fd, FDNREFS(fd), msg, file, line));
|
||||
FDSANE(fd);
|
||||
if (fd) {
|
||||
DBGREFS(fd, (stderr, "--> fd %p -- %d %s at %s:%u %s\n", fd, fd->nrefs, msg, file, line, fdbg(fd)));
|
||||
if (--fd->nrefs > 0)
|
||||
/*@-refcounttrans@*/ return fd; /*@=refcounttrans@*/
|
||||
/*@-refcounttrans -retalias@*/ return fd; /*@=refcounttrans =retalias@*/
|
||||
fd->stats = _free(fd->stats);
|
||||
fd->digest = _free(fd->digest);
|
||||
/*@-refcounttrans@*/ free(fd); /*@=refcounttrans@*/
|
||||
|
@ -260,7 +276,10 @@ DBGREFS(fd, (stderr, "--> fd %p -- %d %s at %s:%u %s\n", fd, fd->nrefs, msg, fi
|
|||
return NULL;
|
||||
}
|
||||
|
||||
static inline /*@null@*/ FD_t XfdNew(const char *msg, const char *file, unsigned line) {
|
||||
static inline /*@null@*/ FD_t XfdNew(const char * msg,
|
||||
const char * file, unsigned line)
|
||||
/*@*/
|
||||
{
|
||||
FD_t fd = (FD_t) xmalloc(sizeof(struct _FD_s));
|
||||
if (fd == NULL) /* XXX xmalloc never returns NULL */
|
||||
return NULL;
|
||||
|
@ -272,7 +291,9 @@ static inline /*@null@*/ FD_t XfdNew(const char *msg, const char *file, unsigned
|
|||
fd->nfps = 0;
|
||||
memset(fd->fps, 0, sizeof(fd->fps));
|
||||
|
||||
/*@-assignexpose@*/
|
||||
fd->fps[0].io = fdio;
|
||||
/*@=assignexpose@*/
|
||||
fd->fps[0].fp = NULL;
|
||||
fd->fps[0].fdno = -1;
|
||||
|
||||
|
@ -295,7 +316,8 @@ static inline /*@null@*/ FD_t XfdNew(const char *msg, const char *file, unsigned
|
|||
return XfdLink(fd, msg, file, line);
|
||||
}
|
||||
|
||||
ssize_t fdRead(void * cookie, /*@out@*/ char * buf, size_t count) {
|
||||
ssize_t fdRead(void * cookie, /*@out@*/ char * buf, size_t count)
|
||||
{
|
||||
FD_t fd = c2f(cookie);
|
||||
ssize_t rc;
|
||||
|
||||
|
@ -312,7 +334,8 @@ DBGIO(fd, (stderr, "==>\tfdRead(%p,%p,%ld) rc %ld %s\n", cookie, buf, (long)coun
|
|||
return rc;
|
||||
}
|
||||
|
||||
ssize_t fdWrite(void * cookie, const char * buf, size_t count) {
|
||||
ssize_t fdWrite(void * cookie, const char * buf, size_t count)
|
||||
{
|
||||
FD_t fd = c2f(cookie);
|
||||
int fdno = fdFileno(fd);
|
||||
ssize_t rc;
|
||||
|
@ -344,7 +367,9 @@ DBGIO(fd, (stderr, "==>\tfdWrite(%p,%p,%ld) rc %ld %s\n", cookie, buf, (long)cou
|
|||
return rc;
|
||||
}
|
||||
|
||||
static inline int fdSeek(void * cookie, _libio_pos_t pos, int whence) {
|
||||
static inline int fdSeek(void * cookie, _libio_pos_t pos, int whence)
|
||||
/*@modifies internalState, fileSystem @*/
|
||||
{
|
||||
#ifdef USE_COOKIE_SEEK_POINTER
|
||||
_IO_off64_t p = *pos;
|
||||
#else
|
||||
|
@ -363,7 +388,8 @@ DBGIO(fd, (stderr, "==>\tfdSeek(%p,%ld,%d) rc %lx %s\n", cookie, (long)p, whence
|
|||
return rc;
|
||||
}
|
||||
|
||||
int fdClose( /*@only@*/ void * cookie) {
|
||||
int fdClose( /*@only@*/ void * cookie)
|
||||
{
|
||||
FD_t fd;
|
||||
int fdno;
|
||||
int rc;
|
||||
|
@ -384,7 +410,8 @@ DBGIO(fd, (stderr, "==>\tfdClose(%p) rc %lx %s\n", (fd ? fd : NULL), (unsigned l
|
|||
return rc;
|
||||
}
|
||||
|
||||
/*@null@*/ FD_t fdOpen(const char *path, int flags, mode_t mode) {
|
||||
/*@null@*/ FD_t fdOpen(const char *path, int flags, mode_t mode)
|
||||
{
|
||||
FD_t fd;
|
||||
int fdno;
|
||||
|
||||
|
@ -616,7 +643,9 @@ const char *urlStrerror(const char *url)
|
|||
}
|
||||
|
||||
#if !defined(USE_ALT_DNS) || !USE_ALT_DNS
|
||||
static int mygethostbyname(const char * host, struct in_addr * address)
|
||||
static int mygethostbyname(const char * host,
|
||||
/*@out@*/ struct in_addr * address)
|
||||
/*@modifies *address, fileSystem @*/
|
||||
{
|
||||
struct hostent * hostinfo;
|
||||
|
||||
|
@ -630,7 +659,8 @@ static int mygethostbyname(const char * host, struct in_addr * address)
|
|||
}
|
||||
#endif
|
||||
|
||||
static int getHostAddress(const char * host, struct in_addr * address)
|
||||
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@*/ )
|
||||
|
@ -646,6 +676,7 @@ static int getHostAddress(const char * host, struct in_addr * address)
|
|||
}
|
||||
|
||||
static int tcpConnect(FD_t ctrl, const char * host, int port)
|
||||
/*@modifies ctrl, fileSystem @*/
|
||||
{
|
||||
struct sockaddr_in sin;
|
||||
int fdno = -1;
|
||||
|
@ -691,7 +722,9 @@ errxit:
|
|||
return rc;
|
||||
}
|
||||
|
||||
static int checkResponse(void * uu, FD_t ctrl, /*@out@*/ int *ecp, /*@out@*/ char ** str)
|
||||
static int checkResponse(void * uu, FD_t ctrl,
|
||||
/*@out@*/ int *ecp, /*@out@*/ char ** str)
|
||||
/*@modifies ctrl, *ecp, *str, fileSystem @*/
|
||||
{
|
||||
urlinfo u = uu;
|
||||
char *buf;
|
||||
|
@ -740,7 +773,7 @@ static int checkResponse(void * uu, FD_t ctrl, /*@out@*/ int *ecp, /*@out@*/ cha
|
|||
if (se > s && se[-1] == '\r')
|
||||
se[-1] = '\0';
|
||||
if (*se == '\0')
|
||||
break;
|
||||
/*@innerbreak@*/ break;
|
||||
|
||||
if (_ftp_debug)
|
||||
fprintf(stderr, "<- %s\n", s);
|
||||
|
@ -748,7 +781,7 @@ fprintf(stderr, "<- %s\n", s);
|
|||
/* HTTP: header termination on empty line */
|
||||
if (*s == '\0') {
|
||||
moretodo = 0;
|
||||
break;
|
||||
/*@innerbreak@*/ break;
|
||||
}
|
||||
*se++ = '\0';
|
||||
|
||||
|
@ -774,7 +807,7 @@ fprintf(stderr, "<- %s\n", s);
|
|||
|
||||
/* HTTP: look for "token: ..." */
|
||||
for (e = s; *e && !(*e == ' ' || *e == ':'); e++)
|
||||
;
|
||||
{};
|
||||
if (e > s && *e++ == ':') {
|
||||
size_t ne = (e - s);
|
||||
while (*e && *e == ' ') e++;
|
||||
|
@ -852,6 +885,7 @@ fprintf(stderr, "<- %s\n", s);
|
|||
}
|
||||
|
||||
static int ftpCheckResponse(urlinfo u, /*@out@*/ char ** str)
|
||||
/*@modifies u, *str, fileSystem @*/
|
||||
{
|
||||
int ec = 0;
|
||||
int rc;
|
||||
|
@ -876,6 +910,7 @@ static int ftpCheckResponse(urlinfo u, /*@out@*/ char ** str)
|
|||
}
|
||||
|
||||
static int ftpCommand(urlinfo u, char ** str, ...)
|
||||
/*@modifies u, *str, fileSystem @*/
|
||||
{
|
||||
va_list ap;
|
||||
int len = 0;
|
||||
|
@ -912,6 +947,7 @@ fprintf(stderr, "-> %s", t);
|
|||
}
|
||||
|
||||
static int ftpLogin(urlinfo u)
|
||||
/*@modifies u, fileSystem @*/
|
||||
{
|
||||
const char * host;
|
||||
const char * user;
|
||||
|
@ -1180,6 +1216,7 @@ int ufdCopy(FD_t sfd, FD_t tfd)
|
|||
}
|
||||
|
||||
static int urlConnect(const char * url, /*@out@*/ urlinfo * uret)
|
||||
/*@modifies *uret, fileSystem @*/
|
||||
{
|
||||
urlinfo u;
|
||||
int rc = 0;
|
||||
|
@ -1234,7 +1271,8 @@ int ufdGetFile(FD_t sfd, FD_t tfd)
|
|||
return rc;
|
||||
}
|
||||
|
||||
int ftpCmd(const char * cmd, const char * url, const char * arg2) {
|
||||
int ftpCmd(const char * cmd, const char * url, const char * arg2)
|
||||
{
|
||||
urlinfo u;
|
||||
int rc;
|
||||
const char * path;
|
||||
|
@ -1263,7 +1301,9 @@ int ftpCmd(const char * cmd, const char * url, const char * arg2) {
|
|||
#define SHUT_RDWR 1+1
|
||||
#endif
|
||||
|
||||
static int ftpAbort(urlinfo u, FD_t data) {
|
||||
static int ftpAbort(urlinfo u, FD_t data)
|
||||
/*@modifies u, data, fileSystem @*/
|
||||
{
|
||||
static unsigned char ipbuf[3] = { IAC, IP, IAC };
|
||||
FD_t ctrl;
|
||||
int rc;
|
||||
|
@ -1299,7 +1339,7 @@ static int ftpAbort(urlinfo u, FD_t data) {
|
|||
data->rd_timeoutsecs = 10;
|
||||
if (fdReadable(data, data->rd_timeoutsecs) > 0) {
|
||||
while (timedRead(data, u->buf, u->bufAlloced) > 0)
|
||||
;
|
||||
u->buf[0] = '\0';
|
||||
}
|
||||
data->rd_timeoutsecs = tosecs;
|
||||
/* XXX ftp abort needs to close the data channel to receive status */
|
||||
|
@ -1322,6 +1362,7 @@ static int ftpAbort(urlinfo u, FD_t data) {
|
|||
}
|
||||
|
||||
static int ftpFileDone(urlinfo u, FD_t data)
|
||||
/*@modifies u, data, fileSystem @*/
|
||||
{
|
||||
int rc = 0;
|
||||
|
||||
|
@ -1338,6 +1379,7 @@ static int ftpFileDone(urlinfo u, FD_t data)
|
|||
}
|
||||
|
||||
static int httpResp(urlinfo u, FD_t ctrl, /*@out@*/ char ** str)
|
||||
/*@modifies ctrl, *str, fileSystem @*/
|
||||
{
|
||||
int ec = 0;
|
||||
int rc;
|
||||
|
@ -1360,6 +1402,7 @@ fprintf(stderr, "*** httpResp: rc %d ec %d\n", rc, ec);
|
|||
}
|
||||
|
||||
static int httpReq(FD_t ctrl, const char * httpCmd, const char * httpArg)
|
||||
/*@modifies ctrl, fileSystem @*/
|
||||
{
|
||||
urlinfo u = ctrl->url;
|
||||
const char * host;
|
||||
|
@ -1464,7 +1507,8 @@ errxit2:
|
|||
}
|
||||
|
||||
/* XXX DYING: unused */
|
||||
void * ufdGetUrlinfo(FD_t fd) {
|
||||
void * ufdGetUrlinfo(FD_t fd)
|
||||
{
|
||||
FDSANE(fd);
|
||||
if (fd->url == NULL)
|
||||
return NULL;
|
||||
|
@ -1472,7 +1516,9 @@ void * ufdGetUrlinfo(FD_t fd) {
|
|||
}
|
||||
|
||||
/* =============================================================== */
|
||||
static ssize_t ufdRead(void * cookie, /*@out@*/ char * buf, size_t count) {
|
||||
static ssize_t ufdRead(void * cookie, /*@out@*/ char * buf, size_t count)
|
||||
/*@modifies internalState, *buf, fileSystem @*/
|
||||
{
|
||||
FD_t fd = c2f(cookie);
|
||||
int bytesRead;
|
||||
int total;
|
||||
|
@ -1534,6 +1580,7 @@ fprintf(stderr, "*** read: rc %d errno %d %s \"%s\"\n", rc, errno, strerror(errn
|
|||
}
|
||||
|
||||
static ssize_t ufdWrite(void * cookie, const char * buf, size_t count)
|
||||
/*@modifies internalState, fileSystem @*/
|
||||
{
|
||||
FD_t fd = c2f(cookie);
|
||||
int bytesWritten;
|
||||
|
@ -1596,7 +1643,9 @@ fprintf(stderr, "*** write: rc %d errno %d %s \"%s\"\n", rc, errno, strerror(err
|
|||
return count;
|
||||
}
|
||||
|
||||
static inline int ufdSeek(void * cookie, _libio_pos_t pos, int whence) {
|
||||
static inline int ufdSeek(void * cookie, _libio_pos_t pos, int whence)
|
||||
/*@modifies internalState, fileSystem @*/
|
||||
{
|
||||
FD_t fd = c2f(cookie);
|
||||
|
||||
switch (fd->urlType) {
|
||||
|
@ -1731,6 +1780,7 @@ fprintf(stderr, "-> \r\n");
|
|||
/*@-nullstate@*/ /* FIX: u->{ctrl,data}->url undef after XurlLink. */
|
||||
/*@null@*/ FD_t ftpOpen(const char *url, /*@unused@*/ int flags,
|
||||
/*@unused@*/ mode_t mode, /*@out@*/ urlinfo *uret)
|
||||
/*@modifies *uret, fileSystem @*/
|
||||
{
|
||||
urlinfo u = NULL;
|
||||
FD_t fd = NULL;
|
||||
|
@ -1768,6 +1818,7 @@ exit:
|
|||
/*@-nullstate@*/ /* FIX: u->{ctrl,data}->url undef after XurlLink. */
|
||||
static /*@null@*/ FD_t httpOpen(const char * url, /*@unused@*/ int flags,
|
||||
/*@unused@*/ mode_t mode, /*@out@*/ urlinfo * uret)
|
||||
/*@modifies *uret, fileSystem @*/
|
||||
{
|
||||
urlinfo u = NULL;
|
||||
FD_t fd = NULL;
|
||||
|
@ -1808,6 +1859,7 @@ exit:
|
|||
/*@=nullstate@*/
|
||||
|
||||
static /*@null@*/ FD_t ufdOpen(const char * url, int flags, mode_t mode)
|
||||
/*@modifies fileSystem @*/
|
||||
{
|
||||
FD_t fd = NULL;
|
||||
const char * cmd;
|
||||
|
@ -1904,7 +1956,9 @@ FDIO_t ufdio = /*@-compmempass@*/ &ufdio_s /*@=compmempass@*/ ;
|
|||
|
||||
#include <zlib.h>
|
||||
|
||||
static inline /*@dependent@*/ /*@null@*/ void * gzdFileno(FD_t fd) {
|
||||
static inline /*@dependent@*/ /*@null@*/ void * gzdFileno(FD_t fd)
|
||||
/*@*/
|
||||
{
|
||||
void * rc = NULL;
|
||||
int i;
|
||||
|
||||
|
@ -1920,7 +1974,9 @@ static inline /*@dependent@*/ /*@null@*/ void * gzdFileno(FD_t fd) {
|
|||
return rc;
|
||||
}
|
||||
|
||||
static /*@null@*/ FD_t gzdOpen(const char *path, const char *fmode) {
|
||||
static /*@null@*/ FD_t gzdOpen(const char * path, const char * fmode)
|
||||
/*@modifies fileSystem @*/
|
||||
{
|
||||
FD_t fd;
|
||||
gzFile *gzfile;
|
||||
if ((gzfile = gzopen(path, fmode)) == NULL)
|
||||
|
@ -1932,7 +1988,9 @@ DBGIO(fd, (stderr, "==>\tgzdOpen(\"%s\", \"%s\") fd %p %s\n", path, fmode, (fd ?
|
|||
return fdLink(fd, "gzdOpen");
|
||||
}
|
||||
|
||||
static /*@null@*/ FD_t gzdFdopen(void * cookie, const char *fmode) {
|
||||
static /*@null@*/ FD_t gzdFdopen(void * cookie, const char *fmode)
|
||||
/*@modifies internalState, fileSystem @*/
|
||||
{
|
||||
FD_t fd = c2f(cookie);
|
||||
int fdno;
|
||||
gzFile *gzfile;
|
||||
|
@ -1949,12 +2007,17 @@ static /*@null@*/ FD_t gzdFdopen(void * cookie, const char *fmode) {
|
|||
return fdLink(fd, "gzdFdopen");
|
||||
}
|
||||
|
||||
static int gzdFlush(FD_t fd) {
|
||||
static int gzdFlush(FD_t fd)
|
||||
/*@modifies fileSystem @*/
|
||||
{
|
||||
return gzflush(gzdFileno(fd), Z_SYNC_FLUSH); /* XXX W2DO? */
|
||||
}
|
||||
|
||||
/* =============================================================== */
|
||||
static ssize_t gzdRead(void * cookie, /*@out@*/ char * buf, size_t count) {
|
||||
/*@-mustmod@*/ /* LCL: *buf is modified */
|
||||
static ssize_t gzdRead(void * cookie, /*@out@*/ char * buf, size_t count)
|
||||
/*@modifies internalState, *buf, fileSystem @*/
|
||||
{
|
||||
FD_t fd = c2f(cookie);
|
||||
gzFile *gzfile;
|
||||
ssize_t rc;
|
||||
|
@ -1981,8 +2044,11 @@ DBGIO(fd, (stderr, "==>\tgzdRead(%p,%p,%u) rc %lx %s\n", cookie, buf, (unsigned)
|
|||
}
|
||||
return rc;
|
||||
}
|
||||
/*@=mustmod@*/
|
||||
|
||||
static ssize_t gzdWrite(void * cookie, const char * buf, size_t count) {
|
||||
static ssize_t gzdWrite(void * cookie, const char * buf, size_t count)
|
||||
/*@modifies internalState, fileSystem @*/
|
||||
{
|
||||
FD_t fd = c2f(cookie);
|
||||
gzFile *gzfile;
|
||||
ssize_t rc;
|
||||
|
@ -2009,7 +2075,9 @@ DBGIO(fd, (stderr, "==>\tgzdWrite(%p,%p,%u) rc %lx %s\n", cookie, buf, (unsigned
|
|||
}
|
||||
|
||||
/* XXX zlib-1.0.4 has not */
|
||||
static inline int gzdSeek(void * cookie, _libio_pos_t pos, int whence) {
|
||||
static inline int gzdSeek(void * cookie, _libio_pos_t pos, int whence)
|
||||
/*@modifies internalState, fileSystem @*/
|
||||
{
|
||||
#ifdef USE_COOKIE_SEEK_POINTER
|
||||
_IO_off64_t p = *pos;
|
||||
#else
|
||||
|
@ -2042,7 +2110,9 @@ DBGIO(fd, (stderr, "==>\tgzdSeek(%p,%ld,%d) rc %lx %s\n", cookie, (long)p, whenc
|
|||
return rc;
|
||||
}
|
||||
|
||||
static int gzdClose( /*@only@*/ void * cookie) {
|
||||
static int gzdClose( /*@only@*/ void * cookie)
|
||||
/*@modifies internalState, fileSystem @*/
|
||||
{
|
||||
FD_t fd = c2f(cookie);
|
||||
gzFile *gzfile;
|
||||
int rc;
|
||||
|
@ -2101,7 +2171,9 @@ FDIO_t gzdio = /*@-compmempass@*/ &gzdio_s /*@=compmempass@*/ ;
|
|||
# define bzwrite BZ2_bzwrite
|
||||
#endif /* HAVE_BZ2_1_0 */
|
||||
|
||||
static inline /*@dependent@*/ void * bzdFileno(FD_t fd) {
|
||||
static inline /*@dependent@*/ void * bzdFileno(FD_t fd)
|
||||
/*@*/
|
||||
{
|
||||
void * rc = NULL;
|
||||
int i;
|
||||
|
||||
|
@ -2117,7 +2189,9 @@ static inline /*@dependent@*/ void * bzdFileno(FD_t fd) {
|
|||
return rc;
|
||||
}
|
||||
|
||||
static /*@null@*/ FD_t bzdOpen(const char *path, const char *mode) {
|
||||
static /*@null@*/ FD_t bzdOpen(const char * path, const char * mode)
|
||||
/*@modifies fileSystem @*/
|
||||
{
|
||||
FD_t fd;
|
||||
BZFILE *bzfile;;
|
||||
if ((bzfile = bzopen(path, mode)) == NULL)
|
||||
|
@ -2127,7 +2201,9 @@ static /*@null@*/ FD_t bzdOpen(const char *path, const char *mode) {
|
|||
return fdLink(fd, "bzdOpen");
|
||||
}
|
||||
|
||||
static /*@null@*/ FD_t bzdFdopen(void * cookie, const char * fmode) {
|
||||
static /*@null@*/ FD_t bzdFdopen(void * cookie, const char * fmode)
|
||||
/*@modifies internalState, fileSystem @*/
|
||||
{
|
||||
FD_t fd = c2f(cookie);
|
||||
int fdno;
|
||||
BZFILE *bzfile;
|
||||
|
@ -2144,12 +2220,17 @@ static /*@null@*/ FD_t bzdFdopen(void * cookie, const char * fmode) {
|
|||
return fdLink(fd, "bzdFdopen");
|
||||
}
|
||||
|
||||
static int bzdFlush(FD_t fd) {
|
||||
static int bzdFlush(FD_t fd)
|
||||
/*@modifies fileSystem @*/
|
||||
{
|
||||
return bzflush(bzdFileno(fd));
|
||||
}
|
||||
|
||||
/* =============================================================== */
|
||||
static ssize_t bzdRead(void * cookie, /*@out@*/ char * buf, size_t count) {
|
||||
/*@-mustmod@*/ /* LCL: *buf is modified */
|
||||
static ssize_t bzdRead(void * cookie, /*@out@*/ char * buf, size_t count)
|
||||
/*@modifies internalState, *buf, fileSystem @*/
|
||||
{
|
||||
FD_t fd = c2f(cookie);
|
||||
BZFILE *bzfile;
|
||||
ssize_t rc = 0;
|
||||
|
@ -2173,8 +2254,11 @@ static ssize_t bzdRead(void * cookie, /*@out@*/ char * buf, size_t count) {
|
|||
}
|
||||
return rc;
|
||||
}
|
||||
/*@=mustmod@*/
|
||||
|
||||
static ssize_t bzdWrite(void * cookie, const char * buf, size_t count) {
|
||||
static ssize_t bzdWrite(void * cookie, const char * buf, size_t count)
|
||||
/*@modifies internalState, fileSystem @*/
|
||||
{
|
||||
FD_t fd = c2f(cookie);
|
||||
BZFILE *bzfile;
|
||||
ssize_t rc;
|
||||
|
@ -2196,14 +2280,18 @@ static ssize_t bzdWrite(void * cookie, const char * buf, size_t count) {
|
|||
}
|
||||
|
||||
static inline int bzdSeek(void * cookie, /*@unused@*/ _libio_pos_t pos,
|
||||
/*@unused@*/ int whence) {
|
||||
/*@unused@*/ int whence)
|
||||
/*@*/
|
||||
{
|
||||
FD_t fd = c2f(cookie);
|
||||
|
||||
BZDONLY(fd);
|
||||
return -2;
|
||||
}
|
||||
|
||||
static int bzdClose( /*@only@*/ void * cookie) {
|
||||
static int bzdClose( /*@only@*/ void * cookie)
|
||||
/*@modifies internalState, fileSystem @*/
|
||||
{
|
||||
FD_t fd = c2f(cookie);
|
||||
BZFILE *bzfile;
|
||||
int rc;
|
||||
|
@ -2243,7 +2331,9 @@ FDIO_t bzdio = /*@-compmempass@*/ &bzdio_s /*@=compmempass@*/ ;
|
|||
#endif /* HAVE_BZLIB_H */
|
||||
|
||||
/* =============================================================== */
|
||||
/*@observer@*/ static const char * getFdErrstr (FD_t fd) {
|
||||
/*@observer@*/ static const char * getFdErrstr (FD_t fd)
|
||||
/*@*/
|
||||
{
|
||||
const char *errstr = NULL;
|
||||
|
||||
#ifdef HAVE_ZLIB_H
|
||||
|
@ -2267,7 +2357,8 @@ FDIO_t bzdio = /*@-compmempass@*/ &bzdio_s /*@=compmempass@*/ ;
|
|||
|
||||
/* =============================================================== */
|
||||
|
||||
const char *Fstrerror(FD_t fd) {
|
||||
const char *Fstrerror(FD_t fd)
|
||||
{
|
||||
if (fd == NULL)
|
||||
return strerror(errno);
|
||||
FDSANE(fd);
|
||||
|
@ -2302,7 +2393,8 @@ DBGIO(fd, (stderr, "==> Fread(%p,%u,%u,%p) %s\n", buf, (unsigned)size, (unsigned
|
|||
return rc;
|
||||
}
|
||||
|
||||
size_t Fwrite(const void *buf, size_t size, size_t nmemb, FD_t fd) {
|
||||
size_t Fwrite(const void *buf, size_t size, size_t nmemb, FD_t fd)
|
||||
{
|
||||
fdio_write_function_t *_write;
|
||||
int rc;
|
||||
|
||||
|
@ -2356,7 +2448,8 @@ DBGIO(fd, (stderr, "==> Fseek(%p,%ld,%d) %s\n", fd, (long)offset, whence, fdbg(f
|
|||
return rc;
|
||||
}
|
||||
|
||||
int Fclose(FD_t fd) {
|
||||
int Fclose(FD_t fd)
|
||||
{
|
||||
int rc = 0, ec = 0;
|
||||
|
||||
FDSANE(fd);
|
||||
|
@ -2436,6 +2529,7 @@ static inline void cvtfmode (const char *m,
|
|||
/*@out@*/ char *stdio, size_t nstdio,
|
||||
/*@out@*/ char *other, size_t nother,
|
||||
/*@out@*/ const char **end, /*@out@*/ int * f)
|
||||
/*@modifies *stdio, *other, *end, *f @*/
|
||||
{
|
||||
int flags = 0;
|
||||
char c;
|
||||
|
@ -2519,7 +2613,7 @@ fprintf(stderr, "*** Fdopen(%p,%s) %s\n", fd, fmode, fdbg(fd));
|
|||
strncat(zstdio, other, sizeof(zstdio) - strlen(zstdio));
|
||||
|
||||
if (end == NULL && other[0] == '\0')
|
||||
/*@-refcounttrans@*/ return fd; /*@=refcounttrans@*/
|
||||
/*@-refcounttrans -retalias@*/ return fd; /*@=refcounttrans =retalias@*/
|
||||
|
||||
if (end && *end) {
|
||||
if (!strcmp(end, "fdio")) {
|
||||
|
@ -2557,14 +2651,14 @@ fprintf(stderr, "*** Fdopen fpio fp %p\n", (void *)fp);
|
|||
}
|
||||
} else if (other[0] != '\0') {
|
||||
for (end = other; *end && strchr("0123456789fh", *end); end++)
|
||||
;
|
||||
{};
|
||||
if (*end == '\0') {
|
||||
iof = gzdio;
|
||||
fd = gzdFdopen(fd, zstdio);
|
||||
}
|
||||
}
|
||||
if (iof == NULL)
|
||||
/*@-refcounttrans@*/ return fd; /*@=refcounttrans@*/
|
||||
/*@-refcounttrans -retalias@*/ return fd; /*@=refcounttrans =retalias@*/
|
||||
|
||||
if (!noLibio) {
|
||||
FILE * fp = NULL;
|
||||
|
@ -2592,7 +2686,7 @@ DBGIO(fd, (stderr, "==> fopencookie(%p,\"%s\",*%p) returns fp %p\n", fd, stdio,
|
|||
}
|
||||
|
||||
DBGIO(fd, (stderr, "==> Fdopen(%p,\"%s\") returns fd %p %s\n", ofd, fmode, (fd ? fd : NULL), fdbg(fd)));
|
||||
/*@-refcounttrans@*/ return fd; /*@=refcounttrans@*/
|
||||
/*@-refcounttrans -retalias@*/ return fd; /*@=refcounttrans =retalias@*/
|
||||
}
|
||||
|
||||
FD_t Fopen(const char *path, const char *fmode)
|
||||
|
@ -2688,7 +2782,8 @@ int Fflush(FD_t fd)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int Ferror(FD_t fd) {
|
||||
int Ferror(FD_t fd)
|
||||
{
|
||||
int i, rc = 0;
|
||||
|
||||
if (fd == NULL) return -1;
|
||||
|
@ -2718,7 +2813,8 @@ DBGIO(fd, (stderr, "==> Ferror(%p) rc %d %s\n", fd, rc, fdbg(fd)));
|
|||
return rc;
|
||||
}
|
||||
|
||||
int Fileno(FD_t fd) {
|
||||
int Fileno(FD_t fd)
|
||||
{
|
||||
int i, rc = -1;
|
||||
|
||||
for (i = fd->nfps ; rc == -1 && i >= 0; i--) {
|
||||
|
@ -2729,7 +2825,8 @@ DBGIO(fd, (stderr, "==> Fileno(%p) rc %d %s\n", (fd ? fd : NULL), rc, fdbg(fd)))
|
|||
}
|
||||
|
||||
/* XXX this is naive */
|
||||
int Fcntl(FD_t fd, int op, void *lip) {
|
||||
int Fcntl(FD_t fd, int op, void *lip)
|
||||
{
|
||||
return fcntl(Fileno(fd), op, lip);
|
||||
}
|
||||
|
||||
|
@ -2738,13 +2835,15 @@ int Fcntl(FD_t fd, int op, void *lip) {
|
|||
*/
|
||||
|
||||
/* XXX falloc.c: analogues to pread(3)/pwrite(3). */
|
||||
ssize_t Pread(FD_t fd, void * buf, size_t count, _libio_off_t offset) {
|
||||
ssize_t Pread(FD_t fd, void * buf, size_t count, _libio_off_t offset)
|
||||
{
|
||||
if (Fseek(fd, offset, SEEK_SET) < 0)
|
||||
return -1;
|
||||
return Fread(buf, sizeof(char), count, fd);
|
||||
}
|
||||
|
||||
ssize_t Pwrite(FD_t fd, const void * buf, size_t count, _libio_off_t offset) {
|
||||
ssize_t Pwrite(FD_t fd, const void * buf, size_t count, _libio_off_t offset)
|
||||
{
|
||||
if (Fseek(fd, offset, SEEK_SET) < 0)
|
||||
return -1;
|
||||
return Fwrite(buf, sizeof(char), count, fd);
|
||||
|
|
|
@ -309,13 +309,13 @@ int Access(const char * path, int amode)
|
|||
int Glob(const char * pattern, int flags,
|
||||
int errfunc(const char * epath, int eerrno),
|
||||
/*@out@*/ glob_t * pglob)
|
||||
/*@modifies *pglob @*/;
|
||||
/*@modifies *pglob, fileSystem @*/;
|
||||
|
||||
/** \ingroup rpmrpc
|
||||
* globfree(3) clone.
|
||||
*/
|
||||
void Globfree( /*@only@*/ glob_t * pglob)
|
||||
/*@modifies *pglob @*/;
|
||||
/*@modifies *pglob, fileSystem @*/;
|
||||
|
||||
|
||||
/** \ingroup rpmrpc
|
||||
|
@ -435,7 +435,8 @@ typedef enum ftperrCode_e {
|
|||
/** \ingroup rpmio
|
||||
*/
|
||||
/*@unused@*/
|
||||
/*@dependent@*/ /*@null@*/ void * ufdGetUrlinfo(FD_t fd) /*@*/;
|
||||
/*@dependent@*/ /*@null@*/ void * ufdGetUrlinfo(FD_t fd)
|
||||
/*@modifies fd @*/;
|
||||
|
||||
/** \ingroup rpmio
|
||||
*/
|
||||
|
|
|
@ -142,14 +142,19 @@ extern int _rpmio_debug;
|
|||
extern "C" {
|
||||
#endif
|
||||
|
||||
int fdFgets(FD_t fd, char * buf, size_t len);
|
||||
int fdFgets(FD_t fd, char * buf, size_t len)
|
||||
/*@modifies *buf, fd, fileSystem @*/;
|
||||
|
||||
/*@null@*/ FD_t ftpOpen(const char *url, /*@unused@*/ int flags,
|
||||
/*@unused@*/ mode_t mode, /*@out@*/ urlinfo *uret);
|
||||
int ftpReq(FD_t data, const char * ftpCmd, const char * ftpArg);
|
||||
int ftpCmd(const char * cmd, const char * url, const char * arg2);
|
||||
/*@unused@*/ mode_t mode, /*@out@*/ urlinfo *uret)
|
||||
/*@modifies *uret, fileSystem @*/;
|
||||
int ftpReq(FD_t data, const char * ftpCmd, const char * ftpArg)
|
||||
/*@modifies data, fileSystem @*/;
|
||||
int ftpCmd(const char * cmd, const char * url, const char * arg2)
|
||||
/*@modifies fileSystem @*/;
|
||||
|
||||
int ufdClose( /*@only@*/ void * cookie);
|
||||
int ufdClose( /*@only@*/ void * cookie)
|
||||
/*@modified cookie, fileSystem @*/;
|
||||
|
||||
/** \ingroup rpmio
|
||||
*/
|
||||
|
@ -168,7 +173,9 @@ void fdSetIo(FD_t fd, /*@kept@*/ /*@null@*/ FDIO_t io)
|
|||
/*@modifies fd @*/
|
||||
{
|
||||
FDSANE(fd);
|
||||
/*@-assignexpose@*/
|
||||
fd->fps[fd->nfps].io = io;
|
||||
/*@=assignexpose@*/
|
||||
}
|
||||
|
||||
/** \ingroup rpmio
|
||||
|
@ -178,9 +185,9 @@ void fdSetIo(FD_t fd, /*@kept@*/ /*@null@*/ FDIO_t io)
|
|||
/*@*/
|
||||
{
|
||||
FDSANE(fd);
|
||||
/*@+voidabstract@*/
|
||||
/*@+voidabstract -retexpose@*/
|
||||
return ((FILE *)fd->fps[fd->nfps].fp);
|
||||
/*@=voidabstract@*/
|
||||
/*@=voidabstract =retexpose@*/
|
||||
}
|
||||
|
||||
/** \ingroup rpmio
|
||||
|
@ -190,7 +197,9 @@ void fdSetIo(FD_t fd, /*@kept@*/ /*@null@*/ FDIO_t io)
|
|||
/*@*/
|
||||
{
|
||||
FDSANE(fd);
|
||||
/*@-retexpose@*/
|
||||
return fd->fps[fd->nfps].fp;
|
||||
/*@=retexpose@*/
|
||||
}
|
||||
|
||||
/** \ingroup rpmio
|
||||
|
@ -200,7 +209,9 @@ void fdSetFp(FD_t fd, /*@kept@*/ /*@null@*/ void * fp)
|
|||
/*@modifies fd @*/
|
||||
{
|
||||
FDSANE(fd);
|
||||
/*@-assignexpose@*/
|
||||
fd->fps[fd->nfps].fp = fp;
|
||||
/*@=assignexpose@*/
|
||||
}
|
||||
|
||||
/** \ingroup rpmio
|
||||
|
@ -316,7 +327,7 @@ void fdstat_exit(/*@null@*/ FD_t fd, int opx, ssize_t rc)
|
|||
*/
|
||||
/*@unused@*/ static inline
|
||||
void fdstat_print(/*@null@*/ FD_t fd, const char * msg, FILE * fp)
|
||||
/*@modifies *fp @*/
|
||||
/*@modifies *fp, fileSystem @*/
|
||||
{
|
||||
int opx;
|
||||
if (fd == NULL || fd->stats == NULL) return;
|
||||
|
@ -352,7 +363,9 @@ void fdSetSyserrno(FD_t fd, int syserrno, /*@kept@*/ const void * errcookie)
|
|||
{
|
||||
FDSANE(fd);
|
||||
fd->syserrno = syserrno;
|
||||
/*@-assignexpose@*/
|
||||
fd->errcookie = errcookie;
|
||||
/*@=assignexpose@*/
|
||||
}
|
||||
|
||||
/** \ingroup rpmio
|
||||
|
@ -391,9 +404,11 @@ void fdSetCpioPos(FD_t fd, long int cpioPos)
|
|||
FD_t c2f(/*@null@*/ void * cookie)
|
||||
/*@*/
|
||||
{
|
||||
/*@-castexpose@*/
|
||||
FD_t fd = (FD_t) cookie;
|
||||
/*@=castexpose@*/
|
||||
FDSANE(fd);
|
||||
/*@-refcounttrans@*/ return fd; /*@=refcounttrans@*/
|
||||
/*@-refcounttrans -retalias@*/ return fd; /*@=refcounttrans =retalias@*/
|
||||
}
|
||||
|
||||
/** \ingroup rpmio
|
||||
|
|
|
@ -51,6 +51,7 @@ void rpmlogPrint(FILE *f)
|
|||
if (f == NULL)
|
||||
f = stderr;
|
||||
|
||||
if (recs)
|
||||
for (i = 0; i < nrecs; i++) {
|
||||
rpmlogRec rec = recs + i;
|
||||
if (rec->message && *rec->message)
|
||||
|
@ -62,6 +63,7 @@ void rpmlogClose (void)
|
|||
{
|
||||
int i;
|
||||
|
||||
if (recs)
|
||||
for (i = 0; i < nrecs; i++) {
|
||||
rpmlogRec rec = recs + i;
|
||||
rec->message = _free(rec->message);
|
||||
|
@ -95,7 +97,8 @@ rpmlogCallback rpmlogSetCallback(rpmlogCallback cb)
|
|||
return ocb;
|
||||
}
|
||||
|
||||
static char *rpmlogMsgPrefix[] = {
|
||||
/*@-readonlytrans@*/ /* FIX: double indeirection. */
|
||||
/*@observer@*/ static char *rpmlogMsgPrefix[] = {
|
||||
N_("fatal error: "),/*!< RPMLOG_EMERG */
|
||||
N_("fatal error: "),/*!< RPMLOG_ALERT */
|
||||
N_("fatal error: "),/*!< RPMLOG_CRIT */
|
||||
|
@ -105,6 +108,7 @@ static char *rpmlogMsgPrefix[] = {
|
|||
"", /*!< RPMLOG_INFO */
|
||||
"D: ", /*!< RPMLOG_DEBUG */
|
||||
};
|
||||
/*@=readonlytrans@*/
|
||||
|
||||
#if !defined(HAVE_VSNPRINTF)
|
||||
static inline int vsnprintf(char * buf, /*@unused@*/ int nb,
|
||||
|
@ -115,6 +119,7 @@ static inline int vsnprintf(char * buf, /*@unused@*/ int nb,
|
|||
#endif
|
||||
|
||||
static void vrpmlog (unsigned code, const char *fmt, va_list ap)
|
||||
/*@modifies internalState @*/
|
||||
{
|
||||
int pri = RPMLOG_PRI(code);
|
||||
int mask = RPMLOG_MASK(pri);
|
||||
|
|
|
@ -16,7 +16,9 @@ extern int _rpmio_debug;
|
|||
/*@=redecl@*/
|
||||
|
||||
/* =============================================================== */
|
||||
static int ftpMkdir(const char * path, /*@unused@*/ mode_t mode) {
|
||||
static int ftpMkdir(const char * path, /*@unused@*/ mode_t mode)
|
||||
/*@modifies fileSystem @*/
|
||||
{
|
||||
int rc;
|
||||
if ((rc = ftpCmd("MKD", path, NULL)) != 0)
|
||||
return rc;
|
||||
|
@ -29,28 +31,37 @@ static int ftpMkdir(const char * path, /*@unused@*/ mode_t mode) {
|
|||
return rc;
|
||||
}
|
||||
|
||||
static int ftpChdir(const char * path) {
|
||||
static int ftpChdir(const char * path)
|
||||
/*@modifies fileSystem @*/
|
||||
{
|
||||
return ftpCmd("CWD", path, NULL);
|
||||
}
|
||||
|
||||
static int ftpRmdir(const char * path) {
|
||||
static int ftpRmdir(const char * path)
|
||||
/*@modifies fileSystem @*/
|
||||
{
|
||||
return ftpCmd("RMD", path, NULL);
|
||||
}
|
||||
|
||||
static int ftpRename(const char * oldpath, const char * newpath) {
|
||||
static int ftpRename(const char * oldpath, const char * newpath)
|
||||
/*@modifies fileSystem @*/
|
||||
{
|
||||
int rc;
|
||||
if ((rc = ftpCmd("RNFR", oldpath, NULL)) != 0)
|
||||
return rc;
|
||||
return ftpCmd("RNTO", newpath, NULL);
|
||||
}
|
||||
|
||||
static int ftpUnlink(const char * path) {
|
||||
static int ftpUnlink(const char * path)
|
||||
/*@modifies fileSystem @*/
|
||||
{
|
||||
return ftpCmd("DELE", path, NULL);
|
||||
}
|
||||
|
||||
/* =============================================================== */
|
||||
/* XXX rebuilddb.c: analogues to mkdir(2)/rmdir(2). */
|
||||
int Mkdir (const char *path, mode_t mode) {
|
||||
int Mkdir (const char * path, mode_t mode)
|
||||
{
|
||||
const char * lpath;
|
||||
int ut = urlPath(path, &lpath);
|
||||
|
||||
|
@ -72,7 +83,8 @@ int Mkdir (const char *path, mode_t mode) {
|
|||
return mkdir(path, mode);
|
||||
}
|
||||
|
||||
int Chdir (const char *path) {
|
||||
int Chdir (const char * path)
|
||||
{
|
||||
const char * lpath;
|
||||
int ut = urlPath(path, &lpath);
|
||||
|
||||
|
@ -94,7 +106,8 @@ int Chdir (const char *path) {
|
|||
return chdir(path);
|
||||
}
|
||||
|
||||
int Rmdir (const char *path) {
|
||||
int Rmdir (const char * path)
|
||||
{
|
||||
const char * lpath;
|
||||
int ut = urlPath(path, &lpath);
|
||||
|
||||
|
@ -118,7 +131,8 @@ int Rmdir (const char *path) {
|
|||
|
||||
/* XXX rpmdb.c: analogue to rename(2). */
|
||||
|
||||
int Rename (const char *oldpath, const char * newpath) {
|
||||
int Rename (const char * oldpath, const char * newpath)
|
||||
{
|
||||
const char *oe = NULL;
|
||||
const char *ne = NULL;
|
||||
int oldut, newut;
|
||||
|
@ -164,7 +178,8 @@ fprintf(stderr, "*** rename old %*s new %*s\n", (int)(oe - oldpath), oldpath, (i
|
|||
return rename(oldpath, newpath);
|
||||
}
|
||||
|
||||
int Link (const char *oldpath, const char * newpath) {
|
||||
int Link (const char * oldpath, const char * newpath)
|
||||
{
|
||||
const char *oe = NULL;
|
||||
const char *ne = NULL;
|
||||
int oldut, newut;
|
||||
|
@ -249,6 +264,7 @@ static int column_ptr [MAXCOLS]; /* Index from 0 to the starting positions of
|
|||
|
||||
static int
|
||||
vfs_split_text (char *p)
|
||||
/*@modifies *p, columns, column_ptr @*/
|
||||
{
|
||||
char *original = p;
|
||||
int numcols;
|
||||
|
@ -269,6 +285,7 @@ vfs_split_text (char *p)
|
|||
|
||||
static int
|
||||
is_num (int idx)
|
||||
/*@*/
|
||||
{
|
||||
if (!columns [idx] || columns [idx][0] < '0' || columns [idx][0] > '9')
|
||||
return 0;
|
||||
|
@ -277,6 +294,7 @@ is_num (int idx)
|
|||
|
||||
static int
|
||||
is_dos_date(/*@null@*/ const char *str)
|
||||
/*@*/
|
||||
{
|
||||
if (str != NULL && strlen(str) == 8 &&
|
||||
str[2] == str[5] && strchr("\\-/", (int)str[2]) != NULL)
|
||||
|
@ -286,6 +304,7 @@ is_dos_date(/*@null@*/ const char *str)
|
|||
|
||||
static int
|
||||
is_week (/*@null@*/ const char * str, /*@out@*/ struct tm * tim)
|
||||
/*@modifies *tim @*/
|
||||
{
|
||||
/*@observer@*/ static const char * week = "SunMonTueWedThuFriSat";
|
||||
const char * pos;
|
||||
|
@ -302,6 +321,7 @@ is_week (/*@null@*/ const char * str, /*@out@*/ struct tm * tim)
|
|||
|
||||
static int
|
||||
is_month (/*@null@*/ const char * str, /*@out@*/ struct tm * tim)
|
||||
/*@modifies *tim @*/
|
||||
{
|
||||
/*@observer@*/ static const char * month = "JanFebMarAprMayJunJulAugSepOctNovDec";
|
||||
const char * pos;
|
||||
|
@ -318,6 +338,7 @@ is_month (/*@null@*/ const char * str, /*@out@*/ struct tm * tim)
|
|||
|
||||
static int
|
||||
is_time (/*@null@*/ const char * str, /*@out@*/ struct tm * tim)
|
||||
/*@modifies *tim @*/
|
||||
{
|
||||
const char * p, * p2;
|
||||
|
||||
|
@ -336,6 +357,7 @@ is_time (/*@null@*/ const char * str, /*@out@*/ struct tm * tim)
|
|||
}
|
||||
|
||||
static int is_year(/*@null@*/ const char * str, /*@out@*/ struct tm * tim)
|
||||
/*@modifies *tim @*/
|
||||
{
|
||||
long year;
|
||||
|
||||
|
@ -367,6 +389,7 @@ static int is_year(/*@null@*/ const char * str, /*@out@*/ struct tm * tim)
|
|||
|
||||
static int
|
||||
vfs_parse_filetype (char c)
|
||||
/*@*/
|
||||
{
|
||||
switch (c) {
|
||||
case 'd': return S_IFDIR;
|
||||
|
@ -385,6 +408,7 @@ vfs_parse_filetype (char c)
|
|||
}
|
||||
|
||||
static int vfs_parse_filemode (const char *p)
|
||||
/*@*/
|
||||
{ /* converts rw-rw-rw- into 0666 */
|
||||
int res = 0;
|
||||
switch (*(p++)) {
|
||||
|
@ -443,6 +467,7 @@ static int vfs_parse_filemode (const char *p)
|
|||
}
|
||||
|
||||
static int vfs_parse_filedate(int idx, time_t *t)
|
||||
/*@modifies *t @*/
|
||||
{ /* This thing parses from idx in columns[] array */
|
||||
|
||||
char *p;
|
||||
|
@ -551,6 +576,7 @@ static int
|
|||
vfs_parse_ls_lga (char * p, /*@out@*/ struct stat * st,
|
||||
/*@out@*/ const char ** filename,
|
||||
/*@out@*/ const char ** linkname)
|
||||
/*@modifies *st, *filename, *linkname @*/
|
||||
{
|
||||
int idx, idx2, num_cols;
|
||||
int i;
|
||||
|
@ -764,6 +790,7 @@ static /*@only@*/ char * ftpBuf = NULL;
|
|||
|
||||
static int ftpNLST(const char * url, ftpSysCall_t ftpSysCall,
|
||||
/*@out@*/ struct stat * st, char * rlbuf, size_t rlbufsiz)
|
||||
/*@modifies *st, *rlbuf, fileSystem @*/
|
||||
{
|
||||
FD_t fd;
|
||||
const char * path;
|
||||
|
@ -858,7 +885,8 @@ static int ftpNLST(const char * url, ftpSysCall_t ftpSysCall,
|
|||
|
||||
while (*se && *se != '\n') se++;
|
||||
if (se > s && se[-1] == '\r') se[-1] = '\0';
|
||||
if (*se == '\0') break;
|
||||
if (*se == '\0')
|
||||
/*@innerbreak@*/ break;
|
||||
*se++ = '\0';
|
||||
|
||||
if (!strncmp(s, "total ", sizeof("total ")-1)) continue;
|
||||
|
@ -871,25 +899,28 @@ static int ftpNLST(const char * url, ftpSysCall_t ftpSysCall,
|
|||
break;
|
||||
case ' ':
|
||||
if (o || !(n[-3] == ' ' && n[-2] == '-' && n[-1] == '>')) {
|
||||
while (*(++n) == ' ');
|
||||
while (*(++n) == ' ')
|
||||
{};
|
||||
bingo++;
|
||||
break;
|
||||
}
|
||||
for (o = n + 1; *o == ' '; o++);
|
||||
for (o = n + 1; *o == ' '; o++)
|
||||
{};
|
||||
n -= 3;
|
||||
ne = n;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if (bingo) break;
|
||||
if (bingo)
|
||||
/*@innerbreak@*/ break;
|
||||
}
|
||||
|
||||
if (nbn != (ne - n)) continue; /* Same name length? */
|
||||
if (strncmp(n, bn, nbn)) continue; /* Same name? */
|
||||
|
||||
moretodo = 0;
|
||||
break;
|
||||
/*@innerbreak@*/ break;
|
||||
}
|
||||
|
||||
if (moretodo && se > s) {
|
||||
|
@ -940,11 +971,14 @@ exit:
|
|||
}
|
||||
|
||||
static int ftpStat(const char * path, /*@out@*/ struct stat *st)
|
||||
/*@modifies *st @*/
|
||||
{
|
||||
return ftpNLST(path, DO_FTP_STAT, st, NULL, 0);
|
||||
}
|
||||
|
||||
static int ftpLstat(const char * path, /*@out@*/ struct stat *st) {
|
||||
static int ftpLstat(const char * path, /*@out@*/ struct stat *st)
|
||||
/*@modifies *st @*/
|
||||
{
|
||||
int rc;
|
||||
rc = ftpNLST(path, DO_FTP_LSTAT, st, NULL, 0);
|
||||
if (_rpmio_debug)
|
||||
|
@ -952,13 +986,16 @@ fprintf(stderr, "*** ftpLstat(%s) rc %d\n", path, rc);
|
|||
return rc;
|
||||
}
|
||||
|
||||
static int ftpReadlink(const char * path, char * buf, size_t bufsiz) {
|
||||
static int ftpReadlink(const char * path, char * buf, size_t bufsiz)
|
||||
/*@modifies *buf @*/
|
||||
{
|
||||
return ftpNLST(path, DO_FTP_READLINK, NULL, buf, bufsiz);
|
||||
}
|
||||
|
||||
static int ftpGlob(const char * path, int flags,
|
||||
int errfunc(const char * epath, int eerno),
|
||||
/*@out@*/ glob_t * pglob)
|
||||
/*@modifies *pglob, fileSystem @*/
|
||||
{
|
||||
int rc;
|
||||
|
||||
|
@ -976,7 +1013,9 @@ fprintf(stderr, "*** ftpGlob(%s,0x%x,%p,%p) ftpNLST rc %d\n", path, (unsigned)fl
|
|||
return rc;
|
||||
}
|
||||
|
||||
static void ftpGlobfree(glob_t * pglob) {
|
||||
static void ftpGlobfree(glob_t * pglob)
|
||||
/*@modifies *pglob @*/
|
||||
{
|
||||
if (_rpmio_debug)
|
||||
fprintf(stderr, "*** ftpGlobfree(%p)\n", pglob);
|
||||
if (pglob->gl_offs == -1) { /* XXX HACK HACK HACK */
|
||||
|
@ -985,7 +1024,8 @@ fprintf(stderr, "*** ftpGlobfree(%p)\n", pglob);
|
|||
}
|
||||
}
|
||||
|
||||
int Stat(const char * path, struct stat * st) {
|
||||
int Stat(const char * path, struct stat * st)
|
||||
{
|
||||
const char * lpath;
|
||||
int ut = urlPath(path, &lpath);
|
||||
|
||||
|
@ -1009,7 +1049,8 @@ fprintf(stderr, "*** Stat(%s,%p)\n", path, st);
|
|||
return stat(path, st);
|
||||
}
|
||||
|
||||
int Lstat(const char * path, struct stat * st) {
|
||||
int Lstat(const char * path, struct stat * st)
|
||||
{
|
||||
const char * lpath;
|
||||
int ut = urlPath(path, &lpath);
|
||||
|
||||
|
@ -1033,7 +1074,8 @@ fprintf(stderr, "*** Lstat(%s,%p)\n", path, st);
|
|||
return lstat(path, st);
|
||||
}
|
||||
|
||||
int Readlink(const char * path, char * buf, size_t bufsiz) {
|
||||
int Readlink(const char * path, char * buf, size_t bufsiz)
|
||||
{
|
||||
const char * lpath;
|
||||
int ut = urlPath(path, &lpath);
|
||||
|
||||
|
@ -1055,7 +1097,8 @@ int Readlink(const char * path, char * buf, size_t bufsiz) {
|
|||
return readlink(path, buf, bufsiz);
|
||||
}
|
||||
|
||||
int Access(const char * path, int amode) {
|
||||
int Access(const char * path, int amode)
|
||||
{
|
||||
const char * lpath;
|
||||
int ut = urlPath(path, &lpath);
|
||||
|
||||
|
|
|
@ -58,8 +58,8 @@ extern int url_iobuf_size;
|
|||
* @param msg debugging identifier (unused)
|
||||
* @return new instance
|
||||
*/
|
||||
urlinfo urlNew(const char * msg);
|
||||
urlinfo XurlNew(const char * msg, const char * file, unsigned line);
|
||||
urlinfo urlNew(const char * msg) /*@*/;
|
||||
urlinfo XurlNew(const char * msg, const char * file, unsigned line) /*@*/;
|
||||
#define urlNew(_msg) XurlNew(_msg, __FILE__, __LINE__)
|
||||
|
||||
/**
|
||||
|
@ -68,8 +68,10 @@ urlinfo XurlNew(const char * msg, const char * file, unsigned line);
|
|||
* @param msg debugging identifier (unused)
|
||||
* @return referenced instance
|
||||
*/
|
||||
urlinfo urlLink(urlinfo u, const char * msg);
|
||||
urlinfo XurlLink(urlinfo u, const char * msg, const char * file, unsigned line);
|
||||
urlinfo urlLink(urlinfo u, const char * msg)
|
||||
/*@modifies u @*/;
|
||||
urlinfo XurlLink(urlinfo u, const char * msg, const char * file, unsigned line)
|
||||
/*@modifies u @*/;
|
||||
#define urlLink(_u, _msg) XurlLink(_u, _msg, __FILE__, __LINE__)
|
||||
|
||||
/**
|
||||
|
@ -78,21 +80,26 @@ urlinfo XurlLink(urlinfo u, const char * msg, const char * file, unsigned line);
|
|||
* @param msg debugging identifier (unused)
|
||||
* @return dereferenced instance (NULL if freed)
|
||||
*/
|
||||
urlinfo urlFree( /*@killref@*/ urlinfo u, const char * msg);
|
||||
urlinfo XurlFree( /*@killref@*/ urlinfo u, const char * msg, const char * file, unsigned line);
|
||||
urlinfo urlFree( /*@killref@*/ urlinfo u, const char * msg)
|
||||
/*@modifies u @*/;
|
||||
urlinfo XurlFree( /*@killref@*/ urlinfo u, const char * msg,
|
||||
const char * file, unsigned line)
|
||||
/*@modifies u @*/;
|
||||
#define urlFree(_u, _msg) XurlFree(_u, _msg, __FILE__, __LINE__)
|
||||
|
||||
/**
|
||||
* Free cached URL control structures.
|
||||
*/
|
||||
void urlFreeCache(void);
|
||||
void urlFreeCache(void)
|
||||
/*@modifies internalState @*/;
|
||||
|
||||
/**
|
||||
* Return type of URL.
|
||||
* @param url url string
|
||||
* @return type of url
|
||||
*/
|
||||
urltype urlIsURL(const char * url) /*@*/;
|
||||
urltype urlIsURL(const char * url)
|
||||
/*@*/;
|
||||
|
||||
/**
|
||||
* Return path component of URL.
|
||||
|
@ -118,7 +125,8 @@ int urlSplit(const char * url, /*@out@*/ urlinfo * u)
|
|||
* @param dest file name of destination
|
||||
* @return 0 on success, otherwise FTPERR_* code
|
||||
*/
|
||||
int urlGetFile(const char * url, /*@null@*/ const char * dest);
|
||||
int urlGetFile(const char * url, /*@null@*/ const char * dest)
|
||||
/*@modifies fileSystem @*/;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
22
rpmio/ugid.h
22
rpmio/ugid.h
|
@ -9,15 +9,23 @@
|
|||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* These may be called w/ a NULL argument to flush the cache -- they return
|
||||
-1 if the user can't be found */
|
||||
int unameToUid(const char * thisUname, /*@out@*/ uid_t * uid);
|
||||
int gnameToGid(const char * thisGname, /*@out@*/ gid_t * gid);
|
||||
/*
|
||||
* These may be called w/ a NULL argument to flush the cache -- they return
|
||||
* -1 if the user can't be found.
|
||||
*/
|
||||
int unameToUid(const char * thisUname, /*@out@*/ uid_t * uid)
|
||||
/*@modifies *uid @*/;
|
||||
int gnameToGid(const char * thisGname, /*@out@*/ gid_t * gid)
|
||||
/*@modifies *gid @*/;
|
||||
|
||||
/* Call w/ -1 to flush the cache, returns NULL if the user can't be found */
|
||||
/*@observer@*/ /*@null@*/ char * uidToUname(uid_t uid);
|
||||
/*
|
||||
* Call w/ -1 to flush the cache, returns NULL if the user can't be found.
|
||||
*/
|
||||
/*@observer@*/ /*@null@*/ char * uidToUname(uid_t uid)
|
||||
/*@*/;
|
||||
/*@unused@*/
|
||||
/*@observer@*/ /*@null@*/ char * gidToGname(gid_t gid);
|
||||
/*@observer@*/ /*@null@*/ char * gidToGname(gid_t gid)
|
||||
/*@*/;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
14
rpmio/url.c
14
rpmio/url.c
|
@ -56,7 +56,7 @@ urlinfo XurlLink(urlinfo u, const char *msg, const char *file, unsigned line)
|
|||
URLSANE(u);
|
||||
u->nrefs++;
|
||||
URLDBGREFS(0, (stderr, "--> url %p ++ %d %s at %s:%u\n", u, u->nrefs, msg, file, line));
|
||||
return u;
|
||||
/*@-refcounttrans@*/ return u; /*@=refcounttrans@*/
|
||||
}
|
||||
|
||||
urlinfo XurlNew(const char *msg, const char *file, unsigned line)
|
||||
|
@ -84,7 +84,7 @@ urlinfo XurlFree(urlinfo u, const char *msg, const char *file, unsigned line)
|
|||
URLSANE(u);
|
||||
URLDBGREFS(0, (stderr, "--> url %p -- %d %s at %s:%u\n", u, u->nrefs, msg, file, line));
|
||||
if (--u->nrefs > 0)
|
||||
/*@-refcounttrans@*/ return u; /*@=refcounttrans@*/
|
||||
/*@-refcounttrans -retalias@*/ return u; /*@=refcounttrans =retalias@*/
|
||||
if (u->ctrl) {
|
||||
#ifndef NOTYET
|
||||
void * fp = fdGetFp(u->ctrl);
|
||||
|
@ -159,6 +159,7 @@ void urlFreeCache(void)
|
|||
}
|
||||
|
||||
static int urlStrcmp(/*@null@*/ const char * str1, /*@null@*/ const char * str2)
|
||||
/*@*/
|
||||
{
|
||||
if (str1 && str2)
|
||||
/*@-nullpass@*/ /* LCL: 2nd arg claims to be NULL */
|
||||
|
@ -170,6 +171,7 @@ static int urlStrcmp(/*@null@*/ const char * str1, /*@null@*/ const char * str2)
|
|||
}
|
||||
|
||||
static void urlFind(/*@null@*/ /*@in@*/ /*@out@*/ urlinfo * uret, int mustAsk)
|
||||
/*@modifies *uret @*/
|
||||
{
|
||||
urlinfo u;
|
||||
int ucx;
|
||||
|
@ -305,7 +307,7 @@ static void urlFind(/*@null@*/ /*@in@*/ /*@out@*/ urlinfo *uret, int mustAsk)
|
|||
}
|
||||
|
||||
static struct urlstring {
|
||||
const char *leadin;
|
||||
/*@observer@*/ /*@null@*/ const char * leadin;
|
||||
urltype ret;
|
||||
} urlstrings[] = {
|
||||
{ "file://", URL_IS_PATH },
|
||||
|
@ -315,7 +317,8 @@ static struct urlstring {
|
|||
{ NULL, URL_IS_UNKNOWN }
|
||||
};
|
||||
|
||||
urltype urlIsURL(const char * url) {
|
||||
urltype urlIsURL(const char * url)
|
||||
{
|
||||
struct urlstring *us;
|
||||
|
||||
if (url && *url) {
|
||||
|
@ -456,7 +459,8 @@ int urlSplit(const char * url, urlinfo *uret)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int urlGetFile(const char * url, const char * dest) {
|
||||
int urlGetFile(const char * url, const char * dest)
|
||||
{
|
||||
int rc;
|
||||
FD_t sfd = NULL;
|
||||
FD_t tfd = NULL;
|
||||
|
|
41
rpmqv.c
41
rpmqv.c
|
@ -96,9 +96,9 @@ extern int _url_debug;
|
|||
extern int _noDirTokens;
|
||||
|
||||
/*@-varuse@*/
|
||||
extern const char * rpmNAME;
|
||||
/*@observer@*/ extern const char * rpmNAME;
|
||||
/*@=varuse@*/
|
||||
extern const char * rpmEVR;
|
||||
/*@observer@*/ extern const char * rpmEVR;
|
||||
/*@-varuse@*/
|
||||
extern int rpmFLAGS;
|
||||
/*@=varuse@*/
|
||||
|
@ -110,10 +110,10 @@ extern struct MacroContext_s rpmCLIMacroContext;
|
|||
|
||||
static int help = 0;
|
||||
static int noUsageMsg = 0;
|
||||
/*@null@*/ static const char * pipeOutput = NULL;
|
||||
/*@observer@*/ /*@null@*/ static const char * pipeOutput = NULL;
|
||||
static int quiet = 0;
|
||||
/*@null@*/ static const char * rcfile = NULL;
|
||||
/*@null@*/ static char * rootdir = "/";
|
||||
/*@observer@*/ /*@null@*/ static const char * rcfile = NULL;
|
||||
/*@observer@*/ /*@null@*/ static char * rootdir = "/";
|
||||
static int showrc = 0;
|
||||
static int showVersion = 0;
|
||||
|
||||
|
@ -401,21 +401,28 @@ long _stksize = 64 * 1024L;
|
|||
#endif
|
||||
|
||||
/*@exits@*/ static void argerror(const char * desc)
|
||||
/*@modifies fileSystem @*/
|
||||
{
|
||||
fprintf(stderr, _("rpm: %s\n"), desc);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
static void printVersion(void) {
|
||||
static void printVersion(void)
|
||||
/*@modifies fileSystem @*/
|
||||
{
|
||||
fprintf(stdout, _("RPM version %s\n"), rpmEVR);
|
||||
}
|
||||
|
||||
static void printBanner(void) {
|
||||
static void printBanner(void)
|
||||
/*@modifies fileSystem @*/
|
||||
{
|
||||
(void) puts(_("Copyright (C) 1998-2000 - Red Hat, Inc."));
|
||||
(void) puts(_("This program may be freely redistributed under the terms of the GNU GPL"));
|
||||
}
|
||||
|
||||
static void printUsage(void) {
|
||||
static void printUsage(void)
|
||||
/*@modifies fileSystem @*/
|
||||
{
|
||||
FILE * fp;
|
||||
printVersion();
|
||||
printBanner();
|
||||
|
@ -456,7 +463,9 @@ static void printUsage(void) {
|
|||
}
|
||||
|
||||
#ifdef DYING
|
||||
static void printHelpLine(char * prefix, char * help) {
|
||||
static void printHelpLine(char * prefix, char * help)
|
||||
/*@modifies fileSystem @*/
|
||||
{
|
||||
int indentLength = strlen(prefix) + 3;
|
||||
int lineLength = 79 - indentLength;
|
||||
int helpLength = strlen(help);
|
||||
|
@ -862,9 +871,9 @@ int main(int argc, const char ** argv)
|
|||
case 'i':
|
||||
#ifdef IAM_RPMQV
|
||||
if (bigMode == MODE_QUERY) {
|
||||
/*@-nullassign@*/
|
||||
/*@-nullassign -readonlytrans@*/
|
||||
const char * infoCommand[] = { "--info", NULL };
|
||||
/*@=nullassign@*/
|
||||
/*@=nullassign =readonlytrans@*/
|
||||
(void) poptStuffArgs(optCon, infoCommand);
|
||||
}
|
||||
#endif
|
||||
|
@ -872,9 +881,9 @@ int main(int argc, const char ** argv)
|
|||
if (bigMode == MODE_INSTALL)
|
||||
/*@-ifempty@*/ ;
|
||||
if (bigMode == MODE_UNKNOWN) {
|
||||
/*@-nullassign@*/
|
||||
/*@-nullassign -readonlytrans@*/
|
||||
const char * installCommand[] = { "--install", NULL };
|
||||
/*@=nullassign@*/
|
||||
/*@=nullassign =readonlytrans@*/
|
||||
(void) poptStuffArgs(optCon, installCommand);
|
||||
}
|
||||
#endif
|
||||
|
@ -1342,7 +1351,7 @@ int main(int argc, const char ** argv)
|
|||
|
||||
ec = rpmInstallSource("", pkg, &specFile, &cookie);
|
||||
if (ec)
|
||||
break;
|
||||
/*@loopbreak@*/ break;
|
||||
|
||||
ba->rootdir = rootdir;
|
||||
ec = build(specFile, ba, passPhrase, cookie, rcfile);
|
||||
|
@ -1352,7 +1361,7 @@ int main(int argc, const char ** argv)
|
|||
specFile = NULL;
|
||||
|
||||
if (ec)
|
||||
break;
|
||||
/*@loopbreak@*/ break;
|
||||
}
|
||||
} break;
|
||||
|
||||
|
@ -1403,7 +1412,7 @@ int main(int argc, const char ** argv)
|
|||
ba->rootdir = rootdir;
|
||||
ec = build(pkg, ba, passPhrase, NULL, rcfile);
|
||||
if (ec)
|
||||
break;
|
||||
/*@loopbreak@*/ break;
|
||||
rpmFreeMacros(NULL);
|
||||
(void) rpmReadConfigFiles(rcfile, NULL);
|
||||
}
|
||||
|
|
7
system.h
7
system.h
|
@ -43,6 +43,9 @@ typedef unsigned int u_int32_t;
|
|||
typedef unsigned short u_int16_t;
|
||||
typedef unsigned char u_int8_t;
|
||||
typedef int int32_t;
|
||||
/*@-declundef@*/
|
||||
/*@only@*/ void * alloca (size_t size) /*@modifies internalState @*/;
|
||||
/*@=declundef@*/
|
||||
#endif
|
||||
|
||||
/* Since major is a function on SVR4, we can't use `ifndef major'. */
|
||||
|
@ -102,9 +105,9 @@ extern int errno;
|
|||
#endif
|
||||
|
||||
#ifdef STDC_HEADERS
|
||||
/*@-macrounrecog -incondefs -globuse@*/ /* FIX: shrug */
|
||||
/*@-macrounrecog -incondefs -globuse -mustmod@*/ /* FIX: shrug */
|
||||
#define getopt system_getopt
|
||||
/*@=macrounrecog =incondefs =globuse@*/
|
||||
/*@=macrounrecog =incondefs =globuse =mustmod@*/
|
||||
/*@-skipansiheaders@*/
|
||||
#include <stdlib.h>
|
||||
/*@=skipansiheaders@*/
|
||||
|
|
Loading…
Reference in New Issue