From b879cd1661ad2fb37f603e18f6b1860c91f445ec Mon Sep 17 00:00:00 2001 From: Corinna Vinschen Date: Tue, 21 Jan 2025 17:19:24 +0100 Subject: [PATCH] Cygwin: unlink: fix error checking order Checking EPERM only makes sense if the file exists, so let the EEXIST check change places with the EPERM check. Add a debug statement to the EPERM condition. Signed-off-by: Corinna Vinschen --- winsup/cygwin/syscalls.cc | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/winsup/cygwin/syscalls.cc b/winsup/cygwin/syscalls.cc index 52a5601d2..1cb782117 100644 --- a/winsup/cygwin/syscalls.cc +++ b/winsup/cygwin/syscalls.cc @@ -1136,17 +1136,18 @@ unlink (const char *ourname) set_errno (EROFS); goto done; } - if (!win32_name.isondisk ()) - { - set_errno (EPERM); - goto done; - } if (!win32_name.exists ()) { debug_printf ("unlinking a nonexistent file"); set_errno (ENOENT); goto done; } + if (!win32_name.isondisk ()) + { + debug_printf ("unlinking a virtual file"); + set_errno (EPERM); + goto done; + } else if (win32_name.isdir ()) { debug_printf ("unlinking a directory");