diff --git a/src/util/mdb-export.c b/src/util/mdb-export.c index 8655c44..a4549d1 100755 --- a/src/util/mdb-export.c +++ b/src/util/mdb-export.c @@ -39,56 +39,58 @@ print_col(FILE *outfile, gchar *col_val, int quote_text, int col_type, int bin_l size_t quote_len = strlen(quote_char); /* multibyte */ size_t orig_escape_len = escape_char ? strlen(escape_char) : 0; + int quoting = quote_text && is_quote_type(col_type); /* double the quote char if no escape char passed */ if (!escape_char) escape_char = quote_char; - if (quote_text && is_quote_type(col_type)) { + if (quoting) fputs(quote_char, outfile); - while (1) { - if (is_binary_type(col_type)) { - if (bin_mode == MDB_BINEXPORT_STRIP) - break; - if (!bin_len--) - break; - } else /* use \0 sentry */ - if (!*col_val) - break; - if (quote_len && !strncmp(col_val, quote_char, quote_len)) { - fprintf(outfile, "%s%s", escape_char, quote_char); - col_val += quote_len; + while (1) { + if (is_binary_type(col_type)) { + if (bin_mode == MDB_BINEXPORT_STRIP) + break; + if (!bin_len--) + break; + } else /* use \0 sentry */ + if (!*col_val) + break; + + + if (quoting && quote_len && !strncmp(col_val, quote_char, quote_len)) { + fprintf(outfile, "%s%s", escape_char, quote_char); + col_val += quote_len; #ifndef DONT_ESCAPE_ESCAPE - } else if (orig_escape_len && !strncmp(col_val, escape_char, orig_escape_len)) { - fprintf(outfile, "%s%s", escape_char, escape_char); - col_val += orig_escape_len; + } else if (quoting && orig_escape_len && !strncmp(col_val, escape_char, orig_escape_len)) { + fprintf(outfile, "%s%s", escape_char, escape_char); + col_val += orig_escape_len; #endif - } else if (is_binary_type(col_type) && *col_val <= 0 && bin_mode == MDB_BINEXPORT_OCTAL) { - fprintf(outfile, "\\%03o", *(unsigned char*)col_val++); - } else if (escape_cr_lf && *col_val==13) { - col_val++; - putc('\\', outfile); - putc('r', outfile); - } else if (escape_cr_lf && *col_val==10) { - col_val++; - putc('\\', outfile); - putc('n', outfile); - } else if (escape_cr_lf && *col_val==9) { - col_val++; - putc('\\', outfile); - putc('t', outfile); - } else if (escape_cr_lf && *col_val==92) { - col_val++; - putc('\\', outfile); - putc('\\', outfile); - } else { - putc(*col_val++, outfile); - } + } else if (quoting && is_binary_type(col_type) && *col_val <= 0 && bin_mode == MDB_BINEXPORT_OCTAL) { + fprintf(outfile, "\\%03o", *(unsigned char*)col_val++); + } else if (escape_cr_lf && is_quote_type(col_type) && *col_val==13) { + col_val++; + putc('\\', outfile); + putc('r', outfile); + } else if (escape_cr_lf && is_quote_type(col_type) && *col_val==10) { + col_val++; + putc('\\', outfile); + putc('n', outfile); + } else if (escape_cr_lf && is_quote_type(col_type) && *col_val==9) { + col_val++; + putc('\\', outfile); + putc('t', outfile); + } else if (escape_cr_lf && is_quote_type(col_type) && *col_val==92) { + col_val++; + putc('\\', outfile); + putc('\\', outfile); + } else { + putc(*col_val++, outfile); } + } + if (quoting) fputs(quote_char, outfile); - } else - fputs(col_val, outfile); } int main(int argc, char **argv)