Fold several functions into mdb_open/mdb_close

This commit is contained in:
whydoubt
2004-05-01 05:05:24 +00:00
parent 1a1127e930
commit c9b6454cf0
6 changed files with 40 additions and 63 deletions

View File

@@ -1,3 +1,10 @@
Sat May 1 00:02:09 CDT 2004 Jeff Smith <whydoubt@yahoo.com>
* doc/reference/libmdb/libmdb-sections.txt:
* include/mdbtools.h:
* src/libmdb/file.c:
* src/libmdb/mem.c:
* src/libmdb/stats.c: Fold several functions into mdb_open/mdb_close
Sat Apr 24 21:39:10 CDT 2004 Jeff Smith <whydoubt@yahoo.com> Sat Apr 24 21:39:10 CDT 2004 Jeff Smith <whydoubt@yahoo.com>
* src/libmdb/file.c: * src/libmdb/file.c:
* src/libmdb/mem.c: Moving some NULL pointer tests * src/libmdb/mem.c: Moving some NULL pointer tests

View File

@@ -115,7 +115,6 @@ mdb_unicode2ascii
mdb_ascii2unicode mdb_ascii2unicode
<SUBSECTION Private> <SUBSECTION Private>
mdb_alloc_stats mdb_alloc_stats
mdb_alloc_handle
mdb_test_string mdb_test_string
mdb_test_int mdb_test_int
mdb_add_sarg mdb_add_sarg
@@ -143,10 +142,7 @@ read_pg_if_16
read_pg_if_32 read_pg_if_32
read_pg_if read_pg_if
read_pg_if_n read_pg_if_n
mdb_alloc_file
mdb_free_file
mdb_alloc_tabledef mdb_alloc_tabledef
mdb_alloc_catalog mdb_alloc_catalog
mdb_free_handle
</SECTION> </SECTION>

View File

@@ -375,15 +375,16 @@ typedef struct {
/* mem.c */ /* mem.c */
extern void mdb_init(); extern void mdb_init();
extern void mdb_exit(); extern void mdb_exit();
extern MdbHandle *mdb_alloc_handle(); extern MdbStatistics *mdb_alloc_stats(MdbHandle *mdb);
extern void mdb_free_handle(MdbHandle *mdb); extern void mdb_free_stats(MdbHandle *mdb);
extern void mdb_alloc_catalog(MdbHandle *mdb);
extern void mdb_free_catalog(MdbHandle *mdb); extern void mdb_free_catalog(MdbHandle *mdb);
extern MdbTableDef *mdb_alloc_tabledef(MdbCatalogEntry *entry); extern MdbTableDef *mdb_alloc_tabledef(MdbCatalogEntry *entry);
extern void mdb_alloc_catalog(MdbHandle *mdb); extern void mdb_free_tabledef(MdbTableDef *table);
extern MdbFile *mdb_alloc_file(); extern void mdb_append_column(GPtrArray *columns, MdbColumn *in_col);
extern void mdb_free_file(MdbFile *f); extern void mdb_free_columns(GPtrArray *columns);
extern void mdb_append_index(GPtrArray *indices, MdbIndex *in_idx); extern void mdb_append_index(GPtrArray *indices, MdbIndex *in_idx);
extern MdbStatistics *mdb_alloc_stats(MdbHandle *mdb); extern void mdb_free_indices(GPtrArray *indices);
/* file.c */ /* file.c */
extern size_t mdb_read_pg(MdbHandle *mdb, unsigned long pg); extern size_t mdb_read_pg(MdbHandle *mdb, unsigned long pg);
@@ -406,7 +407,6 @@ extern void mdb_close(MdbHandle *mdb);
extern MdbHandle *mdb_clone_handle(MdbHandle *mdb); extern MdbHandle *mdb_clone_handle(MdbHandle *mdb);
extern void mdb_swap_pgbuf(MdbHandle *mdb); extern void mdb_swap_pgbuf(MdbHandle *mdb);
extern long _mdb_get_int32(unsigned char *buf, int offset); extern long _mdb_get_int32(unsigned char *buf, int offset);
extern void mdb_free_tabledef(MdbTableDef *table);
/* catalog.c */ /* catalog.c */
GPtrArray *mdb_read_catalog(MdbHandle *mdb, int obj_type); GPtrArray *mdb_read_catalog(MdbHandle *mdb, int obj_type);

View File

@@ -110,11 +110,13 @@ MdbHandle *mdb;
int bufsize; int bufsize;
MdbFile *f; MdbFile *f;
mdb = mdb_alloc_handle(); mdb = (MdbHandle *) malloc(sizeof(MdbHandle));
memset(mdb, '\0', sizeof(MdbHandle));
mdb_set_default_backend(mdb, "access");
/* need something to bootstrap with, reassign after page 0 is read */ /* need something to bootstrap with, reassign after page 0 is read */
mdb->fmt = &MdbJet3Constants; mdb->fmt = &MdbJet3Constants;
mdb->f = mdb_alloc_file(); mdb->f = f = (MdbFile *) malloc(sizeof(MdbFile));
f = mdb->f; memset(f, '\0', sizeof(MdbFile));
f->filename = (char *) malloc(strlen(filename)+1); f->filename = (char *) malloc(strlen(filename)+1);
bufsize = strlen(filename)+1; bufsize = strlen(filename)+1;
bufsize = mdb_find_file(filename, f->filename, bufsize); bufsize = mdb_find_file(filename, f->filename, bufsize);
@@ -123,7 +125,10 @@ MdbFile *f;
bufsize = mdb_find_file(filename, f->filename, bufsize); bufsize = mdb_find_file(filename, f->filename, bufsize);
if (bufsize) { if (bufsize) {
fprintf(stderr, "Can't alloc filename\n"); fprintf(stderr, "Can't alloc filename\n");
mdb_free_handle(mdb); free(f->filename);
free(f);
if (mdb->backend_name) free(mdb->backend_name);
free(mdb);
return NULL; return NULL;
} }
} }
@@ -171,18 +176,29 @@ MdbFile *f;
void void
mdb_close(MdbHandle *mdb) mdb_close(MdbHandle *mdb)
{ {
if (!mdb) return;
mdb_free_stats(mdb);
mdb_free_catalog(mdb);
if (mdb->backend_name) free(mdb->backend_name);
if (mdb->f) { if (mdb->f) {
mdb->f->refs--; if (mdb->f->refs > 1) {
mdb_free_file(mdb->f); mdb->f->refs--;
} else {
if (mdb->f->fd) close(mdb->f->fd);
if (mdb->f->filename) free(mdb->f->filename);
free(mdb->f);
}
} }
mdb_free_handle(mdb);
free(mdb);
} }
/** /**
* mdb_clone_handle: * mdb_clone_handle:
* @mdb: Handle to open MDB database file * @mdb: Handle to open MDB database file
* *
* Clones an existing database handle. Cloned handle shares the file descriptor * Clones an existing database handle. Cloned handle shares the file descriptor
* but has it's own page buffer, page position, and similar internal variables. * but has its own page buffer, page position, and similar internal variables.
* *
* Return value: new handle to the database. * Return value: new handle to the database.
*/ */
@@ -192,7 +208,7 @@ MdbHandle *mdb_clone_handle(MdbHandle *mdb)
MdbCatalogEntry *entry, *data; MdbCatalogEntry *entry, *data;
int i; int i;
newmdb = mdb_alloc_handle(); newmdb = (MdbHandle *) malloc(sizeof(MdbHandle));
memcpy(newmdb, mdb, sizeof(MdbHandle)); memcpy(newmdb, mdb, sizeof(MdbHandle));
newmdb->stats = NULL; newmdb->stats = NULL;
newmdb->catalog = g_ptr_array_new(); newmdb->catalog = g_ptr_array_new();

