summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: f274b5e)
raw | patch | inline | side by side (parent: f274b5e)
author | Sebastian Harl <sh@tokkee.org> | |
Thu, 20 Feb 2014 20:36:46 +0000 (21:36 +0100) | ||
committer | Sebastian Harl <sh@tokkee.org> | |
Thu, 20 Feb 2014 20:36:46 +0000 (21:36 +0100) |
src/core/data.c | patch | blob | history | |
t/core/data_test.c | patch | blob | history |
diff --git a/src/core/data.c b/src/core/data.c
index 81b511b6c48fda961b51e9d770f13da415cabfac..54b6d282e6640d755e38457e4dbd497bb995fd32 100644 (file)
--- a/src/core/data.c
+++ b/src/core/data.c
sdb_strbuf_append(buf, "\"NULL\"");
return 0;
}
- /* TODO: escape special characters */
- sdb_strbuf_append(buf, "\"%s\"", datum->data.string);
+ {
+ char tmp[2 * strlen(datum->data.string) + 1];
+ size_t i, pos;
+
+ pos = 0;
+ for (i = 0; i < strlen(datum->data.string); ++i) {
+ char byte = datum->data.string[i];
+
+ if ((byte == '\\') || (byte == '"')) {
+ tmp[pos] = '\\';
+ ++pos;
+ }
+ tmp[pos] = byte;
+ ++pos;
+ }
+ tmp[pos] = '\0';
+ sdb_strbuf_append(buf, "\"%s\"", tmp);
+ }
break;
case SDB_TYPE_DATETIME:
{
diff --git a/t/core/data_test.c b/t/core/data_test.c
index a16d7fef891a287cec3444d0e5d74872097376f8..649a7df4bece545e9689953ec31ea39e52f55018 100644 (file)
--- a/t/core/data_test.c
+++ b/t/core/data_test.c
"sdb_data_format() used wrong format: %s; expected: %s",
string, expected);
+ datum.data.string = "now using special \\ \" characters";
+ sdb_strbuf_clear(buf);
+ check = sdb_data_format(&datum, buf);
+ fail_unless(! check,
+ "sdb_data_format(STRING) = %d; expected: 0", check);
+ string = sdb_strbuf_string(buf);
+ expected = "\"now using special \\\\ \\\" characters\"";
+ fail_unless(! strcmp(string, expected),
+ "sdb_data_format() used wrong format: %s; expected: %s",
+ string, expected);
+
datum.data.string = NULL;
sdb_strbuf_clear(buf);
check = sdb_data_format(&datum, buf);