]> Cypherpunks repositories - gostls13.git/commitdiff
os, os/exec, os/user: add support for GOOS=solaris
authorAram Hăvărneanu <aram@mgk.ro>
Thu, 9 Jan 2014 15:49:37 +0000 (02:49 +1100)
committerJoel Sing <jsing@google.com>
Thu, 9 Jan 2014 15:49:37 +0000 (02:49 +1100)
R=golang-codereviews, dave, minux.ma, gobot, jsing
CC=golang-codereviews
https://golang.org/cl/36020043

18 files changed:
src/pkg/os/dir_unix.go
src/pkg/os/env_unix_test.go
src/pkg/os/error_unix.go
src/pkg/os/exec/exec_test.go
src/pkg/os/exec/lp_unix.go
src/pkg/os/exec/lp_unix_test.go
src/pkg/os/exec_posix.go
src/pkg/os/exec_unix.go
src/pkg/os/file_posix.go
src/pkg/os/file_unix.go
src/pkg/os/os_unix_test.go
src/pkg/os/path_unix.go
src/pkg/os/pipe_bsd.go
src/pkg/os/signal/signal_test.go
src/pkg/os/signal/signal_unix.go
src/pkg/os/stat_solaris.go [new file with mode: 0644]
src/pkg/os/sys_solaris.go [new file with mode: 0644]
src/pkg/os/user/lookup_unix.go

index 9fa7ad664f48b6ab4e8fb61a8041bf1a69441f03..67c390283c7336349d714bef3c36d13126088a97 100644 (file)
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build darwin dragonfly freebsd linux netbsd openbsd
+// +build darwin dragonfly freebsd linux netbsd openbsd solaris
 
 package os
 
index e16d71a649262ea57713987d07777c95a66d97db..5ec07ee1b1b68d369c1798b6be27382bc2e9ebb1 100644 (file)
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build darwin dragonfly freebsd linux netbsd openbsd
+// +build darwin dragonfly freebsd linux netbsd openbsd solaris
 
 package os_test
 
index 6250349e5bad33715ac232e54aa93028ffb6f870..f281495e6b8e09ecc4eb144022f1fd4346282e28 100644 (file)
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build darwin dragonfly freebsd linux netbsd openbsd
+// +build darwin dragonfly freebsd linux netbsd openbsd solaris
 
 package os
 
