Re: [PATCH] Fix merge-recursive on cygwin: broken errno when unlinking a directory
From: Alex Riesen <hidden>
Date: 2016-06-15 22:43:05
Linus Torvalds, Thu, Apr 19, 2007 01:04:06 +0200:
quoted
+ struct stat st; + int err = errno; + if (err == EISDIR || + (err == EPERM && !lstat(path, &st) && S_ISDIR(st.st_mode))) {Can I ask people to please *not* write things like this?
Err... ok.
(Side note: EPERM is actually apparently the POSIXLY correct error!)
Indeed it is 8-[]
So here's a suggested and totally untested patch. It makes the code more readable, and probably fixes *two* bugs in the process. It also simply doesn't really even care what the error actually was - the important part was not that it was a directory, but that the unlink didn't succeed!
Well, it is a bit tested now. I'll repeat the testing tomorrow on that windows box.
+ /* .. but not some other error (who really cares what?) */ + return error(msg, path, ": perhaps a D/F conflict?");
I have to care sometimes when cygwin breaks where you never expect it to. These annoying strerror(errno)'s a very helpful. IOW, how can the user respond to the message which just tells "maybe it is expected and you can fix it. Perhaps"? What do I do here next? (well, I know what to do, but someone wont). An lstat + S_ISDIR would at least make it plain "D/F conflict".