Commit cfb8404e authored by Ibrahim AshShohail's avatar Ibrahim AshShohail Committed by Brad Fitzpatrick

os: fix passing long paths to Chmod on Windows

os.Chmod returns an error when passed a long path (>=260) characters on
Windows. CL 32451 fixed most file functions in os. This change applies the
same fix to os.Chmod.

Fixes #20829

Change-Id: I3270db8317ce6e06e6d77070a32a5df6ab2491e0
Reviewed-on: https://go-review.googlesource.com/47010Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
parent e1ced321
...@@ -48,7 +48,7 @@ func syscallMode(i FileMode) (o uint32) { ...@@ -48,7 +48,7 @@ func syscallMode(i FileMode) (o uint32) {
// If the file is a symbolic link, it changes the mode of the link's target. // If the file is a symbolic link, it changes the mode of the link's target.
// If there is an error, it will be of type *PathError. // If there is an error, it will be of type *PathError.
func Chmod(name string, mode FileMode) error { func Chmod(name string, mode FileMode) error {
if e := syscall.Chmod(name, syscallMode(mode)); e != nil { if e := syscall.Chmod(fixLongPath(name), syscallMode(mode)); e != nil {
return &PathError{"chmod", name, e} return &PathError{"chmod", name, e}
} }
return nil return nil
......
...@@ -1990,6 +1990,10 @@ func TestLongPath(t *testing.T) { ...@@ -1990,6 +1990,10 @@ func TestLongPath(t *testing.T) {
if dir.Size() != filesize || filesize != wantSize { if dir.Size() != filesize || filesize != wantSize {
t.Errorf("Size(%q) is %d, len(ReadFile()) is %d, want %d", path, dir.Size(), filesize, wantSize) t.Errorf("Size(%q) is %d, len(ReadFile()) is %d, want %d", path, dir.Size(), filesize, wantSize)
} }
err = Chmod(path, dir.Mode())
if err != nil {
t.Fatalf("Chmod(%q) failed: %v", path, err)
}
} }
if err := Truncate(sizedTempDir+"/bar.txt", 0); err != nil { if err := Truncate(sizedTempDir+"/bar.txt", 0); err != nil {
t.Fatalf("Truncate failed: %v", err) t.Fatalf("Truncate failed: %v", err)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment