Clean up mdb_clone_handle

This commit is contained in:
Evan Miller
2020-08-20 21:57:25 -04:00
parent 4d443840cb
commit 2ee83971fa
2 changed files with 13 additions and 8 deletions

View File

@@ -268,17 +268,19 @@ typedef struct {
unsigned int cur_pos; unsigned int cur_pos;
unsigned char pg_buf[MDB_PGSIZE]; unsigned char pg_buf[MDB_PGSIZE];
unsigned char alt_pg_buf[MDB_PGSIZE]; unsigned char alt_pg_buf[MDB_PGSIZE];
MdbFormatConstants *fmt;
char date_fmt[64];
const char *boolean_false_value;
const char *boolean_true_value;
unsigned int num_catalog; unsigned int num_catalog;
// Non-cloneable fields start here
GPtrArray *catalog; GPtrArray *catalog;
MdbBackend *default_backend; MdbBackend *default_backend;
char *backend_name; char *backend_name;
struct S_MdbTableDef *relationships_table; struct S_MdbTableDef *relationships_table;
char *relationships_values[5]; char *relationships_values[5];
MdbFormatConstants *fmt;
MdbStatistics *stats; MdbStatistics *stats;
char date_fmt[64];
const char *boolean_false_value;
const char *boolean_true_value;
GHashTable *backends; GHashTable *backends;
#ifdef HAVE_ICONV #ifdef HAVE_ICONV
iconv_t iconv_in; iconv_t iconv_in;

View File

@@ -17,6 +17,7 @@
*/ */
#include <inttypes.h> #include <inttypes.h>
#include <stddef.h>
#include "mdbtools.h" #include "mdbtools.h"
/* /*
@@ -323,18 +324,20 @@ MdbHandle *mdb_clone_handle(MdbHandle *mdb)
unsigned int i; unsigned int i;
newmdb = (MdbHandle *) g_memdup(mdb, sizeof(MdbHandle)); newmdb = (MdbHandle *) g_memdup(mdb, sizeof(MdbHandle));
newmdb->stats = NULL;
memset(newmdb + offsetof(MdbHandle, catalog), 0,
sizeof(MdbHandle) - offsetof(MdbHandle, catalog));
newmdb->catalog = g_ptr_array_new(); newmdb->catalog = g_ptr_array_new();
for (i=0;i<mdb->num_catalog;i++) { for (i=0;i<mdb->num_catalog;i++) {
entry = g_ptr_array_index(mdb->catalog,i); entry = g_ptr_array_index(mdb->catalog,i);
data = g_memdup(entry,sizeof(MdbCatalogEntry)); data = g_memdup(entry,sizeof(MdbCatalogEntry));
data->mdb = newmdb;
data->props = NULL; data->props = NULL;
g_ptr_array_add(newmdb->catalog, data); g_ptr_array_add(newmdb->catalog, data);
} }
mdb_iconv_init(newmdb); mdb_iconv_init(newmdb);
newmdb->backends = NULL;
newmdb->backend_name = NULL;
newmdb->default_backend = NULL;
mdb_set_default_backend(newmdb, mdb->backend_name); mdb_set_default_backend(newmdb, mdb->backend_name);
if (mdb->f) { if (mdb->f) {