Commit 2f8b555d authored by Giovanni Bajo's avatar Giovanni Bajo Committed by Joe Tsai

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/65570Reviewed-by: default avatarJoe Tsai <thebrokentoaster@gmail.com>
Run-TryBot: Joe Tsai <thebrokentoaster@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
parent 6171d055
...@@ -9,6 +9,7 @@ package tar ...@@ -9,6 +9,7 @@ package tar
import ( import (
"io" "io"
"os" "os"
"runtime"
"syscall" "syscall"
) )
...@@ -19,8 +20,12 @@ func init() { ...@@ -19,8 +20,12 @@ func init() {
func sparseDetectUnix(f *os.File) (sph sparseHoles, err error) { func sparseDetectUnix(f *os.File) (sph sparseHoles, err error) {
// SEEK_DATA and SEEK_HOLE originated from Solaris and support for it // SEEK_DATA and SEEK_HOLE originated from Solaris and support for it
// has been added to most of the other major Unix systems. // has been added to most of the other major Unix systems.
const seekData = 3 // SEEK_DATA from unistd.h var seekData, seekHole = 3, 4 // SEEK_DATA/SEEK_HOLE from unistd.h
const seekHole = 4 // 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. // Check for seekData/seekHole support.
// Different OS and FS may differ in the exact errno that is returned when // Different OS and FS may differ in the exact errno that is returned when
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment