Mercurial > molko
annotate src/libmlk-rpg/rpg/save.c @ 428:26d23999a54b
core: get rid of zfile
author | David Demelier <markand@malikania.fr> |
---|---|
date | Sat, 15 Oct 2022 14:38:15 +0200 |
parents | 7d2ebc334c8c |
children | 8f59201dc76b |
rev | line source |
---|---|
84
a6c2067709ce
core: implement basic save routines, closes #2476 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
1 /* |
a6c2067709ce
core: implement basic save routines, closes #2476 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
2 * save.c -- save functions |
a6c2067709ce
core: implement basic save routines, closes #2476 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
3 * |
378
460c78706989
misc: update copyright years
David Demelier <markand@malikania.fr>
parents:
348
diff
changeset
|
4 * Copyright (c) 2020-2022 David Demelier <markand@malikania.fr> |
84
a6c2067709ce
core: implement basic save routines, closes #2476 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
5 * |
a6c2067709ce
core: implement basic save routines, closes #2476 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
6 * Permission to use, copy, modify, and/or distribute this software for any |
a6c2067709ce
core: implement basic save routines, closes #2476 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
7 * purpose with or without fee is hereby granted, provided that the above |
a6c2067709ce
core: implement basic save routines, closes #2476 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
8 * copyright notice and this permission notice appear in all copies. |
a6c2067709ce
core: implement basic save routines, closes #2476 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
9 * |
a6c2067709ce
core: implement basic save routines, closes #2476 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
a6c2067709ce
core: implement basic save routines, closes #2476 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
a6c2067709ce
core: implement basic save routines, closes #2476 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
a6c2067709ce
core: implement basic save routines, closes #2476 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
a6c2067709ce
core: implement basic save routines, closes #2476 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
a6c2067709ce
core: implement basic save routines, closes #2476 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
a6c2067709ce
core: implement basic save routines, closes #2476 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
a6c2067709ce
core: implement basic save routines, closes #2476 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
17 */ |
a6c2067709ce
core: implement basic save routines, closes #2476 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
18 |
a6c2067709ce
core: implement basic save routines, closes #2476 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
19 #include <assert.h> |
a6c2067709ce
core: implement basic save routines, closes #2476 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
20 #include <stdio.h> |
172
6250883b81f0
core: improve save module, closes #2507
David Demelier <markand@malikania.fr>
parents:
168
diff
changeset
|
21 #include <stdlib.h> |
84
a6c2067709ce
core: implement basic save routines, closes #2476 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
22 #include <string.h> |
a6c2067709ce
core: implement basic save routines, closes #2476 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
23 |
a6c2067709ce
core: implement basic save routines, closes #2476 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
24 #include <sqlite3.h> |
a6c2067709ce
core: implement basic save routines, closes #2476 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
25 |
420
7d2ebc334c8c
misc: rename core to util
David Demelier <markand@malikania.fr>
parents:
411
diff
changeset
|
26 #include <util/util.h> |
319
b843eef4cc35
misc: fix some warnings
David Demelier <markand@malikania.fr>
parents:
316
diff
changeset
|
27 |
281
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
28 #include <core/error.h> |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
29 #include <core/sys.h> |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
30 #include <core/util.h> |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
31 |
243
71b3b7036de7
misc: lot of cleanups,
David Demelier <markand@malikania.fr>
parents:
241
diff
changeset
|
32 #include <assets/sql/init.h> |
172
6250883b81f0
core: improve save module, closes #2507
David Demelier <markand@malikania.fr>
parents:
168
diff
changeset
|
33 |
328
60a4f904da21
rpg: separate property from save
David Demelier <markand@malikania.fr>
parents:
320
diff
changeset
|
34 #include "property.h" |
84
a6c2067709ce
core: implement basic save routines, closes #2476 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
35 #include "save.h" |
a6c2067709ce
core: implement basic save routines, closes #2476 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
36 |
172
6250883b81f0
core: improve save module, closes #2507
David Demelier <markand@malikania.fr>
parents:
168
diff
changeset
|
37 #define SQL_BEGIN "BEGIN EXCLUSIVE TRANSACTION" |
6250883b81f0
core: improve save module, closes #2507
David Demelier <markand@malikania.fr>
parents:
168
diff
changeset
|
38 #define SQL_COMMIT "COMMIT" |
6250883b81f0
core: improve save module, closes #2507
David Demelier <markand@malikania.fr>
parents:
168
diff
changeset
|
39 #define SQL_ROLLBACK "ROLLBACK" |
84
a6c2067709ce
core: implement basic save routines, closes #2476 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
40 |
298
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
281
diff
changeset
|
41 static int |
172
6250883b81f0
core: improve save module, closes #2507
David Demelier <markand@malikania.fr>
parents:
168
diff
changeset
|
42 exec(struct save *db, const char *sql) |
6250883b81f0
core: improve save module, closes #2507
David Demelier <markand@malikania.fr>
parents:
168
diff
changeset
|
43 { |
6250883b81f0
core: improve save module, closes #2507
David Demelier <markand@malikania.fr>
parents:
168
diff
changeset
|
44 if (sqlite3_exec(db->handle, sql, NULL, NULL, NULL) != SQLITE_OK) |
6250883b81f0
core: improve save module, closes #2507
David Demelier <markand@malikania.fr>
parents:
168
diff
changeset
|
45 return errorf("%s", sqlite3_errmsg(db->handle)); |
84
a6c2067709ce
core: implement basic save routines, closes #2476 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
46 |
298
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
281
diff
changeset
|
47 return 0; |
172
6250883b81f0
core: improve save module, closes #2507
David Demelier <markand@malikania.fr>
parents:
168
diff
changeset
|
48 } |
84
a6c2067709ce
core: implement basic save routines, closes #2476 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
49 |
241
76afe639fd72
misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents:
172
diff
changeset
|
50 static const char * |
76afe639fd72
misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents:
172
diff
changeset
|
51 path(unsigned int idx) |
76afe639fd72
misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents:
172
diff
changeset
|
52 { |
280
11c824a82e63
core: fix save_open functions
David Demelier <markand@malikania.fr>
parents:
268
diff
changeset
|
53 return util_pathf("%s%u.db", sys_dir(SYS_DIR_SAVE), idx); |
241
76afe639fd72
misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents:
172
diff
changeset
|
54 } |
76afe639fd72
misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents:
172
diff
changeset
|
55 |
298
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
281
diff
changeset
|
56 static int |
172
6250883b81f0
core: improve save module, closes #2507
David Demelier <markand@malikania.fr>
parents:
168
diff
changeset
|
57 execu(struct save *db, const unsigned char *sql) |
6250883b81f0
core: improve save module, closes #2507
David Demelier <markand@malikania.fr>
parents:
168
diff
changeset
|
58 { |
6250883b81f0
core: improve save module, closes #2507
David Demelier <markand@malikania.fr>
parents:
168
diff
changeset
|
59 return exec(db, (const char *)sql); |
6250883b81f0
core: improve save module, closes #2507
David Demelier <markand@malikania.fr>
parents:
168
diff
changeset
|
60 } |
6250883b81f0
core: improve save module, closes #2507
David Demelier <markand@malikania.fr>
parents:
168
diff
changeset
|
61 |
298
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
281
diff
changeset
|
62 static int |
172
6250883b81f0
core: improve save module, closes #2507
David Demelier <markand@malikania.fr>
parents:
168
diff
changeset
|
63 verify(struct save *db) |
84
a6c2067709ce
core: implement basic save routines, closes #2476 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
64 { |
172
6250883b81f0
core: improve save module, closes #2507
David Demelier <markand@malikania.fr>
parents:
168
diff
changeset
|
65 struct { |
6250883b81f0
core: improve save module, closes #2507
David Demelier <markand@malikania.fr>
parents:
168
diff
changeset
|
66 time_t *date; |
328
60a4f904da21
rpg: separate property from save
David Demelier <markand@malikania.fr>
parents:
320
diff
changeset
|
67 struct property prop; |
172
6250883b81f0
core: improve save module, closes #2507
David Demelier <markand@malikania.fr>
parents:
168
diff
changeset
|
68 } table[] = { |
6250883b81f0
core: improve save module, closes #2507
David Demelier <markand@malikania.fr>
parents:
168
diff
changeset
|
69 { .date = &db->created, { .key = "molko.create-date" } }, |
6250883b81f0
core: improve save module, closes #2507
David Demelier <markand@malikania.fr>
parents:
168
diff
changeset
|
70 { .date = &db->updated, { .key = "molko.update-date" } }, |
6250883b81f0
core: improve save module, closes #2507
David Demelier <markand@malikania.fr>
parents:
168
diff
changeset
|
71 }; |
6250883b81f0
core: improve save module, closes #2507
David Demelier <markand@malikania.fr>
parents:
168
diff
changeset
|
72 |
6250883b81f0
core: improve save module, closes #2507
David Demelier <markand@malikania.fr>
parents:
168
diff
changeset
|
73 /* Ensure create and update dates are present. */ |
261
bfde372bf152
core: prefix utilities with util_
David Demelier <markand@malikania.fr>
parents:
258
diff
changeset
|
74 for (size_t i = 0; i < UTIL_SIZE(table); ++i) { |
328
60a4f904da21
rpg: separate property from save
David Demelier <markand@malikania.fr>
parents:
320
diff
changeset
|
75 if (property_load(&table[i].prop, db) < 0) { |
172
6250883b81f0
core: improve save module, closes #2507
David Demelier <markand@malikania.fr>
parents:
168
diff
changeset
|
76 sqlite3_close(db->handle); |
411
d74f53299252
make: add basic GNU make support
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
77 return errorf("database not initialized correctly"); |
172
6250883b81f0
core: improve save module, closes #2507
David Demelier <markand@malikania.fr>
parents:
168
diff
changeset
|
78 } |
6250883b81f0
core: improve save module, closes #2507
David Demelier <markand@malikania.fr>
parents:
168
diff
changeset
|
79 |
6250883b81f0
core: improve save module, closes #2507
David Demelier <markand@malikania.fr>
parents:
168
diff
changeset
|
80 *table[i].date = strtoull(table[i].prop.value, NULL, 10); |
6250883b81f0
core: improve save module, closes #2507
David Demelier <markand@malikania.fr>
parents:
168
diff
changeset
|
81 } |
84
a6c2067709ce
core: implement basic save routines, closes #2476 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
82 |
298
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
281
diff
changeset
|
83 return 0; |
84
a6c2067709ce
core: implement basic save routines, closes #2476 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
84 } |
a6c2067709ce
core: implement basic save routines, closes #2476 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
85 |
298
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
281
diff
changeset
|
86 static int |
281
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
87 prepare(struct save *s, struct save_stmt *stmt, const char *sql, const char *args, va_list ap) |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
88 { |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
89 stmt->parent = s; |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
90 stmt->handle = NULL; |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
91 |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
92 if (sqlite3_prepare(s->handle, sql, -1, (sqlite3_stmt **)&stmt->handle, NULL) != SQLITE_OK) |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
93 goto sqlite3_err; |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
94 |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
95 for (int i = 1; args && *args; ++args) { |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
96 switch (*args) { |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
97 case 'i': |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
98 case 'u': |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
99 if (sqlite3_bind_int(stmt->handle, i++, va_arg(ap, int)) != SQLITE_OK) |
298
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
281
diff
changeset
|
100 return -1; |
281
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
101 break; |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
102 case 's': |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
103 if (sqlite3_bind_text(stmt->handle, i++, va_arg(ap, const char *), -1, NULL) != SQLITE_OK) |
298
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
281
diff
changeset
|
104 return -1; |
281
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
105 break; |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
106 case 't': |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
107 if (sqlite3_bind_int64(stmt->handle, i++, va_arg(ap, time_t)) != SQLITE_OK) |
298
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
281
diff
changeset
|
108 return -1; |
281
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
109 break; |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
110 case ' ': |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
111 break; |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
112 default: |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
113 return errorf("invalid format: %c", *args); |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
114 } |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
115 } |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
116 |
298
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
281
diff
changeset
|
117 return 0; |
281
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
118 |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
119 sqlite3_err: |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
120 return errorf("%s", sqlite3_errmsg(s->handle)); |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
121 } |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
122 |
298
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
281
diff
changeset
|
123 static int |
281
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
124 extract(struct save_stmt *stmt, const char *args, va_list ap) |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
125 { |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
126 const int ncols = sqlite3_column_count(stmt->handle); |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
127 |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
128 for (int c = 0; args && *args; ++args) { |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
129 if (c >= ncols) |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
130 return errorf("too many arguments"); |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
131 |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
132 /* TODO: type check. */ |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
133 switch (*args) { |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
134 case 'i': |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
135 case 'u': |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
136 *va_arg(ap, int *) = sqlite3_column_int(stmt->handle, c++); |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
137 break; |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
138 case 's': { |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
139 char *str = va_arg(ap, char *); |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
140 size_t max = va_arg(ap, size_t); |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
141 |
420
7d2ebc334c8c
misc: rename core to util
David Demelier <markand@malikania.fr>
parents:
411
diff
changeset
|
142 util_strlcpy(str, (const char *)sqlite3_column_text(stmt->handle, c++), max); |
281
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
143 break; |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
144 } |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
145 case 't': |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
146 *va_arg(ap, time_t *) = sqlite3_column_int64(stmt->handle, c++); |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
147 break; |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
148 case ' ': |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
149 break; |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
150 default: |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
151 return errorf("invalid format: %c", *args); |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
152 } |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
153 } |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
154 |
298
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
281
diff
changeset
|
155 return 0; |
281
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
156 } |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
157 |
298
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
281
diff
changeset
|
158 int |
268
3f710c68bb97
core: hide internal functions in save
David Demelier <markand@malikania.fr>
parents:
261
diff
changeset
|
159 save_open(struct save *db, unsigned int idx, enum save_mode mode) |
3f710c68bb97
core: hide internal functions in save
David Demelier <markand@malikania.fr>
parents:
261
diff
changeset
|
160 { |
3f710c68bb97
core: hide internal functions in save
David Demelier <markand@malikania.fr>
parents:
261
diff
changeset
|
161 assert(db); |
3f710c68bb97
core: hide internal functions in save
David Demelier <markand@malikania.fr>
parents:
261
diff
changeset
|
162 |
3f710c68bb97
core: hide internal functions in save
David Demelier <markand@malikania.fr>
parents:
261
diff
changeset
|
163 return save_open_path(db, path(idx), mode); |
3f710c68bb97
core: hide internal functions in save
David Demelier <markand@malikania.fr>
parents:
261
diff
changeset
|
164 } |
3f710c68bb97
core: hide internal functions in save
David Demelier <markand@malikania.fr>
parents:
261
diff
changeset
|
165 |
298
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
281
diff
changeset
|
166 int |
172
6250883b81f0
core: improve save module, closes #2507
David Demelier <markand@malikania.fr>
parents:
168
diff
changeset
|
167 save_open_path(struct save *db, const char *path, enum save_mode mode) |
84
a6c2067709ce
core: implement basic save routines, closes #2476 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
168 { |
172
6250883b81f0
core: improve save module, closes #2507
David Demelier <markand@malikania.fr>
parents:
168
diff
changeset
|
169 assert(db); |
6250883b81f0
core: improve save module, closes #2507
David Demelier <markand@malikania.fr>
parents:
168
diff
changeset
|
170 assert(path); |
6250883b81f0
core: improve save module, closes #2507
David Demelier <markand@malikania.fr>
parents:
168
diff
changeset
|
171 |
6250883b81f0
core: improve save module, closes #2507
David Demelier <markand@malikania.fr>
parents:
168
diff
changeset
|
172 int flags = 0; |
6250883b81f0
core: improve save module, closes #2507
David Demelier <markand@malikania.fr>
parents:
168
diff
changeset
|
173 |
6250883b81f0
core: improve save module, closes #2507
David Demelier <markand@malikania.fr>
parents:
168
diff
changeset
|
174 switch (mode) { |
6250883b81f0
core: improve save module, closes #2507
David Demelier <markand@malikania.fr>
parents:
168
diff
changeset
|
175 case SAVE_MODE_WRITE: |
6250883b81f0
core: improve save module, closes #2507
David Demelier <markand@malikania.fr>
parents:
168
diff
changeset
|
176 flags = SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE; |
6250883b81f0
core: improve save module, closes #2507
David Demelier <markand@malikania.fr>
parents:
168
diff
changeset
|
177 break; |
6250883b81f0
core: improve save module, closes #2507
David Demelier <markand@malikania.fr>
parents:
168
diff
changeset
|
178 default: |
6250883b81f0
core: improve save module, closes #2507
David Demelier <markand@malikania.fr>
parents:
168
diff
changeset
|
179 flags = SQLITE_OPEN_READONLY; |
6250883b81f0
core: improve save module, closes #2507
David Demelier <markand@malikania.fr>
parents:
168
diff
changeset
|
180 break; |
6250883b81f0
core: improve save module, closes #2507
David Demelier <markand@malikania.fr>
parents:
168
diff
changeset
|
181 } |
6250883b81f0
core: improve save module, closes #2507
David Demelier <markand@malikania.fr>
parents:
168
diff
changeset
|
182 |
6250883b81f0
core: improve save module, closes #2507
David Demelier <markand@malikania.fr>
parents:
168
diff
changeset
|
183 if (sqlite3_open_v2(path, (sqlite3**)&db->handle, flags, NULL) != SQLITE_OK) |
280
11c824a82e63
core: fix save_open functions
David Demelier <markand@malikania.fr>
parents:
268
diff
changeset
|
184 goto sqlite3_err; |
172
6250883b81f0
core: improve save module, closes #2507
David Demelier <markand@malikania.fr>
parents:
168
diff
changeset
|
185 |
411
d74f53299252
make: add basic GNU make support
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
186 if (mode == SAVE_MODE_WRITE && execu(db, assets_init) < 0) |
280
11c824a82e63
core: fix save_open functions
David Demelier <markand@malikania.fr>
parents:
268
diff
changeset
|
187 goto sqlite3_err; |
172
6250883b81f0
core: improve save module, closes #2507
David Demelier <markand@malikania.fr>
parents:
168
diff
changeset
|
188 |
6250883b81f0
core: improve save module, closes #2507
David Demelier <markand@malikania.fr>
parents:
168
diff
changeset
|
189 return verify(db); |
280
11c824a82e63
core: fix save_open functions
David Demelier <markand@malikania.fr>
parents:
268
diff
changeset
|
190 |
11c824a82e63
core: fix save_open functions
David Demelier <markand@malikania.fr>
parents:
268
diff
changeset
|
191 sqlite3_err: |
11c824a82e63
core: fix save_open functions
David Demelier <markand@malikania.fr>
parents:
268
diff
changeset
|
192 errorf("%s", sqlite3_errmsg(db->handle)); |
11c824a82e63
core: fix save_open functions
David Demelier <markand@malikania.fr>
parents:
268
diff
changeset
|
193 sqlite3_close(db->handle); |
11c824a82e63
core: fix save_open functions
David Demelier <markand@malikania.fr>
parents:
268
diff
changeset
|
194 |
11c824a82e63
core: fix save_open functions
David Demelier <markand@malikania.fr>
parents:
268
diff
changeset
|
195 memset(db, 0, sizeof (*db)); |
11c824a82e63
core: fix save_open functions
David Demelier <markand@malikania.fr>
parents:
268
diff
changeset
|
196 |
298
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
281
diff
changeset
|
197 return -1; |
280
11c824a82e63
core: fix save_open functions
David Demelier <markand@malikania.fr>
parents:
268
diff
changeset
|
198 } |
11c824a82e63
core: fix save_open functions
David Demelier <markand@malikania.fr>
parents:
268
diff
changeset
|
199 |
298
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
281
diff
changeset
|
200 int |
280
11c824a82e63
core: fix save_open functions
David Demelier <markand@malikania.fr>
parents:
268
diff
changeset
|
201 save_ok(const struct save *db) |
11c824a82e63
core: fix save_open functions
David Demelier <markand@malikania.fr>
parents:
268
diff
changeset
|
202 { |
11c824a82e63
core: fix save_open functions
David Demelier <markand@malikania.fr>
parents:
268
diff
changeset
|
203 assert(db); |
11c824a82e63
core: fix save_open functions
David Demelier <markand@malikania.fr>
parents:
268
diff
changeset
|
204 |
11c824a82e63
core: fix save_open functions
David Demelier <markand@malikania.fr>
parents:
268
diff
changeset
|
205 return db && db->handle; |
84
a6c2067709ce
core: implement basic save routines, closes #2476 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
206 } |
a6c2067709ce
core: implement basic save routines, closes #2476 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
207 |
298
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
281
diff
changeset
|
208 int |
281
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
209 save_exec(struct save *db, const char *sql, const char *args, ...) |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
210 { |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
211 assert(save_ok(db)); |
330
e0657709fbe3
rpg: add support for basic quests
David Demelier <markand@malikania.fr>
parents:
329
diff
changeset
|
212 assert(sql); |
281
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
213 |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
214 struct save_stmt stmt; |
330
e0657709fbe3
rpg: add support for basic quests
David Demelier <markand@malikania.fr>
parents:
329
diff
changeset
|
215 enum save_stmt_errno ret; |
281
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
216 va_list ap; |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
217 |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
218 va_start(ap, args); |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
219 ret = prepare(db, &stmt, sql, args, ap); |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
220 va_end(ap); |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
221 |
298
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
281
diff
changeset
|
222 if (ret < 0) |
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
281
diff
changeset
|
223 return -1; |
281
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
224 |
328
60a4f904da21
rpg: separate property from save
David Demelier <markand@malikania.fr>
parents:
320
diff
changeset
|
225 ret = save_stmt_next(&stmt, NULL); |
281
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
226 save_stmt_finish(&stmt); |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
227 |
330
e0657709fbe3
rpg: add support for basic quests
David Demelier <markand@malikania.fr>
parents:
329
diff
changeset
|
228 return ret == SAVE_STMT_ERROR ? -1 : 0; |
281
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
229 } |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
230 |
84
a6c2067709ce
core: implement basic save routines, closes #2476 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
231 void |
172
6250883b81f0
core: improve save module, closes #2507
David Demelier <markand@malikania.fr>
parents:
168
diff
changeset
|
232 save_finish(struct save *db) |
84
a6c2067709ce
core: implement basic save routines, closes #2476 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
233 { |
172
6250883b81f0
core: improve save module, closes #2507
David Demelier <markand@malikania.fr>
parents:
168
diff
changeset
|
234 assert(db); |
6250883b81f0
core: improve save module, closes #2507
David Demelier <markand@malikania.fr>
parents:
168
diff
changeset
|
235 |
6250883b81f0
core: improve save module, closes #2507
David Demelier <markand@malikania.fr>
parents:
168
diff
changeset
|
236 if (db->handle) |
6250883b81f0
core: improve save module, closes #2507
David Demelier <markand@malikania.fr>
parents:
168
diff
changeset
|
237 sqlite3_close(db->handle); |
6250883b81f0
core: improve save module, closes #2507
David Demelier <markand@malikania.fr>
parents:
168
diff
changeset
|
238 |
6250883b81f0
core: improve save module, closes #2507
David Demelier <markand@malikania.fr>
parents:
168
diff
changeset
|
239 memset(db, 0, sizeof (*db)); |
84
a6c2067709ce
core: implement basic save routines, closes #2476 @2h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
240 } |
281
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
241 |
298
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
281
diff
changeset
|
242 int |
329
ea4a3af71c18
rpg: change save_stmt_next API
David Demelier <markand@malikania.fr>
parents:
328
diff
changeset
|
243 save_stmt_init(struct save_stmt *stmt, struct save *db, const char *sql, const char *args, ...) |
281
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
244 { |
329
ea4a3af71c18
rpg: change save_stmt_next API
David Demelier <markand@malikania.fr>
parents:
328
diff
changeset
|
245 assert(stmt); |
281
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
246 assert(save_ok(db)); |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
247 assert(args); |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
248 |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
249 va_list ap; |
298
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
281
diff
changeset
|
250 int ret; |
281
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
251 |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
252 va_start(ap, args); |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
253 ret = prepare(db, stmt, sql, args, ap); |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
254 va_end(ap); |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
255 |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
256 return ret; |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
257 } |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
258 |
328
60a4f904da21
rpg: separate property from save
David Demelier <markand@malikania.fr>
parents:
320
diff
changeset
|
259 enum save_stmt_errno |
281
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
260 save_stmt_next(struct save_stmt *stmt, const char *args, ...) |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
261 { |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
262 assert(stmt); |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
263 |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
264 va_list ap; |
328
60a4f904da21
rpg: separate property from save
David Demelier <markand@malikania.fr>
parents:
320
diff
changeset
|
265 enum save_stmt_errno ret = SAVE_STMT_ERROR; |
281
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
266 |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
267 switch (sqlite3_step(stmt->handle)) { |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
268 case SQLITE_ROW: |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
269 va_start(ap, args); |
411
d74f53299252
make: add basic GNU make support
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
270 |
328
60a4f904da21
rpg: separate property from save
David Demelier <markand@malikania.fr>
parents:
320
diff
changeset
|
271 if (extract(stmt, args, ap) == 0) |
60a4f904da21
rpg: separate property from save
David Demelier <markand@malikania.fr>
parents:
320
diff
changeset
|
272 ret = SAVE_STMT_ROW; |
411
d74f53299252
make: add basic GNU make support
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
273 |
281
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
274 va_end(ap); |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
275 break; |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
276 case SQLITE_DONE: |
328
60a4f904da21
rpg: separate property from save
David Demelier <markand@malikania.fr>
parents:
320
diff
changeset
|
277 ret = SAVE_STMT_DONE; |
281
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
278 break; |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
279 default: |
330
e0657709fbe3
rpg: add support for basic quests
David Demelier <markand@malikania.fr>
parents:
329
diff
changeset
|
280 errorf("%s", sqlite3_errmsg(stmt->parent->handle)); |
281
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
281 break; |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
282 } |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
283 |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
284 return ret; |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
285 } |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
286 |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
287 void |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
288 save_stmt_finish(struct save_stmt *stmt) |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
289 { |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
290 assert(stmt); |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
291 |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
292 sqlite3_finalize(stmt->handle); |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
293 memset(stmt, 0, sizeof (*stmt)); |
87b8c7510717
rpg: implement load/save for characters
David Demelier <markand@malikania.fr>
parents:
280
diff
changeset
|
294 } |
330
e0657709fbe3
rpg: add support for basic quests
David Demelier <markand@malikania.fr>
parents:
329
diff
changeset
|
295 |
e0657709fbe3
rpg: add support for basic quests
David Demelier <markand@malikania.fr>
parents:
329
diff
changeset
|
296 int |
e0657709fbe3
rpg: add support for basic quests
David Demelier <markand@malikania.fr>
parents:
329
diff
changeset
|
297 save_tx_begin(struct save *s) |
e0657709fbe3
rpg: add support for basic quests
David Demelier <markand@malikania.fr>
parents:
329
diff
changeset
|
298 { |
e0657709fbe3
rpg: add support for basic quests
David Demelier <markand@malikania.fr>
parents:
329
diff
changeset
|
299 assert(save_ok(s)); |
e0657709fbe3
rpg: add support for basic quests
David Demelier <markand@malikania.fr>
parents:
329
diff
changeset
|
300 |
e0657709fbe3
rpg: add support for basic quests
David Demelier <markand@malikania.fr>
parents:
329
diff
changeset
|
301 return save_exec(s, "BEGIN EXCLUSIVE TRANSACTION", NULL); |
e0657709fbe3
rpg: add support for basic quests
David Demelier <markand@malikania.fr>
parents:
329
diff
changeset
|
302 } |
e0657709fbe3
rpg: add support for basic quests
David Demelier <markand@malikania.fr>
parents:
329
diff
changeset
|
303 |
e0657709fbe3
rpg: add support for basic quests
David Demelier <markand@malikania.fr>
parents:
329
diff
changeset
|
304 void |
e0657709fbe3
rpg: add support for basic quests
David Demelier <markand@malikania.fr>
parents:
329
diff
changeset
|
305 save_tx_rollback(struct save *s) |
e0657709fbe3
rpg: add support for basic quests
David Demelier <markand@malikania.fr>
parents:
329
diff
changeset
|
306 { |
e0657709fbe3
rpg: add support for basic quests
David Demelier <markand@malikania.fr>
parents:
329
diff
changeset
|
307 assert(save_ok(s)); |
e0657709fbe3
rpg: add support for basic quests
David Demelier <markand@malikania.fr>
parents:
329
diff
changeset
|
308 |
e0657709fbe3
rpg: add support for basic quests
David Demelier <markand@malikania.fr>
parents:
329
diff
changeset
|
309 (void)save_exec(s, "ROLLBACK", NULL); |
e0657709fbe3
rpg: add support for basic quests
David Demelier <markand@malikania.fr>
parents:
329
diff
changeset
|
310 } |
e0657709fbe3
rpg: add support for basic quests
David Demelier <markand@malikania.fr>
parents:
329
diff
changeset
|
311 |
e0657709fbe3
rpg: add support for basic quests
David Demelier <markand@malikania.fr>
parents:
329
diff
changeset
|
312 void |
e0657709fbe3
rpg: add support for basic quests
David Demelier <markand@malikania.fr>
parents:
329
diff
changeset
|
313 save_tx_commit(struct save *s) |
e0657709fbe3
rpg: add support for basic quests
David Demelier <markand@malikania.fr>
parents:
329
diff
changeset
|
314 { |
e0657709fbe3
rpg: add support for basic quests
David Demelier <markand@malikania.fr>
parents:
329
diff
changeset
|
315 assert(save_ok(s)); |
e0657709fbe3
rpg: add support for basic quests
David Demelier <markand@malikania.fr>
parents:
329
diff
changeset
|
316 |
e0657709fbe3
rpg: add support for basic quests
David Demelier <markand@malikania.fr>
parents:
329
diff
changeset
|
317 (void)save_exec(s, "COMMIT", NULL); |
e0657709fbe3
rpg: add support for basic quests
David Demelier <markand@malikania.fr>
parents:
329
diff
changeset
|
318 } |