From 2f8b555de27198775f9606e001ef19b76efdb415 Mon Sep 17 00:00:00 2001 From: Giovanni Bajo Date: Sat, 23 Sep 2017 00:57:51 +0200 Subject: [PATCH] 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 --- src/archive/tar/sparse_unix.go | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) 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 -- 2.48.1