... and here's a little clean up for kkd / mdb-props. It applies to github 
repository.

mdb-props used to output a lot of debug messages. This is because we are using 
#ifdef MDB_DEBUG rather than #if MDB_DEBUG. Note that mdbtools.h #defines 
MDB_DEBUG 0.

mdb-props used to want a 3rd argument, the name of the *MSysObject* column. It 
now defaults to "LvProp", that is the column containing the most useful 
information.

I also fixed a few changes in the obsolete file prkkd.c. It's really not 
usefull, now that mdb-props works ok. But since I did it, you can merge 
nevertheless.

Cheers
Index: mdbtools-0.6pre1/src/libmdb/kkd.c
===================================================================
--- mdbtools-0.6pre1.orig/src/libmdb/kkd.c
+++ mdbtools-0.6pre1/src/libmdb/kkd.c
@@ -109,11 +109,13 @@
 int rowid = entry->kkd_rowid;
 
 
+	fprintf(stdout, "kkd_pg=%d kkd_rowid=%d\n", entry->kkd_pg, rowid);
+
 	mdb_read_pg(mdb, entry->kkd_pg);
 	rows = mdb_get_int16(mdb->pg_buf, 8);
 	fprintf(stdout,"number of rows = %d\n",rows);
 	kkd_start = mdb_get_int16(mdb->pg_buf, 10+rowid*2);
-	fprintf(stdout,"kkd start = %d %04x\n",kkd_start,kkd_start);
+	fprintf(stdout,"kkd start = %d 0x%04x\n",kkd_start,kkd_start);
 	kkd_end = mdb->fmt->pg_size;
 	for (i=0;i<rows;i++) {
 		tmp = mdb_get_int16(mdb->pg_buf, 10+i*2);
@@ -123,7 +125,7 @@
 			kkd_end = tmp;
 		}
 	}
