parent
eb0436b4b2
commit
fa463ea4ab
31
lib/rpmdb.c
31
lib/rpmdb.c
|
@ -29,7 +29,8 @@ struct rpmdb_s {
|
|||
|
||||
static void removeIndexEntry(dbiIndex * dbi, char * name, dbiIndexRecord rec,
|
||||
int tolerant, char * idxName);
|
||||
static int addIndexEntry(dbiIndex * idx, char * index, dbiIndexRecord rec);
|
||||
static int addIndexEntry(dbiIndex * idx, char * index, unsigned int offset,
|
||||
unsigned int fileNumber);
|
||||
static void blockSignals(void);
|
||||
static void unblockSignals(void);
|
||||
|
||||
|
@ -402,17 +403,21 @@ int rpmdbRemove(rpmdb db, unsigned int offset, int tolerant) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int addIndexEntry(dbiIndex * idx, char * index, dbiIndexRecord rec) {
|
||||
static int addIndexEntry(dbiIndex * idx, char * index, unsigned int offset,
|
||||
unsigned int fileNumber) {
|
||||
dbiIndexSet set;
|
||||
dbiIndexRecord irec;
|
||||
int rc;
|
||||
|
||||
irec = dbiReturnIndexRecordInstance(offset, fileNumber);
|
||||
|
||||
rc = dbiSearchIndex(idx, index, &set);
|
||||
if (rc == -1) /* error */
|
||||
return 1;
|
||||
|
||||
if (rc == 1) /* new item */
|
||||
set = dbiCreateIndexRecord();
|
||||
dbiAppendIndexRecord(&set, rec);
|
||||
dbiAppendIndexRecord(&set, irec);
|
||||
if (dbiUpdateIndex(idx, index, &set))
|
||||
exit(1);
|
||||
dbiFreeIndexRecord(set);
|
||||
|
@ -420,7 +425,6 @@ static int addIndexEntry(dbiIndex * idx, char * index, dbiIndexRecord rec) {
|
|||
}
|
||||
|
||||
int rpmdbAdd(rpmdb db, Header dbentry) {
|
||||
dbiIndexRecord rec;
|
||||
unsigned int dboffset;
|
||||
unsigned int i, j;
|
||||
char ** fileList;
|
||||
|
@ -469,13 +473,9 @@ int rpmdbAdd(rpmdb db, Header dbentry) {
|
|||
headerWrite(faFileno(db->pkgs), dbentry, HEADER_MAGIC_NO);
|
||||
|
||||
/* Now update the appropriate indexes */
|
||||
|
||||
/* structure assignment */
|
||||
rec = dbiReturnIndexRecordInstance(dboffset, 0);
|
||||
|
||||
if (addIndexEntry(db->nameIndex, name, rec))
|
||||
if (addIndexEntry(db->nameIndex, name, dboffset, 0))
|
||||
rc = 1;
|
||||
if (addIndexEntry(db->groupIndex, group, rec))
|
||||
if (addIndexEntry(db->groupIndex, group, dboffset, 0))
|
||||
rc = 1;
|
||||
|
||||
for (i = 0; i < triggerCount; i++) {
|
||||
|
@ -483,20 +483,21 @@ int rpmdbAdd(rpmdb db, Header dbentry) {
|
|||
for (j = 0; j < i; j++)
|
||||
if (!strcmp(triggerList[i], triggerList[j])) break;
|
||||
if (j == i)
|
||||
rc += addIndexEntry(db->triggerIndex, triggerList[i], rec);
|
||||
rc += addIndexEntry(db->triggerIndex, triggerList[i], dboffset, 0);
|
||||
}
|
||||
|
||||
for (i = 0; i < conflictCount; i++)
|
||||
rc += addIndexEntry(db->conflictsIndex, conflictList[i], rec);
|
||||
rc += addIndexEntry(db->conflictsIndex, conflictList[i], dboffset, 0);
|
||||
|
||||
for (i = 0; i < requiredbyCount; i++)
|
||||
rc += addIndexEntry(db->requiredbyIndex, requiredbyList[i], rec);
|
||||
rc += addIndexEntry(db->requiredbyIndex, requiredbyList[i],
|
||||
dboffset, 0);
|
||||
|
||||
for (i = 0; i < providesCount; i++)
|
||||
rc += addIndexEntry(db->providesIndex, providesList[i], rec);
|
||||
rc += addIndexEntry(db->providesIndex, providesList[i], dboffset, 0);
|
||||
|
||||
for (i = 0; i < count; i++)
|
||||
rc += addIndexEntry(db->fileIndex, fileList[i], rec);
|
||||
rc += addIndexEntry(db->fileIndex, fileList[i], dboffset, i);
|
||||
|
||||
dbiSyncIndex(db->nameIndex);
|
||||
dbiSyncIndex(db->groupIndex);
|
||||
|
|
Loading…
Reference in New Issue