summaryrefslogtreecommitdiffstats
path: root/stream.c
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2021-06-26 08:30:42 -0700
committerKaz Kylheku <kaz@kylheku.com>2021-06-26 08:30:42 -0700
commit84fb60917ce14c80d1382545276acd436954290e (patch)
tree22fe873c5fce107ee65bb83e1b08526689ba01a3 /stream.c
parent1002db49685b0fdf87e7ad8532840bf93d3bc2f9 (diff)
downloadtxr-84fb60917ce14c80d1382545276acd436954290e.tar.gz
txr-84fb60917ce14c80d1382545276acd436954290e.tar.bz2
txr-84fb60917ce14c80d1382545276acd436954290e.zip
suffix functions: leading dot is not delimiter
* stream.c (short_suffix, long_suffix): Do not treat the starting dot of the last componet as a suffix delimiter. * tests/018/path.tl: Test cases edited to reflect requirements change; new tests added. * txr.1: Updated.
Diffstat (limited to 'stream.c')
-rw-r--r--stream.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/stream.c b/stream.c
index 1c965c8c..ecd30ba6 100644
--- a/stream.c
+++ b/stream.c
@@ -5040,7 +5040,7 @@ val short_suffix(val name, val alt_in)
const wchar_t *dot = wcsrchr(str, '.');
const wchar_t *sl = if3(dot, wcspbrk(dot + 1, psc), 0);
- if (!dot || (sl && sl[1])) {
+ if (!dot || (sl && sl[1]) || dot == str || wcschr(psc, dot[-1])) {
return default_null_arg(alt_in);
} else {
wchar_t *suff = chk_strdup(dot + 1);
@@ -5063,7 +5063,10 @@ val long_suffix(val name, val alt_in)
while (dot && (sl = wcspbrk(dot, psc)) && sl[1])
dot = wcschr(sl + 1, '.');
- if (!dot || (sl && sl[1])) {
+ if (dot && (dot == str || wcschr(psc, dot[-1])))
+ dot = wcschr(dot + 1, '.');
+
+ if (!dot || dot == str) {
return default_null_arg(alt_in);
} else {
wchar_t *suff = chk_strdup(dot + 1);