]> git.pld-linux.org Git - packages/rpm.git/blobdiff - rpmdb_checkversion.c
macros for %_ver_lt %_ver_ge
[packages/rpm.git] / rpmdb_checkversion.c
index f85a4a70903f9387b337460be93b063b424565f9..58a169c4483b53f28d60a422da9a128ff86a537f 100644 (file)
@@ -5,6 +5,8 @@
 #include <unistd.h>
 #include <db.h>
 
+int    version_check __P((void));
+
 const char *progname = "rpmdb_checkversion";           /* Program name. */
 
 /*
@@ -20,6 +22,9 @@ main(int argc, char *argv[])
        DB_ENV *dbenv;
        int ret;
 
+       if ((ret = version_check()) != 0)
+               return (EXIT_FAILURE);
+
        /*
         * All of the shared database files live in home, but
         * data files will live in data_dir.
@@ -27,7 +32,7 @@ main(int argc, char *argv[])
        quiet = 0;
        home = "/var/lib/rpm";
        data_dir = "/var/lib/rpm";
-       while ((ch = getopt(argc, argv, "h:d:q")) != EOF)
+       while ((ch = getopt(argc, argv, "h:d:qV")) != EOF)
                switch (ch) {
                case 'h':
                        home = optarg;
@@ -38,17 +43,20 @@ main(int argc, char *argv[])
                case 'q':
                        quiet = 1;
                        break;
+               case 'V':
+                       printf("%s\n", db_version(NULL, NULL, NULL));
+                       return (EXIT_SUCCESS);
                case '?':
                default:
                        (void)fprintf(stderr, "usage: %s [-h home] [-d data_dir]\n", progname);
-                       return (0);
+                       return (1);
                }
        argc -= optind;
        argv += optind;
 
        if (argc != 0) {
                (void)fprintf(stderr, "usage: %s [-h home] [-d data_dir]\n", progname);
-               return (0);
+               return (1);
        }
 
        /*
@@ -58,7 +66,7 @@ main(int argc, char *argv[])
        if ((ret = db_env_create(&dbenv, 0)) != 0) {
                if (!quiet)
                        fprintf(stderr, "%s: %s\n", progname, db_strerror(ret));
-               return (0);
+               return (1);
        }
        if (quiet) {
                dbenv->set_errfile(dbenv, NULL);
@@ -74,7 +82,7 @@ main(int argc, char *argv[])
        if ((ret = dbenv->set_cachesize(dbenv, 0, 64 * 1024, 0)) != 0) {
                dbenv->err(dbenv, ret, "set_cachesize");
                dbenv->close(dbenv, 0);
-               return (0);
+               return (1);
        }
 
        /* Databases are in a subdirectory. */
@@ -84,10 +92,30 @@ main(int argc, char *argv[])
        ret = dbenv->open(dbenv, home, DB_INIT_MPOOL, 0644);
        /* Close the environment handle. */
        dbenv->close(dbenv, 0);
-
+#if 0
        if (ret == DB_VERSION_MISMATCH) {
+#else
+       if (ret != 0) {
+#endif
                return (1);
        }
 
        return (0);
 }
+
+int
+version_check()
+{
+       int v_major, v_minor, v_patch;
+
+       /* Make sure we're loaded with the right version of the DB library. */
+       (void)db_version(&v_major, &v_minor, &v_patch);
+       if (v_major != DB_VERSION_MAJOR || v_minor != DB_VERSION_MINOR) {
+               fprintf(stderr,
+                   "%s: version %d.%d doesn't match library version %d.%d\n",
+                   progname, DB_VERSION_MAJOR,
+                   DB_VERSION_MINOR, v_major, v_minor);
+               return (EXIT_FAILURE);
+       }
+       return (0);
+}
This page took 0.039964 seconds and 4 git commands to generate.