diff --git a/src/extras/dump.c b/src/extras/dump.c index 92ebf60..04d78c8 100644 --- a/src/extras/dump.c +++ b/src/extras/dump.c @@ -17,11 +17,18 @@ int main(int argc, char **argv) int j; unsigned char data[17]; FILE *in; - int length; + int length; + int pg=0; + char addr[10]; in = fopen(argv[1],"r"); while (length = fread(data,1,16,in)) { - fprintf(stdout, "%06x ", i); + sprintf(addr, "%06x", i); + if (!strcmp(&addr[3],"000") || ! strcmp(&addr[3],"800")) { + fprintf(stdout,"-- Page 0x%04x (%d) --\n", pg, pg); + pg++; + } + fprintf(stdout,"%s ", addr); i+=length; for(j=0; jcatalog = g_list_append(mdb->catalog, data); + + while (next_pg) { + mdb_read_pg(mdb, next_pg); + next_pg = 0; + rows = mdb_catalog_rows(mdb); + for (i=0;ipg_buf[11 + 2 * i] & 0x40) { + next_pg_off = mdb_get_int16(mdb, 10 + 2 * i) & 0x0FFF; + next_pg = mdb_get_int16(mdb, next_pg_off+1); + fprintf(stdout,"YES! next pg = %04x %d\n",next_pg, next_pg); + continue; + } + if (mdb_catalog_entry(mdb, i, &entry)) { + data = g_memdup(&entry,sizeof(MdbCatalogEntry)); + mdb->catalog = g_list_append(mdb->catalog, data); + } } } return (mdb->catalog); +#endif + next_pg=0; + while (mdb_read_pg(mdb,next_pg)) { + if (mdb->pg_buf[0]==0x01 && + mdb->pg_buf[1]==0x01 && + mdb_get_int32(mdb,4)==2) { + rows = mdb_catalog_rows(mdb); + for (i=0;ipg_buf[11 + 2 * i] & 0x40) continue; + if (mdb_catalog_entry(mdb, i, &entry)) { + data = g_memdup(&entry,sizeof(MdbCatalogEntry)); + mdb->catalog = g_list_append(mdb->catalog, data); + } + } + } + next_pg++; + } } void mdb_dump_catalog(MdbHandle *mdb, int obj_type) { diff --git a/src/libmdb/file.c b/src/libmdb/file.c index ef0e154..d9123f8 100644 --- a/src/libmdb/file.c +++ b/src/libmdb/file.c @@ -57,7 +57,7 @@ struct stat status; return 0; } else if (len