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>
|
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
|
||||||
|
@@ -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>
|
||||||
|
|
||||||
|
@@ -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);
|
||||||
|
@@ -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();
|
||||||
|
@@ -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();
|
||||||
|
@@ -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)
|
||||||
|
Reference in New Issue
Block a user