mirror of
https://github.com/mdbtools/mdbtools.git
synced 2025-09-19 02:27:55 +08:00
Fold several functions into mdb_open/mdb_close
This commit is contained in:
@@ -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
|
||||
|
@@ -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>
|
||||
|
||||
|
@@ -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);
|
||||
|
@@ -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) {
|
||||
if (mdb->f->refs > 1) {
|
||||
mdb->f->refs--;
|
||||
mdb_free_file(mdb->f);
|
||||
} 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();
|
||||
|
@@ -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();
|
||||
|
@@ -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)
|
||||
|
Reference in New Issue
Block a user