cbdata.create = 0;
handle = (*handle_cb)(pool, p, handle_cbdata);
if (handle)
- rpm_iterate_filelist(handle, 0, findfileconflicts_cb, &cbdata);
+ rpm_iterate_filelist(handle, RPM_ITERATE_FILELIST_NOGHOSTS, findfileconflicts_cb, &cbdata);
}
POOL_DEBUG(SAT_DEBUG_STATS, "filemap size: %d used %d\n", cbdata.cflmapn + 1, cbdata.cflmapused);
int pidx = cbdata.lookat.elements[i + 1];
int iterflags;
- iterflags = RPM_ITERATE_FILELIST_WITHMD5;
+ iterflags = RPM_ITERATE_FILELIST_WITHMD5 | RPM_ITERATE_FILELIST_NOGHOSTS;
if (pool->obsoleteusescolors)
iterflags |= RPM_ITERATE_FILELIST_WITHCOL;
p = pkgs->elements[pidx];
#define TAG_FILEMODES 1030
#define TAG_FILEMD5S 1035
#define TAG_FILELINKTOS 1036
+#define TAG_FILEFLAGS 1037
#define TAG_SOURCERPM 1044
#define TAG_PROVIDENAME 1047
#define TAG_REQUIREFLAGS 1048
#define DEP_STRONG (1 << 27)
#define DEP_PRE ((1 << 6) | (1 << 9) | (1 << 10) | (1 << 11) | (1 << 12))
+#define FILEFLAG_GHOST (1 << 6)
+
#ifdef RPM5
# define RPM_INDEX_SIZE 4
char **lt = 0;
unsigned int *di, diidx;
unsigned int *co = 0;
+ unsigned int *ff = 0;
unsigned int lastdir;
int lastdirl;
unsigned int *fm;
return;
}
}
+ if ((flags & RPM_ITERATE_FILELIST_NOGHOSTS) != 0)
+ {
+ ff = headint32array(rpmhead, TAG_FILEFLAGS, &cnt2);
+ if (!ff || cnt != cnt2)
+ {
+ sat_free(ff);
+ sat_free(co);
+ sat_free(md);
+ sat_free(fm);
+ sat_free(di);
+ sat_free(bn);
+ sat_free(dn);
+ return;
+ }
+ }
lastdir = dcnt;
lastdirl = 0;
for (i = 0; i < cnt; i++)
{
+ if (ff && (ff[i] & FILEFLAG_GHOST) != 0)
+ continue;
diidx = di[i];
if (diidx >= dcnt)
continue;
}
if (!md5p)
{
- sprintf(md5, "%08x%08x", (fm[i] >> 12) & 65535, 0);
+ sprintf(md5, "%08x%08x%08x%08x", (fm[i] >> 12) & 65535, 0, 0, 0);
md5p = md5;
}
}
sat_free(bn);
sat_free(dn);
sat_free(co);
+ sat_free(ff);
}
char *
#define RPM_ITERATE_FILELIST_ONLYDIRS (1 << 0)
#define RPM_ITERATE_FILELIST_WITHMD5 (1 << 1)
#define RPM_ITERATE_FILELIST_WITHCOL (1 << 2)
+#define RPM_ITERATE_FILELIST_NOGHOSTS (1 << 3)
void *rpm_byrpmdbid(Id rpmdbid, const char *rootdir, void **statep);
void *rpm_byfp(FILE *fp, const char *name, void **statep);