index 5cf8437fbb783c41e7dcc1421aca582422c37cef..144fd46bcdcd6b277a7f422c22d5ffac8ceae1d8 100644 (file)
@@ -570,6 +570,10 @@ func TestHelperProcess(*testing.T) {
                        // the cloned file descriptors that result from opening
                        // /dev/urandom.
                        // http://golang.org/issue/3955
+               case "solaris":
+                       // TODO(aram): This fails on Solaris because libc opens
+                       // its own files, as it sees fit. Darwin does the same,
+                       // see: http://golang.org/issue/2603
                default:
                        // Now verify that there are no other open fds.
                        var files []*os.File
index 7ff2d201bcb51b6c5392af09c819ffad16608593..7b9dec7e8b50894c4d1a1b0ff9848465c59c7087 100644 (file)
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build darwin dragonfly freebsd linux netbsd openbsd
+// +build darwin dragonfly freebsd linux netbsd openbsd solaris
 
 package exec
 
index f1ab6deffdcc0cb5c8bb4bd9f1498a15e25d885b..051db664a894de54a5152c975b9572b83e57e46b 100644 (file)
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build darwin dragonfly freebsd linux netbsd openbsd
+// +build darwin dragonfly freebsd linux netbsd openbsd solaris
 
 package exec
 
index fb123aefbcc8229bc8569947c9f4369b781b559a..8a4d019d2f748ee4d45a513370b5a59c5a20f628 100644 (file)
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build darwin dragonfly freebsd linux netbsd openbsd windows
+// +build darwin dragonfly freebsd linux netbsd openbsd solaris windows
 
 package os
 
index 5572e628e6e497d03a8dee9f0c88a6e0000cb482..3c05b8f080625136d1692f5e4a35b245194afb47 100644 (file)
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build darwin dragonfly freebsd linux netbsd openbsd
+// +build darwin dragonfly freebsd linux netbsd openbsd solaris
 
 package os
 
index 4a17877547dff0b158aad86e6bc644ed827a3057..441ad5384d70a20d3e75a7566789c69ed3d82d61 100644 (file)
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build darwin dragonfly freebsd linux netbsd openbsd windows
+// +build darwin dragonfly freebsd linux netbsd openbsd solaris windows
 
 package os
 
index 37677e2174056df6d378aa4823e39b36f4cb36ff..cfe0c1c2f87b5fed84fdbd9825e77fba39c764a4 100644 (file)
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build darwin dragonfly freebsd linux netbsd openbsd
+// +build darwin dragonfly freebsd linux netbsd openbsd solaris
 
 package os
 
index 1e8a66122503f4703fdabbe0e0fd8c898eeead5c..21d40ccaf848c9b8cfe50a61008a3b0c88afe910 100644 (file)
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build darwin dragonfly freebsd linux netbsd openbsd
+// +build darwin dragonfly freebsd linux netbsd openbsd solaris
 
 package os_test
 
index 3bf63bf8042f3f2452fafcc265a7e552cd971ae6..bdf9fe642187b58548a85e414fc8807251faea75 100644 (file)
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build darwin dragonfly freebsd linux netbsd openbsd
+// +build darwin dragonfly freebsd linux netbsd openbsd solaris
 
 package os
 
index 73d35b4d5ebaf66a1c9e14878d19fb40e5864c1f..0ea8e4b1f83cd531219e1085de4e41bf60e0dc6d 100644 (file)
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build darwin dragonfly freebsd netbsd openbsd
+// +build darwin dragonfly freebsd netbsd openbsd solaris
 
 package os
 
index 741f2a0edfcf49f63e1b7ae38819035328b78b87..076fe3f93bd1fcd53220e66c8dba75e218d1d071 100644 (file)
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build darwin dragonfly freebsd linux netbsd openbsd
+// +build darwin dragonfly freebsd linux netbsd openbsd solaris
 
 package signal
 
index 318488dc04acb86b8187641f608152784507514b..80dc4304aaa4d625586ecb0c8f35bca5cf21b0e4 100644 (file)
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build darwin dragonfly freebsd linux netbsd openbsd windows
+// +build darwin dragonfly freebsd linux netbsd openbsd solaris windows
 
 package signal
 
diff --git a/src/pkg/os/stat_solaris.go b/src/pkg/os/stat_solaris.go
new file mode 100644 (file)
index 0000000..605c1d9
--- /dev/null
@@ -0,0 +1,61 @@
+// Copyright 2009 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package os
+
+import (
+       "syscall"
+       "time"
+)
+
+func sameFile(fs1, fs2 *fileStat) bool {
+       stat1 := fs1.sys.(*syscall.Stat_t)
+       stat2 := fs2.sys.(*syscall.Stat_t)
+       return stat1.Dev == stat2.Dev && stat1.Ino == stat2.Ino
+}
+
+func fileInfoFromStat(st *syscall.Stat_t, name string) FileInfo {
+       fs := &fileStat{
+               name:    basename(name),
+               size:    int64(st.Size),
+               modTime: timespecToTime(st.Mtim),
+               sys:     st,
+       }
+       fs.mode = FileMode(st.Mode & 0777)
+       switch st.Mode & syscall.S_IFMT {
+       case syscall.S_IFBLK:
+               fs.mode |= ModeDevice
+       case syscall.S_IFCHR:
+               fs.mode |= ModeDevice | ModeCharDevice
+       case syscall.S_IFDIR:
+               fs.mode |= ModeDir
+       case syscall.S_IFIFO:
+               fs.mode |= ModeNamedPipe
+       case syscall.S_IFLNK:
+               fs.mode |= ModeSymlink
+       case syscall.S_IFREG:
+               // nothing to do
+       case syscall.S_IFSOCK:
+               fs.mode |= ModeSocket
+       }
+       if st.Mode&syscall.S_ISGID != 0 {
+               fs.mode |= ModeSetgid
+       }
+       if st.Mode&syscall.S_ISUID != 0 {
+               fs.mode |= ModeSetuid
+       }
+       if st.Mode&syscall.S_ISVTX != 0 {
+               fs.mode |= ModeSticky
+       }
+       return fs
+}
+
+func timespecToTime(ts syscall.Timespec) time.Time {
+       return time.Unix(int64(ts.Sec), int64(ts.Nsec))
+}
+
+// For testing.
+func atime(fi FileInfo) time.Time {
+       return timespecToTime(fi.Sys().(*syscall.Stat_t).Atim)
+}
diff --git a/src/pkg/os/sys_solaris.go b/src/pkg/os/sys_solaris.go
new file mode 100644 (file)
index 0000000..917e8f2
--- /dev/null
@@ -0,0 +1,11 @@
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package os
+
+import "syscall"
+
+func hostname() (name string, err error) {
+       return syscall.Gethostname()
+}
index 5459268fa0133b58290bc3166a0d99daddd793e6..f2baf05bbff1cacdf58b00eafe551b986e2e0614 100644 (file)
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build darwin dragonfly freebsd linux netbsd openbsd
+// +build darwin dragonfly freebsd linux netbsd openbsd solaris
 // +build cgo
 
 package user