#include #include #include #include #include #include int check_index(rpmdb db, rpmTag tag, const char *str) { rpmdbMatchIterator mi = rpmdbInitIterator(db, tag, str, 0); int count = rpmdbGetIteratorCount(mi); rpmdbFreeIterator(mi); return (count > 0) ? 0 : 1; } int qf_or_provides(rpmdb db, const char *path) { if (check_index(db, RPMTAG_BASENAMES, path) == 0) return 0; if (check_index(db, RPMTAG_PROVIDENAME, path) == 0) return 0; struct stat st; if (lstat(path, &st) == 0) fprintf(stderr, "warning: file %s is not owned by any package\n", path); else fprintf(stderr, "error: file %s: %m\n", path); return 1; } int main(int argc, char *argv[]) { rpmdb db = NULL; rpmReadConfigFiles(NULL, NULL); rpmdbOpen(NULL, &db, O_RDONLY, 0644); assert(db); int i, rc = 0; for (i = 1; i < argc; i++) rc |= qf_or_provides(db, argv[i]); return rc; }