From: Kato Kazuyoshi Date: Tue, 23 Dec 2014 05:05:07 +0000 (-0800) Subject: os: don't return Chmod's error from Mkdir and OpenFile X-Git-Tag: go1.5beta1~1489 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=9c0b145e4ca75df68da0fb11fb122bcc3b6eff27;p=gostls13.git os: don't return Chmod's error from Mkdir and OpenFile Mkdir and OpenFile call Chmod internally on *BSD and Solaris, because these OSes don't handle the sticky bit correctly. However Chmod's error should be ignored. It shouldn't hide the fact that a file itself is created. Fixes #8383 Change-Id: Ia2e0b2ba72712d73a0a48ba5a263432e0fff31a5 Reviewed-on: https://go-review.googlesource.com/2057 Reviewed-by: Russ Cox --- diff --git a/src/os/file.go b/src/os/file.go index 79e8fc3388..f332bc8346 100644 --- a/src/os/file.go +++ b/src/os/file.go @@ -204,14 +204,15 @@ func (f *File) WriteString(s string) (ret int, err error) { func Mkdir(name string, perm FileMode) error { e := syscall.Mkdir(name, syscallMode(perm)) - // mkdir(2) itself won't handle the sticky bit on *BSD and Solaris - if !supportsCreateWithStickyBit && e == nil && perm&ModeSticky != 0 { - e = Chmod(name, perm) - } - if e != nil { return &PathError{"mkdir", name, e} } + + // mkdir(2) itself won't handle the sticky bit on *BSD and Solaris + if !supportsCreateWithStickyBit && perm&ModeSticky != 0 { + Chmod(name, perm) + } + return nil } diff --git a/src/os/file_unix.go b/src/os/file_unix.go index fbe05c61a0..3fb70d6bc1 100644 --- a/src/os/file_unix.go +++ b/src/os/file_unix.go @@ -88,8 +88,8 @@ func OpenFile(name string, flag int, perm FileMode) (file *File, err error) { } // open(2) itself won't handle the sticky bit on *BSD and Solaris - if chmod && e == nil { - e = Chmod(name, perm) + if chmod { + Chmod(name, perm) } // There's a race here with fork/exec, which we are