Subject: Re: bug#12339: Bug: rm -fr . doesn't dir depth first deletion yet it is documented to do so.

From: Linda Walsh <[email-masked]>
Date: Wed, 05 Sep 2012 14:06:02 -0700

Thanks for the efforts at cleaning things up...it's appreciated
even if it's not exactly what  I might want...just wanted to
emphasize that your I appreciate the work you are doing!..

I just don't always appreciate the 'posixifing' of linux's default
behavior...but then I like powerful interface that allow me to shoot
myself in the foot if I really want to! ;-)

Jim Meyering wrote:
> Paul Eggert wrote:
> 
>> On 09/05/2012 07:56 AM, Jim Meyering wrote:
>>> +  /* When failing to rmdir an unreadable directory, the typical errno value
>>> +     is EISDIR or ENOTDIR, but that would be meaningless in a diagnostic.
>>> +     When that happens and the errno value from the failed open is EPERM
>>> +     or EACCES, use the earlier, more descriptive errno value.  */
>>> +  if (ent->fts_info == FTS_DNR
>>> +      && (errno == ENOTEMPTY || errno == EISDIR || errno == ENOTDIR)
>>> +      && (ent->fts_errno == EPERM || ent->fts_errno == EACCES))
>> Thanks for doing all that.  I did notice that the code mentions
>> ENOTEMPTY but the comment doesn't -- is that intentional?
> 
> Yes.  I considered whether to remove explicit mention of those errno
> values in the comment for precisely that reason, but didn't bother.
> Good point.  I've relaxed the comment wording enough to permit other
> explicit E* names:
> 
> diff --git a/src/remove.c b/src/remove.c
> index 0c25462..a141718 100644
> --- a/src/remove.c
> +++ b/src/remove.c
> @@ -392,8 +392,8 @@ excise (FTS *fts, FTSENT *ent, struct rm_options const *x, bool is_dir)
>    if (ignorable_missing (x, errno))
>      return RM_OK;
> 
> -  /* When failing to rmdir an unreadable directory, the typical errno value
> -     is EISDIR or ENOTDIR, but that would be meaningless in a diagnostic.
> +  /* When failing to rmdir an unreadable directory, we see errno values
> +     like EISDIR or ENOTDIR, but they would be meaningless in a diagnostic.
>       When that happens and the errno value from the failed open is EPERM
>       or EACCES, use the earlier, more descriptive errno value.  */
>    if (ent->fts_info == FTS_DNR