From 54efdc596f7b6c711e5d65d99f1c25a0ca3628f1 Mon Sep 17 00:00:00 2001 From: David Crawshaw Date: Mon, 2 Mar 2015 16:01:20 -0500 Subject: [PATCH] time: zoneinfo support on darwin/arm A future change will include an NSTimeZone hook so we can determine the device's current time zone. Change-Id: Ia4bd6b955e4cb720c518055541b66ff57a4dd303 Reviewed-on: https://go-review.googlesource.com/6511 Reviewed-by: Hyang-Ah Hana Kim Run-TryBot: David Crawshaw --- src/time/sleep_test.go | 4 +++ src/time/zoneinfo_darwin_armx.go | 51 ++++++++++++++++++++++++++++++++ src/time/zoneinfo_unix.go | 2 +- 3 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 src/time/zoneinfo_darwin_armx.go diff --git a/src/time/sleep_test.go b/src/time/sleep_test.go index c9b2956b784..6452a9e0274 100644 --- a/src/time/sleep_test.go +++ b/src/time/sleep_test.go @@ -383,6 +383,10 @@ func TestOverflowSleep(t *testing.T) { // Test that a panic while deleting a timer does not leave // the timers mutex held, deadlocking a ticker.Stop in a defer. func TestIssue5745(t *testing.T) { + if runtime.GOOS == "darwin" && runtime.GOARCH == "arm" { + t.Skipf("skipping on %s/%s, see issue 10043", runtime.GOOS, runtime.GOARCH) + } + ticker := NewTicker(Hour) defer func() { // would deadlock here before the fix due to diff --git a/src/time/zoneinfo_darwin_armx.go b/src/time/zoneinfo_darwin_armx.go new file mode 100644 index 00000000000..f09166c89e9 --- /dev/null +++ b/src/time/zoneinfo_darwin_armx.go @@ -0,0 +1,51 @@ +// Copyright 2015 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. + +// +build darwin +// +build arm arm64 + +package time + +import "syscall" + +var zoneFile string + +func init() { + wd, err := syscall.Getwd() + if err != nil { + return + } + + // The working directory at initialization is the root of the + // app bundle: "/private/.../bundlename.app". That's where we + // keep zoneinfo.zip. + zoneFile = wd + "/zoneinfo.zip" +} + +func forceZipFileForTesting(zipOnly bool) { + // On iOS we only have the zip file. +} + +func initTestingZone() { + z, err := loadZoneFile(zoneFile, "America/Los_Angeles") + if err != nil { + panic("cannot load America/Los_Angeles for testing: " + err.Error()) + } + z.name = "Local" + localLoc = *z +} + +func initLocal() { + // TODO(crawshaw): [NSTimeZone localTimeZone] + localLoc = *UTC +} + +func loadLocation(name string) (*Location, error) { + z, err := loadZoneFile(zoneFile, name) + if err != nil { + return nil, err + } + z.name = name + return z, nil +} diff --git a/src/time/zoneinfo_unix.go b/src/time/zoneinfo_unix.go index 66540969d58..687d0046687 100644 --- a/src/time/zoneinfo_unix.go +++ b/src/time/zoneinfo_unix.go @@ -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 nacl netbsd openbsd solaris +// +build darwin,!arm,!arm64 dragonfly freebsd linux nacl netbsd openbsd solaris // Parse "zoneinfo" time zone file. // This is a fairly standard file format used on OS X, Linux, BSD, Sun, and others.