Paul Eggert <[EMAIL PROTECTED]> wrote:
> Jim Meyering <[EMAIL PROTECTED]> writes:
>
>> +  /* Accept either EISDIR, EPERM, or EACCES as an indication that FILENAME may
>> +     be a directory.  POSIX says that unlink must set errno to EPERM when it
>> +     fails to remove a directory, while Linux-2.4.18 sets it to EISDIR.
>> +     unlink fails with EACCES when the parent directory is write-protected.  */
>
> Aren't other error numbers possible?  For example, suppose the

Yes, indeed.
I realized that as I was writing the above,
but didn't have the time to investigate just then.

...
> 2004-05-08  Paul Eggert  <[EMAIL PROTECTED]>
>
>       Fix bug where "rm" gave up too easily, reported by Dan Jacobsen in
>       <http://mail.gnu.org/archive/html/bug-coreutils/2004-05/msg00013.html>.
>
>       * src/remove.c (remove_entry): Check for errno values like ENOENT
>       that show the file cannot be directory, instead of for errno
>       values like EPERM that show the file might be a directory.  This
>       is necessary because, when a single unlink() call has multiple
>       reasons to fail, it can set errno to any of those reasons; it's
>       only the rare errno value like ENOENT that excludes all the other
>       possible reasons to fail even when the file is a directory.
>       (remove_cwd_entries): Don't attempt chdir if the file is known
>       to not be a directory.
>       (remove_dir): Use the same method that remove_cwd_entries uses
>       (for some reason they differed).  Don't assert that saved_errno
>       must be EPERM; it might be just about anything.

That is a fine patch.
I've applied it and added a test.  Thank you!


_______________________________________________
Bug-coreutils mailing list
[EMAIL PROTECTED]
http://mail.gnu.org/mailman/listinfo/bug-coreutils

Reply via email to