]> Cypherpunks repositories - gostls13.git/commitdiff
os: use filepathlite.VolumeName
authorqmuntal <quimmuntal@gmail.com>
Tue, 30 Apr 2024 12:41:49 +0000 (14:41 +0200)
committerDamien Neil <dneil@google.com>
Tue, 30 Apr 2024 15:38:09 +0000 (15:38 +0000)
It is better to have a single implementation of VolumeName, which is
quite tricky to get right on Windows.

Change-Id: Ibba82dd71fe10b594cb6f782582430aa422e7078
Reviewed-on: https://go-review.googlesource.com/c/go/+/582499
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Damien Neil <dneil@google.com>
Run-TryBot: Quim Muntal <quimmuntal@gmail.com>
Reviewed-by: Ian Lance Taylor <iant@google.com>
src/os/file_windows.go
src/os/path.go
src/os/path_plan9.go
src/os/path_unix.go
src/os/path_windows.go

index d40f335d83c92dcb67a4c6206d6e6df63f1acc4e..245f99432128de9c1231977eed2e30ac70d948fc 100644 (file)
@@ -292,10 +292,10 @@ func Symlink(oldname, newname string) error {
 
        // need the exact location of the oldname when it's relative to determine if it's a directory
        destpath := oldname
-       if v := volumeName(oldname); v == "" {
+       if v := filepathlite.VolumeName(oldname); v == "" {
                if len(oldname) > 0 && IsPathSeparator(oldname[0]) {
                        // oldname is relative to the volume containing newname.
-                       if v = volumeName(newname); v != "" {
+                       if v = filepathlite.VolumeName(newname); v != "" {
                                // Prepend the volume explicitly, because it may be different from the
                                // volume of the current working directory.
                                destpath = v + oldname
index a46c20bfd2d0fad75f47185f827ac139d1c4b3bb..42de603ae1afab5cf4ff44f86d055cd0969abdd5 100644 (file)
@@ -5,6 +5,7 @@
 package os
 
 import (
+       "internal/filepathlite"
        "syscall"
 )
 
@@ -43,7 +44,7 @@ func MkdirAll(path string, perm FileMode) error {
 
        // If there is a parent directory, and it is not the volume name,
        // recurse to ensure parent directory exists.
-       if parent := path[:i]; len(parent) > len(volumeName(path)) {
+       if parent := path[:i]; len(parent) > len(filepathlite.VolumeName(path)) {
                err = MkdirAll(parent, perm)
                if err != nil {
                        return err
index f1c9dbc048c1f5ff4f64f708f2473b71452fc807..b09b53a3d828cb500f8ba6dc5c396c4a7e5fbafc 100644 (file)
@@ -13,7 +13,3 @@ const (
 func IsPathSeparator(c uint8) bool {
        return PathSeparator == c
 }
-
-func volumeName(p string) string {
-       return ""
-}
index 1c80fa91f8be4c973f797806308b29fb3cb157f9..062c07c91ee69a2d954bd24fdeffc238cc82ccea 100644 (file)
@@ -69,7 +69,3 @@ func splitPath(path string) (string, string) {
 
        return dirname, basename
 }
-
-func volumeName(p string) string {
-       return ""
-}
index 47d5b443b3e458561fb037747da8fafe552a67f8..162b63194c63565afa185a04fa4d09eff001c956 100644 (file)
@@ -45,44 +45,6 @@ func basename(name string) string {
        return name
 }
 
-func volumeName(path string) (v string) {
-       if len(path) < 2 {
-               return ""
-       }
-       // with drive letter
-       c := path[0]
-       if path[1] == ':' &&
-               ('0' <= c && c <= '9' || 'a' <= c && c <= 'z' ||
-                       'A' <= c && c <= 'Z') {
-               return path[:2]
-       }
-       // is it UNC
-       if l := len(path); l >= 5 && IsPathSeparator(path[0]) && IsPathSeparator(path[1]) &&
-               !IsPathSeparator(path[2]) && path[2] != '.' {
-               // first, leading `\\` and next shouldn't be `\`. its server name.
-               for n := 3; n < l-1; n++ {
-                       // second, next '\' shouldn't be repeated.
-                       if IsPathSeparator(path[n]) {
-                               n++
-                               // third, following something characters. its share name.
-                               if !IsPathSeparator(path[n]) {
-                                       if path[n] == '.' {
-                                               break
-                                       }
-                                       for ; n < l; n++ {
-                                               if IsPathSeparator(path[n]) {
-                                                       break
-                                               }
-                                       }
-                                       return path[:n]
-                               }
-                               break
-                       }
-               }
-       }
-       return ""
-}
-
 func fromSlash(path string) string {
        // Replace each '/' with '\\' if present
        var pathbuf []byte
@@ -106,7 +68,7 @@ func fromSlash(path string) string {
 }
 
 func dirname(path string) string {
-       vol := volumeName(path)
+       vol := filepathlite.VolumeName(path)
        i := len(path) - 1
        for i >= len(vol) && !IsPathSeparator(path[i]) {
                i--