diff options
Diffstat (limited to 'src/common')
-rw-r--r-- | src/common/packed.c | 8 | ||||
-rw-r--r-- | src/common/sqlite.c | 60 | ||||
-rw-r--r-- | src/common/sqlite.h | 3 |
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, ©); + + 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 */ |