struct rpmdb {
faFile pkgs;
dbIndex * nameIndex, * fileIndex, * groupIndex, * providesIndex;
- dbIndex * requiredbyIndex;
+ dbIndex * requiredbyIndex, * conflictsIndex;
};
static void removeIndexEntry(dbIndex * dbi, char * name, dbIndexRecord rec,
}
}
+ strcpy(filename, prefix);
+ strcat(filename, dbpath);
+ strcat(filename, "conflictsindex.rpm");
+
+ if (!justcheck || !exists(filename)) {
+ db.conflictsIndex = openDBIndex(filename, mode, 0644);
+ if (!db.conflictsIndex) {
+ faClose(db.pkgs);
+ closeDBIndex(db.fileIndex);
+ closeDBIndex(db.nameIndex);
+ closeDBIndex(db.groupIndex);
+ closeDBIndex(db.providesIndex);
+ closeDBIndex(db.requiredbyIndex);
+ return 1;
+ }
+ }
+
*rpmdbp = malloc(sizeof(struct rpmdb));
**rpmdbp = db;
if (db->nameIndex) closeDBIndex(db->nameIndex);
if (db->providesIndex) closeDBIndex(db->providesIndex);
if (db->requiredbyIndex) closeDBIndex(db->requiredbyIndex);
+ if (db->conflictsIndex) closeDBIndex(db->conflictsIndex);
free(db);
}
return searchDBIndex(db->requiredbyIndex, filespec, matches);
}
+int rpmdbFindByConflicts(rpmdb db, char * filespec, dbIndexSet * matches) {
+ return searchDBIndex(db->conflictsIndex, filespec, matches);
+}
+
int rpmdbFindByGroup(rpmdb db, char * group, dbIndexSet * matches) {
return searchDBIndex(db->groupIndex, group, matches);
}
unsigned int count;
dbIndexRecord rec;
char ** fileList, ** providesList, ** requiredbyList;
+ char ** conflictList;
int i;
rec.recOffset = offset;
free(requiredbyList);
}
+ if (getEntry(h, RPMTAG_CONFLICTNAME, &type, (void **) &conflictList,
+ &count)) {
+ for (i = 0; i < count; i++) {
+ message(MESS_DEBUG, "removing conflict index for %s\n",
+ conflictList[i]);
+ removeIndexEntry(db->conflictsIndex, conflictList[i], rec,
+ tolerant, "conflict index");
+ }
+ free(conflictList);
+ }
+
if (getEntry(h, RPMTAG_FILENAMES, &type, (void **) &fileList,
&count)) {
for (i = 0; i < count; i++) {
char ** fileList;
char ** providesList;
char ** requiredbyList;
+ char ** conflictList;
char * name, * group;
- int count, providesCount, requiredbyCount;
+ int count, providesCount, requiredbyCount, conflictCount;
int type;
int rc = 0;
requiredbyCount = 0;
}
+ if (!getEntry(dbentry, RPMTAG_CONFLICTNAME, &type,
+ (void **) &conflictList, &conflictCount)) {
+ conflictCount = 0;
+ }
+
blockSignals();
dboffset = faAlloc(db->pkgs, sizeofHeader(dbentry, NO_HEADER_MAGIC));
if (addIndexEntry(db->groupIndex, group, dboffset, 0))
rc = 1;
+ for (i = 0; i < conflictCount; i++) {
+ if (addIndexEntry(db->conflictsIndex, conflictList[i], dboffset, 0))
+ rc = 1;
+ }
+
for (i = 0; i < requiredbyCount; i++) {
if (addIndexEntry(db->requiredbyIndex, requiredbyList[i], dboffset, 0))
rc = 1;