mirror of https://github.com/golang/go.git
archive/tar: make check for hole detection support more liberal
On most Unix OSes, lseek reports EINVAL when lacking SEEK_HOLE support. However, there are reports that ENOTTY is reported instead. Rather than tracking down every possible errno that may be used to represent "not supported", just treat any non-nil error as meaning that there is no support. This is the same strategy taken by the GNU and BSD tar tools. Fixes #21958 Change-Id: Iae68afdc934042f52fa914fca45f0ca89220c383 Reviewed-on: https://go-review.googlesource.com/65191 Run-TryBot: Joe Tsai <thebrokentoaster@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
This commit is contained in:
parent
9732485851
commit
fdecab6ef0
|
|
@ -23,8 +23,12 @@ func sparseDetectUnix(f *os.File) (sph sparseHoles, err error) {
|
|||
const seekHole = 4 // SEEK_HOLE from unistd.h
|
||||
|
||||
// Check for seekData/seekHole support.
|
||||
if _, err := f.Seek(0, seekHole); errno(err) == syscall.EINVAL {
|
||||
return nil, nil // Either old kernel or FS does not support this
|
||||
// Different OS and FS may differ in the exact errno that is returned when
|
||||
// there is no support. Rather than special-casing every possible errno
|
||||
// representing "not supported", just assume that a non-nil error means
|
||||
// that seekData/seekHole is not supported.
|
||||
if _, err := f.Seek(0, seekHole); err != nil {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
// Populate the SparseHoles.
|
||||
|
|
|
|||
Loading…
Reference in New Issue