* [PATCH 1/2] util: Fix skipped characters in strsplit functions
@ 2016-01-08 0:26 Mat Martineau
2016-01-08 0:26 ` [PATCH 2/2] unit: Additional strsplit cases with more delimiter variety Mat Martineau
0 siblings, 1 reply; 3+ messages in thread
From: Mat Martineau @ 2016-01-08 0:26 UTC (permalink / raw)
To: ell
[-- Attachment #1: Type: text/plain, Size: 1271 bytes --]
l_strsplit and l_strsplit_sep were skipping an extra character after
each delimiter because len was incremented after being set to 0 but
before the next iteration of the loop began. This caused problems with
trailing and consecutive delimiters.
---
ell/util.c | 20 ++++++++++++++++----
1 file changed, 16 insertions(+), 4 deletions(-)
diff --git a/ell/util.c b/ell/util.c
index 5bd7b3b..f920895 100644
--- a/ell/util.c
+++ b/ell/util.c
@@ -293,9 +293,15 @@ LIB_EXPORT char **l_strsplit(const char *str, const char sep)
ret = l_new(char *, len + 1);
- for (i = 0, p = str, len = 0; p[len]; len++) {
- if (p[len] != sep)
+ i = 0;
+ p = str;
+ len = 0;
+
+ while (p[len]) {
+ if (p[len] != sep) {
+ len += 1;
continue;
+ }
ret[i++] = l_strndup(p, len);
p += len + 1;
@@ -347,9 +353,15 @@ LIB_EXPORT char **l_strsplit_set(const char *str, const char *separators)
ret = l_new(char *, len + 1);
- for (i = 0, p = str, len = 0; p[len]; len++) {
- if (sep_table[(unsigned char) p[len]] != true)
+ i = 0;
+ p = str;
+ len = 0;
+
+ while (p[len]) {
+ if (sep_table[(unsigned char) p[len]] != true) {
+ len += 1;
continue;
+ }
ret[i++] = l_strndup(p, len);
p += len + 1;
--
2.7.0
^ permalink raw reply related [flat|nested] 3+ messages in thread
* [PATCH 2/2] unit: Additional strsplit cases with more delimiter variety
2016-01-08 0:26 [PATCH 1/2] util: Fix skipped characters in strsplit functions Mat Martineau
@ 2016-01-08 0:26 ` Mat Martineau
2016-01-08 0:38 ` Denis Kenzior
0 siblings, 1 reply; 3+ messages in thread
From: Mat Martineau @ 2016-01-08 0:26 UTC (permalink / raw)
To: ell
[-- Attachment #1: Type: text/plain, Size: 2021 bytes --]
---
unit/test-string.c | 34 +++++++++++++++++++++++++++++++++-
1 file changed, 33 insertions(+), 1 deletion(-)
diff --git a/unit/test-string.c b/unit/test-string.c
index 388e90f..156f658 100644
--- a/unit/test-string.c
+++ b/unit/test-string.c
@@ -124,6 +124,24 @@ static void test_strsplit(const void *test_data)
assert(!strcmp(strv[2], "bz"));
assert(strv[3] == NULL);
l_strfreev(strv);
+
+ strv = l_strsplit(":bar:::bz", ':');
+ assert(strv);
+ assert(!strcmp(strv[0], ""));
+ assert(!strcmp(strv[1], "bar"));
+ assert(!strcmp(strv[2], ""));
+ assert(!strcmp(strv[3], ""));
+ assert(!strcmp(strv[4], "bz"));
+ assert(strv[5] == NULL);
+ l_strfreev(strv);
+
+ strv = l_strsplit("Foo:bar:", ':');
+ assert(strv);
+ assert(!strcmp(strv[0], "Foo"));
+ assert(!strcmp(strv[1], "bar"));
+ assert(!strcmp(strv[2], ""));
+ assert(strv[3] == NULL);
+ l_strfreev(strv);
}
static void test_strsplit_set(const void *test_data)
@@ -137,6 +155,20 @@ static void test_strsplit_set(const void *test_data)
assert(!strcmp(strv[3], "Blu"));
assert(strv[4] == NULL);
l_strfreev(strv);
+
+ strv = l_strsplit_set("Foo:bar,Baz Blu,:,Fee:Fie ", ":, ");
+ assert(strv);
+ assert(!strcmp(strv[0], "Foo"));
+ assert(!strcmp(strv[1], "bar"));
+ assert(!strcmp(strv[2], "Baz"));
+ assert(!strcmp(strv[3], "Blu"));
+ assert(!strcmp(strv[4], ""));
+ assert(!strcmp(strv[5], ""));
+ assert(!strcmp(strv[6], "Fee"));
+ assert(!strcmp(strv[7], "Fie"));
+ assert(!strcmp(strv[8], ""));
+ assert(strv[9] == NULL);
+ l_strfreev(strv);
}
static void test_joinv(const void *test_data)
@@ -175,7 +207,7 @@ int main(int argc, char *argv[])
l_test_add("append_fixed test 2", test_fixed, &fixed_test2);
l_test_add("append_fixed test 3", test_fixed, &fixed_test3);
- l_test_add("strplit", test_strsplit, NULL);
+ l_test_add("strsplit", test_strsplit, NULL);
l_test_add("strsplit_set", test_strsplit_set, NULL);
l_test_add("joinv", test_joinv, NULL);
--
2.7.0
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH 2/2] unit: Additional strsplit cases with more delimiter variety
2016-01-08 0:26 ` [PATCH 2/2] unit: Additional strsplit cases with more delimiter variety Mat Martineau
@ 2016-01-08 0:38 ` Denis Kenzior
0 siblings, 0 replies; 3+ messages in thread
From: Denis Kenzior @ 2016-01-08 0:38 UTC (permalink / raw)
To: ell
[-- Attachment #1: Type: text/plain, Size: 231 bytes --]
Hi Mat,
On 01/07/2016 06:26 PM, Mat Martineau wrote:
> ---
> unit/test-string.c | 34 +++++++++++++++++++++++++++++++++-
> 1 file changed, 33 insertions(+), 1 deletion(-)
>
Both applied, thanks!
Regards,
-Denis
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2016-01-08 0:38 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-01-08 0:26 [PATCH 1/2] util: Fix skipped characters in strsplit functions Mat Martineau
2016-01-08 0:26 ` [PATCH 2/2] unit: Additional strsplit cases with more delimiter variety Mat Martineau
2016-01-08 0:38 ` Denis Kenzior
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.