mirror of
https://github.com/mdbtools/mdbtools.git
synced 2025-04-05 20:31:00 +08:00
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:
parent
30ab45dc35
commit
d4e241606c
@ -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);
|
||||||
|
@ -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
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user