From 50fc992ae2ba37f2ae5cef1eb178f0a2f6d3f0b9 Mon Sep 17 00:00:00 2001 From: djcb Date: Mon, 13 May 2013 23:01:53 +0300 Subject: [PATCH] * fix list parsing --- lib/mu-str.c | 13 +++++++++---- lib/tests/test-mu-str.c | 15 +++------------ 2 files changed, 12 insertions(+), 16 deletions(-) diff --git a/lib/mu-str.c b/lib/mu-str.c index 711c7e7b..30c9246f 100644 --- a/lib/mu-str.c +++ b/lib/mu-str.c @@ -263,20 +263,22 @@ mu_str_esc_to_list (const char *strings) GSList *lst; GString *part; unsigned u; - gboolean quoted; + gboolean quoted, escaped; g_return_val_if_fail (strings, NULL); part = g_string_new (NULL); - for (u = 0, lst = NULL, quoted = FALSE; + for (u = 0, lst = NULL, quoted = FALSE, escaped = FALSE; u != strlen (strings); ++u) { char kar; kar = strings[u]; - if (kar == '\\') + if (kar == '\\') { + escaped = !escaped; continue; + } if (quoted && kar != '"') { g_string_append_c (part, kar); @@ -285,7 +287,10 @@ mu_str_esc_to_list (const char *strings) switch (kar) { case '"': - quoted = !quoted; + if (!escaped) + quoted = !quoted; + else + g_string_append_c (part, kar); continue; case ' ': if (part->len > 0) { diff --git a/lib/tests/test-mu-str.c b/lib/tests/test-mu-str.c index 9bf7d1e4..f2fbfd8e 100644 --- a/lib/tests/test-mu-str.c +++ b/lib/tests/test-mu-str.c @@ -35,16 +35,6 @@ #include "mu-msg-prio.h" -#define ASSERT_EQL(S1,S2) \ -do { \ - const char *s1 = (S1); \ - const char *s2 = (S2); \ - if (g_strcmp0 (s1,s2) != 0) { \ - g_printerr ("error: '%s' != '%s'\n", s1, s2); \ - g_assert (0); \ - } \ -} while (0) - static void @@ -154,7 +144,7 @@ test_mu_str_esc_to_list (void) { "maildir:sent items", {"maildir:sent", "items", NULL}}, { "\"maildir:sent items\"", - {"\"maildir:sent items\"", NULL, NULL}}, + {"maildir:sent items", NULL, NULL}}, }; for (i = 0; i != G_N_ELEMENTS(strings); ++i) { @@ -162,7 +152,8 @@ test_mu_str_esc_to_list (void) unsigned u; lst = mu_str_esc_to_list (strings[i].str); for (cur = lst, u = 0; cur; cur = g_slist_next(cur), ++u) - g_assert_cmpstr ((const char*)cur->data,==,strings[i].strs[u]); + g_assert_cmpstr ((const char*)cur->data,==, + strings[i].strs[u]); mu_str_free_list (lst); } }