Thread (6 messages) flat view 6 messages, 3 authors, 2016-06-15

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".
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help