From: Giovanni Bajo Date: Fri, 22 Sep 2017 22:57:51 +0000 (+0200) Subject: archive/tar: fix sparse files support on Darwin X-Git-Tag: go1.10beta1~1006 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=2f8b555de27198775f9606e001ef19b76efdb415;p=gostls13.git archive/tar: fix sparse files support on Darwin 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 Run-TryBot: Joe Tsai TryBot-Result: Gobot Gobot --- diff --git a/src/archive/tar/sparse_unix.go b/src/archive/tar/sparse_unix.go index 4bc3482858..c623c1ee4f 100644 --- a/src/archive/tar/sparse_unix.go +++ b/src/archive/tar/sparse_unix.go @@ -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