#include #include #include #include #include #include const char *progname = "rpmdb_checkversion"; /* Program name. */ /* * A very simple program to check for a Berkeley DB environment mismatch. */ int main(int argc, char *argv[]) { extern char *optarg; extern int optind; const char *data_dir, *home; int ch, quiet; DB_ENV *dbenv; int ret; /* * All of the shared database files live in home, but * data files will live in data_dir. */ quiet = 0; home = "/var/lib/rpm"; data_dir = "/var/lib/rpm"; while ((ch = getopt(argc, argv, "h:d:q")) != EOF) switch (ch) { case 'h': home = optarg; break; case 'd': data_dir = optarg; break; case 'q': quiet = 1; break; case '?': default: (void)fprintf(stderr, "usage: %s [-h home] [-d data_dir]\n", progname); return (0); } argc -= optind; argv += optind; if (argc != 0) { (void)fprintf(stderr, "usage: %s [-h home] [-d data_dir]\n", progname); return (0); } /* * Create an environment object and initialize it for error * reporting. */ if ((ret = db_env_create(&dbenv, 0)) != 0) { if (!quiet) fprintf(stderr, "%s: %s\n", progname, db_strerror(ret)); return (0); } if (quiet) { dbenv->set_errfile(dbenv, NULL); } else { dbenv->set_errfile(dbenv, stderr); } dbenv->set_errpfx(dbenv, progname); /* * We want to specify the shared memory buffer pool cachesize, * but everything else is the default. */ if ((ret = dbenv->set_cachesize(dbenv, 0, 64 * 1024, 0)) != 0) { dbenv->err(dbenv, ret, "set_cachesize"); dbenv->close(dbenv, 0); return (0); } /* Databases are in a subdirectory. */ (void)dbenv->set_data_dir(dbenv, data_dir); /* Open the environment with full transactional support. */ ret = dbenv->open(dbenv, home, DB_INIT_MPOOL, 0644); /* Close the environment handle. */ dbenv->close(dbenv, 0); if (ret == DB_VERSION_MISMATCH) { return (1); } return (0); }