fixes joinPath regressions

This commit is contained in:
Araq 2018-12-13 16:18:43 +01:00
commit 5b39c7aca9
3 changed files with 15 additions and 2 deletions

View file

@ -105,7 +105,10 @@ proc joinPath*(head, tail: string): string {.
result = newStringOfCap(head.len + tail.len)
var state = 0
addNormalizePath(head, result, state, DirSep)
addNormalizePath(tail, result, state, DirSep)
if tail.len == 0:
result.add DirSep
else:
addNormalizePath(tail, result, state, DirSep)
when false:
if len(head) == 0:
result = tail

View file

@ -57,7 +57,12 @@ proc addNormalizePath*(x: string; result: var string; state: var int; dirSep = D
# state: 0th bit set if isAbsolute path. Other bits count
# the number of path components.
for b in dirs(x):
var it: PathIter
it.notFirst = (state shr 1) > 0
if it.notFirst:
while it.i < x.len and x[it.i] in {DirSep, AltSep}: inc it.i
while hasNext(it, x):
let b = next(it, x)
if (state shr 1 == 0) and isSlash(x, b):
result.add dirSep
state = state or 1