switched over to using glib lists which will allow us the use of hashes when

we do the KKD records.
This commit is contained in:
brianb 2000-02-17 03:04:13 +00:00
parent 30ab45dc35
commit d4e241606c
6 changed files with 47 additions and 19 deletions

View File

@ -27,6 +27,7 @@
#include <unistd.h> #include <unistd.h>
#include <ctype.h> #include <ctype.h>
#include <string.h> #include <string.h>
#include <glib.h>
#define MDB_PGSIZE 2048 #define MDB_PGSIZE 2048
#define MDB_MAX_OBJ_NAME 30 #define MDB_MAX_OBJ_NAME 30
@ -50,11 +51,11 @@ enum {
typedef struct { typedef struct {
int fd; int fd;
char *filename; char *filename;
unsigned long cur_pg; guint16 cur_pg;
unsigned int row_num; guint16 row_num;
unsigned int cur_pos; unsigned int cur_pos;
unsigned char pg_buf[MDB_PGSIZE]; unsigned char pg_buf[MDB_PGSIZE];
int cur_cat_entry; GList *catalog;
} MDB_HANDLE; } MDB_HANDLE;
typedef struct { typedef struct {
@ -64,8 +65,11 @@ typedef struct {
unsigned int kkd_rowid; unsigned int kkd_rowid;
} MDB_CATALOG_ENTRY; } MDB_CATALOG_ENTRY;
/* mem.c */
extern MDB_HANDLE *mdb_alloc_handle(); extern MDB_HANDLE *mdb_alloc_handle();
extern void mdb_free_handle(MDB_HANDLE *mdb); 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 size_t mdb_read_pg(MDB_HANDLE *mdb, unsigned long pg);
extern int mdb_get_int16(MDB_HANDLE *mdb, int offset); extern int mdb_get_int16(MDB_HANDLE *mdb, int offset);
extern long mdb_get_int32(MDB_HANDLE *mdb, int offset); extern long mdb_get_int32(MDB_HANDLE *mdb, int offset);

View File

@ -1,12 +1,13 @@
CC = gcc CC = gcc
INC = -I ../include INC = -I ../include `glib-config --cflags`
OBJS = catalog.o mem.o file.o OBJS = catalog.o mem.o file.o
all: libmdb all: libmdb
libmdb: $(OBJS) libmdb: $(OBJS)
rm -f libmdb.a
ar cq libmdb.a $(OBJS) ar cq libmdb.a $(OBJS)
clean: clean:
rm -f core *.o *.a rm -f core *.o *.a

View File

@ -82,27 +82,39 @@ int mdb_catalog_rows(MDB_HANDLE *mdb)
{ {
return mdb_get_int16(mdb, 0x08); 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 rows;
int i,j;
unsigned char *buf;
MDB_CATALOG_ENTRY entry; MDB_CATALOG_ENTRY entry;
gpointer data;
mdb_read_pg(mdb, MDB_CATALOG_PG); mdb_read_pg(mdb, MDB_CATALOG_PG);
rows = mdb_catalog_rows(mdb); rows = mdb_catalog_rows(mdb);
mdb_free_catalog(mdb);
for (i=0;i<rows;i++) { for (i=0;i<rows;i++) {
if (mdb_catalog_entry(mdb, i, &entry)) { if (mdb_catalog_entry(mdb, i, &entry)) {
if (obj_type==-1 || obj_type==entry.object_type) { data = g_memdup(&entry,sizeof(MDB_CATALOG_ENTRY));
fprintf(stdout,"Type: %-15s Name: %-30s KKD pg: %04x row: %2d\n", mdb->catalog = g_list_append(mdb->catalog, data);
mdb_get_objtype_string(entry.object_type),
entry.object_name,
entry.kkd_pg,
entry.kkd_rowid);
}
} }
} }
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;
} }

View File

@ -33,5 +33,16 @@ void mdb_free_handle(MDB_HANDLE *mdb)
if (!mdb) return; if (!mdb) return;
if (mdb->filename) free(mdb->filename); if (mdb->filename) free(mdb->filename);
if (mdb->catalog) mdb_free_catalog(mdb);
free(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);
}
}

View File

@ -1,8 +1,8 @@
CC = gcc CC = gcc
INC = -I ../include INC = -I ../include `glib-config --cflags`
LIBS = -L ../libmdb -lmdb LIBS = -L ../libmdb -lmdb `glib-config --libs`
PROGS = prcat PROGS = prcat
PRCATOBJS = prcat.o PRCATOBJS = prcat.o

View File

@ -38,7 +38,7 @@ MDB_HANDLE *mdb;
mdb = mdb_open(argv[1]); 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); mdb_free_handle(mdb);
} }