Patchwork libgo patch committed: Update to weekly.2011-12-02

login
register
mail settings
Submitter Rainer Orth
Date Dec. 16, 2011, 10:54 a.m.
Message ID <yddsjkkokgo.fsf@manam.CeBiTec.Uni-Bielefeld.DE>
Download mbox | patch
Permalink /patch/131804/
State New
Headers show

Comments

Rainer Orth - Dec. 16, 2011, 10:54 a.m.
Ian Lance Taylor <iant@google.com> writes:

> I have committed a patch to update libgo to the weekly.2011-12-02
> release of the master library.  In this message I have only included the
> diffs to files that are specific to the gccgo copy of the library.
> Bootstrapped and ran Go testsuite on x86_64-unknown-linux-gnu.
> Committed to mainline.

The following patch is necessary to restore Solaris Go bootstrap after
your patch went in, to fix

/vol/gcc/src/hg/trunk/local/libgo/go/os/stat.go:22:29: error: argument 1 has incompatible type (cannot use type syscall.Timestruc as type syscall.Timespec)
/vol/gcc/src/hg/trunk/local/libgo/go/os/stat.go:55:60: error: argument 1 has incompatible type (cannot use type syscall.Timestruc as type syscall.Timespec)

	Rainer


2011-12-15  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>

	* go/os/stat_solaris.go: New file.
	* Makefile.am (go_os_stat_file): New variable.
	(go_os_files): Use it.
	* Makefile.in: Regenerate.
Ian Taylor - Dec. 16, 2011, 2:45 p.m.
Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> writes:

> The following patch is necessary to restore Solaris Go bootstrap after
> your patch went in, to fix
>
> /vol/gcc/src/hg/trunk/local/libgo/go/os/stat.go:22:29: error: argument 1 has incompatible type (cannot use type syscall.Timestruc as type syscall.Timespec)
> /vol/gcc/src/hg/trunk/local/libgo/go/os/stat.go:55:60: error: argument 1 has incompatible type (cannot use type syscall.Timestruc as type syscall.Timespec)
>
> 	Rainer
>
>
> 2011-12-15  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
>
> 	* go/os/stat_solaris.go: New file.
> 	* Makefile.am (go_os_stat_file): New variable.
> 	(go_os_files): Use it.
> 	* Makefile.in: Regenerate.

Thanks.

Committed.

Ian

Patch

# HG changeset patch
# Parent e7747591399959c280e5c7b0589bf7bb0c052595
Fix go/os/stat.go build on Solaris

diff --git a/libgo/Makefile.am b/libgo/Makefile.am
--- a/libgo/Makefile.am
+++ b/libgo/Makefile.am
@@ -763,6 +763,12 @@  endif
 endif
 endif
 
+if LIBGO_IS_SOLARIS
+go_os_stat_file = go/os/stat_solaris.go
+else
+go_os_stat_file = go/os/stat.go
+endif
+
 go_os_files = \
 	$(go_os_dir_file) \
 	go/os/dir.go \
@@ -779,7 +785,7 @@  go_os_files = \
 	go/os/path.go \
 	go/os/path_unix.go \
 	go/os/proc.go \
-	go/os/stat.go \
+	$(go_os_stat_file) \
 	go/os/str.go \
 	$(go_os_sys_file) \
 	go/os/time.go \
diff --git a/libgo/go/os/stat_solaris.go b/libgo/go/os/stat_solaris.go
new file mode 100644
--- /dev/null
+++ b/libgo/go/os/stat_solaris.go
@@ -0,0 +1,56 @@ 
+// Copyright 2011 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 {
+	sys1 := fs1.Sys.(*syscall.Stat_t)
+	sys2 := fs2.Sys.(*syscall.Stat_t)
+	return sys1.Dev == sys2.Dev && sys1.Ino == sys2.Ino
+}
+
+func fileInfoFromStat(st *syscall.Stat_t, name string) FileInfo {
+	fs := &FileStat{
+		name:    basename(name),
+		size:    int64(st.Size),
+		modTime: timestrucToTime(st.Mtime),
+		Sys:     st,
+	}
+	fs.mode = FileMode(st.Mode & 0777)
+	switch st.Mode & syscall.S_IFMT {
+	case syscall.S_IFBLK, syscall.S_IFCHR:
+		fs.mode |= ModeDevice
+	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
+	}
+	return fs
+}
+
+func timestrucToTime(ts syscall.Timestruc) time.Time {
+	return time.Unix(int64(ts.Sec), int64(ts.Nsec))
+}
+
+// For testing.
+func atime(fi FileInfo) time.Time {
+	return timestrucToTime(fi.(*FileStat).Sys.(*syscall.Stat_t).Atime)
+}