diff --git a/src/libmdb/data.c b/src/libmdb/data.c index ea1e845..c426623 100644 --- a/src/libmdb/data.c +++ b/src/libmdb/data.c @@ -998,7 +998,7 @@ char *mdb_col_to_string(MdbHandle *mdb, void *buf, int start, int datatype, int switch (datatype) { case MDB_BYTE: - text = g_strdup_printf("%d", mdb_get_byte(buf, start)); + text = g_strdup_printf("%hhd", mdb_get_byte(buf, start)); break; case MDB_INT: text = g_strdup_printf("%hd", @@ -1006,7 +1006,7 @@ char *mdb_col_to_string(MdbHandle *mdb, void *buf, int start, int datatype, int break; case MDB_LONGINT: case MDB_COMPLEX: - text = g_strdup_printf("%ld", + text = g_strdup_printf("%d", mdb_get_int32(buf, start)); break; case MDB_FLOAT: @@ -1015,7 +1015,7 @@ char *mdb_col_to_string(MdbHandle *mdb, void *buf, int start, int datatype, int break; case MDB_DOUBLE: td = mdb_get_double(buf, start); - text = g_strdup_printf("%.16g", td); + text = g_strdup_printf("%.16lg", td); break; case MDB_BINARY: if (size<0) { @@ -1045,12 +1045,12 @@ char *mdb_col_to_string(MdbHandle *mdb, void *buf, int start, int datatype, int text = mdb_money_to_string(mdb, start); break; case MDB_REPID: - text = mdb_uuid_to_string(mdb->pg_buf, start); + text = mdb_uuid_to_string(buf, start); break; default: /* shouldn't happen. bools are handled specially ** by mdb_xfer_bound_bool() */ - fprintf(stderr, "Warning: mdb_col_to_string called on an unsupported data type.\n"); + fprintf(stderr, "Warning: mdb_col_to_string called on unsupported data type %d.\n", datatype); text = g_strdup(""); break; } diff --git a/src/libmdb/props.c b/src/libmdb/props.c index 23148f1..5cac0b9 100644 --- a/src/libmdb/props.c +++ b/src/libmdb/props.c @@ -130,13 +130,17 @@ mdb_read_props(MdbHandle *mdb, GPtrArray *names, gchar *kkd, int len) mdb_debug(MDB_DEBUG_PROPS,"elem %d (%s) dsize %d dtype %d", elem, name, dsize, dtype); mdb_buffer_dump(value, 0, dsize); } - if (dtype == MDB_MEMO) dtype = MDB_TEXT; + if (dtype == MDB_MEMO) { + dtype = MDB_TEXT; + } else if (dtype == MDB_BINARY && dsize == 16 && strcmp(name, "GUID") == 0) { + dtype = MDB_REPID; + } if (dtype == MDB_BOOL) { g_hash_table_insert(props->hash, g_strdup(name), g_strdup(kkd[pos + 8] ? "yes" : "no")); - } else if (dtype == MDB_BINARY && dsize == 16 && strcmp(name, "GUID") == 0) { - gchar *guid = mdb_uuid_to_string(kkd, pos+8); - g_hash_table_insert(props->hash, g_strdup(name), guid); + } else if (dtype == MDB_BINARY || dtype == MDB_OLE) { + g_hash_table_insert(props->hash, g_strdup(name), + g_strdup_printf("(binary data of length %d)", dsize)); } else { g_hash_table_insert(props->hash, g_strdup(name), mdb_col_to_string(mdb, kkd, pos + 8, dtype, dsize));