From: Michael Schroeder Date: Mon, 21 Oct 2019 12:52:31 +0000 (+0200) Subject: Add workaround to stat_database() to find other database backends X-Git-Tag: 0.7.8~7 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ea037722b0f2a1afc8416e08b36fd498a8bb14c4;p=thirdparty%2Flibsolv.git Add workaround to stat_database() to find other database backends This is pretty horrible. Rpm upstream wants to add a function that stats the database for us, so we may use that in some future version. --- diff --git a/ext/repo_rpmdb_librpm.h b/ext/repo_rpmdb_librpm.h index 64e795d2..6fdcfb0d 100644 --- a/ext/repo_rpmdb_librpm.h +++ b/ext/repo_rpmdb_librpm.h @@ -33,15 +33,32 @@ struct rpmdbstate { static int stat_database(struct rpmdbstate *state, struct stat *statbuf) { - char *dbpath; - dbpath = solv_dupjoin(state->rootdir, state->is_ostree ? "/usr/share/rpm/" : "/var/lib/rpm/", "Packages"); - if (stat(dbpath, statbuf)) + static const char *dbname[] = { + "Packages", + "Packages.db", + "rpmdb.sqlite", + "data.mdb", + "Packages", /* for error reporting */ + 0, + }; + int i; + + for (i = 0; ; i++) { - pool_error(state->pool, -1, "%s: %s", dbpath, strerror(errno)); - free(dbpath); - return -1; + char *dbpath = solv_dupjoin(state->rootdir, state->is_ostree ? "/usr/share/rpm/" : "/var/lib/rpm/", dbname[i]); + if (!stat(dbpath, statbuf)) + { + free(dbpath); + return 0; + } + if (errno != ENOENT || !dbname[i + 1]) + { + pool_error(state->pool, -1, "%s: %s", dbpath, strerror(errno)); + solv_free(dbpath); + return -1; + } + solv_free(dbpath); } - free(dbpath); return 0; }