From 1b78b60d156e3c8593efdc04133131bfcaffaeab Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Tue, 20 Apr 2021 04:13:28 -0700 Subject: bug: broken path handling on LIT_ALIGN == 2. On platforms where wchar_t literals have two byte alignment, these misbehave incorrectly, failing to treat / as a path separator. Thus (dir-name "a/b/c") is reported as ".". Lack of test coverage, argh. * stream.c (base_name, dir_name): Do not use wref macro on wli() string literal; the offset is already built-in. * txr.c (sysroot_init): Likewise. --- stream.c | 4 ++-- txr.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/stream.c b/stream.c index 07a0060c..2aa3e833 100644 --- a/stream.c +++ b/stream.c @@ -4778,7 +4778,7 @@ val base_name(val path, val suff) const wchar_t *wpath = c_str(path); const wchar_t *end = wpath + c_num(length_str(path), self); const wchar_t *rsep; - const wchar_t *psc = wref(coerce(const wchar_t *, path_sep_chars)); + const wchar_t *psc = coerce(const wchar_t *, path_sep_chars); if (end == wpath) return null_string; @@ -4810,7 +4810,7 @@ val dir_name(val path) val self = lit("dir-name"); const wchar_t *wpath = c_str(path); const wchar_t *rsep = wpath + c_num(length_str(path), self); - const wchar_t *psc = wref(coerce(const wchar_t *, path_sep_chars)); + const wchar_t *psc = coerce(const wchar_t *, path_sep_chars); if (rsep == wpath) return lit("."); diff --git a/txr.c b/txr.c index 76b66fd9..d4f5cd2b 100644 --- a/txr.c +++ b/txr.c @@ -299,7 +299,7 @@ static val sysroot(val target) static void sysroot_init(void) { val prog_dir; - const wchar_t *psc = wref(coerce(const wchar_t *, path_sep_chars)); + const wchar_t *psc = coerce(const wchar_t *, path_sep_chars); #if HAVE_WINDOWS_H val slash = regex_compile(lit("\\\\"), nil); -- cgit v1.2.3