]> Cypherpunks repositories - gostls13.git/commitdiff
archive/tar: fix sparse files support on Darwin
authorGiovanni Bajo <rasky@develer.com>
Fri, 22 Sep 2017 22:57:51 +0000 (00:57 +0200)
committerJoe Tsai <thebrokentoaster@gmail.com>
Sat, 23 Sep 2017 16:53:28 +0000 (16:53 +0000)
Apple defined the SEEK_HOLE/SEEK_DATA constants in unistd.h
with swapped values, compared to all other UNIX systems.

Fixes #21970

Change-Id: I84a33e0741f0f33a2e04898e96b788b87aa9890f
Reviewed-on: https://go-review.googlesource.com/65570
Reviewed-by: Joe Tsai <thebrokentoaster@gmail.com>
Run-TryBot: Joe Tsai <thebrokentoaster@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>

src/archive/tar/sparse_unix.go

index 4bc348285893d19351eaaa071e3f36ce5292d577..c623c1ee4fd9899198c01374c10d3adc97f0e4fa 100644 (file)
@@ -9,6 +9,7 @@ package tar
 import (
        "io"
        "os"
+       "runtime"
        "syscall"
 )
 
@@ -19,8 +20,12 @@ func init() {
 func sparseDetectUnix(f *os.File) (sph sparseHoles, err error) {
        // SEEK_DATA and SEEK_HOLE originated from Solaris and support for it
        // has been added to most of the other major Unix systems.
-       const seekData = 3 // SEEK_DATA from unistd.h
-       const seekHole = 4 // SEEK_HOLE from unistd.h
+       var seekData, seekHole = 3, 4 // SEEK_DATA/SEEK_HOLE from unistd.h
+
+       if runtime.GOOS == "darwin" {
+               // Darwin has the constants swapped, compared to all other UNIX.
+               seekData, seekHole = 4, 3
+       }
 
        // Check for seekData/seekHole support.
        // Different OS and FS may differ in the exact errno that is returned when