-/* open track databases */
-void trackdb_open(void) {
+/** @brief Open track databases
+ * @param dbupgrade Non-0 to allow non-current database versions
+ */
+void trackdb_open(int dbupgrade) {
- if(oldversion != config->dbversion) {
+ 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);
}
/* 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);
}
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 {
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 {
trackdb_globaldb = open_db("global.db", 0, DB_HASH, DB_CREATE, 0666);
trackdb_noticeddb = open_db("noticed.db",
DB_DUPSORT, DB_BTREE, DB_CREATE, 0666);
trackdb_globaldb = open_db("global.db", 0, DB_HASH, DB_CREATE, 0666);
trackdb_noticeddb = open_db("noticed.db",
DB_DUPSORT, DB_BTREE, DB_CREATE, 0666);
char buf[32];
snprintf(buf, sizeof buf, "%ld", config->dbversion);
char buf[32];
snprintf(buf, sizeof buf, "%ld", config->dbversion);