mirror of
https://github.com/mdbtools/mdbtools.git
synced 2025-07-16 23:56:52 +08:00
more structuring
This commit is contained in:
parent
d4e241606c
commit
fcd8153070
@ -56,25 +56,38 @@ typedef struct {
|
|||||||
unsigned int cur_pos;
|
unsigned int cur_pos;
|
||||||
unsigned char pg_buf[MDB_PGSIZE];
|
unsigned char pg_buf[MDB_PGSIZE];
|
||||||
GList *catalog;
|
GList *catalog;
|
||||||
} MDB_HANDLE;
|
} MdbHandle;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
MdbHandle *mdb;
|
||||||
char object_name[MDB_MAX_OBJ_NAME+1];
|
char object_name[MDB_MAX_OBJ_NAME+1];
|
||||||
int object_type;
|
int object_type;
|
||||||
unsigned long kkd_pg;
|
unsigned long kkd_pg;
|
||||||
unsigned int kkd_rowid;
|
unsigned int kkd_rowid;
|
||||||
} MDB_CATALOG_ENTRY;
|
int num_props;
|
||||||
|
GArray *props;
|
||||||
|
GArray *columns;
|
||||||
|
} MdbCatalogEntry;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
char name[MDB_MAX_OBJ_NAME+1];
|
||||||
|
} MdbColumnProp;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
char name[MDB_MAX_OBJ_NAME+1];
|
||||||
|
GHashTable *properties;
|
||||||
|
} MdbColumn;
|
||||||
|
|
||||||
/* mem.c */
|
/* mem.c */
|
||||||
extern MDB_HANDLE *mdb_alloc_handle();
|
extern MdbHandle *mdb_alloc_handle();
|
||||||
extern void mdb_free_handle(MDB_HANDLE *mdb);
|
extern void mdb_free_handle(MdbHandle *mdb);
|
||||||
extern void mdb_free_catalog(MDB_HANDLE *mdb);
|
extern void mdb_free_catalog(MdbHandle *mdb);
|
||||||
|
|
||||||
extern size_t mdb_read_pg(MDB_HANDLE *mdb, unsigned long pg);
|
extern size_t mdb_read_pg(MdbHandle *mdb, unsigned long pg);
|
||||||
extern int mdb_get_int16(MDB_HANDLE *mdb, int offset);
|
extern int mdb_get_int16(MdbHandle *mdb, int offset);
|
||||||
extern long mdb_get_int32(MDB_HANDLE *mdb, int offset);
|
extern long mdb_get_int32(MdbHandle *mdb, int offset);
|
||||||
extern MDB_HANDLE *mdb_open(char *filename);
|
extern MdbHandle *mdb_open(char *filename);
|
||||||
extern void mdb_catalog_dump(MDB_HANDLE *mdb, int obj_type);
|
extern void mdb_catalog_dump(MdbHandle *mdb, int obj_type);
|
||||||
extern int mdb_catalog_rows(MDB_HANDLE *mdb);
|
extern int mdb_catalog_rows(MdbHandle *mdb);
|
||||||
extern MDB_CATALOG_ENTRY *mdb_get_catalog_entry(MDB_HANDLE *mdb, int rowid, MDB_CATALOG_ENTRY *entry);
|
extern MdbCatalogEntry *mdb_get_catalog_entry(MdbHandle *mdb, int rowid, MdbCatalogEntry *entry);
|
||||||
#endif /* _mdbtools_h_ */
|
#endif /* _mdbtools_h_ */
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
CC = gcc
|
CC = gcc
|
||||||
|
|
||||||
INC = -I ../include `glib-config --cflags`
|
INC = -I ../include `glib-config --cflags`
|
||||||
OBJS = catalog.o mem.o file.o
|
OBJS = catalog.o mem.o file.o kkd.o
|
||||||
|
|
||||||
all: libmdb
|
all: libmdb
|
||||||
|
|
||||||
|
@ -42,7 +42,7 @@ static char *type_name[] = {"Form",
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
MDB_CATALOG_ENTRY *mdb_catalog_entry(MDB_HANDLE *mdb, int rowid, MDB_CATALOG_ENTRY *entry)
|
MdbCatalogEntry *mdb_catalog_entry(MdbHandle *mdb, int rowid, MdbCatalogEntry *entry)
|
||||||
{
|
{
|
||||||
int offset;
|
int offset;
|
||||||
int rows;
|
int rows;
|
||||||
@ -64,9 +64,10 @@ for (j=offset;j<offset+32;j++)
|
|||||||
fprintf(stdout,"\n");
|
fprintf(stdout,"\n");
|
||||||
*/
|
*/
|
||||||
|
|
||||||
memset(entry, '\0', sizeof(MDB_CATALOG_ENTRY));
|
memset(entry, '\0', sizeof(MdbCatalogEntry));
|
||||||
entry->object_type = mdb->pg_buf[offset+0x09];
|
entry->object_type = mdb->pg_buf[offset+0x09];
|
||||||
j=0;
|
j=0;
|
||||||
|
entry->mdb = mdb;
|
||||||
for (i=offset+31;isprint(mdb->pg_buf[i]);i++) {
|
for (i=offset+31;isprint(mdb->pg_buf[i]);i++) {
|
||||||
if (j<=MDB_MAX_OBJ_NAME) {
|
if (j<=MDB_MAX_OBJ_NAME) {
|
||||||
entry->object_name[j++]=mdb->pg_buf[i];
|
entry->object_name[j++]=mdb->pg_buf[i];
|
||||||
@ -78,15 +79,15 @@ fprintf(stdout,"\n");
|
|||||||
|
|
||||||
return entry;
|
return entry;
|
||||||
}
|
}
|
||||||
int mdb_catalog_rows(MDB_HANDLE *mdb)
|
int mdb_catalog_rows(MdbHandle *mdb)
|
||||||
{
|
{
|
||||||
return mdb_get_int16(mdb, 0x08);
|
return mdb_get_int16(mdb, 0x08);
|
||||||
}
|
}
|
||||||
GList *mdb_read_catalog(MDB_HANDLE *mdb, int obj_type)
|
GList *mdb_read_catalog(MdbHandle *mdb, int obj_type)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
int rows;
|
int rows;
|
||||||
MDB_CATALOG_ENTRY entry;
|
MdbCatalogEntry entry;
|
||||||
gpointer data;
|
gpointer data;
|
||||||
|
|
||||||
mdb_read_pg(mdb, MDB_CATALOG_PG);
|
mdb_read_pg(mdb, MDB_CATALOG_PG);
|
||||||
@ -94,26 +95,28 @@ gpointer data;
|
|||||||
mdb_free_catalog(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)) {
|
||||||
data = g_memdup(&entry,sizeof(MDB_CATALOG_ENTRY));
|
data = g_memdup(&entry,sizeof(MdbCatalogEntry));
|
||||||
mdb->catalog = g_list_append(mdb->catalog, data);
|
mdb->catalog = g_list_append(mdb->catalog, data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return (mdb->catalog);
|
return (mdb->catalog);
|
||||||
}
|
}
|
||||||
void mdb_dump_catalog(MDB_HANDLE *mdb, int obj_type)
|
void mdb_dump_catalog(MdbHandle *mdb, int obj_type)
|
||||||
{
|
{
|
||||||
int rows;
|
int rows;
|
||||||
GList *l;
|
GList *l;
|
||||||
MDB_CATALOG_ENTRY *entryp;
|
MdbCatalogEntry *entryp;
|
||||||
|
|
||||||
mdb_read_catalog(mdb, obj_type);
|
mdb_read_catalog(mdb, obj_type);
|
||||||
for (l=g_list_first(mdb->catalog);l;l=g_list_next(l)) {
|
for (l=g_list_first(mdb->catalog);l;l=g_list_next(l)) {
|
||||||
entryp = l->data;
|
entryp = l->data;
|
||||||
fprintf(stdout,"Type: %-15s Name: %-30s KKD pg: %04x row: %2d\n",
|
if (obj_type==-1 || entryp->object_type==obj_type) {
|
||||||
|
fprintf(stdout,"Type: %-15s Name: %-30s KKD pg: %04x row: %2d\n",
|
||||||
mdb_get_objtype_string(entryp->object_type),
|
mdb_get_objtype_string(entryp->object_type),
|
||||||
entryp->object_name,
|
entryp->object_name,
|
||||||
entryp->kkd_pg,
|
entryp->kkd_pg,
|
||||||
entryp->kkd_rowid);
|
entryp->kkd_rowid);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -19,9 +19,9 @@
|
|||||||
|
|
||||||
#include "mdbtools.h"
|
#include "mdbtools.h"
|
||||||
|
|
||||||
MDB_HANDLE *mdb_open(char *filename)
|
MdbHandle *mdb_open(char *filename)
|
||||||
{
|
{
|
||||||
MDB_HANDLE *mdb;
|
MdbHandle *mdb;
|
||||||
|
|
||||||
mdb = mdb_alloc_handle();
|
mdb = mdb_alloc_handle();
|
||||||
mdb->filename = (char *) malloc(strlen(filename)+1);
|
mdb->filename = (char *) malloc(strlen(filename)+1);
|
||||||
@ -39,7 +39,7 @@ MDB_HANDLE *mdb;
|
|||||||
/*
|
/*
|
||||||
** mdb_read a wrapper for read that bails if anything is wrong
|
** mdb_read a wrapper for read that bails if anything is wrong
|
||||||
*/
|
*/
|
||||||
size_t mdb_read_pg(MDB_HANDLE *mdb, unsigned long pg)
|
size_t mdb_read_pg(MdbHandle *mdb, unsigned long pg)
|
||||||
{
|
{
|
||||||
size_t len;
|
size_t len;
|
||||||
off_t offset = pg * MDB_PGSIZE;
|
off_t offset = pg * MDB_PGSIZE;
|
||||||
@ -62,7 +62,7 @@ struct stat status;
|
|||||||
}
|
}
|
||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
int mdb_get_int16(MDB_HANDLE *mdb, int offset)
|
int mdb_get_int16(MdbHandle *mdb, int offset)
|
||||||
{
|
{
|
||||||
unsigned char *c;
|
unsigned char *c;
|
||||||
int i;
|
int i;
|
||||||
@ -75,7 +75,7 @@ int i;
|
|||||||
return i;
|
return i;
|
||||||
|
|
||||||
}
|
}
|
||||||
long mdb_get_int32(MDB_HANDLE *mdb, int offset)
|
long mdb_get_int32(MdbHandle *mdb, int offset)
|
||||||
{
|
{
|
||||||
long l;
|
long l;
|
||||||
unsigned char *c;
|
unsigned char *c;
|
||||||
@ -90,14 +90,14 @@ unsigned char *c;
|
|||||||
mdb->cur_pos+=4;
|
mdb->cur_pos+=4;
|
||||||
return l;
|
return l;
|
||||||
}
|
}
|
||||||
int mdb_set_pos(MDB_HANDLE *mdb, int pos)
|
int mdb_set_pos(MdbHandle *mdb, int pos)
|
||||||
{
|
{
|
||||||
if (pos<0 || pos >= MDB_PGSIZE) return 0;
|
if (pos<0 || pos >= MDB_PGSIZE) return 0;
|
||||||
|
|
||||||
mdb->cur_pos=pos;
|
mdb->cur_pos=pos;
|
||||||
return pos;
|
return pos;
|
||||||
}
|
}
|
||||||
int mdb_get_pos(MDB_HANDLE *mdb)
|
int mdb_get_pos(MdbHandle *mdb)
|
||||||
{
|
{
|
||||||
return mdb->cur_pos;
|
return mdb->cur_pos;
|
||||||
}
|
}
|
||||||
|
165
src/libmdb/kkd.c
165
src/libmdb/kkd.c
@ -25,7 +25,78 @@
|
|||||||
** KKD structures.
|
** KKD structures.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void mdb_kkd_dump(MDB_HANDLE *mdb, int rowid)
|
GArray *mdb_get_column_props(MdbCatalogEntry *entry, int start)
|
||||||
|
{
|
||||||
|
int i, j=0, pos, cnt=0;
|
||||||
|
int len, tmp, cplen;
|
||||||
|
MdbColumnProp prop;
|
||||||
|
char name[MDB_MAX_OBJ_NAME+1];
|
||||||
|
MdbHandle *mdb = entry->mdb;
|
||||||
|
|
||||||
|
entry->props = g_array_new(FALSE,FALSE,sizeof(MdbColumnProp));
|
||||||
|
len = mdb_get_int16(mdb,start);
|
||||||
|
pos = start + 6;
|
||||||
|
while (pos < start+len) {
|
||||||
|
tmp = mdb_get_int16(mdb,pos); /* length of string */
|
||||||
|
pos += 2;
|
||||||
|
cplen = tmp > MDB_MAX_OBJ_NAME ? MDB_MAX_OBJ_NAME : tmp;
|
||||||
|
g_memmove(prop.name,&mdb->pg_buf[pos],cplen);
|
||||||
|
prop.name[cplen]='\0';
|
||||||
|
pos += tmp;
|
||||||
|
g_array_append_val(entry->props, prop.name);
|
||||||
|
cnt++;
|
||||||
|
}
|
||||||
|
entry->num_props = cnt;
|
||||||
|
return entry->props;
|
||||||
|
}
|
||||||
|
|
||||||
|
GHashTable *mdb_get_column_def(MdbCatalogEntry *entry, int start)
|
||||||
|
{
|
||||||
|
GHashTable *hash;
|
||||||
|
MdbHandle *mdb = entry->mdb;
|
||||||
|
MdbColumnProp prop;
|
||||||
|
int tmp, pos, col_num, val_len, i;
|
||||||
|
int len, col_type;
|
||||||
|
unsigned char c;
|
||||||
|
int end;
|
||||||
|
|
||||||
|
fprintf(stdout,"\n data\n");
|
||||||
|
fprintf(stdout,"-------\n");
|
||||||
|
len = mdb_get_int16(mdb,start);
|
||||||
|
fprintf(stdout,"length = %3d\n",len);
|
||||||
|
pos = start + 6;
|
||||||
|
end = start + len;
|
||||||
|
while (pos < end) {
|
||||||
|
fprintf(stdout,"pos = %3d\n",pos);
|
||||||
|
start = pos;
|
||||||
|
tmp = mdb_get_int16(mdb,pos); /* length of field */
|
||||||
|
pos += 2;
|
||||||
|
col_type = mdb_get_int16(mdb,pos); /* ??? */
|
||||||
|
pos += 2;
|
||||||
|
col_num = 0;
|
||||||
|
if (col_type) {
|
||||||
|
col_num = mdb_get_int16(mdb,pos);
|
||||||
|
pos += 2;
|
||||||
|
}
|
||||||
|
val_len = mdb_get_int16(mdb,pos);
|
||||||
|
pos += 2;
|
||||||
|
fprintf(stdout,"length = %3d %04x %2d %2d ",tmp, col_type, col_num, val_len);
|
||||||
|
for (i=0;i<val_len;i++) {
|
||||||
|
c = mdb->pg_buf[pos+i];
|
||||||
|
if (isprint(c))
|
||||||
|
fprintf(stdout," %c",c);
|
||||||
|
else
|
||||||
|
fprintf(stdout," %02x",c);
|
||||||
|
|
||||||
|
}
|
||||||
|
pos = start + tmp;
|
||||||
|
prop = g_array_index(entry->props,MdbColumnProp,col_num);
|
||||||
|
fprintf(stdout," Property %s",prop.name);
|
||||||
|
fprintf(stdout,"\n");
|
||||||
|
}
|
||||||
|
return hash;
|
||||||
|
}
|
||||||
|
void mdb_kkd_dump(MdbCatalogEntry *entry)
|
||||||
{
|
{
|
||||||
int rows;
|
int rows;
|
||||||
int kkd_start, kkd_end;
|
int kkd_start, kkd_end;
|
||||||
@ -34,7 +105,13 @@ int len;
|
|||||||
int col_type, col_num, val_len;
|
int col_type, col_num, val_len;
|
||||||
int start;
|
int start;
|
||||||
unsigned char c;
|
unsigned char c;
|
||||||
|
MdbColumnProp prop;
|
||||||
|
char name[MDB_MAX_OBJ_NAME+1];
|
||||||
|
MdbHandle *mdb = entry->mdb;
|
||||||
|
int rowid = entry->kkd_rowid;
|
||||||
|
|
||||||
|
|
||||||
|
mdb_read_pg(mdb, entry->kkd_pg);
|
||||||
rows = mdb_get_int16(mdb,8);
|
rows = mdb_get_int16(mdb,8);
|
||||||
fprintf(stdout,"number of rows = %d\n",rows);
|
fprintf(stdout,"number of rows = %d\n",rows);
|
||||||
kkd_start = mdb_get_int16(mdb,10+rowid*2);
|
kkd_start = mdb_get_int16(mdb,10+rowid*2);
|
||||||
@ -54,87 +131,21 @@ unsigned char c;
|
|||||||
tmp = mdb_get_int16(mdb,pos);
|
tmp = mdb_get_int16(mdb,pos);
|
||||||
row_type = mdb_get_int16(mdb,pos+4);
|
row_type = mdb_get_int16(mdb,pos+4);
|
||||||
fprintf(stdout,"row size = %3d type = 0x%02x\n",tmp,row_type);
|
fprintf(stdout,"row size = %3d type = 0x%02x\n",tmp,row_type);
|
||||||
if (row_type==0x80) hdrpos = pos;
|
if (row_type==0x80) {
|
||||||
|
fprintf(stdout,"\nColumn Properties\n");
|
||||||
|
fprintf(stdout,"-----------------\n");
|
||||||
|
mdb_get_column_props(entry,pos);
|
||||||
|
for (i=0;i<entry->num_props;i++) {
|
||||||
|
prop = g_array_index(entry->props,MdbColumnProp,i);
|
||||||
|
fprintf(stdout,"%3d %s\n",i,prop.name);
|
||||||
|
}
|
||||||
|
}
|
||||||
if (row_type==0x01) datapos = pos;
|
if (row_type==0x01) datapos = pos;
|
||||||
pos += tmp;
|
pos += tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hdrpos) {
|
|
||||||
j=0;
|
|
||||||
fprintf(stdout,"\nheaders\n");
|
|
||||||
fprintf(stdout,"-------\n");
|
|
||||||
len = mdb_get_int16(mdb,hdrpos);
|
|
||||||
pos = hdrpos + 6;
|
|
||||||
while (pos < hdrpos+len) {
|
|
||||||
fprintf(stdout,"%3d ",j++);
|
|
||||||
tmp = mdb_get_int16(mdb,pos); /* length of string */
|
|
||||||
pos += 2;
|
|
||||||
for (i=0;i<tmp;i++)
|
|
||||||
fprintf(stdout,"%c",mdb->pg_buf[pos+i]);
|
|
||||||
fprintf(stdout,"\n");
|
|
||||||
pos += tmp;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (datapos) {
|
if (datapos) {
|
||||||
fprintf(stdout,"\n data\n");
|
mdb_get_column_def(entry, datapos);
|
||||||
fprintf(stdout,"-------\n");
|
|
||||||
len = mdb_get_int16(mdb,datapos);
|
|
||||||
pos = datapos + 6;
|
|
||||||
while (pos < datapos+len) {
|
|
||||||
start = pos;
|
|
||||||
tmp = mdb_get_int16(mdb,pos); /* length of field */
|
|
||||||
pos += 2;
|
|
||||||
col_type = mdb_get_int16(mdb,pos); /* ??? */
|
|
||||||
pos += 2;
|
|
||||||
col_num = 0;
|
|
||||||
if (col_type) {
|
|
||||||
col_num = mdb_get_int16(mdb,pos);
|
|
||||||
pos += 2;
|
|
||||||
}
|
|
||||||
val_len = mdb_get_int16(mdb,pos);
|
|
||||||
pos += 2;
|
|
||||||
fprintf(stdout,"length = %3d %04x %2d %2d ",tmp, col_type, col_num, val_len);
|
|
||||||
for (i=0;i<val_len;i++) {
|
|
||||||
c = mdb->pg_buf[pos+i];
|
|
||||||
if (isprint(c))
|
|
||||||
fprintf(stdout," %c",c);
|
|
||||||
else
|
|
||||||
fprintf(stdout," %02x",c);
|
|
||||||
|
|
||||||
}
|
|
||||||
fprintf(stdout,"\n");
|
|
||||||
pos = start + tmp;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
main(int argc, char **argv)
|
|
||||||
{
|
|
||||||
int rows;
|
|
||||||
int i;
|
|
||||||
unsigned char buf[2048];
|
|
||||||
MDB_HANDLE *mdb;
|
|
||||||
MDB_CATALOG_ENTRY entry;
|
|
||||||
|
|
||||||
|
|
||||||
if (argc<2) {
|
|
||||||
fprintf(stderr,"Usage: prtable <file> <table>\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
mdb = mdb_open(argv[1]);
|
|
||||||
|
|
||||||
mdb_read_pg(mdb, MDB_CATALOG_PG);
|
|
||||||
rows = mdb_catalog_rows(mdb);
|
|
||||||
|
|
||||||
for (i=0;i<rows;i++) {
|
|
||||||
if (mdb_catalog_entry(mdb, i, &entry)) {
|
|
||||||
if (!strcmp(entry.object_name,argv[2])) {
|
|
||||||
mdb_read_pg(mdb, entry.kkd_pg);
|
|
||||||
mdb_kkd_dump(mdb, entry.kkd_rowid);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
mdb_free_handle(mdb);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
@ -19,16 +19,16 @@
|
|||||||
|
|
||||||
#include "mdbtools.h"
|
#include "mdbtools.h"
|
||||||
|
|
||||||
MDB_HANDLE *mdb_alloc_handle()
|
MdbHandle *mdb_alloc_handle()
|
||||||
{
|
{
|
||||||
MDB_HANDLE *mdb;
|
MdbHandle *mdb;
|
||||||
|
|
||||||
mdb = (MDB_HANDLE *) malloc(sizeof(MDB_HANDLE));
|
mdb = (MdbHandle *) malloc(sizeof(MdbHandle));
|
||||||
memset(mdb, '\0', sizeof(MDB_HANDLE));
|
memset(mdb, '\0', sizeof(MdbHandle));
|
||||||
|
|
||||||
return mdb;
|
return mdb;
|
||||||
}
|
}
|
||||||
void mdb_free_handle(MDB_HANDLE *mdb)
|
void mdb_free_handle(MdbHandle *mdb)
|
||||||
{
|
{
|
||||||
if (!mdb) return;
|
if (!mdb) return;
|
||||||
|
|
||||||
@ -36,10 +36,10 @@ void mdb_free_handle(MDB_HANDLE *mdb)
|
|||||||
if (mdb->catalog) mdb_free_catalog(mdb);
|
if (mdb->catalog) mdb_free_catalog(mdb);
|
||||||
free(mdb);
|
free(mdb);
|
||||||
}
|
}
|
||||||
void mdb_free_catalog(MDB_HANDLE *mdb)
|
void mdb_free_catalog(MdbHandle *mdb)
|
||||||
{
|
{
|
||||||
GList *l;
|
GList *l;
|
||||||
MDB_CATALOG_ENTRY *entryp;
|
MdbCatalogEntry *entryp;
|
||||||
|
|
||||||
for (l=g_list_first(mdb->catalog);l;l=g_list_next(l)) {
|
for (l=g_list_first(mdb->catalog);l;l=g_list_next(l)) {
|
||||||
entryp = l->data;
|
entryp = l->data;
|
||||||
|
@ -3,14 +3,18 @@ CC = gcc
|
|||||||
|
|
||||||
INC = -I ../include `glib-config --cflags`
|
INC = -I ../include `glib-config --cflags`
|
||||||
LIBS = -L ../libmdb -lmdb `glib-config --libs`
|
LIBS = -L ../libmdb -lmdb `glib-config --libs`
|
||||||
PROGS = prcat
|
PROGS = prcat prtable
|
||||||
PRCATOBJS = prcat.o
|
PRCATOBJS = prcat.o
|
||||||
|
PRTABLEOBJS = prtable.o
|
||||||
|
|
||||||
all: $(PROGS)
|
all: $(PROGS)
|
||||||
|
|
||||||
prcat: $(PRCATOBJS)
|
prcat: $(PRCATOBJS)
|
||||||
$(CC) -g -o $@ $(PRCATOBJS) $(LIBS)
|
$(CC) -g -o $@ $(PRCATOBJS) $(LIBS)
|
||||||
|
|
||||||
|
prtable: $(PRTABLEOBJS)
|
||||||
|
$(CC) -g -o $@ $(PRTABLEOBJS) $(LIBS)
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -f core *.o $(PROGS)
|
rm -f core *.o $(PROGS)
|
||||||
|
|
||||||
|
@ -28,7 +28,7 @@ short digit;
|
|||||||
struct stat status;
|
struct stat status;
|
||||||
int rows, cur, off;
|
int rows, cur, off;
|
||||||
unsigned char buf[2048];
|
unsigned char buf[2048];
|
||||||
MDB_HANDLE *mdb;
|
MdbHandle *mdb;
|
||||||
|
|
||||||
|
|
||||||
if (argc<2) {
|
if (argc<2) {
|
||||||
|
Loading…
Reference in New Issue
Block a user