From 01e7e6e1372e31040f5d0885b367507fe477bdd4 Mon Sep 17 00:00:00 2001 From: Jiwoong Im Date: Mon, 6 Feb 2017 17:04:42 +0900 Subject: [PATCH] Add restore step in opening backend db - If db is corrupted, delete db file and restore to default data. Change-Id: Ic60bf38d64ff5683790dce8d9541aa2e01e5be75 Signed-off-by: Jiwoong Im --- backend/sqlite.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/backend/sqlite.c b/backend/sqlite.c index 2f78e42..46fb0f3 100644 --- a/backend/sqlite.c +++ b/backend/sqlite.c @@ -79,6 +79,25 @@ static sqlite3 *open_sqlite3(const char *dbpath, bool readonly) r = sqlite3_open_v2(dbpath, &db, readonly ? SQLITE_OPEN_READONLY : SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL); + + if (db_exist && r == SQLITE_CORRUPT) { + bxt_err("Open '%s' failed: %s", dbpath, sqlite3_errmsg(db)); + + if (!strncmp("/etc", dbpath, 4)) + return NULL; + + bxt_err("Try to remove %s and restore to default value.", + dbpath); + + if (unlink(dbpath)) + return NULL; + + db_exist = false; + r = sqlite3_open_v2(dbpath, &db, + readonly ? SQLITE_OPEN_READONLY : + SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL); + } + if (r) { bxt_err("Open '%s' failed: %s", dbpath, sqlite3_errmsg(db)); errno = EIO; -- 2.7.4