mirror of
https://github.com/rclone/rclone
synced 2024-11-18 18:46:07 +01:00
lib/file: fix SetSparse on Windows 7 which fixes downloads of files > 250MB
Before this change we passed both lpOverlapped and lpBytesReturned as NULL. > If lpOverlapped is NULL, lpBytesReturned cannot be NULL. Even when > an operation produces no output data, and lpOutBuffer can be NULL, > the DeviceIoControl function makes use of the variable pointed to by > lpBytesReturned. After such an operation, the value of the variable > is without meaning. After this change we set lpBytesReturned to a valid pointer. See: https://forum.rclone.org/t/errors-when-downloading-any-file-over-250mb-from-google-drive-windows-sparse-files/16889
This commit is contained in:
parent
d729004554
commit
c4110780bf
@ -92,7 +92,8 @@ const SetSparseImplemented = true
|
||||
|
||||
// SetSparse makes the file be a sparse file
|
||||
func SetSparse(out *os.File) error {
|
||||
err := syscall.DeviceIoControl(syscall.Handle(out.Fd()), FSCTL_SET_SPARSE, nil, 0, nil, 0, nil, nil)
|
||||
var bytesReturned uint32
|
||||
err := syscall.DeviceIoControl(syscall.Handle(out.Fd()), FSCTL_SET_SPARSE, nil, 0, nil, 0, &bytesReturned, nil)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "DeviceIoControl FSCTL_SET_SPARSE")
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user