aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/golang.org/x/sys/unix/timestruct.go
diff options
context:
space:
mode:
authorPéter Szilágyi <peterke@gmail.com>2019-02-15 00:14:28 +0800
committerPéter Szilágyi <peterke@gmail.com>2019-02-19 16:59:24 +0800
commitd9be33766930b6978629a02643a8c83265a3006b (patch)
tree1245792f4e7bf63374148586f8c4ee612796a299 /vendor/golang.org/x/sys/unix/timestruct.go
parent7bd6f39dc3eb174d5869613bc24f431ec96dabff (diff)
downloadgo-tangerine-d9be33766930b6978629a02643a8c83265a3006b.tar
go-tangerine-d9be33766930b6978629a02643a8c83265a3006b.tar.gz
go-tangerine-d9be33766930b6978629a02643a8c83265a3006b.tar.bz2
go-tangerine-d9be33766930b6978629a02643a8c83265a3006b.tar.lz
go-tangerine-d9be33766930b6978629a02643a8c83265a3006b.tar.xz
go-tangerine-d9be33766930b6978629a02643a8c83265a3006b.tar.zst
go-tangerine-d9be33766930b6978629a02643a8c83265a3006b.zip
vendor: update syscalls dependency
(cherry picked from commit dcc045f03c7c933dcdc7302f0338cbbfef7398ea)
Diffstat (limited to 'vendor/golang.org/x/sys/unix/timestruct.go')
-rw-r--r--vendor/golang.org/x/sys/unix/timestruct.go22
1 files changed, 21 insertions, 1 deletions
diff --git a/vendor/golang.org/x/sys/unix/timestruct.go b/vendor/golang.org/x/sys/unix/timestruct.go
index 139fbbebb..4a672f569 100644
--- a/vendor/golang.org/x/sys/unix/timestruct.go
+++ b/vendor/golang.org/x/sys/unix/timestruct.go
@@ -2,10 +2,12 @@
// 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 solaris
+// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
package unix
+import "time"
+
// TimespecToNsec converts a Timespec value into a number of
// nanoseconds since the Unix epoch.
func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }
@@ -22,6 +24,24 @@ func NsecToTimespec(nsec int64) Timespec {
return setTimespec(sec, nsec)
}
+// TimeToTimespec converts t into a Timespec.
+// On some 32-bit systems the range of valid Timespec values are smaller
+// than that of time.Time values. So if t is out of the valid range of
+// Timespec, it returns a zero Timespec and ERANGE.
+func TimeToTimespec(t time.Time) (Timespec, error) {
+ sec := t.Unix()
+ nsec := int64(t.Nanosecond())
+ ts := setTimespec(sec, nsec)
+
+ // Currently all targets have either int32 or int64 for Timespec.Sec.
+ // If there were a new target with floating point type for it, we have
+ // to consider the rounding error.
+ if int64(ts.Sec) != sec {
+ return Timespec{}, ERANGE
+ }
+ return ts, nil
+}
+
// TimevalToNsec converts a Timeval value into a number of nanoseconds
// since the Unix epoch.
func TimevalToNsec(tv Timeval) int64 { return int64(tv.Sec)*1e9 + int64(tv.Usec)*1e3 }