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>
* src/libmdb/file.c:
* src/libmdb/mem.c: Moving some NULL pointer tests

View File

@@ -115,7 +115,6 @@ mdb_unicode2ascii
mdb_ascii2unicode
<SUBSECTION Private>
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
</SECTION>

View File

@@ -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);

View File

@@ -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();

View File

@@ -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();

View File

@@ -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)