]> Cypherpunks repositories - gostls13.git/commitdiff
time: unify three readFile implementations into one
authorIan Lance Taylor <iant@golang.org>
Tue, 26 Sep 2017 17:50:57 +0000 (10:50 -0700)
committerIan Lance Taylor <iant@golang.org>
Wed, 27 Sep 2017 14:29:31 +0000 (14:29 +0000)
Undoes this part of https://golang.org/cl/5447061 by using the
OS-specific open and close functions, and adding a read function.

Change-Id: If37ef43eb5df8554fc03f3922bbc2f785129bb9c
Reviewed-on: https://go-review.googlesource.com/66271
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Joe Tsai <joetsai@google.com>
src/time/sys_plan9.go
src/time/sys_unix.go
src/time/sys_windows.go
src/time/zoneinfo_read.go

index 9086a6e835ff9aa89daec0e760e282e1a31c572f..b7fba0802c2b717fa30d33fa30c5d04a7cf4b80c 100644 (file)
@@ -16,36 +16,6 @@ func interrupt() {
        // cannot predict pid, don't want to kill group
 }
 
-// readFile reads and returns the content of the named file.
-// It is a trivial implementation of ioutil.ReadFile, reimplemented
-// here to avoid depending on io/ioutil or os.
-// It returns an error if name exceeds maxFileSize bytes.
-func readFile(name string) ([]byte, error) {
-       f, err := syscall.Open(name, syscall.O_RDONLY)
-       if err != nil {
-               return nil, err
-       }
-       defer syscall.Close(f)
-       var (
-               buf [4096]byte
-               ret []byte
-               n   int
-       )
-       for {
-               n, err = syscall.Read(f, buf[:])
-               if n > 0 {
-                       ret = append(ret, buf[:n]...)
-               }
-               if n == 0 || err != nil {
-                       break
-               }
-               if len(ret) > maxFileSize {
-                       return nil, fileSizeError(name)
-               }
-       }
-       return ret, err
-}
-
 func open(name string) (uintptr, error) {
        fd, err := syscall.Open(name, syscall.O_RDONLY)
        if err != nil {
@@ -54,6 +24,10 @@ func open(name string) (uintptr, error) {
        return uintptr(fd), nil
 }
 
+func read(fd uintptr, buf []byte) (int, error) {
+       return syscall.Read(int(fd), buf)
+}
+
 func closefd(fd uintptr) {
        syscall.Close(int(fd))
 }
index bb44b84b37fee2445bbc3a3bdb1876739abc8270..0ef597fd9b8b419a7290a77b98bc1450be08b14e 100644 (file)
@@ -16,36 +16,6 @@ func interrupt() {
        syscall.Kill(syscall.Getpid(), syscall.SIGCHLD)
 }
 
-// readFile reads and returns the content of the named file.
-// It is a trivial implementation of ioutil.ReadFile, reimplemented
-// here to avoid depending on io/ioutil or os.
-// It returns an error if name exceeds maxFileSize bytes.
-func readFile(name string) ([]byte, error) {
-       f, err := syscall.Open(name, syscall.O_RDONLY, 0)
-       if err != nil {
-               return nil, err
-       }
-       defer syscall.Close(f)
-       var (
-               buf [4096]byte
-               ret []byte
-               n   int
-       )
-       for {
-               n, err = syscall.Read(f, buf[:])
-               if n > 0 {
-                       ret = append(ret, buf[:n]...)
-               }
-               if n == 0 || err != nil {
-                       break
-               }
-               if len(ret) > maxFileSize {
-                       return nil, fileSizeError(name)
-               }
-       }
-       return ret, err
-}
-
 func open(name string) (uintptr, error) {
        fd, err := syscall.Open(name, syscall.O_RDONLY, 0)
        if err != nil {
@@ -54,6 +24,10 @@ func open(name string) (uintptr, error) {
        return uintptr(fd), nil
 }
 
+func read(fd uintptr, buf []byte) (int, error) {
+       return syscall.Read(int(fd), buf)
+}
+
 func closefd(fd uintptr) {
        syscall.Close(int(fd))
 }
index 9e381653937cc6225bf4b821dfab6ce6ae7b6d19..481aea562e8b2e26b01ee0a63ccfa965fc803fec 100644 (file)
@@ -13,36 +13,6 @@ import (
 func interrupt() {
 }
 
-// readFile reads and returns the content of the named file.
-// It is a trivial implementation of ioutil.ReadFile, reimplemented
-// here to avoid depending on io/ioutil or os.
-// It returns an error if name exceeds maxFileSize bytes.
-func readFile(name string) ([]byte, error) {
-       f, err := syscall.Open(name, syscall.O_RDONLY, 0)
-       if err != nil {
-               return nil, err
-       }
-       defer syscall.Close(f)
-       var (
-               buf [4096]byte
-               ret []byte
-               n   int
-       )
-       for {
-               n, err = syscall.Read(f, buf[:])
-               if n > 0 {
-                       ret = append(ret, buf[:n]...)
-               }
-               if n == 0 || err != nil {
-                       break
-               }
-               if len(ret) > maxFileSize {
-                       return nil, fileSizeError(name)
-               }
-       }
-       return ret, err
-}
-
 func open(name string) (uintptr, error) {
        fd, err := syscall.Open(name, syscall.O_RDONLY, 0)
        if err != nil {
@@ -51,6 +21,10 @@ func open(name string) (uintptr, error) {
        return uintptr(fd), nil
 }
 
+func read(fd uintptr, buf []byte) (int, error) {
+       return syscall.Read(syscall.Handle(fd), buf)
+}
+
 func closefd(fd uintptr) {
        syscall.Close(syscall.Handle(fd))
 }
index 191fabb4090e2104329d5657aef818c956930594..eaaaf1f2b4c23639da16be39e03e6587d3db0c5f 100644 (file)
@@ -403,3 +403,33 @@ func loadLocation(name string, sources []string) (z *Location, firstErr error) {
        }
        return nil, errors.New("unknown time zone " + name)
 }
+
+// readFile reads and returns the content of the named file.
+// It is a trivial implementation of ioutil.ReadFile, reimplemented
+// here to avoid depending on io/ioutil or os.
+// It returns an error if name exceeds maxFileSize bytes.
+func readFile(name string) ([]byte, error) {
+       f, err := open(name)
+       if err != nil {
+               return nil, err
+       }
+       defer closefd(f)
+       var (
+               buf [4096]byte
+               ret []byte
+               n   int
+       )
+       for {
+               n, err = read(f, buf[:])
+               if n > 0 {
+                       ret = append(ret, buf[:n]...)
+               }
+               if n == 0 || err != nil {
+                       break
+               }
+               if len(ret) > maxFileSize {
+                       return nil, fileSizeError(name)
+               }
+       }
+       return ret, err
+}