mdbtools/src/libmdb/mem.c

118 lines
2.7 KiB
C
Raw Normal View History

2000-02-13 07:51:37 +08:00
/* MDB Tools - A library for reading MS Access database files
* Copyright (C) 2000 Brian Bruns
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
#include "mdbtools.h"
void mdb_init()
{
mdb_init_backends();
}
void mdb_exit()
{
/* FIX ME -- need to deallocate backend structures */
g_hash_table_destroy(mdb_backends);
}
2003-01-02 06:29:39 +08:00
MdbFile *mdb_alloc_file()
{
MdbHandle *f;
f = (MdbFile *) malloc(sizeof(MdbFile));
memset(f, '\0', sizeof(MdbFile));
return f;
}
void mdb_free_file(MdbFile *f)
{
if (!f) return;
if (f->fd) close(f->fd);
if (f->filename) free(f->filename);
free(f);
}
2000-02-28 03:24:44 +08:00
MdbHandle *mdb_alloc_handle()
2000-02-13 07:51:37 +08:00
{
2000-02-28 03:24:44 +08:00
MdbHandle *mdb;
2000-02-13 07:51:37 +08:00
2000-02-28 03:24:44 +08:00
mdb = (MdbHandle *) malloc(sizeof(MdbHandle));
memset(mdb, '\0', sizeof(MdbHandle));
mdb_set_default_backend(mdb, "access");
2000-02-13 07:51:37 +08:00
return mdb;
}
2000-02-28 03:24:44 +08:00
void mdb_free_handle(MdbHandle *mdb)
2000-02-13 07:51:37 +08:00
{
if (!mdb) return;
if (mdb->catalog) mdb_free_catalog(mdb);
2003-01-02 06:29:39 +08:00
if (mdb->f) mdb_free_file(mdb->f);
2000-04-23 05:34:32 +08:00
if (mdb->backend_name) free(mdb->backend_name);
2000-02-13 07:51:37 +08:00
free(mdb);
}
2002-02-03 10:49:08 +08:00
void mdb_alloc_catalog(MdbHandle *mdb)
{
mdb->catalog = g_ptr_array_new();
2002-02-03 10:49:08 +08:00
}
2000-02-28 03:24:44 +08:00
void mdb_free_catalog(MdbHandle *mdb)
{
GList *l;
2000-03-05 21:10:42 +08:00
MdbCatalogEntry entry;
//g_ptr_array_free(mdb->catalog, FALSE);
mdb->catalog = NULL;
}
2000-03-05 01:31:07 +08:00
MdbTableDef *mdb_alloc_tabledef(MdbCatalogEntry *entry)
{
MdbTableDef *table;
table = (MdbTableDef *) malloc(sizeof(MdbTableDef));
memset(table, '\0', sizeof(MdbTableDef));
2000-03-09 12:48:59 +08:00
table->entry=entry;
2000-03-05 01:31:07 +08:00
strcpy(table->name, entry->object_name);
return table;
}
void mdb_free_tabledef(MdbTableDef *table)
{
2002-03-17 10:40:16 +08:00
if (table->usage_map) free(table->usage_map);
2000-03-05 01:31:07 +08:00
if (table) free(table);
}
mdb_append_column(GPtrArray *columns, MdbColumn *in_col)
{
MdbColumn *col;
2001-04-02 06:10:15 +08:00
col = g_memdup(in_col,sizeof(MdbColumn));
g_ptr_array_add(columns, col);
}
mdb_free_columns(GPtrArray *columns)
{
g_ptr_array_free(columns, TRUE);
}
2001-04-02 06:10:15 +08:00
mdb_append_index(GPtrArray *indices, MdbIndex *in_idx)
{
MdbIndex *idx;
idx = g_memdup(in_idx,sizeof(MdbIndex));
g_ptr_array_add(indices, idx);
}
mdb_free_indices(GPtrArray *indices)
{
g_ptr_array_free(indices, TRUE);
}