]> Cypherpunks repositories - gostls13.git/commitdiff
time: return informative errors when failing to load timezone data.
authorDavid Symonds <dsymonds@golang.org>
Fri, 6 Feb 2015 05:58:07 +0000 (16:58 +1100)
committerDavid Symonds <dsymonds@golang.org>
Sun, 8 Feb 2015 22:20:37 +0000 (22:20 +0000)
If we cannot load timezone information for a reason other than the
zoneinfo file not existing, return it since that will be much more
useful in debugging failures than "unknown time zone XYZ".

Fixes #9723.

Change-Id: I3aa5774859cec28e584d16bcc1fef0705d95288c
Reviewed-on: https://go-review.googlesource.com/3984
Reviewed-by: Ian Lance Taylor <iant@golang.org>
src/time/sys_unix.go
src/time/zoneinfo_plan9.go
src/time/zoneinfo_unix.go
src/time/zoneinfo_windows.go

index 379e13d6a537f7ec87ef818c9881a7212ecdb52d..e592415daa5161bf0a5d36ca398b2ee774feabc1 100644 (file)
@@ -74,3 +74,5 @@ func preadn(fd uintptr, buf []byte, off int) error {
        }
        return nil
 }
+
+func isNotExist(err error) bool { return err == syscall.ENOENT }
index 4bb0cb3909683536e22e8b6c93ab986f079b0b3c..2b8cb659e9d96cdd23b690059af6a2658741d208 100644 (file)
@@ -148,11 +148,12 @@ func initLocal() {
 }
 
 func loadLocation(name string) (*Location, error) {
-       if z, err := loadZoneFile(runtime.GOROOT()+"/lib/time/zoneinfo.zip", name); err == nil {
-               z.name = name
-               return z, nil
+       z, err := loadZoneFile(runtime.GOROOT()+"/lib/time/zoneinfo.zip", name)
+       if err != nil {
+               return nil, err
        }
-       return nil, errors.New("unknown time zone " + name)
+       z.name = name
+       return z, nil
 }
 
 func forceZipFileForTesting(zipOnly bool) {
index ab7e4612e464d555954eec10ef034745cc577732..66540969d587a7abd8897c25f8d1ae6e3b339dcd 100644 (file)
@@ -74,11 +74,17 @@ func initLocal() {
 }
 
 func loadLocation(name string) (*Location, error) {
+       var firstErr error
        for _, zoneDir := range zoneDirs {
                if z, err := loadZoneFile(zoneDir, name); err == nil {
                        z.name = name
                        return z, nil
+               } else if firstErr == nil && !isNotExist(err) {
+                       firstErr = err
                }
        }
+       if firstErr != nil {
+               return nil, firstErr
+       }
        return nil, errors.New("unknown time zone " + name)
 }
index 02d8e0edcc891bd9d4ba3fc3d4c453310f04578d..5077f4bd867a8a7927ba440eba0b44f3d63bee8d 100644 (file)
@@ -260,11 +260,12 @@ func initLocal() {
 }
 
 func loadLocation(name string) (*Location, error) {
-       if z, err := loadZoneFile(runtime.GOROOT()+`\lib\time\zoneinfo.zip`, name); err == nil {
-               z.name = name
-               return z, nil
+       z, err := loadZoneFile(runtime.GOROOT()+`\lib\time\zoneinfo.zip`, name)
+       if err != nil {
+               return nil, err
        }
-       return nil, errors.New("unknown time zone " + name)
+       z.name = name
+       return z, nil
 }
 
 func forceZipFileForTesting(zipOnly bool) {