-	fprintf(stdout,"kkd end = %d %04x\n",kkd_end,kkd_end);
+	fprintf(stdout,"kkd end = %d 0x%04x\n",kkd_end,kkd_end);
 	pos = kkd_start + 4; /* 4 = K K D \0 */
 	while (pos < kkd_end) {
 		tmp = mdb_pg_get_int16(mdb,pos);
Index: mdbtools-0.6pre1/src/util/mdb-prop.c
===================================================================
--- mdbtools-0.6pre1.orig/src/util/mdb-prop.c
+++ mdbtools-0.6pre1/src/util/mdb-prop.c
@@ -20,9 +20,6 @@
 
 #include "mdbtools.h"
 
-#undef MDB_DEBUG
-//#define MDB_DEBUG 1
-
 void dump_kkd(MdbHandle *mdb, void *kkd, size_t len);
 
 int
@@ -31,15 +28,20 @@
 	MdbHandle *mdb;
 	MdbTableDef *table;
 	gchar name[256];
+	gchar *propColName;
 	void *buf;
 	int col_num;
 	int found = 0;
 
-	if (argc < 4) {
-		fprintf(stderr,"Usage: %s <file> <object name> <prop col>\n",
+	if (argc < 3) {
+		fprintf(stderr,"Usage: %s <file> <object name> [<prop col>]\n",
 			argv[0]);
 		return 1;
 	}
+	if (argc < 4)
+		propColName = "LvProp";
+	else
+		propColName = argv[3];
 
 	mdb_init();
 
@@ -60,12 +62,13 @@
 
 	mdb_bind_column_by_name(table, "Name", name, NULL);
 	buf = g_malloc(MDB_BIND_SIZE);
-	col_num = mdb_bind_column_by_name(table, argv[3], buf, NULL);
+	col_num = mdb_bind_column_by_name(table, propColName, buf, NULL);
 	if (col_num < 1) {
 		g_free(buf);
 		mdb_free_tabledef(table);
 		mdb_close(mdb);
 		mdb_exit();
+		printf("Column %s not found!\n", argv[3]);
 		return 1;
 	}
 
@@ -81,7 +84,6 @@
 		gchar kkd_ptr[MDB_MEMO_OVERHEAD];
 		void *kkd_pg = g_malloc(200000);
 		size_t len, pos;
-
 		memcpy(kkd_ptr, buf, MDB_MEMO_OVERHEAD);
 		col = g_ptr_array_index(table->columns, col_num - 1);
 		len = mdb_ole_read(mdb, col, kkd_ptr, MDB_BIND_SIZE);
@@ -114,7 +116,7 @@
 	GPtrArray *names = NULL;
 	MdbProperties *props;
 
-#ifdef MDB_DEBUG
+#if MDB_DEBUG
 	buffer_dump(kkd, 0, len);
 #endif
 	if (strcmp("KKD", kkd)) {
@@ -140,6 +142,7 @@
 				props = mdb_read_props(mdb, names, kkd+pos+6, record_len - 6);
 				printf("type 0x00 name %s\n", props->name ? props->name : "(none)");
 				g_hash_table_foreach(props->hash, print_keyvalue, NULL);
+				putchar('\n');
 				mdb_free_props(props);
 				break;
 			case 0x01:
@@ -150,6 +153,7 @@
 				props = mdb_read_props(mdb, names, kkd+pos+6, record_len - 6);
 				printf("type 0x01 name %s\n", props->name ? props->name : "(none)");
 				g_hash_table_foreach(props->hash, print_keyvalue, NULL);
+				putchar('\n');
 				mdb_free_props(props);
 				break;
 			default:
Index: mdbtools-0.6pre1/src/util/prkkd.c
===================================================================
--- mdbtools-0.6pre1.orig/src/util/prkkd.c
+++ mdbtools-0.6pre1/src/util/prkkd.c
@@ -23,10 +23,10 @@
 {
 
 #if 0
-	int i;
-	MdbCatalogEntry entry;
+	MdbHandle *mdb;
+	MdbTableDef *table;
 
-	if (argc<2) {
+	if (argc<3) {
 		fprintf(stderr,"Usage: %s <file> <table>\n",argv[0]);
 		exit(1);
 	}
@@ -34,21 +34,16 @@
 	mdb_init();
 	mdb = mdb_open(argv[1], MDB_NOFLAGS);
 
-	mdb_read_pg(mdb, MDB_CATALOG_PG);
-	rows = mdb_catalog_rows(mdb);
-
-	for (i=0;i<rows;i++) {
-  		if (mdb_read_catalog_entry(mdb, i, &entry)) {
-			if (!strcmp(entry.object_name,argv[2])) {
-				mdb_kkd_dump(&entry);
-  			}
-		}
+	table = mdb_read_table_by_name(mdb, argv[2], MDB_TABLE);
+	if (!table) {
+		fprintf(stderr,"No table named %s found.\n", argv[2]);
+		exit(1);
 	}
+	/* FIXME: table->entry->*kkd* are not initialized */
+	mdb_kkd_dump(table->entry);
 
 	mdb_close(mdb);
 	mdb_exit();
 #endif
-
 	exit(0);
 }
-
Index: mdbtools-0.6pre1/src/libmdb/props.c
===================================================================
--- mdbtools-0.6pre1.orig/src/libmdb/props.c
+++ mdbtools-0.6pre1/src/libmdb/props.c
@@ -30,14 +30,14 @@
 	int i = 0;
 
 	names = g_ptr_array_new();
-#ifdef MDB_DEBUG
+#if MDB_DEBUG
 	buffer_dump(kkd, 0, len);
 #endif
 	pos = 0;
 	while (pos < len) {
 		record_len = mdb_get_int16(kkd, pos);
 		pos += 2;
-#ifdef MDB_DEBUG
+#if MDB_DEBUG
 		printf("%02d ",i++);
 		buffer_dump(kkd, pos - 2, record_len + 2);
 #endif
@@ -46,7 +46,7 @@
 		name[record_len] = '\0';
 		pos += record_len;
 		g_ptr_array_add(names, name);
-#ifdef MDB_DEBUG
+#if MDB_DEBUG
 		printf("new len = %d\n", names->len);
 #endif
 	}
@@ -79,7 +79,7 @@
 	MdbProperties *props;
 	int i = 0;
 
-#ifdef MDB_DEBUG
+#if MDB_DEBUG
 	buffer_dump(kkd, 0, len);
 #endif
 	pos = 0;
@@ -108,7 +108,7 @@
 		strncpy(value, &kkd[pos + 8], dsize);
 		value[dsize] = '\0';
 		name = g_ptr_array_index(names,elem);
-#ifdef MDB_DEBUG
+#if MDB_DEBUG
 		printf("%02d ",i++);
 		buffer_dump(kkd, pos, record_len);
 		printf("elem %d dsize %d dtype %d\n", elem, dsize, dtype);

Reply via email to