mirror of
https://github.com/mdbtools/mdbtools.git
synced 2025-09-19 02:27:55 +08:00
Fix warning when reading binary properties
Also fix some type-size issues in mdb_col_to_string. See #262
This commit is contained in:
@@ -998,7 +998,7 @@ char *mdb_col_to_string(MdbHandle *mdb, void *buf, int start, int datatype, int
|
|||||||
|
|
||||||
switch (datatype) {
|
switch (datatype) {
|
||||||
case MDB_BYTE:
|
case MDB_BYTE:
|
||||||
text = g_strdup_printf("%d", mdb_get_byte(buf, start));
|
text = g_strdup_printf("%hhd", mdb_get_byte(buf, start));
|
||||||
break;
|
break;
|
||||||
case MDB_INT:
|
case MDB_INT:
|
||||||
text = g_strdup_printf("%hd",
|
text = g_strdup_printf("%hd",
|
||||||
@@ -1006,7 +1006,7 @@ char *mdb_col_to_string(MdbHandle *mdb, void *buf, int start, int datatype, int
|
|||||||
break;
|
break;
|
||||||
case MDB_LONGINT:
|
case MDB_LONGINT:
|
||||||
case MDB_COMPLEX:
|
case MDB_COMPLEX:
|
||||||
text = g_strdup_printf("%ld",
|
text = g_strdup_printf("%d",
|
||||||
mdb_get_int32(buf, start));
|
mdb_get_int32(buf, start));
|
||||||
break;
|
break;
|
||||||
case MDB_FLOAT:
|
case MDB_FLOAT:
|
||||||
@@ -1015,7 +1015,7 @@ char *mdb_col_to_string(MdbHandle *mdb, void *buf, int start, int datatype, int
|
|||||||
break;
|
break;
|
||||||
case MDB_DOUBLE:
|
case MDB_DOUBLE:
|
||||||
td = mdb_get_double(buf, start);
|
td = mdb_get_double(buf, start);
|
||||||
text = g_strdup_printf("%.16g", td);
|
text = g_strdup_printf("%.16lg", td);
|
||||||
break;
|
break;
|
||||||
case MDB_BINARY:
|
case MDB_BINARY:
|
||||||
if (size<0) {
|
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);
|
text = mdb_money_to_string(mdb, start);
|
||||||
break;
|
break;
|
||||||
case MDB_REPID:
|
case MDB_REPID:
|
||||||
text = mdb_uuid_to_string(mdb->pg_buf, start);
|
text = mdb_uuid_to_string(buf, start);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
/* shouldn't happen. bools are handled specially
|
/* shouldn't happen. bools are handled specially
|
||||||
** by mdb_xfer_bound_bool() */
|
** 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("");
|
text = g_strdup("");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@@ -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_debug(MDB_DEBUG_PROPS,"elem %d (%s) dsize %d dtype %d", elem, name, dsize, dtype);
|
||||||
mdb_buffer_dump(value, 0, dsize);
|
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) {
|
if (dtype == MDB_BOOL) {
|
||||||
g_hash_table_insert(props->hash, g_strdup(name),
|
g_hash_table_insert(props->hash, g_strdup(name),
|
||||||
g_strdup(kkd[pos + 8] ? "yes" : "no"));
|
g_strdup(kkd[pos + 8] ? "yes" : "no"));
|
||||||
} else if (dtype == MDB_BINARY && dsize == 16 && strcmp(name, "GUID") == 0) {
|
} else if (dtype == MDB_BINARY || dtype == MDB_OLE) {
|
||||||
gchar *guid = mdb_uuid_to_string(kkd, pos+8);
|
g_hash_table_insert(props->hash, g_strdup(name),
|
||||||
g_hash_table_insert(props->hash, g_strdup(name), guid);
|
g_strdup_printf("(binary data of length %d)", dsize));
|
||||||
} else {
|
} else {
|
||||||
g_hash_table_insert(props->hash, g_strdup(name),
|
g_hash_table_insert(props->hash, g_strdup(name),
|
||||||
mdb_col_to_string(mdb, kkd, pos + 8, dtype, dsize));
|
mdb_col_to_string(mdb, kkd, pos + 8, dtype, dsize));
|
||||||
|
Reference in New Issue
Block a user