summaryrefslogtreecommitdiffstats
path: root/lib.c
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2014-10-08 07:55:34 -0700
committerKaz Kylheku <kaz@kylheku.com>2014-10-08 07:55:34 -0700
commit2b00fdfe4bc329fbf4d1dd32835a2476c7c1e2f6 (patch)
tree10b0ac85281ff220829d0e46a145d2f0a7982423 /lib.c
parent347c06761a1a01fb1c8bda56bf636d05ffb34b3a (diff)
downloadtxr-2b00fdfe4bc329fbf4d1dd32835a2476c7c1e2f6.tar.gz
txr-2b00fdfe4bc329fbf4d1dd32835a2476c7c1e2f6.tar.bz2
txr-2b00fdfe4bc329fbf4d1dd32835a2476c7c1e2f6.zip
Fix 2011-12-03 regression. The freeform directive code
relies on lazy_str_get_trailing_list and the behavior of that function changed because (split-str "" any-separator) changed from returning nil to returning the empty string. The resulting behavior change of lazy_str_get_trailing_list was later described in the documentation, thereby codifying it. This patch changes the lazy_str_get_trailing_list behavior, which is poor, and causes infinite looping. We do not want an extra empty string prepended, because it looks like a spurious line. * lib.c (lazy_str_get_trailing_list): if split_str produces a the list (""), then just return the unmaterialized list from the lazy string without prepending that one-element list to it. * txr.1: Updated documentation for lazy-str-get-trailing-list.
Diffstat (limited to 'lib.c')
-rw-r--r--lib.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/lib.c b/lib.c
index 0b107c93..d121177a 100644
--- a/lib.c
+++ b/lib.c
@@ -4987,6 +4987,9 @@ val lazy_str_get_trailing_list(val lstr, val index)
val split_suffix = split_str(sub_str(lstr->ls.prefix, index, nil),
or2(car(lstr->ls.opts), lit("\n")));
+ if (!cdr(split_suffix) && equal(car(split_suffix), null_string))
+ return lstr->ls.list;
+
return nappend2(split_suffix, lstr->ls.list);
}
}