]> Cypherpunks repositories - gostls13.git/commitdiff
syscall: unify NsecToTime{spec,val}, fix for times < 1970
authorIan Lance Taylor <iant@golang.org>
Wed, 12 Oct 2016 04:04:16 +0000 (21:04 -0700)
committerRuss Cox <rsc@golang.org>
Wed, 12 Oct 2016 13:10:54 +0000 (13:10 +0000)
All the implementations of NsecToTimespec and NsecToTimeval were the
same other than types. Write a single version that uses
GOARCH/GOOS-specific setTimespec and setTimeval functions to handle the
types.

The logic in NsecToTimespec and NsecToTimeval caused times before 1970
to have a negative usec/nsec. The Linux kernel requires that usec
contain a positive number; for consistency, we do this for both
NsecToTimespec and NsecToTimeval.

Change-Id: I525eaba2e7cdb00cb57fa00182dabf19fec298ae
Reviewed-on: https://go-review.googlesource.com/30826
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Reviewed-by: Russ Cox <rsc@golang.org>
25 files changed:
src/syscall/syscall_darwin_386.go
src/syscall/syscall_darwin_amd64.go
src/syscall/syscall_darwin_arm.go
src/syscall/syscall_dragonfly_amd64.go
src/syscall/syscall_freebsd_386.go
src/syscall/syscall_freebsd_amd64.go
src/syscall/syscall_freebsd_arm.go
src/syscall/syscall_linux_386.go
src/syscall/syscall_linux_amd64.go
src/syscall/syscall_linux_arm.go
src/syscall/syscall_linux_arm64.go
src/syscall/syscall_linux_mips64x.go
src/syscall/syscall_linux_ppc64x.go
src/syscall/syscall_linux_s390x.go
src/syscall/syscall_nacl_386.go
src/syscall/syscall_nacl_amd64p32.go
src/syscall/syscall_nacl_arm.go
src/syscall/syscall_netbsd_386.go
src/syscall/syscall_netbsd_amd64.go
src/syscall/syscall_netbsd_arm.go
src/syscall/syscall_openbsd_386.go
src/syscall/syscall_openbsd_amd64.go
src/syscall/syscall_openbsd_arm.go
src/syscall/syscall_solaris_amd64.go
src/syscall/timestruct.go

index 2fc93f5dd14d8757e5131066a99127dd0e0234c2..05d02fc7471459963dfeb3d859a4d9311b853c94 100644 (file)
@@ -6,17 +6,12 @@ package syscall
 
 import "unsafe"
 
