From 2b8cbc384d092dc63e9dc18ec318d0682185611c Mon Sep 17 00:00:00 2001 From: Brad Fitzpatrick Date: Mon, 29 Apr 2019 17:14:23 +0000 Subject: [PATCH] syscall: don't return EINVAL on zero Chmod mode on Windows Fixes #20858 Change-Id: I45c397795426aaa276b20f5cbeb80270c95b920c Reviewed-on: https://go-review.googlesource.com/c/go/+/174320 Reviewed-by: Ian Lance Taylor Run-TryBot: Ian Lance Taylor TryBot-Result: Gobot Gobot --- src/os/file.go | 10 +++++----- src/syscall/syscall_windows.go | 3 --- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/src/os/file.go b/src/os/file.go index 86af707865..0863c70af4 100644 --- a/src/os/file.go +++ b/src/os/file.go @@ -490,11 +490,11 @@ func UserHomeDir() (string, error) { // On Unix, the mode's permission bits, ModeSetuid, ModeSetgid, and // ModeSticky are used. // -// On Windows, the mode must be non-zero but otherwise only the 0200 -// bit (owner writable) of mode is used; it controls whether the -// file's read-only attribute is set or cleared. attribute. The other -// bits are currently unused. Use mode 0400 for a read-only file and -// 0600 for a readable+writable file. +// On Windows, only the 0200 bit (owner writable) of mode is used; it +// controls whether the file's read-only attribute is set or cleared. +// The other bits are currently unused. For compatibilty with Go 1.12 +// and earlier, use a non-zero mode. Use mode 0400 for a read-only +// file and 0600 for a readable+writable file. // // On Plan 9, the mode's permission bits, ModeAppend, ModeExclusive, // and ModeTemporary are used. diff --git a/src/syscall/syscall_windows.go b/src/syscall/syscall_windows.go index 22c9e50a44..6201b6475d 100644 --- a/src/syscall/syscall_windows.go +++ b/src/syscall/syscall_windows.go @@ -567,9 +567,6 @@ func Fsync(fd Handle) (err error) { } func Chmod(path string, mode uint32) (err error) { - if mode == 0 { - return EINVAL - } p, e := UTF16PtrFromString(path) if e != nil { return e -- 2.50.0