summaryrefslogtreecommitdiffstats
path: root/lib.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib.c')
-rw-r--r--lib.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/lib.c b/lib.c
index 13982b69..56d4cf88 100644
--- a/lib.c
+++ b/lib.c
@@ -3814,24 +3814,25 @@ val split_str_keep(val str, val sep, val keep_sep)
if (regexp(sep)) {
list_collect_decl (out, iter);
val pos = zero;
+ val slen = length(str);
- do {
+ for (;;) {
cons_bind (new_pos, len, search_regex(str, sep, pos, nil));
- if (eql(pos, new_pos) && len == zero)
+ if (len == zero && new_pos != slen)
new_pos = plus(new_pos, one);
iter = list_collect(iter, sub_str(str, pos, new_pos));
pos = new_pos;
- if (len) {
+ if (len && pos != slen) {
pos = plus(pos, len);
if (keep_sep)
iter = list_collect(iter, sub_str(str, new_pos, pos));
continue;
}
break;
- } while (le(pos, length_str(str)));
+ }
return out;
} else {