View File

@@ -65,48 +65,6 @@ mdb_free_stats(MdbHandle *mdb)
mdb->stats = NULL; mdb->stats = NULL;
} }
MdbFile *
mdb_alloc_file()
{
MdbFile *f;
f = (MdbFile *) malloc(sizeof(MdbFile));
memset(f, '\0', sizeof(MdbFile));
return f;
}
void
mdb_free_file(MdbFile *f)
{
if (!f) return;
if (f->refs > 0) return;
if (f->fd) close(f->fd);
if (f->filename) free(f->filename);
free(f);
}
MdbHandle *mdb_alloc_handle()
{
MdbHandle *mdb;
mdb = (MdbHandle *) malloc(sizeof(MdbHandle));
memset(mdb, '\0', sizeof(MdbHandle));
mdb_set_default_backend(mdb, "access");
return mdb;
}
void mdb_free_handle(MdbHandle *mdb)
{
if (!mdb) return;
mdb_free_stats(mdb);
mdb_free_catalog(mdb);
mdb_free_file(mdb->f);
if (mdb->backend_name) free(mdb->backend_name);
free(mdb);
}
void mdb_alloc_catalog(MdbHandle *mdb) void mdb_alloc_catalog(MdbHandle *mdb)
{ {
mdb->catalog = g_ptr_array_new(); mdb->catalog = g_ptr_array_new();

View File

@@ -50,7 +50,7 @@ mdb_stats_on(MdbHandle *mdb)
* Turns off statistics collection. * Turns off statistics collection.
* *
* If mdb_stats_off is not called, statistics will be turned off when handle * If mdb_stats_off is not called, statistics will be turned off when handle
* is freed using mdb_free_handle. * is freed using mdb_close.
**/ **/
void void
mdb_stats_off(MdbHandle *mdb) mdb_stats_off(MdbHandle *mdb)