From df46bfb995b3cbd33ecfe5be088b83dbf9064f51 Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Sun, 7 May 2017 21:19:13 +0200 Subject: [PATCH] utimens: Improve error code on native Windows. * lib/utimens.c (fdutimens): If fd was not opened with O_RDWR, fail with error code EACCES, not EINVAL. --- ChangeLog | 6 ++++++ lib/utimens.c | 14 +++++++++++--- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 75537dcaf5..1fbcd8fccf 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2017-05-07 Bruno Haible + + utimens: Improve error code on native Windows. + * lib/utimens.c (fdutimens): If fd was not opened with O_RDWR, fail with + error code EACCES, not EINVAL. + 2017-05-07 Bruno Haible utime: Handle more Windows error codes. diff --git a/lib/utimens.c b/lib/utimens.c index 5f3a846ea2..b027cfb673 100644 --- a/lib/utimens.c +++ b/lib/utimens.c @@ -349,11 +349,19 @@ fdutimens (int fd, char const *file, struct timespec const timespec[2]) return 0; else { - #if 0 DWORD sft_error = GetLastError (); - fprintf (stderr, "utime SetFileTime error 0x%x\n", (unsigned int) sft_error); + #if 0 + fprintf (stderr, "fdutimens SetFileTime error 0x%x\n", (unsigned int) sft_error); #endif - errno = EINVAL; + switch (sft_error) + { + case ERROR_ACCESS_DENIED: /* fd was opened without O_RDWR */ + errno = EACCES; /* not specified by POSIX */ + break; + default: + errno = EINVAL; + break; + } return -1; } } -- 2.39.5