Skip to content

Commit

Permalink
os: don't return Chmod's error from Mkdir and OpenFile
Browse files Browse the repository at this point in the history
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 <rsc@golang.org>
  • Loading branch information
kzys authored and rsc committed Mar 20, 2015
1 parent 69b2f70 commit 9c0b145
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 7 deletions.
11 changes: 6 additions & 5 deletions src/os/file.go
Expand Up @@ -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
}

Expand Down
4 changes: 2 additions & 2 deletions src/os/file_unix.go
Expand Up @@ -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
Expand Down

0 comments on commit 9c0b145

Please sign in to comment.