From d4e241606c33a97ef839477c3065cdd009b544bf Mon Sep 17 00:00:00 2001 From: brianb Date: Thu, 17 Feb 2000 03:04:13 +0000 Subject: [PATCH] switched over to using glib lists which will allow us the use of hashes when we do the KKD records. --- src/include/mdbtools.h | 10 +++++++--- src/libmdb/Makefile | 3 ++- src/libmdb/catalog.c | 36 ++++++++++++++++++++++++------------ src/libmdb/mem.c | 11 +++++++++++ src/util/Makefile | 4 ++-- src/util/prcat.c | 2 +- 6 files changed, 47 insertions(+), 19 deletions(-) diff --git a/src/include/mdbtools.h b/src/include/mdbtools.h index 5f39d6e..7c53a85 100644 --- a/src/include/mdbtools.h +++ b/src/include/mdbtools.h @@ -27,6 +27,7 @@ #include #include #include +#include #define MDB_PGSIZE 2048 #define MDB_MAX_OBJ_NAME 30 @@ -50,11 +51,11 @@ enum { typedef struct { int fd; char *filename; - unsigned long cur_pg; - unsigned int row_num; + guint16 cur_pg; + guint16 row_num; unsigned int cur_pos; unsigned char pg_buf[MDB_PGSIZE]; - int cur_cat_entry; + GList *catalog; } MDB_HANDLE; typedef struct { @@ -64,8 +65,11 @@ typedef struct { unsigned int kkd_rowid; } MDB_CATALOG_ENTRY; +/* mem.c */ extern MDB_HANDLE *mdb_alloc_handle(); extern void mdb_free_handle(MDB_HANDLE *mdb); +extern void mdb_free_catalog(MDB_HANDLE *mdb); + extern size_t mdb_read_pg(MDB_HANDLE *mdb, unsigned long pg); extern int mdb_get_int16(MDB_HANDLE *mdb, int offset); extern long mdb_get_int32(MDB_HANDLE *mdb, int offset); diff --git a/src/libmdb/Makefile b/src/libmdb/Makefile index e3a27d1..918a5a5 100644 --- a/src/libmdb/Makefile +++ b/src/libmdb/Makefile @@ -1,12 +1,13 @@ CC = gcc -INC = -I ../include +INC = -I ../include `glib-config --cflags` OBJS = catalog.o mem.o file.o all: libmdb libmdb: $(OBJS) + rm -f libmdb.a ar cq libmdb.a $(OBJS) clean: rm -f core *.o *.a diff --git a/src/libmdb/catalog.c b/src/libmdb/catalog.c index 5bad0b2..9918d5d 100644 --- a/src/libmdb/catalog.c +++ b/src/libmdb/catalog.c @@ -82,27 +82,39 @@ int mdb_catalog_rows(MDB_HANDLE *mdb) { return mdb_get_int16(mdb, 0x08); } -void mdb_catalog_dump(MDB_HANDLE *mdb, int obj_type) +GList *mdb_read_catalog(MDB_HANDLE *mdb, int obj_type) { -int off, save_pos; +int i; int rows; -int i,j; -unsigned char *buf; MDB_CATALOG_ENTRY entry; +gpointer data; mdb_read_pg(mdb, MDB_CATALOG_PG); rows = mdb_catalog_rows(mdb); - + mdb_free_catalog(mdb); for (i=0;icatalog = g_list_append(mdb->catalog, data); } } + return (mdb->catalog); +} +void mdb_dump_catalog(MDB_HANDLE *mdb, int obj_type) +{ +int rows; +GList *l; +MDB_CATALOG_ENTRY *entryp; + + mdb_read_catalog(mdb, obj_type); + for (l=g_list_first(mdb->catalog);l;l=g_list_next(l)) { + entryp = l->data; + fprintf(stdout,"Type: %-15s Name: %-30s KKD pg: %04x row: %2d\n", + mdb_get_objtype_string(entryp->object_type), + entryp->object_name, + entryp->kkd_pg, + entryp->kkd_rowid); + } + return; } diff --git a/src/libmdb/mem.c b/src/libmdb/mem.c index e4cfbfe..97372c6 100644 --- a/src/libmdb/mem.c +++ b/src/libmdb/mem.c @@ -33,5 +33,16 @@ void mdb_free_handle(MDB_HANDLE *mdb) if (!mdb) return; if (mdb->filename) free(mdb->filename); + if (mdb->catalog) mdb_free_catalog(mdb); free(mdb); } +void mdb_free_catalog(MDB_HANDLE *mdb) +{ +GList *l; +MDB_CATALOG_ENTRY *entryp; + + for (l=g_list_first(mdb->catalog);l;l=g_list_next(l)) { + entryp = l->data; + g_free(entryp); + } +} diff --git a/src/util/Makefile b/src/util/Makefile index 5db5ca6..1672e5a 100644 --- a/src/util/Makefile +++ b/src/util/Makefile @@ -1,8 +1,8 @@ CC = gcc -INC = -I ../include -LIBS = -L ../libmdb -lmdb +INC = -I ../include `glib-config --cflags` +LIBS = -L ../libmdb -lmdb `glib-config --libs` PROGS = prcat PRCATOBJS = prcat.o diff --git a/src/util/prcat.c b/src/util/prcat.c index 9a5a8d9..b7b9496 100644 --- a/src/util/prcat.c +++ b/src/util/prcat.c @@ -38,7 +38,7 @@ MDB_HANDLE *mdb; mdb = mdb_open(argv[1]); - mdb_catalog_dump(mdb,(argc > 2) ? atoi(argv[2]) : MDB_TABLE); + mdb_dump_catalog(mdb,(argc > 2) ? atoi(argv[2]) : MDB_TABLE); mdb_free_handle(mdb); }