summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--python/.lclintrc36
-rw-r--r--python/Makefile.am4
-rw-r--r--python/Makefile.in4
-rw-r--r--python/hash.c8
-rw-r--r--python/hash.h6
-rw-r--r--python/rpmmodule.c14
-rw-r--r--python/upgrade.c129
7 files changed, 132 insertions, 69 deletions
diff --git a/python/.lclintrc b/python/.lclintrc
new file mode 100644
index 000000000..cc7d9acbe
--- /dev/null
+++ b/python/.lclintrc
@@ -0,0 +1,36 @@
+-I. -I.. -I../lib -I../rpmdb -I../rpmio -I../popt -DHAVE_CONFIG_H -D_GNU_SOURCE
+
++partial
+
+-warnunixlib
+-warnposix
+
++unixlib
+
+# XXX ignore doxygen markings
+-unrecogcomments
+
+# don't-bother-me-yet parameters
+-branchstate # ~39
+-mustfree # ~325
+
+# not-yet normal parameters
+-boolops # ~351 w->n
+-predboolint # ~200 w->n
+-type # ~271
+
+# -weak paramaters
+#+boolint
+#-boolops
+#+ignorequals
+#+ignoresigns
+#-mustfree
+#+longintegral
+#+matchanyintegral
+#-nullpass
+#-observertrans
+#-predboolint
+#-predboolothers
+#-retvalint
+#-retvalother
+#-shiftsigned
diff --git a/python/Makefile.am b/python/Makefile.am
index a5ba09f11..997126a16 100644
--- a/python/Makefile.am
+++ b/python/Makefile.am
@@ -30,3 +30,7 @@ librpmmodule_la_SOURCES = rpmmodule.c hash.c upgrade.c
rpmmodule.so: $(librpmmodule_la_OBJECTS)
$(LINK) -o $@ $^ $(rpmmodule_so_LDFLAGS)
+
+.PHONY: lclint
+lclint:
+ lclint $(DEFS) $(INCLUDES) $(librpmmodule_la_SOURCES)
diff --git a/python/Makefile.in b/python/Makefile.in
index 90cd1ec91..185b33b4e 100644
--- a/python/Makefile.in
+++ b/python/Makefile.in
@@ -474,6 +474,10 @@ mostlyclean distclean maintainer-clean
rpmmodule.so: $(librpmmodule_la_OBJECTS)
$(LINK) -o $@ $^ $(rpmmodule_so_LDFLAGS)
+.PHONY: lclint
+lclint:
+ lclint $(DEFS) $(INCLUDES) $(librpmmodule_la_SOURCES)
+
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
diff --git a/python/hash.c b/python/hash.c
index e5e9811b8..00d734879 100644
--- a/python/hash.c
+++ b/python/hash.c
@@ -68,7 +68,7 @@ void htFreeHashTable(struct hash_table *ht)
free(ht);
}
-void htHashStats(struct hash_table *t)
+void htHashStats(const struct hash_table *t)
{
int i = 0;
int empty = 0;
@@ -89,13 +89,13 @@ void htHashStats(struct hash_table *t)
printf("Avergage Depth: %f\n", (double)t->entries / (double)t->size);
}
-static unsigned int htHashStrings(const char *s, const char *t)
+static unsigned int htHashStrings(const char * s, const char * t)
{
unsigned int res = 0;
- while (*s)
+ while (*s != '\0')
res = ((res<<1) + (int)(*(s++)));
- while (*t)
+ while (*t != '\0')
res = ((res<<1) + (int)(*(t++)));
return res;
diff --git a/python/hash.h b/python/hash.h
index 3538ed7c3..c60957064 100644
--- a/python/hash.h
+++ b/python/hash.h
@@ -15,9 +15,9 @@ struct ht_iterator {
typedef struct ht_iterator htIterator;
-struct hash_table *htNewTable(int size);
-void htFreeHashTable(struct hash_table *ht);
-void htHashStats(struct hash_table *t);
+/*@only@*/ /*@null@*/ struct hash_table * htNewTable(int size);
+void htFreeHashTable(/*@only@*/ struct hash_table *ht);
+void htHashStats(const struct hash_table *t);
int htInTable(struct hash_table *t, const char * dir, const char * base);
void htAddToTable(struct hash_table *t, const char * dir, const char * base);
void htPrintHashStats(struct hash_table *t);
diff --git a/python/rpmmodule.c b/python/rpmmodule.c
index 68e92412f..147141ce0 100644
--- a/python/rpmmodule.c
+++ b/python/rpmmodule.c
@@ -20,6 +20,11 @@
extern int _rpmio_debug;
+#ifdef __LCLINT__
+#undef PyObject_HEAD
+#defin PyObject_HEAD int _PyObjectHead
+#endif
+
extern int mdfile(const char *fn, unsigned char *digest);
void initrpm(void);
@@ -1267,7 +1272,7 @@ static PyObject * rpmtransRemove(rpmtransObject * s, PyObject * args) {
/** \ingroup python
*/
static PyObject * rpmtransDepCheck(rpmtransObject * s, PyObject * args) {
- struct rpmDependencyConflict * conflicts;
+ struct rpmDependencyConflict_s * conflicts;
int numConflicts;
PyObject * list, * cf;
int i;
@@ -1278,6 +1283,7 @@ static PyObject * rpmtransDepCheck(rpmtransObject * s, PyObject * args) {
if (numConflicts) {
list = PyList_New(0);
+ /* XXX TODO: rpmlib-4.0.3 can return multiple suggested packages. */
for (i = 0; i < numConflicts; i++) {
cf = Py_BuildValue("((sss)(ss)iOi)", conflicts[i].byName,
conflicts[i].byVersion, conflicts[i].byRelease,
@@ -1286,14 +1292,14 @@ static PyObject * rpmtransDepCheck(rpmtransObject * s, PyObject * args) {
conflicts[i].needsVersion,
conflicts[i].needsFlags,
- conflicts[i].suggestedPackage ?
- conflicts[i].suggestedPackage : Py_None,
+ conflicts[i].suggestedPackages ?
+ conflicts[i].suggestedPackages[0] : Py_None,
conflicts[i].sense);
PyList_Append(list, (PyObject *) cf);
Py_DECREF(cf);
}
- rpmdepFreeConflicts(conflicts, numConflicts);
+ conflicts = rpmdepFreeConflicts(conflicts, numConflicts);
return list;
}
diff --git a/python/upgrade.c b/python/upgrade.c
index 73e9c0722..d8488bc0a 100644
--- a/python/upgrade.c
+++ b/python/upgrade.c
@@ -35,6 +35,9 @@ static void printMemStats(char *mess)
}
#endif
+/*@access Header@*/ /* compared with NULL. */
+/*@access rpmdbMatchIterator@*/ /* compared with NULL. */
+
int pkgCompare(void * first, void * second); /* XXX make gcc shut up. */
int pkgCompare(void * first, void * second) {
struct packageInfo ** a = first;
@@ -50,9 +53,9 @@ int pkgCompare(void * first, void * second) {
/* Adds all files in the second file list which are not in the first
file list to the hash table. */
-static void compareFileList(int availFileCount, char **availBaseNames,
+static void compareFileList(int availFileCount, char ** availBaseNames,
char ** availDirNames, int * availDirIndexes,
- int instFileCount, char **instBaseNames,
+ int instFileCount, char ** instBaseNames,
char ** instDirNames, int * instDirIndexes,
struct hash_table *ht)
{
@@ -115,7 +118,7 @@ static void addLostFiles(rpmdb db, struct pkgSet *psp, struct hash_table *ht)
mi = rpmdbInitIterator(db, RPMDBI_PACKAGES, NULL, 0);
while ((h = rpmdbNextIterator(mi)) != NULL) {
- headerGetEntry(h, RPMTAG_NAME, NULL, (void **) &name, NULL);
+ (void) headerGetEntry(h, RPMTAG_NAME, NULL, (void **) &name, NULL);
if (name && !strcmp(name, "metroess")) {
/* metro was removed from 5.1, but leave it if it's already
installed */
@@ -127,11 +130,12 @@ static void addLostFiles(rpmdb db, struct pkgSet *psp, struct hash_table *ht)
sizeof(*psp->packages), (void *)pkgCompare);
if (!pack) {
if (headerGetEntryMinMemory(h, RPMTAG_BASENAMES, NULL,
- (const void **) &installedFiles, &installedFileCount)) {
- headerGetEntryMinMemory(h, RPMTAG_DIRINDEXES, NULL,
- (const void **) &installedDirIndexes, NULL);
- headerGetEntryMinMemory(h, RPMTAG_DIRNAMES, NULL,
- (const void **) &installedDirs, NULL);
+ (const void **) &installedFiles, &installedFileCount)
+ && headerGetEntryMinMemory(h, RPMTAG_DIRINDEXES, NULL,
+ (const void **) &installedDirIndexes, NULL)
+ && headerGetEntryMinMemory(h, RPMTAG_DIRNAMES, NULL,
+ (const void **) &installedDirs, NULL))
+ {
compareFileList(0, NULL, NULL, NULL, installedFileCount,
installedFiles, installedDirs,
@@ -143,7 +147,7 @@ static void addLostFiles(rpmdb db, struct pkgSet *psp, struct hash_table *ht)
}
}
- rpmdbFreeIterator(mi);
+ mi = rpmdbFreeIterator(mi);
}
static int findPackagesWithObsoletes(rpmdb db, struct pkgSet *psp)
@@ -155,7 +159,7 @@ static int findPackagesWithObsoletes(rpmdb db, struct pkgSet *psp)
count = psp->numPackages;
pip = psp->packages;
while (count--) {
- if ((*pip)->selected) {
+ if ((*pip)->selected != 0) {
pip++;
continue;
}
@@ -189,9 +193,12 @@ static int findUpgradePackages(rpmdb db, struct pkgSet *psp,
Header h, installedHeader;
char *name;
int count;
- char **installedFiles, **availFiles;
- char **installedDirs, ** availDirs;
- int_32 * installedDirIndexes, * availDirIndexes;
+ char **installedFiles;
+ char ** availFiles = NULL;
+ char ** installedDirs;
+ char ** availDirs = NULL;
+ int_32 * installedDirIndexes;
+ int_32 * availDirIndexes = NULL;
int installedFileCount, availFileCount;
struct packageInfo **pip;
@@ -200,8 +207,9 @@ static int findUpgradePackages(rpmdb db, struct pkgSet *psp,
while (count--) {
h = (*pip)->h;
name = NULL;
- headerGetEntry(h, RPMTAG_NAME, NULL, (void **) &name, NULL);
- if (!name) {
+ if (!headerGetEntry(h, RPMTAG_NAME, NULL, (void **) &name, NULL) ||
+ name == NULL)
+ {
/* bum header */
/*logMessage("Failed with bad header");*/
return(-1);
@@ -212,9 +220,9 @@ static int findUpgradePackages(rpmdb db, struct pkgSet *psp,
{ rpmdbMatchIterator mi;
mi = rpmdbInitIterator(db, RPMTAG_NAME, name, 0);
- skipThis = (mi ? 0 : 1);
- rpmErrorSetCallback(errorFunction);
- while((installedHeader = rpmdbNextIterator(mi)) != NULL) {
+ skipThis = (mi != NULL ? 0 : 1);
+ (void) rpmErrorSetCallback(errorFunction);
+ while ((installedHeader = rpmdbNextIterator(mi)) != NULL) {
if (rpmVersionCompare(installedHeader, h) >= 0) {
/* already have a newer version installed */
DEBUG (("Already have newer version\n"))
@@ -222,8 +230,8 @@ static int findUpgradePackages(rpmdb db, struct pkgSet *psp,
break;
}
}
- rpmdbFreeIterator(mi);
- rpmErrorSetCallback(NULL);
+ mi = rpmdbFreeIterator(mi);
+ (void) rpmErrorSetCallback(NULL);
if (! skipThis) {
DEBUG (("No newer version installed\n"))
}
@@ -240,9 +248,9 @@ static int findUpgradePackages(rpmdb db, struct pkgSet *psp,
availFiles = NULL;
availFileCount = 0;
} else {
- headerGetEntryMinMemory(h, RPMTAG_DIRNAMES, NULL,
+ (void) headerGetEntryMinMemory(h, RPMTAG_DIRNAMES, NULL,
(const void **) &availDirs, NULL);
- headerGetEntryMinMemory(h, RPMTAG_DIRINDEXES, NULL,
+ (void) headerGetEntryMinMemory(h, RPMTAG_DIRINDEXES, NULL,
(const void **) &availDirIndexes, NULL);
}
@@ -250,12 +258,13 @@ static int findUpgradePackages(rpmdb db, struct pkgSet *psp,
mi = rpmdbInitIterator(db, RPMTAG_NAME, name, 0);
while((installedHeader = rpmdbNextIterator(mi)) != NULL) {
if (headerGetEntryMinMemory(installedHeader, RPMTAG_BASENAMES,
- NULL, (const void **) &installedFiles,
- &installedFileCount)) {
- headerGetEntryMinMemory(installedHeader, RPMTAG_DIRNAMES,
- NULL, (const void **) &installedDirs, NULL);
- headerGetEntryMinMemory(installedHeader, RPMTAG_DIRINDEXES,
- NULL, (const void **) &installedDirIndexes, NULL);
+ NULL, (const void **) &installedFiles,
+ &installedFileCount)
+ && headerGetEntryMinMemory(installedHeader, RPMTAG_DIRNAMES,
+ NULL, (const void **) &installedDirs, NULL)
+ && headerGetEntryMinMemory(installedHeader, RPMTAG_DIRINDEXES,
+ NULL, (const void **) &installedDirIndexes, NULL))
+ {
compareFileList(availFileCount, availFiles,
availDirs, availDirIndexes,
@@ -267,7 +276,7 @@ static int findUpgradePackages(rpmdb db, struct pkgSet *psp,
free(installedDirs);
}
}
- rpmdbFreeIterator(mi);
+ mi = rpmdbFreeIterator(mi);
}
if (availFiles) {
@@ -290,7 +299,7 @@ static int removeMovedFilesAlreadyHandled(struct pkgSet *psp,
char *name;
int i, count;
Header h;
- char **availFiles, ** availDirs;
+ char ** availFiles, ** availDirs;
int_32 * availDirIndexes;
int availFileCount;
struct packageInfo **pip;
@@ -299,17 +308,18 @@ static int removeMovedFilesAlreadyHandled(struct pkgSet *psp,
pip = psp->packages;
while (count--) {
h = (*pip)->h;
- if ((*pip)->selected) {
+ if ((*pip)->selected != 0) {
name = NULL;
- headerGetEntry(h, RPMTAG_NAME, NULL, (void **) &name, NULL);
+ (void) headerGetEntry(h, RPMTAG_NAME, NULL, (void **) &name, NULL);
if (headerGetEntryMinMemory(h, RPMTAG_BASENAMES, NULL,
- (const void **) &availFiles, &availFileCount)) {
+ (const void **) &availFiles, &availFileCount)
- headerGetEntryMinMemory(h, RPMTAG_DIRNAMES, NULL,
- (const void **) &availDirs, NULL);
- headerGetEntryMinMemory(h, RPMTAG_DIRINDEXES, NULL,
- (const void **) &availDirIndexes, NULL);
+ && headerGetEntryMinMemory(h, RPMTAG_DIRNAMES, NULL,
+ (const void **) &availDirs, NULL)
+ && headerGetEntryMinMemory(h, RPMTAG_DIRINDEXES, NULL,
+ (const void **) &availDirIndexes, NULL))
+ {
for (i = 0; i < availFileCount; i++) {
if (htInTable(ht, availDirs[availDirIndexes[i]],
@@ -351,16 +361,17 @@ static int findPackagesWithRelocatedFiles(struct pkgSet *psp,
h = (*pip)->h;
if (! (*pip)->selected) {
name = NULL;
- headerGetEntry(h, RPMTAG_NAME, NULL, (void **) &name, NULL);
+ (void) headerGetEntry(h, RPMTAG_NAME, NULL, (void **) &name, NULL);
if (headerGetEntry(h, RPMTAG_BASENAMES, NULL,
- (void **) &availFiles, &availFileCount)) {
- headerGetEntryMinMemory(h, RPMTAG_DIRNAMES, NULL,
- (const void **) &availDirs, NULL);
- headerGetEntryMinMemory(h, RPMTAG_DIRINDEXES, NULL,
- (const void **) &availDirIndexes, NULL);
- headerGetEntryMinMemory(h, RPMTAG_FILEMODES, NULL,
- (const void **) &availFileModes, NULL);
+ (void **) &availFiles, &availFileCount)
+ && headerGetEntryMinMemory(h, RPMTAG_DIRNAMES, NULL,
+ (const void **) &availDirs, NULL)
+ && headerGetEntryMinMemory(h, RPMTAG_DIRINDEXES, NULL,
+ (const void **) &availDirIndexes, NULL)
+ && headerGetEntryMinMemory(h, RPMTAG_FILEMODES, NULL,
+ (const void **) &availFileModes, NULL))
+ {
for (i = 0; i < availFileCount; i++) {
if (S_ISDIR(availFileModes[i])) continue;
@@ -414,12 +425,13 @@ static int unmarkPackagesAlreadyInstalled(rpmdb db, struct pkgSet *psp)
count = psp->numPackages;
pip = psp->packages;
while (count--) {
- if ((*pip)->selected) {
+ if ((*pip)->selected != 0) {
h = (*pip)->h;
/* If this package is already installed, don't bother */
name = NULL;
- headerGetEntry(h, RPMTAG_NAME, NULL, (void **) &name, NULL);
- if (!name) {
+ if (!headerGetEntry(h, RPMTAG_NAME, NULL, (void **) &name, NULL) ||
+ name == NULL)
+ {
/* bum header */
/*logMessage("Failed with bad header");*/
return(-1);
@@ -427,7 +439,7 @@ static int unmarkPackagesAlreadyInstalled(rpmdb db, struct pkgSet *psp)
{ rpmdbMatchIterator mi;
mi = rpmdbInitIterator(db, RPMTAG_NAME, name, 0);
- rpmErrorSetCallback(errorFunction);
+ (void) rpmErrorSetCallback(errorFunction);
while((installedHeader = rpmdbNextIterator(mi)) != NULL) {
if (rpmVersionCompare(installedHeader, h) >= 0) {
/* already have a newer version installed */
@@ -436,8 +448,8 @@ static int unmarkPackagesAlreadyInstalled(rpmdb db, struct pkgSet *psp)
break;
}
}
- rpmdbFreeIterator(mi);
- rpmErrorSetCallback(NULL);
+ mi = rpmdbFreeIterator(mi);
+ (void) rpmErrorSetCallback(NULL);
}
}
@@ -469,10 +481,11 @@ int ugFindUpgradePackages(struct pkgSet *psp, char *installRoot)
return(-1);
}
- rpmErrorSetCallback(old);
+ (void) rpmErrorSetCallback(old);
rpmSetVerbosity(RPMMESS_NORMAL);
hashTable = htNewTable(1103);
+ if (hashTable == NULL) return (-1);
/* For all packages that are installed, if there is no package */
/* available by that name, add the package's files to the hash table */
@@ -484,7 +497,7 @@ int ugFindUpgradePackages(struct pkgSet *psp, char *installRoot)
/* updating availPkgs with the count. Also add files to the hash */
/* table that do not exist in the new package - they may have moved */
if (findUpgradePackages(db, psp, hashTable)) {
- rpmdbClose(db);
+ (void) rpmdbClose(db);
return(-1);
}
/*logDebugMessage(("found basic packages to upgrade"));
@@ -493,19 +506,19 @@ int ugFindUpgradePackages(struct pkgSet *psp, char *installRoot)
/* Remove any files that were added to the hash table that are in */
/* some other package marked for upgrade. */
- removeMovedFilesAlreadyHandled(psp, hashTable);
+ (void) removeMovedFilesAlreadyHandled(psp, hashTable);
/*logDebugMessage(("removed extra files which have moved"));
printCount(psp);*/
- findPackagesWithRelocatedFiles(psp, hashTable);
+ (void) findPackagesWithRelocatedFiles(psp, hashTable);
/*logDebugMessage(("found packages with relocated files"));
printCount(psp);*/
- findPackagesWithObsoletes(db, psp);
+ (void) findPackagesWithObsoletes(db, psp);
/*logDebugMessage(("found packages that obsolete installed packages"));
printCount(psp);*/
- unmarkPackagesAlreadyInstalled(db, psp);
+ (void) unmarkPackagesAlreadyInstalled(db, psp);
/*logDebugMessage(("unmarked packages already installed"));
printCount(psp);*/
@@ -513,7 +526,7 @@ int ugFindUpgradePackages(struct pkgSet *psp, char *installRoot)
/*printMemStats("Done");*/
- rpmdbClose(db);
+ (void) rpmdbClose(db);
return 0;
}