diff --git a/ChangeLog b/ChangeLog index 11c0f2f..818d4ea 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +Sat May 1 00:02:09 CDT 2004 Jeff Smith + * 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 * src/libmdb/file.c: * src/libmdb/mem.c: Moving some NULL pointer tests diff --git a/doc/reference/libmdb/libmdb-sections.txt b/doc/reference/libmdb/libmdb-sections.txt index beb35d3..5f2134a 100644 --- a/doc/reference/libmdb/libmdb-sections.txt +++ b/doc/reference/libmdb/libmdb-sections.txt @@ -115,7 +115,6 @@ mdb_unicode2ascii mdb_ascii2unicode mdb_alloc_stats -mdb_alloc_handle mdb_test_string mdb_test_int mdb_add_sarg @@ -143,10 +142,7 @@ read_pg_if_16 read_pg_if_32 read_pg_if read_pg_if_n -mdb_alloc_file -mdb_free_file mdb_alloc_tabledef mdb_alloc_catalog -mdb_free_handle diff --git a/include/mdbtools.h b/include/mdbtools.h index 69bba82..144a461 100644 --- a/include/mdbtools.h +++ b/include/mdbtools.h @@ -375,15 +375,16 @@ typedef struct { /* mem.c */ extern void mdb_init(); extern void mdb_exit(); -extern MdbHandle *mdb_alloc_handle(); -extern void mdb_free_handle(MdbHandle *mdb); +extern MdbStatistics *mdb_alloc_stats(MdbHandle *mdb); +extern void mdb_free_stats(MdbHandle *mdb); +extern void mdb_alloc_catalog(MdbHandle *mdb); extern void mdb_free_catalog(MdbHandle *mdb); extern MdbTableDef *mdb_alloc_tabledef(MdbCatalogEntry *entry); -extern void mdb_alloc_catalog(MdbHandle *mdb); -extern MdbFile *mdb_alloc_file(); -extern void mdb_free_file(MdbFile *f); +extern void mdb_free_tabledef(MdbTableDef *table); +extern void mdb_append_column(GPtrArray *columns, MdbColumn *in_col); +extern void mdb_free_columns(GPtrArray *columns); 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 */ 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 void mdb_swap_pgbuf(MdbHandle *mdb); extern long _mdb_get_int32(unsigned char *buf, int offset); -extern void mdb_free_tabledef(MdbTableDef *table); /* catalog.c */ GPtrArray *mdb_read_catalog(MdbHandle *mdb, int obj_type); diff --git a/src/libmdb/file.c b/src/libmdb/file.c index 19918f2..0dee3b6 100644 --- a/src/libmdb/file.c +++ b/src/libmdb/file.c @@ -110,11 +110,13 @@ MdbHandle *mdb; int bufsize; 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 */ mdb->fmt = &MdbJet3Constants; - mdb->f = mdb_alloc_file(); - f = mdb->f; + mdb->f = f = (MdbFile *) malloc(sizeof(MdbFile)); + memset(f, '\0', sizeof(MdbFile)); f->filename = (char *) malloc(strlen(filename)+1); bufsize = strlen(filename)+1; bufsize = mdb_find_file(filename, f->filename, bufsize); @@ -123,7 +125,10 @@ MdbFile *f; bufsize = mdb_find_file(filename, f->filename, bufsize); if (bufsize) { 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; } } @@ -171,18 +176,29 @@ MdbFile *f; void 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) { - mdb->f->refs--; - mdb_free_file(mdb->f); + if (mdb->f->refs > 1) { + 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: Handle to open MDB database file * * 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. */ @@ -192,7 +208,7 @@ MdbHandle *mdb_clone_handle(MdbHandle *mdb) MdbCatalogEntry *entry, *data; int i; - newmdb = mdb_alloc_handle(); + newmdb = (MdbHandle *) malloc(sizeof(MdbHandle)); memcpy(newmdb, mdb, sizeof(MdbHandle)); newmdb->stats = NULL; newmdb->catalog = g_ptr_array_new(); diff --git a/src/libmdb/mem.c b/src/libmdb/mem.c index 09a0a86..2f91057 100644 --- a/src/libmdb/mem.c +++ b/src/libmdb/mem.c @@ -65,48 +65,6 @@ mdb_free_stats(MdbHandle *mdb) 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) { mdb->catalog = g_ptr_array_new(); diff --git a/src/libmdb/stats.c b/src/libmdb/stats.c index addcf33..d663dc9 100644 --- a/src/libmdb/stats.c +++ b/src/libmdb/stats.c @@ -50,7 +50,7 @@ mdb_stats_on(MdbHandle *mdb) * Turns off statistics collection. * * 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 mdb_stats_off(MdbHandle *mdb)