From c78a330a27bb3844b97e694552efc4a373cf217b Mon Sep 17 00:00:00 2001 From: Michael Schroeder Date: Thu, 10 Dec 2020 16:37:26 +0100 Subject: [PATCH] Add _db_backend workaround for rpm-4.16.0 Rpm 4.16.0 cannot read the database if _db_config is not set. --- ext/repo_rpmdb_librpm.h | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/ext/repo_rpmdb_librpm.h b/ext/repo_rpmdb_librpm.h index e326e8d7..3f9798c2 100644 --- a/ext/repo_rpmdb_librpm.h +++ b/ext/repo_rpmdb_librpm.h @@ -12,6 +12,7 @@ * */ +#include #include #include @@ -98,6 +99,24 @@ stat_database(struct rpmdbstate *state, struct stat *statbuf) return 0; } +/* rpm-4.16.0 cannot read the database if _db_backend is not set */ +#ifndef HAVE_RPMDBNEXTITERATORHEADERBLOB +static void +set_db_backend() +{ + static int db_backend_set; + char *db_backend; + + if (db_backend_set) + return; + db_backend_set = 1; + db_backend = rpmExpand("%{?_db_backend}", NULL); + if (!db_backend || !*db_backend) + rpmReadConfigFiles(NULL, NULL); + solv_free(db_backend); +} +#endif + static int opendbenv(struct rpmdbstate *state) { @@ -116,6 +135,10 @@ opendbenv(struct rpmdbstate *state) delMacro(NULL, "_dbpath"); return 0; } +#ifndef HAVE_RPMDBNEXTITERATORHEADERBLOB + if (!strcmp(RPMVERSION, "4.16.0")) + set_db_backend(); +#endif if (rpmtsOpenDB(ts, O_RDONLY)) { pool_error(state->pool, 0, "rpmtsOpenDB failed: %s", strerror(errno)); -- 2.47.2