diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2023-11-25 18:07:10 +0100 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2023-11-25 18:07:23 +0100 |
commit | d5dcb484c705a214b30826c82b9fd8bf83772093 (patch) | |
tree | bd2dbd11d6cbb91ebb8f4ee7e9f75683538b07cd /winsup | |
parent | 0e961f582a315fd6f13b8e924f58af6057558348 (diff) | |
download | newlib-d5dcb484c705a214b30826c82b9fd8bf83772093.zip newlib-d5dcb484c705a214b30826c82b9fd8bf83772093.tar.gz newlib-d5dcb484c705a214b30826c82b9fd8bf83772093.tar.bz2 |
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: edfa581d3c5a ("Cygwin: lseek: implement SEEK_DATA and SEEK_HOLE for files")
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
Diffstat (limited to 'winsup')
-rw-r--r-- | winsup/cygwin/fhandler/base.cc | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/winsup/cygwin/fhandler/base.cc b/winsup/cygwin/fhandler/base.cc index cdef01a..a57ffcb 100644 --- a/winsup/cygwin/fhandler/base.cc +++ b/winsup/cygwin/fhandler/base.cc @@ -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 |