-func NsecToTimespec(nsec int64) (ts Timespec) {
-       ts.Sec = int32(nsec / 1e9)
-       ts.Nsec = int32(nsec % 1e9)
-       return
+func setTimespec(sec, nsec int64) Timespec {
+       return Timespec{Sec: int32(sec), Nsec: int32(nsec)}
 }
 
-func NsecToTimeval(nsec int64) (tv Timeval) {
-       nsec += 999 // round up to microsecond
-       tv.Usec = int32(nsec % 1e9 / 1e3)
-       tv.Sec = int32(nsec / 1e9)
-       return
+func setTimeval(sec, usec int64) Timeval {
+       return Timeval{Sec: int32(sec), Usec: int32(usec)}
 }
 
 //sysnb        gettimeofday(tp *Timeval) (sec int32, usec int32, err error)
index e8c9384b180ec989d5fb36266acaef41b16efcc4..b15bd68dc76bab21d901fd0872618a00f4f4a12b 100644 (file)
@@ -6,17 +6,12 @@ package syscall
 
 import "unsafe"
 
-func NsecToTimespec(nsec int64) (ts Timespec) {
-       ts.Sec = nsec / 1e9
-       ts.Nsec = nsec % 1e9
-       return
+func setTimespec(sec, nsec int64) Timespec {
+       return Timespec{Sec: sec, Nsec: nsec}
 }
 
-func NsecToTimeval(nsec int64) (tv Timeval) {
-       nsec += 999 // round up to microsecond
-       tv.Usec = int32(nsec % 1e9 / 1e3)
-       tv.Sec = int64(nsec / 1e9)
-       return
+func setTimeval(sec, usec int64) Timeval {
+       return Timeval{Sec: sec, Usec: int32(usec)}
 }
 
 //sysnb        gettimeofday(tp *Timeval) (sec int64, usec int32, err error)
index c42138263c604ccd833869d7c120a804b3695f8e..73bf83f41c22331e1d180b3591b8403e60715ac2 100644 (file)
@@ -6,17 +6,12 @@ package syscall
 
 import "unsafe"
 
-func NsecToTimespec(nsec int64) (ts Timespec) {
-       ts.Sec = int32(nsec / 1e9)
-       ts.Nsec = int32(nsec % 1e9)
-       return
+func setTimespec(sec, nsec int64) Timespec {
+       return Timespec{Sec: int32(sec), Nsec: int32(nsec)}
 }
 
-func NsecToTimeval(nsec int64) (tv Timeval) {
-       nsec += 999 // round up to microsecond
-       tv.Usec = int32(nsec % 1e9 / 1e3)
-       tv.Sec = int32(nsec / 1e9)
-       return
+func setTimeval(sec, usec int64) Timeval {
+       return Timeval{Sec: int32(sec), Usec: int32(usec)}
 }
 
 //sysnb        gettimeofday(tp *Timeval) (sec int32, usec int32, err error)
index b5406e22853118b0eb6d4479f8e357ecd807c31c..bb6130dbd2e36cf034c246a927d9c47b30c2f0f9 100644 (file)
@@ -6,17 +6,12 @@ package syscall
 
 import "unsafe"
 
-func NsecToTimespec(nsec int64) (ts Timespec) {
-       ts.Sec = nsec / 1e9
-       ts.Nsec = nsec % 1e9
-       return
+func setTimespec(sec, nsec int64) Timespec {
+       return Timespec{Sec: sec, Nsec: nsec}
 }
 
-func NsecToTimeval(nsec int64) (tv Timeval) {
-       nsec += 999 // round up to microsecond
-       tv.Usec = nsec % 1e9 / 1e3
-       tv.Sec = int64(nsec / 1e9)
-       return
+func setTimeval(sec, usec int64) Timeval {
+       return Timeval{Sec: sec, Usec: usec}
 }
 
 func SetKevent(k *Kevent_t, fd, mode, flags int) {
index f440f5f98722da4077e8fc8b28299b12c0f4a4d7..60359e38f6b50db2769d1e4e1a2fa530097996ea 100644 (file)
@@ -6,17 +6,12 @@ package syscall
 
 import "unsafe"
 
-func NsecToTimespec(nsec int64) (ts Timespec) {
-       ts.Sec = int32(nsec / 1e9)
-       ts.Nsec = int32(nsec % 1e9)
-       return
+func setTimespec(sec, nsec int64) Timespec {
+       return Timespec{Sec: int32(sec), Nsec: int32(nsec)}
 }
 
-func NsecToTimeval(nsec int64) (tv Timeval) {
-       nsec += 999 // round up to microsecond
-       tv.Usec = int32(nsec % 1e9 / 1e3)
-       tv.Sec = int32(nsec / 1e9)
-       return
+func setTimeval(sec, usec int64) Timeval {
+       return Timeval{Sec: int32(sec), Usec: int32(usec)}
 }
 
 func SetKevent(k *Kevent_t, fd, mode, flags int) {
index b5406e22853118b0eb6d4479f8e357ecd807c31c..bb6130dbd2e36cf034c246a927d9c47b30c2f0f9 100644 (file)
@@ -6,17 +6,12 @@ package syscall
 
 import "unsafe"
 
-func NsecToTimespec(nsec int64) (ts Timespec) {
-       ts.Sec = nsec / 1e9
-       ts.Nsec = nsec % 1e9
-       return
+func setTimespec(sec, nsec int64) Timespec {
+       return Timespec{Sec: sec, Nsec: nsec}
 }
 
-func NsecToTimeval(nsec int64) (tv Timeval) {
-       nsec += 999 // round up to microsecond
-       tv.Usec = nsec % 1e9 / 1e3
-       tv.Sec = int64(nsec / 1e9)
-       return
+func setTimeval(sec, usec int64) Timeval {
+       return Timeval{Sec: sec, Usec: usec}
 }
 
 func SetKevent(k *Kevent_t, fd, mode, flags int) {
index e43cb6256f29047dc83fddd72abda17220bafcb3..351f88fa27d3850e236eb24c23595e7533ca956a 100644 (file)
@@ -6,17 +6,12 @@ package syscall
 
 import "unsafe"
 
-func NsecToTimespec(nsec int64) (ts Timespec) {
-       ts.Sec = nsec / 1e9
-       ts.Nsec = int32(nsec % 1e9)
-       return
+func setTimespec(sec, nsec int64) Timespec {
+       return Timespec{Sec: sec, Nsec: int32(nsec)}
 }
 
-func NsecToTimeval(nsec int64) (tv Timeval) {
-       nsec += 999 // round up to microsecond
-       tv.Usec = int32(nsec % 1e9 / 1e3)
-       tv.Sec = nsec / 1e9
-       return
+func setTimeval(sec, usec int64) Timeval {
+       return Timeval{Sec: sec, Usec: int32(usec)}
 }
 
 func SetKevent(k *Kevent_t, fd, mode, flags int) {
index b7b84b1c34a33fe1a1980d06ffb77e3f234b6151..c8339e909aba891d5e3a2df8def44c1d2b573057 100644 (file)
@@ -14,17 +14,12 @@ const (
        _SYS_getdents = SYS_GETDENTS64
 )
 
-func NsecToTimespec(nsec int64) (ts Timespec) {
-       ts.Sec = int32(nsec / 1e9)
-       ts.Nsec = int32(nsec % 1e9)
-       return
+func setTimespec(sec, nsec int64) Timespec {
+       return Timespec{Sec: int32(sec), Nsec: int32(nsec)}
 }
 
-func NsecToTimeval(nsec int64) (tv Timeval) {
-       nsec += 999 // round up to microsecond
-       tv.Sec = int32(nsec / 1e9)
-       tv.Usec = int32(nsec % 1e9 / 1e3)
-       return
+func setTimeval(sec, usec int64) Timeval {
+       return Timeval{Sec: int32(sec), Usec: int32(usec)}
 }
 
 //sysnb        pipe(p *[2]_C_int) (err error)
index faa973dbdfb06167c56d3702970b6c72a4f8cd55..684bd9cd05bd4ed94e7c4859dace6bc23614b08d 100644 (file)
@@ -84,17 +84,12 @@ func Time(t *Time_t) (tt Time_t, err error) {
        return Time_t(tv.Sec), nil
 }
 
-func NsecToTimespec(nsec int64) (ts Timespec) {
-       ts.Sec = nsec / 1e9
-       ts.Nsec = nsec % 1e9
-       return
+func setTimespec(sec, nsec int64) Timespec {
+       return Timespec{Sec: sec, Nsec: nsec}
 }
 
-func NsecToTimeval(nsec int64) (tv Timeval) {
-       nsec += 999 // round up to microsecond
-       tv.Sec = nsec / 1e9
-       tv.Usec = nsec % 1e9 / 1e3
-       return
+func setTimeval(sec, usec int64) Timeval {
+       return Timeval{Sec: sec, Usec: usec}
 }
 
 //sysnb        pipe(p *[2]_C_int) (err error)
index c4e0a1ce0eb844aebf97603c901d699632ea8408..6371169382b2830e7f0f6d052fe694961a3080a4 100644 (file)
@@ -11,17 +11,12 @@ const (
        _SYS_getdents = SYS_GETDENTS64
 )
 
-func NsecToTimespec(nsec int64) (ts Timespec) {
-       ts.Sec = int32(nsec / 1e9)
-       ts.Nsec = int32(nsec % 1e9)
-       return
+func setTimespec(sec, nsec int64) Timespec {
+       return Timespec{Sec: int32(sec), Nsec: int32(nsec)}
 }
 
-func NsecToTimeval(nsec int64) (tv Timeval) {
-       nsec += 999 // round up to microsecond
-       tv.Sec = int32(nsec / 1e9)
-       tv.Usec = int32(nsec % 1e9 / 1e3)
-       return
+func setTimeval(sec, usec int64) Timeval {
+       return Timeval{Sec: int32(sec), Usec: int32(usec)}
 }
 
 func Pipe(p []int) (err error) {
index 01c72f16b8b5fd1e2ff4f33ff31acaaf65e14e4d..0903ba3ecee5d351ba549a89946b04f4bdc671af 100644 (file)
@@ -71,17 +71,12 @@ func Lstat(path string, stat *Stat_t) (err error) {
 //sysnb        Gettimeofday(tv *Timeval) (err error)
 //sysnb        Time(t *Time_t) (tt Time_t, err error)
 
-func NsecToTimespec(nsec int64) (ts Timespec) {
-       ts.Sec = nsec / 1e9
-       ts.Nsec = nsec % 1e9
-       return
+func setTimespec(sec, nsec int64) Timespec {
+       return Timespec{Sec: sec, Nsec: nsec}
 }
 
-func NsecToTimeval(nsec int64) (tv Timeval) {
-       nsec += 999 // round up to microsecond
-       tv.Sec = nsec / 1e9
-       tv.Usec = nsec % 1e9 / 1e3
-       return
+func setTimeval(sec, usec int64) Timeval {
+       return Timeval{Sec: sec, Usec: usec}
 }
 
 func Pipe(p []int) (err error) {
index 251609b62d2a6492fb737399e5b8f799081f8068..f203156f2bc7b83e0b37c24c53d3833d0aa64ba9 100644 (file)
@@ -79,17 +79,12 @@ func Time(t *Time_t) (tt Time_t, err error) {
        return Time_t(tv.Sec), nil
 }
 
-func NsecToTimespec(nsec int64) (ts Timespec) {
-       ts.Sec = nsec / 1e9
-       ts.Nsec = nsec % 1e9
-       return
+func setTimespec(sec, nsec int64) Timespec {
+       return Timespec{Sec: sec, Nsec: nsec}
 }
 
-func NsecToTimeval(nsec int64) (tv Timeval) {
-       nsec += 999 // round up to microsecond
-       tv.Sec = nsec / 1e9
-       tv.Usec = nsec % 1e9 / 1e3
-       return
+func setTimeval(sec, usec int64) Timeval {
+       return Timeval{Sec: sec, Usec: usec}
 }
 
 func Pipe(p []int) (err error) {
index 876805eca8daa17ab7d8d4c44b56d154a1152dba..006889c5e3024d8135f4dd4631097f51c19533c3 100644 (file)
@@ -67,17 +67,12 @@ const (
 //sysnb        Gettimeofday(tv *Timeval) (err error)
 //sysnb        Time(t *Time_t) (tt Time_t, err error)
 
-func NsecToTimespec(nsec int64) (ts Timespec) {
-       ts.Sec = nsec / 1e9
-       ts.Nsec = nsec % 1e9
-       return
+func setTimespec(sec, nsec int64) Timespec {
+       return Timespec{Sec: sec, Nsec: nsec}
 }
 
-func NsecToTimeval(nsec int64) (tv Timeval) {
-       nsec += 999 // round up to microsecond
-       tv.Sec = nsec / 1e9
-       tv.Usec = nsec % 1e9 / 1e3
-       return
+func setTimeval(sec, usec int64) Timeval {
+       return Timeval{Sec: sec, Usec: usec}
 }
 
 func Pipe(p []int) (err error) {
index 50e987ab5b1bc6a679eb50d2450102f3b7ed90ad..fea6c205083ffe3b0b462f49fbd080356341c711 100644 (file)
@@ -58,17 +58,12 @@ func Time(t *Time_t) (tt Time_t, err error) {
        return Time_t(tv.Sec), nil
 }
 
-func NsecToTimespec(nsec int64) (ts Timespec) {
-       ts.Sec = nsec / 1e9
-       ts.Nsec = nsec % 1e9
-       return
+func setTimespec(sec, nsec int64) Timespec {
+       return Timespec{Sec: sec, Nsec: nsec}
 }
 
-func NsecToTimeval(nsec int64) (tv Timeval) {
-       nsec += 999 // round up to microsecond
-       tv.Sec = nsec / 1e9
-       tv.Usec = nsec % 1e9 / 1e3
-       return
+func setTimeval(sec, usec int64) Timeval {
+       return Timeval{Sec: sec, Usec: usec}
 }
 
 func Pipe(p []int) (err error) {
index 76f23989ec7c99920b6fd1eaf6e660be8b1854e7..39112ebcc3701914cb3020409728c80e22ea9877 100644 (file)
@@ -14,15 +14,10 @@ type Timeval struct {
        Usec int32
 }
 
-func NsecToTimespec(nsec int64) (ts Timespec) {
-       ts.Sec = int64(nsec / 1e9)
-       ts.Nsec = int32(nsec % 1e9)
-       return
+func setTimespec(sec, nsec int64) Timespec {
+       return Timespec{Sec: sec, Nsec: int32(nsec)}
 }
 
-func NsecToTimeval(nsec int64) (tv Timeval) {
-       nsec += 999 // round up to microsecond
-       tv.Usec = int32(nsec % 1e9 / 1e3)
-       tv.Sec = int64(nsec / 1e9)
-       return
+func setTimeval(sec, usec int64) Timeval {
+       return Timeval{Sec: sec, Usec: int32(usec)}
 }
index 76f23989ec7c99920b6fd1eaf6e660be8b1854e7..39112ebcc3701914cb3020409728c80e22ea9877 100644 (file)
@@ -14,15 +14,10 @@ type Timeval struct {
        Usec int32
 }
 
-func NsecToTimespec(nsec int64) (ts Timespec) {
-       ts.Sec = int64(nsec / 1e9)
-       ts.Nsec = int32(nsec % 1e9)
-       return
+func setTimespec(sec, nsec int64) Timespec {
+       return Timespec{Sec: sec, Nsec: int32(nsec)}
 }
 
-func NsecToTimeval(nsec int64) (tv Timeval) {
-       nsec += 999 // round up to microsecond
-       tv.Usec = int32(nsec % 1e9 / 1e3)
-       tv.Sec = int64(nsec / 1e9)
-       return
+func setTimeval(sec, usec int64) Timeval {
+       return Timeval{Sec: sec, Usec: int32(usec)}
 }
index 8796d68df0422c20e511636694eab39e08f05108..dec97b546a5b2ea430a9cee7766afe894984ace0 100644 (file)
@@ -14,15 +14,10 @@ type Timeval struct {
        Usec int32
 }
 
-func NsecToTimespec(nsec int64) (ts Timespec) {
-       ts.Sec = int64(nsec / 1e9)
-       ts.Nsec = int32(nsec % 1e9)
-       return
+func setTimespec(sec, nsec int64) Timespec {
+       return Timespec{Sec: sec, Nsec: int32(nsec)}
 }
 
-func NsecToTimeval(nsec int64) (tv Timeval) {
-       nsec += 999 // round up to microsecond
-       tv.Usec = int32(nsec % 1e9 / 1e3)
-       tv.Sec = int64(nsec / 1e9)
-       return
+func setTimeval(sec, usec int64) Timeval {
+       return Timeval{Sec: sec, Usec: int32(usec)}
 }
index 0218b12edf884e61c30b3c1e542e3178cf40c772..3059b9ad69d642a598190298065aabc7af425f0a 100644 (file)
@@ -4,17 +4,12 @@
 
 package syscall
 
-func NsecToTimespec(nsec int64) (ts Timespec) {
-       ts.Sec = int64(nsec / 1e9)
-       ts.Nsec = int32(nsec % 1e9)
-       return
+func setTimespec(sec, nsec int64) Timespec {
+       return Timespec{Sec: sec, Nsec: int32(nsec)}
 }
 
-func NsecToTimeval(nsec int64) (tv Timeval) {
-       nsec += 999 // round up to microsecond
-       tv.Usec = int32(nsec % 1e9 / 1e3)
-       tv.Sec = int64(nsec / 1e9)
-       return
+func setTimeval(sec, usec int64) Timeval {
+       return Timeval{Sec: sec, Usec: int32(usec)}
 }
 
 func SetKevent(k *Kevent_t, fd, mode, flags int) {
index 0fd6fae46177dab00c479d285ed06ceef6a602d7..b4c5d0d8498f2a9293d93372293d9ea2b7438258 100644 (file)
@@ -4,17 +4,12 @@
 
 package syscall
 
-func NsecToTimespec(nsec int64) (ts Timespec) {
-       ts.Sec = int64(nsec / 1e9)
-       ts.Nsec = int64(nsec % 1e9)
-       return
+func setTimespec(sec, nsec int64) Timespec {
+       return Timespec{Sec: sec, Nsec: nsec}
 }
 
-func NsecToTimeval(nsec int64) (tv Timeval) {
-       nsec += 999 // round up to microsecond
-       tv.Usec = int32(nsec % 1e9 / 1e3)
-       tv.Sec = int64(nsec / 1e9)
-       return
+func setTimeval(sec, usec int64) Timeval {
+       return Timeval{Sec: sec, Usec: int32(usec)}
 }
 
 func SetKevent(k *Kevent_t, fd, mode, flags int) {
index b5a754de35f1ad6aa781a4c389d7a4bf64450629..dcafd1f3296f64a2a9f5ab2aeb9284fa0c606c61 100644 (file)
@@ -4,17 +4,12 @@
 
 package syscall
 
-func NsecToTimespec(nsec int64) (ts Timespec) {
-       ts.Sec = int64(nsec / 1e9)
-       ts.Nsec = int32(nsec % 1e9)
-       return
+func setTimespec(sec, nsec int64) Timespec {
+       return Timespec{Sec: sec, Nsec: int32(nsec)}
 }
 
-func NsecToTimeval(nsec int64) (tv Timeval) {
-       nsec += 999 // round up to microsecond
-       tv.Usec = int32(nsec % 1e9 / 1e3)
-       tv.Sec = int64(nsec / 1e9)
-       return
+func setTimeval(sec, usec int64) Timeval {
+       return Timeval{Sec: sec, Usec: int32(usec)}
 }
 
 func SetKevent(k *Kevent_t, fd, mode, flags int) {
index 185f4b5ce64ccdbec393abf785e19e9e1fd88f3b..ca07ae0500248f8bea9b4904ec3b3720908ad03e 100644 (file)
@@ -4,17 +4,12 @@
 
 package syscall
 
-func NsecToTimespec(nsec int64) (ts Timespec) {
-       ts.Sec = int64(nsec / 1e9)
-       ts.Nsec = int32(nsec % 1e9)
-       return
+func setTimespec(sec, nsec int64) Timespec {
+       return Timespec{Sec: sec, Nsec: int32(nsec)}
 }
 
-func NsecToTimeval(nsec int64) (tv Timeval) {
-       nsec += 999 // round up to microsecond
-       tv.Usec = int32(nsec % 1e9 / 1e3)
-       tv.Sec = int64(nsec / 1e9)
-       return
+func setTimeval(sec, usec int64) Timeval {
+       return Timeval{Sec: sec, Usec: int32(usec)}
 }
 
 func SetKevent(k *Kevent_t, fd, mode, flags int) {
index a8aad0b07ef41a9291891a8fc47d7e54d636eda5..47fc7e7f9bd644b839035b5460c2c184de271327 100644 (file)
@@ -4,17 +4,12 @@
 
 package syscall
 
-func NsecToTimespec(nsec int64) (ts Timespec) {
-       ts.Sec = nsec / 1e9
-       ts.Nsec = nsec % 1e9
-       return
+func setTimespec(sec, nsec int64) Timespec {
+       return Timespec{Sec: sec, Nsec: nsec}
 }
 
-func NsecToTimeval(nsec int64) (tv Timeval) {
-       nsec += 999 // round up to microsecond
-       tv.Usec = nsec % 1e9 / 1e3
-       tv.Sec = nsec / 1e9
-       return
+func setTimeval(sec, usec int64) Timeval {
+       return Timeval{Sec: sec, Usec: usec}
 }
 
 func SetKevent(k *Kevent_t, fd, mode, flags int) {
index 185f4b5ce64ccdbec393abf785e19e9e1fd88f3b..ca07ae0500248f8bea9b4904ec3b3720908ad03e 100644 (file)
@@ -4,17 +4,12 @@
 
 package syscall
 
-func NsecToTimespec(nsec int64) (ts Timespec) {
-       ts.Sec = int64(nsec / 1e9)
-       ts.Nsec = int32(nsec % 1e9)
-       return
+func setTimespec(sec, nsec int64) Timespec {
+       return Timespec{Sec: sec, Nsec: int32(nsec)}
 }
 
-func NsecToTimeval(nsec int64) (tv Timeval) {
-       nsec += 999 // round up to microsecond
-       tv.Usec = int32(nsec % 1e9 / 1e3)
-       tv.Sec = int64(nsec / 1e9)
-       return
+func setTimeval(sec, usec int64) Timeval {
+       return Timeval{Sec: sec, Usec: int32(usec)}
 }
 
 func SetKevent(k *Kevent_t, fd, mode, flags int) {
index 5aa525f504d250baff75329cc8af9324015c0425..87ad4bf2168d53d7e2e31fd5833bd5cf09105f11 100644 (file)
@@ -4,17 +4,12 @@
 
 package syscall
 
-func NsecToTimespec(nsec int64) (ts Timespec) {
-       ts.Sec = nsec / 1e9
-       ts.Nsec = nsec % 1e9
-       return
+func setTimespec(sec, nsec int64) Timespec {
+       return Timespec{Sec: sec, Nsec: nsec}
 }
 
-func NsecToTimeval(nsec int64) (tv Timeval) {
-       nsec += 999 // round up to microsecond
-       tv.Usec = nsec % 1e9 / 1e3
-       tv.Sec = int64(nsec / 1e9)
-       return
+func setTimeval(sec, usec int64) Timeval {
+       return Timeval{Sec: sec, Usec: usec}
 }
 
 func (iov *Iovec) SetLen(length int) {
index 4c4e20491680478a8aff0e492bb57d02178fbcca..49c3383b4f7faafe666f58f3e34a46174b86e576 100644 (file)
@@ -6,6 +6,35 @@
 
 package syscall
 
+// 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) }
 
+// NsecToTimespec takes a number of nanoseconds since the Unix epoch
+// and returns the corresponding Timespec value.
+func NsecToTimespec(nsec int64) Timespec {
+       sec := nsec / 1e9
+       nsec = nsec % 1e9
+       if nsec < 0 {
+               nsec += 1e9
+               sec--
+       }
+       return setTimespec(sec, nsec)
+}
+
+// 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 }
+
+// NsecToTimeval takes a number of nanoseconds since the Unix epoch
+// and returns the corresponding Timeval value.
+func NsecToTimeval(nsec int64) Timeval {
+       nsec += 999 // round up to microsecond
+       usec := nsec % 1e9 / 1e3
+       sec := nsec / 1e9
+       if usec < 0 {
+               usec += 1e6
+               sec--
+       }
+       return setTimeval(sec, usec)
+}