+ /* check the database version first */
+ trackdb_globaldb = open_db("global.db", 0, DB_HASH, 0, 0666);
+ if(trackdb_globaldb) {
+ /* This is an existing database */
+ const char *s;
+ long oldversion;
+
+ s = trackdb_get_global("_dbversion");
+ oldversion = s ? atol(s) : 1;
+ if(oldversion > config->dbversion) {
+ /* Database is from the future */
+ fatal(0, "this version of DisOrder is too old for database version %ld",
+ oldversion);
+ }
+ if(oldversion < config->dbversion && !dbupgrade) {
+ /* This database needs upgrading. This isn't implemented yet so we just
+ * fail. */
+ fatal(0, "database needs upgrading from %ld to %ld",
+ oldversion, config->dbversion);
+ }
+ if(oldversion == config->dbversion && dbupgrade) {
+ /* This doesn't make any sense */
+ fatal(0, "database is already at current version");
+ }
+ newdb = 0;
+ /* Close the database again, we'll open it property below */
+ if((err = trackdb_globaldb->close(trackdb_globaldb, 0)))
+ fatal(0, "error closing global.db: %s", db_strerror(err));
+ trackdb_globaldb = 0;
+ } else {
+ if(dbupgrade) {
+ /* Cannot upgrade a new database */
+ fatal(0, "cannot upgrade a database that does not exist");
+ }
+ /* This is a brand new database */
+ newdb = 1;
+ }