github.com/zxy12/go_duplicate_112_new@v0.0.0-20200807091221-747231827200/src/os/path_unix.go (about) 1 // Copyright 2011 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 // +build aix darwin dragonfly freebsd js,wasm linux nacl netbsd openbsd solaris 6 7 package os 8 9 const ( 10 PathSeparator = '/' // OS-specific path separator 11 PathListSeparator = ':' // OS-specific path list separator 12 ) 13 14 // IsPathSeparator reports whether c is a directory separator character. 15 func IsPathSeparator(c uint8) bool { 16 return PathSeparator == c 17 } 18 19 // basename removes trailing slashes and the leading directory name from path name. 20 func basename(name string) string { 21 i := len(name) - 1 22 // Remove trailing slashes 23 for ; i > 0 && name[i] == '/'; i-- { 24 name = name[:i] 25 } 26 // Remove leading directory name 27 for i--; i >= 0; i-- { 28 if name[i] == '/' { 29 name = name[i+1:] 30 break 31 } 32 } 33 34 return name 35 } 36 37 // splitPath returns the base name and parent directory. 38 func splitPath(path string) (string, string) { 39 // if no better parent is found, the path is relative from "here" 40 dirname := "." 41 42 // Remove all but one leading slash. 43 for len(path) > 1 && path[0] == '/' && path[1] == '/' { 44 path = path[1:] 45 } 46 47 i := len(path) - 1 48 49 // Remove trailing slashes. 50 for ; i > 0 && path[i] == '/'; i-- { 51 path = path[:i] 52 } 53 54 // if no slashes in path, base is path 55 basename := path 56 57 // Remove leading directory path 58 for i--; i >= 0; i-- { 59 if path[i] == '/' { 60 if i == 0 { 61 dirname = path[:1] 62 } else { 63 dirname = path[:i] 64 } 65 basename = path[i+1:] 66 break 67 } 68 } 69 70 return dirname, basename 71 } 72 73 func fixRootDirectory(p string) string { 74 return p 75 }