Excerpts from Chip Davis's message of August 4, 2021 2:46 pm:
August 4, 2021 11:40 AM, "Alex Xu (Hello71)" alex_y_xu@yahoo.ca wrote:
diff --git a/dlls/ntdll/unix/file.c b/dlls/ntdll/unix/file.c index 45e444d8576..4e355ef8809 100644 --- a/dlls/ntdll/unix/file.c +++ b/dlls/ntdll/unix/file.c @@ -333,6 +333,7 @@ NTSTATUS errno_to_status( int err ) TRACE( "errno = %d\n", err ); switch (err) {
- case 0: return STATUS_SUCCESS;
Most syscalls do not clear errno(3) to 0 on success; instead, they leave it untouched. copy_file_range(2) is no exception. This is why we don't have a case for that.
This is a hack to handle explicit errno = 0 in IOCTL_COPYCHUNK implementation. I can work on a clearer implementation if that's preferred.
case EAGAIN: return STATUS_SHARING_VIOLATION; case EBADF: return STATUS_INVALID_HANDLE; case EBUSY: return STATUS_DEVICE_BUSY;
@@ -364,6 +365,7 @@ NTSTATUS errno_to_status( int err ) #endif case ENOEXEC: /* ?? */ case EEXIST: /* ?? */
- case ENOMEM: return STATUS_NO_MEMORY;
This is the wrong place for that. It will cause the ENOEXEC and EEXIST cases to return STATUS_NO_MEMORY, and I don't think we want that.
Yes, of course you are right. I will fix this in the next revision.
Regards, Alex.