// SPDX-License-Identifier: BSD-3-Clause // Code in this file was copied from `go/src/os/path.go` // and `go/src/os/path_unix.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 `go.LICENSE` file. //go:build unix package ufs import ( "os" ) // basename removes trailing slashes and the leading directory name from path name. func basename(name string) string { i := len(name) - 1 // Remove trailing slashes for ; i > 0 && name[i] == '/'; i-- { name = name[:i] } // Remove leading directory name for i--; i >= 0; i-- { if name[i] == '/' { name = name[i+1:] break } } return name } // endsWithDot reports whether the final component of path is ".". func endsWithDot(path string) bool { if path == "." { return true } if len(path) >= 2 && path[len(path)-1] == '.' && os.IsPathSeparator(path[len(path)-2]) { return true } return false } // splitPath returns the base name and parent directory. func splitPath(path string) (string, string) { // if no better parent is found, the path is relative from "here" dirname := "." // Remove all but one leading slash. for len(path) > 1 && path[0] == '/' && path[1] == '/' { path = path[1:] } i := len(path) - 1 // Remove trailing slashes. for ; i > 0 && path[i] == '/'; i-- { path = path[:i] } // if no slashes in path, base is path basename := path // Remove leading directory path for i--; i >= 0; i-- { if path[i] == '/' { if i == 0 { dirname = path[:1] } else { dirname = path[:i] } basename = path[i+1:] break } } return dirname, basename }