From 91c49659ef2983edd5f0fba814f3fdf13f2a5667 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Fri, 28 Sep 2018 21:02:32 +0200 Subject: [PATCH] orderdb is glue code, belongs outside of kernel. --- src/CMakeLists.txt | 2 ++ src/eressea.c | 2 +- src/kernel/CMakeLists.txt | 2 -- src/kernel/database.test.c | 1 + src/kernel/order.c | 31 +++++++++++++++++++++++- src/kernel/order.h | 12 +++++++++ src/kernel/orderdb.c | 34 ++------------------------ src/kernel/orderdb.h | 12 --------- src/orderdb.c | 43 +++++++++++++++++++++++++++++++++ src/orderdb.h | 25 +++++++++++++++++++ src/{kernel => }/orderdb.test.c | 0 11 files changed, 116 insertions(+), 48 deletions(-) create mode 100644 src/orderdb.c create mode 100644 src/orderdb.h rename src/{kernel => }/orderdb.test.c (100%) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index fb21a9d50..5800d1814 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -113,6 +113,7 @@ set (ERESSEA_SRC morale.c move.c names.c + orderdb.c orderfile.c piracy.c prefix.c @@ -221,6 +222,7 @@ set(TESTS_SRC monsters.test.c move.test.c names.test.c + orderdb.test.c orderfile.test.c piracy.test.c prefix.test.c diff --git a/src/eressea.c b/src/eressea.c index 382e23fa3..e1767811c 100644 --- a/src/eressea.c +++ b/src/eressea.c @@ -8,7 +8,6 @@ #include "kernel/equipment.h" #include "kernel/faction.h" #include "kernel/item.h" -#include "kernel/orderdb.h" #include "util/functions.h" #include "util/language.h" @@ -28,6 +27,7 @@ #include "creport.h" #include "report.h" #include "names.h" +#include "orderdb.h" #include "reports.h" #include "spells.h" #include "vortex.h" diff --git a/src/kernel/CMakeLists.txt b/src/kernel/CMakeLists.txt index 53161efe7..562562d8a 100644 --- a/src/kernel/CMakeLists.txt +++ b/src/kernel/CMakeLists.txt @@ -27,7 +27,6 @@ group.test.c item.test.c messages.test.c order.test.c -orderdb.test.c # pathfinder.test.c plane.test.c pool.test.c @@ -61,7 +60,6 @@ group.c item.c messages.c order.c -orderdb.c pathfinder.c plane.c pool.c diff --git a/src/kernel/database.test.c b/src/kernel/database.test.c index df777a580..3ec44896e 100644 --- a/src/kernel/database.test.c +++ b/src/kernel/database.test.c @@ -1,6 +1,7 @@ #include #include #include +#include #include "db/driver.h" #include "orderdb.h" diff --git a/src/kernel/order.c b/src/kernel/order.c index 2fd7c6eb8..e30ea6097 100644 --- a/src/kernel/order.c +++ b/src/kernel/order.c @@ -14,7 +14,6 @@ #include #include "order.h" -#include "orderdb.h" #include "skill.h" #include "keyword.h" @@ -36,6 +35,36 @@ # define ORD_KEYWORD(ord) (keyword_t)((ord)->command & 0xFFFF) # define OD_STRING(odata) ((odata) ? (odata)->_str : NULL) +void odata_create(order_data **pdata, size_t len, const char *str) +{ + order_data *data; + char *result; + + assert(pdata); + data = malloc(sizeof(order_data) + len + 1); + data->_refcount = 1; + result = (char *)(data + 1); + data->_str = (len > 0) ? result : NULL; + if (str) { + strcpy(result, str); + } + *pdata = data; +} + +void odata_release(order_data * od) +{ + if (od) { + if (--od->_refcount == 0) { + free(od); + } + } +} + +void odata_addref(order_data *od) +{ + ++od->_refcount; +} + void replace_order(order ** dlist, order * orig, const order * src) { assert(src); diff --git a/src/kernel/order.h b/src/kernel/order.h index b0d771b67..c5406b39e 100644 --- a/src/kernel/order.h +++ b/src/kernel/order.h @@ -37,6 +37,18 @@ extern "C" { #define CMD_PERSIST 0x020000 #define CMD_DEFAULT 0x040000 + typedef struct order_data { + const char *_str; + int _refcount; + } order_data; + + extern order_data *odata_load(int id); + extern int odata_save(order_data *od); + + void odata_create(order_data **pdata, size_t len, const char *str); + void odata_release(order_data * od); + void odata_addref(order_data *od); + typedef struct order { struct order *next; /* do not access this data: */ diff --git a/src/kernel/orderdb.c b/src/kernel/orderdb.c index c4c4746f0..42248c0ef 100644 --- a/src/kernel/orderdb.c +++ b/src/kernel/orderdb.c @@ -1,7 +1,7 @@ #include -#include "config.h" -#include "db/driver.h" +#include "kernel/config.h" +#include "kernel/db/driver.h" #include "orderdb.h" @@ -26,36 +26,6 @@ void orderdb_close(void) db_driver_close(DB_SWAP); } -void odata_create(order_data **pdata, size_t len, const char *str) -{ - order_data *data; - char *result; - - assert(pdata); - data = malloc(sizeof(order_data) + len + 1); - data->_refcount = 1; - result = (char *)(data + 1); - data->_str = (len > 0) ? result : NULL; - if (str) { - strcpy(result, str); - } - *pdata = data; -} - -void odata_release(order_data * od) -{ - if (od) { - if (--od->_refcount == 0) { - free(od); - } - } -} - -void odata_addref(order_data *od) -{ - ++od->_refcount; -} - order_data *odata_load(int id) { if (id > 0) { diff --git a/src/kernel/orderdb.h b/src/kernel/orderdb.h index 33f8b6fce..e17bdfea8 100644 --- a/src/kernel/orderdb.h +++ b/src/kernel/orderdb.h @@ -7,18 +7,6 @@ extern "C" { #endif - typedef struct order_data { - const char *_str; - int _refcount; - } order_data; - - void odata_create(order_data **pdata, size_t len, const char *str); - void odata_release(order_data * od); - void odata_addref(order_data *od); - - order_data *odata_load(int id); - int odata_save(order_data *od); - void orderdb_open(void); void orderdb_close(void); diff --git a/src/orderdb.c b/src/orderdb.c new file mode 100644 index 000000000..42248c0ef --- /dev/null +++ b/src/orderdb.c @@ -0,0 +1,43 @@ +#include + +#include "kernel/config.h" +#include "kernel/db/driver.h" + +#include "orderdb.h" + +#include + +#include + +#include +#include +#include + +void orderdb_open(void) +{ + const char *dbname; + + dbname = config_get("game.dbswap"); + db_driver_open(DB_SWAP, dbname); +} + +void orderdb_close(void) +{ + db_driver_close(DB_SWAP); +} + +order_data *odata_load(int id) +{ + if (id > 0) { + return db_driver_order_load(id); + } + return NULL; +} + +int odata_save(order_data *od) +{ + if (od->_str) { + return db_driver_order_save(od->_str); + } + return 0; +} diff --git a/src/orderdb.h b/src/orderdb.h new file mode 100644 index 000000000..cc809b1a6 --- /dev/null +++ b/src/orderdb.h @@ -0,0 +1,25 @@ +#ifndef H_ORDERDB +#define H_ORDERDB + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + typedef struct order_data { + const char *_str; + int _refcount; + } order_data; + + void odata_create(order_data **pdata, size_t len, const char *str); + void odata_release(order_data * od); + void odata_addref(order_data *od); + + void orderdb_open(void); + void orderdb_close(void); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/kernel/orderdb.test.c b/src/orderdb.test.c similarity index 100% rename from src/kernel/orderdb.test.c rename to src/orderdb.test.c