}
int convertDB(char * dbprefix) {
- struct rpmdb olddb;
+ struct oldrpmdb olddb;
dbIndex * nameIndex, * fileIndex, * groupIndex;
faFile pkgs;
- struct rpmdbLabel * packageLabels, * label;
- struct rpmdbPackageInfo package;
+ struct oldrpmdbLabel * packageLabels, * label;
+ struct oldrpmdbPackageInfo package;
Header dbentry;
unsigned int dboffset;
char * group;
char * fileStatesList;
int i;
- if (rpmdbOpen(&olddb)) {
+ if (oldrpmdbOpen(&olddb)) {
error(RPMERR_OLDDBMISSING, "");
return 0;
}
pkgs = faOpen("/var/lib/rpm/packages.rpm", O_RDWR | O_CREAT, 0644);
if (!pkgs) {
- rpmdbClose(&olddb);
+ oldrpmdbClose(&olddb);
error(RPMERR_DBOPEN, "failed to create /var/lib/rpm/packages.rpm");
return 0;
}
nameIndex = fileIndex = groupIndex = NULL;
nameIndex = openDBIndex("/var/lib/rpm/nameindex.rpm",
- O_RDWR | O_CREAT, 0644);
+ O_RDWR | O_CREAT | O_EXCL, 0644);
groupIndex = openDBIndex("/var/lib/rpm/groupindex.rpm",
- O_RDWR | O_CREAT, 0644);
+ O_RDWR | O_CREAT | O_EXCL, 0644);
fileIndex = openDBIndex("/var/lib/rpm/fileindex.rpm",
- O_RDWR | O_CREAT, 0644);
+ O_RDWR | O_CREAT | O_EXCL, 0644);
if (!nameIndex || !groupIndex || !fileIndex) {
nameIndex ? closeDBIndex(nameIndex) : 0;
groupIndex ? closeDBIndex(groupIndex) : 0;
fileIndex ? closeDBIndex(fileIndex) : 0;
- rpmdbClose(&olddb);
+ oldrpmdbClose(&olddb);
error(RPMERR_DBOPEN, "failed to create index files in /var/lib/rpm");
return 0;
}
- packageLabels = rpmdbGetAllLabels(&olddb);
+ packageLabels = oldrpmdbGetAllLabels(&olddb);
if (!packageLabels) {
error(RPMERR_OLDDBCORRUPT, "");
faClose(pkgs);
closeDBIndex(groupIndex);
closeDBIndex(fileIndex);
unlink("/var/lib/rpm/packages.rpm");
- rpmdbClose(&olddb);
+ oldrpmdbClose(&olddb);
return 0;
}
for (label = packageLabels; label; label = label->next) {
- if (rpmdbGetPackageInfo(&olddb, *label, &package)) {
- printf("rpmdbGetPackageInfo failed &olddb = %p olddb.packages = %p\n", &olddb, olddb.packages);
+ if (oldrpmdbGetPackageInfo(&olddb, *label, &package)) {
+ printf("oldrpmdbGetPackageInfo failed &olddb = %p olddb.packages = %p\n", &olddb, olddb.packages);
exit(1);
}
- group = rpmdbGetPackageGroup(&olddb, *label);
+ group = oldrpmdbGetPackageGroup(&olddb, *label);
dbentry = newHeader();
addEntry(dbentry, RPMTAG_NAME, STRING_TYPE, package.name, 1);
addEntry(dbentry, RPMTAG_COPYRIGHT, STRING_TYPE, package.copyright, 1);
addEntry(dbentry, RPMTAG_GROUP, STRING_TYPE, group, 1);
- gif = rpmdbGetPackageGif(&olddb, *label, &gifSize);
+ gif = oldrpmdbGetPackageGif(&olddb, *label, &gifSize);
if (gif) {
/*addEntry(dbentry, RPMTAG_GIF, BIN_TYPE, gif, gifSize);*/
free(gif);
free(group);
freeHeader(dbentry);
- rpmdbFreePackageInfo(package);
+ oldrpmdbFreePackageInfo(package);
}
- rpmdbClose(&olddb);
+ oldrpmdbClose(&olddb);
faClose(pkgs);
closeDBIndex(nameIndex);
-#ifndef _H_RPMDB
-#define _H_RPMDB
+#ifndef _H_OLDRPMDB
+#define _H_OLDRPMDB
#include <gdbm.h>
#include "oldrpmfile.h"
-typedef enum { RPMDB_NONE, RPMDB_GDBM_ERROR, RPMDB_NO_MEMORY } rpm_error;
+typedef enum {
+ RPMDB_NONE, RPMDB_GDBM_ERROR, RPMDB_NO_MEMORY
+} rpm_error;
-struct rpmdb {
+struct oldrpmdb {
GDBM_FILE packages;
GDBM_FILE nameIndex;
GDBM_FILE pathIndex;
gdbm_error gdbmError;
};
-enum rpmdbFreeType { RPMDB_NOFREE, RPMDB_FREENAME, RPMDB_FREEALL } ;
+enum oldrpmdbFreeType {
+ RPMDB_NOFREE, RPMDB_FREENAME, RPMDB_FREEALL
+};
-struct rpmdbLabel {
- char * name, * version, * release;
- enum rpmdbFreeType freeType;
- struct rpmdbLabel * next;
- int fileNumber; /* -1 means invalid */
+struct oldrpmdbLabel {
+ char *name, *version, *release;
+ enum oldrpmdbFreeType freeType;
+ struct oldrpmdbLabel *next;
+ int fileNumber; /* -1 means invalid */
};
-struct rpmdbPackageInfo {
- char * name, * version, * release;
- char * labelstr;
+struct oldrpmdbPackageInfo {
+ char *name, *version, *release;
+ char *labelstr;
unsigned int installTime, buildTime;
unsigned int size;
- char * description;
- char * distribution;
- char * vendor;
- char * buildHost;
- char * preamble;
- char * copyright;
+ char *description;
+ char *distribution;
+ char *vendor;
+ char *buildHost;
+ char *preamble;
+ char *copyright;
unsigned int fileCount;
- struct rpmFileInfo * files;
-} ;
+ struct rpmFileInfo *files;
+};
#define RPMDB_READER 1
-int rpmdbOpen(struct rpmdb * rpmdb);
-void rpmdbClose(struct rpmdb * rpmdb);
-struct rpmdbLabel * rpmdbGetAllLabels(struct rpmdb * rpmdb);
-struct rpmdbLabel * rpmdbFindPackagesByFile(struct rpmdb * rpmdb, char * path);
-struct rpmdbLabel * rpmdbFindPackagesByLabel(struct rpmdb * rpmdb,
- struct rpmdbLabel label);
+int oldrpmdbOpen (struct oldrpmdb *oldrpmdb);
+void oldrpmdbClose (struct oldrpmdb *oldrpmdb);
+struct oldrpmdbLabel *oldrpmdbGetAllLabels (struct oldrpmdb *oldrpmdb);
+struct oldrpmdbLabel *oldrpmdbFindPackagesByFile (struct oldrpmdb *oldrpmdb, char *path);
+struct oldrpmdbLabel *oldrpmdbFindPackagesByLabel (struct oldrpmdb *oldrpmdb,
+ struct oldrpmdbLabel label);
-char * rpmdbGetPackageGroup(struct rpmdb * rpmdb, struct rpmdbLabel label);
-char * rpmdbGetPackageGif(struct rpmdb * rpmdb, struct rpmdbLabel label,
- int * size);
-int rpmdbGetPackageInfo(struct rpmdb * rpmdb, struct rpmdbLabel label,
- struct rpmdbPackageInfo * pinfo);
-void rpmdbFreePackageInfo(struct rpmdbPackageInfo package);
+char *oldrpmdbGetPackageGroup (struct oldrpmdb *oldrpmdb, struct oldrpmdbLabel label);
+char *oldrpmdbGetPackageGif (struct oldrpmdb *oldrpmdb, struct oldrpmdbLabel label,
+ int *size);
+int oldrpmdbGetPackageInfo (struct oldrpmdb *oldrpmdb, struct oldrpmdbLabel label,
+ struct oldrpmdbPackageInfo *pinfo);
+void oldrpmdbFreePackageInfo (struct oldrpmdbPackageInfo package);
-struct rpmdbLabel rpmdbMakeLabel(char * name, char * version, char * release,
- int fileNumber, enum rpmdbFreeType freeType);
-void rpmdbFreeLabelList(struct rpmdbLabel * list);
-void rpmdbFreeLabel(struct rpmdbLabel label);
-int rpmdbWasError(struct rpmdb * rpmdb);
+struct oldrpmdbLabel oldrpmdbMakeLabel (char *name, char *version, char *release,
+ int fileNumber, enum oldrpmdbFreeType freeType);
+void oldrpmdbFreeLabelList (struct oldrpmdbLabel *list);
+void oldrpmdbFreeLabel (struct oldrpmdbLabel label);
+int oldrpmdbWasError (struct oldrpmdb *oldrpmdb);
-int rpmdbLabelstrToLabel(char * str, int length, struct rpmdbLabel * label);
-char * rpmdbLabelToLabelstr(struct rpmdbLabel label, int withFileNum);
-int rpmdbLabelCmp(struct rpmdbLabel * one, struct rpmdbLabel * two);
+int oldrpmdbLabelstrToLabel (char *str, int length, struct oldrpmdbLabel *label);
+char *oldrpmdbLabelToLabelstr (struct oldrpmdbLabel label, int withFileNum);
+int oldrpmdbLabelCmp (struct oldrpmdbLabel *one, struct oldrpmdbLabel *two);
-void rpmdbSetPrefix(char * new);
+void oldrpmdbSetPrefix (char *new);
#endif
#include "oldrpmdb.h"
static int labelstrlistToLabelList(char * str, int length,
- struct rpmdbLabel ** list);
+ struct oldrpmdbLabel ** list);
static char * prefix = "/var/lib/rpm";
-char * rpmdbLabelToLabelstr(struct rpmdbLabel label, int withFileNum) {
+char * oldrpmdbLabelToLabelstr(struct oldrpmdbLabel label, int withFileNum) {
char * c;
char buffer[50];
return c;
}
-int rpmdbLabelstrToLabel(char * str, int length, struct rpmdbLabel * label) {
+int oldrpmdbLabelstrToLabel(char * str, int length, struct oldrpmdbLabel * label) {
char * chptr;
label->freeType = RPMDB_FREENAME;
}
static int labelstrlistToLabelList(char * str, int length,
- struct rpmdbLabel ** list) {
+ struct oldrpmdbLabel ** list) {
char * start, * chptr;
- struct rpmdbLabel * head = NULL;
- struct rpmdbLabel * tail = NULL;
- struct rpmdbLabel * label;
+ struct oldrpmdbLabel * head = NULL;
+ struct oldrpmdbLabel * tail = NULL;
+ struct oldrpmdbLabel * label;
start = str;
for (chptr = start; (chptr - str) < length; chptr++) {
/* spaces following a space get ignored */
if (*chptr == ' ' && start < chptr) {
- label = malloc(sizeof(struct rpmdbLabel));
+ label = malloc(sizeof(struct oldrpmdbLabel));
if (!label) {
- rpmdbFreeLabelList(head);
+ oldrpmdbFreeLabelList(head);
return 1;
}
- if (rpmdbLabelstrToLabel(start, chptr - start, label)) {
+ if (oldrpmdbLabelstrToLabel(start, chptr - start, label)) {
free(label);
- rpmdbFreeLabelList(head);
+ oldrpmdbFreeLabelList(head);
return 1;
}
/* a space on the end would break things horribly w/o this test */
if (start < chptr) {
- label = malloc(sizeof(struct rpmdbLabel));
+ label = malloc(sizeof(struct oldrpmdbLabel));
if (!label) {
- rpmdbFreeLabelList(head);
+ oldrpmdbFreeLabelList(head);
return 1;
}
- if (rpmdbLabelstrToLabel(start, chptr - start, label)) {
+ if (oldrpmdbLabelstrToLabel(start, chptr - start, label)) {
free(label);
- rpmdbFreeLabelList(head);
+ oldrpmdbFreeLabelList(head);
return 1;
}
}
/* returns 0 on success, -1 on failure */
-int rpmdbOpen(struct rpmdb * rpmdb) {
+int oldrpmdbOpen(struct oldrpmdb * oldrpmdb) {
unsigned int gdbmFlags;
char path[255];
int goterr = 0;
- rpmdb->rpmdbError = RPMDB_NONE;
+ oldrpmdb->rpmdbError = RPMDB_NONE;
gdbmFlags = GDBM_READER;
strcpy(path, prefix);
strcat(path, "/packages");
- rpmdb->packages = gdbm_open(path, 1024, gdbmFlags, 0644, NULL);
- if (!rpmdb->packages) {
+ oldrpmdb->packages = gdbm_open(path, 1024, gdbmFlags, 0644, NULL);
+ if (!oldrpmdb->packages) {
error(RPMERR_GDBMOPEN, path, gdbm_strerror(gdbm_errno));
goterr = 1;
}
strcpy(path, prefix);
strcat(path, "/nameidx");
- rpmdb->nameIndex = gdbm_open(path, 1024, gdbmFlags, 0644, NULL);
- if (!rpmdb->packages) {
+ oldrpmdb->nameIndex = gdbm_open(path, 1024, gdbmFlags, 0644, NULL);
+ if (!oldrpmdb->packages) {
error(RPMERR_GDBMOPEN, path, gdbm_strerror(gdbm_errno));
goterr = 1;
}
strcpy(path, prefix);
strcat(path, "/pathidx");
- rpmdb->pathIndex = gdbm_open(path, 1024, gdbmFlags, 0644, NULL);
- if (!rpmdb->packages) {
+ oldrpmdb->pathIndex = gdbm_open(path, 1024, gdbmFlags, 0644, NULL);
+ if (!oldrpmdb->packages) {
error(RPMERR_GDBMOPEN, path, gdbm_strerror(gdbm_errno));
goterr = 1;
}
strcpy(path, prefix);
strcat(path, "/iconidx");
- rpmdb->iconIndex = gdbm_open(path, 1024, gdbmFlags, 0644, NULL);
- if (!rpmdb->iconIndex) {
+ oldrpmdb->iconIndex = gdbm_open(path, 1024, gdbmFlags, 0644, NULL);
+ if (!oldrpmdb->iconIndex) {
error(RPMERR_GDBMOPEN, path, gdbm_strerror(gdbm_errno));
goterr = 1;
}
strcpy(path, prefix);
strcat(path, "/groupindex");
- rpmdb->groupIndex = gdbm_open(path, 1024, gdbmFlags, 0644, NULL);
- if (!rpmdb->packages) {
+ oldrpmdb->groupIndex = gdbm_open(path, 1024, gdbmFlags, 0644, NULL);
+ if (!oldrpmdb->packages) {
error(RPMERR_GDBMOPEN, path, gdbm_strerror(gdbm_errno));
goterr = 1;
}
strcpy(path, prefix);
strcat(path, "/postidx");
- rpmdb->postIndex = gdbm_open(path, 1024, gdbmFlags, 0644, NULL);
- if (!rpmdb->postIndex) {
+ oldrpmdb->postIndex = gdbm_open(path, 1024, gdbmFlags, 0644, NULL);
+ if (!oldrpmdb->postIndex) {
error(RPMERR_GDBMOPEN, path, gdbm_strerror(gdbm_errno));
goterr = 1;
}
if (goterr) {
- rpmdbClose(rpmdb);
+ oldrpmdbClose(oldrpmdb);
return -1;
}
return 0;
}
-void rpmdbClose(struct rpmdb * rpmdb) {
- gdbm_close(rpmdb->packages);
- gdbm_close(rpmdb->nameIndex);
- gdbm_close(rpmdb->pathIndex);
- gdbm_close(rpmdb->postIndex);
- gdbm_close(rpmdb->groupIndex);
- gdbm_close(rpmdb->iconIndex);
+void oldrpmdbClose(struct oldrpmdb * oldrpmdb) {
+ gdbm_close(oldrpmdb->packages);
+ gdbm_close(oldrpmdb->nameIndex);
+ gdbm_close(oldrpmdb->pathIndex);
+ gdbm_close(oldrpmdb->postIndex);
+ gdbm_close(oldrpmdb->groupIndex);
+ gdbm_close(oldrpmdb->iconIndex);
}
-struct rpmdbLabel * rpmdbGetAllLabels(struct rpmdb * rpmdb) {
+struct oldrpmdbLabel * oldrpmdbGetAllLabels(struct oldrpmdb * oldrpmdb) {
datum rec;
- struct rpmdbLabel * head = NULL;
- struct rpmdbLabel * tail = NULL;
- struct rpmdbLabel * label;
+ struct oldrpmdbLabel * head = NULL;
+ struct oldrpmdbLabel * tail = NULL;
+ struct oldrpmdbLabel * label;
- rpmdb->rpmdbError = RPMDB_NONE;
+ oldrpmdb->rpmdbError = RPMDB_NONE;
- rec = gdbm_firstkey(rpmdb->packages);
+ rec = gdbm_firstkey(oldrpmdb->packages);
while (rec.dptr) {
- label = malloc(sizeof(struct rpmdbLabel));
+ label = malloc(sizeof(struct oldrpmdbLabel));
if (!label) {
- rpmdbFreeLabelList(head);
- rpmdb->rpmdbError = RPMDB_NO_MEMORY;
+ oldrpmdbFreeLabelList(head);
+ oldrpmdb->rpmdbError = RPMDB_NO_MEMORY;
return NULL;
}
- if (rpmdbLabelstrToLabel(rec.dptr, rec.dsize, label)) {
+ if (oldrpmdbLabelstrToLabel(rec.dptr, rec.dsize, label)) {
free(label);
- rpmdbFreeLabelList(head);
- rpmdb->rpmdbError = RPMDB_NO_MEMORY;
+ oldrpmdbFreeLabelList(head);
+ oldrpmdb->rpmdbError = RPMDB_NO_MEMORY;
return NULL;
}
tail = tail->next;
}
- rec = gdbm_nextkey(rpmdb->packages, rec);
+ rec = gdbm_nextkey(oldrpmdb->packages, rec);
}
return head;
}
-struct rpmdbLabel * rpmdbFindPackagesByFile(struct rpmdb * rpmdb, char * path) {
+struct oldrpmdbLabel * oldrpmdbFindPackagesByFile(struct oldrpmdb * oldrpmdb, char * path) {
datum rec;
datum key;
- struct rpmdbLabel * list;
+ struct oldrpmdbLabel * list;
- rpmdb->rpmdbError = RPMDB_NONE;
+ oldrpmdb->rpmdbError = RPMDB_NONE;
key.dptr = path;
key.dsize = strlen(path);
- rec = gdbm_fetch(rpmdb->pathIndex, key);
+ rec = gdbm_fetch(oldrpmdb->pathIndex, key);
if (!rec.dptr)
return NULL;
if (labelstrlistToLabelList(rec.dptr, rec.dsize, &list)) {
free(rec.dptr);
- rpmdb->rpmdbError = RPMDB_NO_MEMORY;
+ oldrpmdb->rpmdbError = RPMDB_NO_MEMORY;
return NULL;
}
free(rec.dptr);
return list;
}
-struct rpmdbLabel * rpmdbFindPackagesByLabel(struct rpmdb * rpmdb,
- struct rpmdbLabel label)
+struct oldrpmdbLabel * oldrpmdbFindPackagesByLabel(struct oldrpmdb * oldrpmdb,
+ struct oldrpmdbLabel label)
/* the Name has to be here. The version/release fields optionally
restrict the search. Either will do. */
{
datum rec;
datum key;
- struct rpmdbLabel * list;
- struct rpmdbLabel * prospect;
- struct rpmdbLabel * parent;
+ struct oldrpmdbLabel * list;
+ struct oldrpmdbLabel * prospect;
+ struct oldrpmdbLabel * parent;
int bad;
- rpmdb->rpmdbError = RPMDB_NONE;
+ oldrpmdb->rpmdbError = RPMDB_NONE;
key.dptr = label.name;
key.dsize = strlen(label.name);
- rec = gdbm_fetch(rpmdb->nameIndex, key);
+ rec = gdbm_fetch(oldrpmdb->nameIndex, key);
if (!rec.dptr)
return NULL;
if (labelstrlistToLabelList(rec.dptr, rec.dsize, &list)) {
free(rec.dptr);
- rpmdb->rpmdbError = RPMDB_NO_MEMORY;
+ oldrpmdb->rpmdbError = RPMDB_NO_MEMORY;
return NULL;
}
free(rec.dptr);
bad = 1;
if (bad) {
- rpmdbFreeLabel(*prospect);
+ oldrpmdbFreeLabel(*prospect);
if (!parent) {
list = prospect->next;
free(prospect);
return list;
}
-struct rpmdbLabel rpmdbMakeLabel(char * name, char * version, char * release,
- int fileNumber, enum rpmdbFreeType freeType) {
- struct rpmdbLabel label;
+struct oldrpmdbLabel oldrpmdbMakeLabel(char * name, char * version, char * release,
+ int fileNumber, enum oldrpmdbFreeType freeType) {
+ struct oldrpmdbLabel label;
label.next = NULL;
label.freeType = freeType;
return label;
}
-void rpmdbFreeLabelList(struct rpmdbLabel * list) {
- struct rpmdbLabel * saved;
+void oldrpmdbFreeLabelList(struct oldrpmdbLabel * list) {
+ struct oldrpmdbLabel * saved;
while (list) {
- rpmdbFreeLabel(*list);
+ oldrpmdbFreeLabel(*list);
saved = list->next;
free(list);
list = saved;
}
}
-void rpmdbFreeLabel(struct rpmdbLabel label) {
+void oldrpmdbFreeLabel(struct oldrpmdbLabel label) {
if (label.freeType == RPMDB_NOFREE) return;
free(label.name);
}
/* Returns NULL on error */
-char * rpmdbGetPackageGroup(struct rpmdb * rpmdb, struct rpmdbLabel label) {
+char * oldrpmdbGetPackageGroup(struct oldrpmdb * oldrpmdb, struct oldrpmdbLabel label) {
datum key, rec;
char * g;
key.dptr = label.name;
key.dsize = strlen(label.name);
- rec = gdbm_fetch(rpmdb->groupIndex, key);
+ rec = gdbm_fetch(oldrpmdb->groupIndex, key);
if (!rec.dptr) {
return strdup("Unknown");
}
}
/* Returns NULL on error or if no icon exists */
-char * rpmdbGetPackageGif(struct rpmdb * rpmdb, struct rpmdbLabel label,
+char * oldrpmdbGetPackageGif(struct oldrpmdb * oldrpmdb, struct oldrpmdbLabel label,
int * size) {
datum key, rec;
char * labelstr;
- labelstr = rpmdbLabelToLabelstr(label, 0);
+ labelstr = oldrpmdbLabelToLabelstr(label, 0);
key.dptr = labelstr;
key.dsize = strlen(labelstr);
- rec = gdbm_fetch(rpmdb->iconIndex, key);
+ rec = gdbm_fetch(oldrpmdb->iconIndex, key);
free(labelstr);
if (!rec.dptr) {
return NULL;
}
/* return 0 on success, 1 on failure */
-int rpmdbGetPackageInfo(struct rpmdb * rpmdb, struct rpmdbLabel label,
- struct rpmdbPackageInfo * pinfo) {
+int oldrpmdbGetPackageInfo(struct oldrpmdb * oldrpmdb, struct oldrpmdbLabel label,
+ struct oldrpmdbPackageInfo * pinfo) {
char * labelstr;
char ** list, ** prelist;
char ** strptr;
datum key, rec;
int i, j;
- labelstr = rpmdbLabelToLabelstr(label, 0);
+ labelstr = oldrpmdbLabelToLabelstr(label, 0);
message(MESS_DEBUG, "pulling %s from database\n", labelstr);
key.dptr = labelstr;
key.dsize = strlen(labelstr);
- rec = gdbm_fetch(rpmdb->packages, key);
+ rec = gdbm_fetch(oldrpmdb->packages, key);
if (!rec.dptr) {
error(RPMERR_OLDDBCORRUPT, "package not found in database");
return 1;
return 0;
}
-void rpmdbFreePackageInfo(struct rpmdbPackageInfo package) {
+void oldrpmdbFreePackageInfo(struct oldrpmdbPackageInfo package) {
int i;
free(package.version);
free(package.files);
}
-int rpmdbLabelCmp(struct rpmdbLabel * one, struct rpmdbLabel * two) {
+int oldrpmdbLabelCmp(struct oldrpmdbLabel * one, struct oldrpmdbLabel * two) {
int i;
if ((i = strcmp(one->name, two->name)))
return strcmp(one->release, two->release);
}
-void rpmdbSetPrefix(char * new) {
+void oldrpmdbSetPrefix(char * new) {
prefix = new;
}