]> git.ipfire.org Git - thirdparty/libsolv.git/commitdiff
Add workaround to stat_database() to find other database backends
authorMichael Schroeder <mls@suse.de>
Mon, 21 Oct 2019 12:52:31 +0000 (14:52 +0200)
committerMichael Schroeder <mls@suse.de>
Mon, 21 Oct 2019 12:52:31 +0000 (14:52 +0200)
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.

ext/repo_rpmdb_librpm.h

index 64e795d25fdb7ff24fab9189411c0cc2659fcecd..6fdcfb0d57d76064b6e59f9adec0114a9fb6b00a 100644 (file)
@@ -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;
 }