Refactor cleanPath switch cases

This commit is contained in:
Adrian Setyadi 2019-07-03 05:48:40 +07:00
parent 01ca625b98
commit 32ba640d75
1 changed files with 31 additions and 21 deletions

22
path.go
View File

@ -48,20 +48,26 @@ func cleanPath(p string) string {
// loop has no expensive function calls (except 1x make)
for r < n {
switch {
case p[r] == '/':
switch p[r] {
case '/':
// empty path element, trailing slash is added after the end
r++
case p[r] == '.' && r+1 == n:
case '.':
// . element
if r+1 == n {
trailing = true
r++
continue
case p[r] == '.' && p[r+1] == '/':
// . element
} else {
switch p[r+1] {
case '/':
r += 2
continue
case p[r] == '.' && p[r+1] == '.' && (r+2 == n || p[r+2] == '/'):
case '.':
if r+2 == n || p[r+2] == '/' {
// .. element: remove to last /
r += 3
@ -79,6 +85,10 @@ func cleanPath(p string) string {
}
}
}
continue
}
}
}
default:
// real path element.