mirror of https://github.com/k3s-io/k3s
32 lines
912 B
Go
32 lines
912 B
Go
|
// Copyright 2009 The Go Authors. All rights reserved.
|
||
|
// Use of this source code is governed by a BSD-style
|
||
|
// license that can be found in the LICENSE file.
|
||
|
|
||
|
// Package pathutil implements utility functions for handling slash-separated
|
||
|
// paths.
|
||
|
package pathutil
|
||
|
|
||
|
import "path"
|
||
|
|
||
|
// CanonicalURLPath returns the canonical url path for p, which follows the rules:
|
||
|
// 1. the path always starts with "/"
|
||
|
// 2. replace multiple slashes with a single slash
|
||
|
// 3. replace each '.' '..' path name element with equivalent one
|
||
|
// 4. keep the trailing slash
|
||
|
// The function is borrowed from stdlib http.cleanPath in server.go.
|
||
|
func CanonicalURLPath(p string) string {
|
||
|
if p == "" {
|
||
|
return "/"
|
||
|
}
|
||
|
if p[0] != '/' {
|
||
|
p = "/" + p
|
||
|
}
|
||
|
np := path.Clean(p)
|
||
|
// path.Clean removes trailing slash except for root,
|
||
|
// put the trailing slash back if necessary.
|
||
|
if p[len(p)-1] == '/' && np != "/" {
|
||
|
np += "/"
|
||
|
}
|
||
|
return np
|
||
|
}
|