summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2016-10-27 22:44:50 -0400
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2016-11-05 18:54:27 -0400
commitbc8ec170d2bc3e294f24ff8bb255436a685ac14a (patch)
tree8d12de9cbc0f34210e13eb645840cf3cf8906209
parentceed8f0c8b9a46300eccd1afa2dd8d3c2cb6b47c (diff)
Drop FOREACH_WORD_QUOTED
-rw-r--r--TODO3
-rw-r--r--src/basic/string-util.h3
-rw-r--r--src/test/test-string-util.c26
3 files changed, 15 insertions, 17 deletions
diff --git a/TODO b/TODO
index c8266a549d..6d70496393 100644
--- a/TODO
+++ b/TODO
@@ -23,9 +23,6 @@ External:
Janitorial Clean-ups:
-* code cleanup: retire FOREACH_WORD_QUOTED, port to extract_first_word() loops instead.
- For example, most conf parsing callbacks should use it.
-
* replace manual readdir() loops with FOREACH_DIRENT or FOREACH_DIRENT_ALL
* Rearrange tests so that the various test-xyz.c match a specific src/basic/xyz.c again
diff --git a/src/basic/string-util.h b/src/basic/string-util.h
index 0175803302..e99f7964be 100644
--- a/src/basic/string-util.h
+++ b/src/basic/string-util.h
@@ -107,9 +107,6 @@ const char* split(const char **state, size_t *l, const char *separator, bool quo
#define FOREACH_WORD_SEPARATOR(word, length, s, separator, state) \
_FOREACH_WORD(word, length, s, separator, false, state)
-#define FOREACH_WORD_QUOTED(word, length, s, state) \
- _FOREACH_WORD(word, length, s, WHITESPACE, true, state)
-
#define _FOREACH_WORD(word, length, s, separator, quoted, state) \
for ((state) = (s), (word) = split(&(state), &(length), (separator), (quoted)); (word); (word) = split(&(state), &(length), (separator), (quoted)))
diff --git a/src/test/test-string-util.c b/src/test/test-string-util.c
index d0f84d70bc..e43373b0f5 100644
--- a/src/test/test-string-util.c
+++ b/src/test/test-string-util.c
@@ -232,21 +232,25 @@ static void test_foreach_word(void) {
}
static void check(const char *test, char** expected, bool trailing) {
- const char *word, *state;
- size_t l;
- int i = 0;
+ int i = 0, r;
printf("<<<%s>>>\n", test);
- FOREACH_WORD_QUOTED(word, l, test, state) {
- _cleanup_free_ char *t = NULL;
-
- assert_se(t = strndup(word, l));
- assert_se(strneq(expected[i++], word, l));
- printf("<%s>\n", t);
+ for (;;) {
+ _cleanup_free_ char *word = NULL;
+
+ r = extract_first_word(&test, &word, NULL, EXTRACT_QUOTES);
+ if (r == 0) {
+ assert_se(!trailing);
+ break;
+ } else if (r < 0) {
+ assert_se(trailing);
+ break;
+ }
+
+ assert_se(streq(word, expected[i++]));
+ printf("<%s>\n", word);
}
- printf("<<<%s>>>\n", state);
assert_se(expected[i] == NULL);
- assert_se(isempty(state) == !trailing);
}
static void test_foreach_word_quoted(void) {