Merge pull request #4445

fe125647 Fixup RENAME_DB() macro (Howard Chu)
This commit is contained in:
Riccardo Spagni 2018-09-29 22:14:09 +02:00
commit 05c942aba8
No known key found for this signature in database
GPG Key ID: 55432DF31CCD4FCD

View File

@ -3490,7 +3490,17 @@ void BlockchainLMDB::fixup()
BlockchainDB::fixup(); BlockchainDB::fixup();
} }
#define RENAME_DB(name) \ #define RENAME_DB(name) do { \
char n2[] = name; \
MDB_dbi tdbi; \
n2[sizeof(n2)-2]--; \
/* play some games to put (name) on a writable page */ \
result = mdb_dbi_open(txn, n2, MDB_CREATE, &tdbi); \
if (result) \
throw0(DB_ERROR(lmdb_error("Failed to create " + std::string(n2) + ": ", result).c_str())); \
result = mdb_drop(txn, tdbi, 1); \
if (result) \
throw0(DB_ERROR(lmdb_error("Failed to delete " + std::string(n2) + ": ", result).c_str())); \
k.mv_data = (void *)name; \ k.mv_data = (void *)name; \
k.mv_size = sizeof(name)-1; \ k.mv_size = sizeof(name)-1; \
result = mdb_cursor_open(txn, 1, &c_cur); \ result = mdb_cursor_open(txn, 1, &c_cur); \
@ -3500,7 +3510,7 @@ void BlockchainLMDB::fixup()
if (result) \ if (result) \
throw0(DB_ERROR(lmdb_error("Failed to get DB record for " name ": ", result).c_str())); \ throw0(DB_ERROR(lmdb_error("Failed to get DB record for " name ": ", result).c_str())); \
ptr = (char *)k.mv_data; \ ptr = (char *)k.mv_data; \
ptr[sizeof(name)-2]++ ptr[sizeof(name)-2]++; } while(0)
#define LOGIF(y) if (ELPP->vRegistry()->allowed(y, "global")) #define LOGIF(y) if (ELPP->vRegistry()->allowed(y, "global"))