Cygwin: lseek: check for file sparseness, not for mount point sparseness

The code introducing the lseek(2) code for the GNU extensions
SEEK_DATA and SEEK_HOLE accidentally checks if the mount point
has the "sparse" flag set and, if not, emulates SEEK_DATA/SEEK_HOLE
per the Linux specs.

However, the mount point "sparse" flag only determines whether
files should be made sparse or not.  Files may be sparse independently
of that, obviously.

Fix that by checking for the FILE_ATTRIBUTE_SPARSE_FILE attribute
instead.

Fixes: edfa581d3c ("Cygwin: lseek: implement SEEK_DATA and SEEK_HOLE for files")
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
This commit is contained in:
Corinna Vinschen 2023-11-25 18:07:10 +01:00
parent 0e961f582a
commit d5dcb484c7
1 changed files with 1 additions and 1 deletions

View File

@ -1140,7 +1140,7 @@ fhandler_base::lseek (off_t offset, int whence)
set_errno (ENXIO);
return -1;
}
if (!pc.support_sparse ())
if (!has_attribute (FILE_ATTRIBUTE_SPARSE_FILE))
{
/* Default behaviour if sparse files are not supported:
SEEK_DATA: seek to offset