summaryrefslogtreecommitdiff
path: root/src/common
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2019-10-27 22:33:11 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2019-10-27 23:10:41 (GMT)
commit609c184c3edb350a0da7fe29bf449a7189080c92 (patch)
tree4ddd6320ee58a6169cad377f9889a08298fbec47 /src/common
parentd0547bc36bd6ccb84eff128fc6e4f2df034a705a (diff)
Implemented snapshot related management features.
Diffstat (limited to 'src/common')
-rw-r--r--src/common/packed.c8
-rw-r--r--src/common/sqlite.c60
-rw-r--r--src/common/sqlite.h3
3 files changed, 71 insertions, 0 deletions
diff --git a/src/common/packed.c b/src/common/packed.c
index a10155d..0c4a222 100644
--- a/src/common/packed.c
+++ b/src/common/packed.c
@@ -97,8 +97,16 @@ void reset_packed_buffer(packed_buffer *pbuf)
void exit_packed_buffer(packed_buffer *pbuf)
{
+#ifndef NDEBUG
+ assert(pbuf->data != NULL);
+#endif
+
free(pbuf->data);
+#ifndef NDEBUG
+ pbuf->data = NULL;
+#endif
+
}
diff --git a/src/common/sqlite.c b/src/common/sqlite.c
index 3a94623..41f99ac 100644
--- a/src/common/sqlite.c
+++ b/src/common/sqlite.c
@@ -583,3 +583,63 @@ bool update_db_values(sqlite3 *db, const char *table, const bound_value *values,
return result;
}
+
+
+/******************************************************************************
+* *
+* Paramètres : db = base de données à sauvegarder. *
+* filename = fichier de destination pour la sauvegarde. *
+* *
+* Description : Effectue une copie d'une base de données en cours d'usage. *
+* *
+* Retour : Bilan de l'exécution de l'opération. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+bool backup_db(sqlite3 *db, const char *filename)
+{
+ bool result; /* Conclusion à faire remonter */
+ sqlite3 *copy; /* Copie de la base de données */
+ int ret; /* Bilan d'un appel à SQLite */
+ sqlite3_backup *backup; /* Gestionnaire de sauvegarde */
+
+ /**
+ * Cf. https://www.sqlite.org/backup.html
+ */
+
+ ret = sqlite3_open(filename, &copy);
+
+ if (ret != SQLITE_OK)
+ {
+ if (copy != NULL)
+ sqlite3_close(copy);
+
+ result = false;
+
+ goto exit;
+
+ }
+
+ backup = sqlite3_backup_init(copy, "main", db, "main");
+
+ if (backup == NULL)
+ result = false;
+
+ else
+ {
+ sqlite3_backup_step(backup, -1);
+ sqlite3_backup_finish(backup);
+
+ ret = sqlite3_errcode(copy);
+
+ result = (ret == SQLITE_OK);
+
+ }
+
+ exit:
+
+ return result;
+
+}
diff --git a/src/common/sqlite.h b/src/common/sqlite.h
index 99de12d..addc16d 100644
--- a/src/common/sqlite.h
+++ b/src/common/sqlite.h
@@ -87,6 +87,9 @@ bool store_db_values(sqlite3 *, const char *, const bound_value *, size_t);
/* Met à jour une série de valeurs dans une base de données. */
bool update_db_values(sqlite3 *, const char *, const bound_value *, size_t, const bound_value *, size_t);
+/* Effectue une copie d'une base de données en cours d'usage. */
+bool backup_db(sqlite3 *, const char *);
+
#endif /* _COMMON_SQLITE_H */