Patch 155-blob from Nirgal Vourgère

This commit is contained in:
Brian Bruns 2010-06-17 22:12:44 -04:00
parent 4fb8786418
commit 7a073df76e
4 changed files with 12 additions and 5 deletions

View File

@ -70,7 +70,7 @@ enum {
MDB_MODULE,
MDB_RELATIONSHIP,
MDB_UNKNOWN_09,
MDB_UNKNOWN_0A,
MDB_UNKNOWN_0A, /* User access */
MDB_DATABASE_PROPERTY,
MDB_ANY = -1
};
@ -83,6 +83,7 @@ enum {
MDB_FLOAT = 0x06,
MDB_DOUBLE = 0x07,
MDB_SDATETIME = 0x08,
MDB_BINARY = 0x09,
MDB_TEXT = 0x0a,
MDB_OLE = 0x0b,
MDB_MEMO = 0x0c,

View File

@ -48,7 +48,7 @@ static MdbBackendType mdb_access_types[] = {
MdbBackendType_STRUCT_ELEMENT("Single", 0,0,0),
MdbBackendType_STRUCT_ELEMENT("Double", 0,0,0),
MdbBackendType_STRUCT_ELEMENT("DateTime (Short)", 0,0,1),
MdbBackendType_STRUCT_ELEMENT("Unknown 0x09", 0,0,0),
MdbBackendType_STRUCT_ELEMENT("Binary", 0,0,0),
MdbBackendType_STRUCT_ELEMENT("Text", 1,0,1),
MdbBackendType_STRUCT_ELEMENT("OLE", 1,0,1),
MdbBackendType_STRUCT_ELEMENT("Memo/Hyperlink",1,0,1),

View File

@ -847,6 +847,7 @@ char *mdb_col_to_string(MdbHandle *mdb, void *buf, int start, int datatype, int
DBL_DIG - floor_log10(td,0) - 1, td);
trim_trailing_zeros(text);
break;
case MDB_BINARY:
case MDB_TEXT:
if (size<0) {
text = g_strdup("");
@ -935,6 +936,9 @@ int mdb_col_fixed_size(MdbColumn *col)
case MDB_SDATETIME:
return 4;
break;
case MDB_BINARY:
return -1;
break;
case MDB_MEMO:
return -1;
break;

View File

@ -26,7 +26,7 @@
#undef MDB_BIND_SIZE
#define MDB_BIND_SIZE 200000
#define is_text_type(x) (x==MDB_TEXT || x==MDB_MEMO || x==MDB_SDATETIME)
#define is_text_type(x) (x==MDB_TEXT || x==MDB_MEMO || x==MDB_SDATETIME || x==MDB_BINARY)
static char *sanitize_name(char *str, int sanitize);
static char *escapes(char *s);
@ -39,7 +39,9 @@ print_col(gchar *col_val, int quote_text, int col_type, char *quote_char, char *
if (quote_text && is_text_type(col_type)) {
fprintf(stdout,quote_char);
for (s=col_val;*s;s++) {
if (strlen(quote_char)==1 && *s==quote_char[0]) {
if (col_type == MDB_BINARY)
fprintf(stdout, "\\%03o", (unsigned char)*s);
else if (strlen(quote_char)==1 && *s==quote_char[0]) {
/* double the char if no escape char passed */
if (!escape_char) {
fprintf(stdout,"%s%s",quote_char,quote_char);