GNU bug report logs -
#15926
RFE: unlink command already uses 'unlink' call; make 'rm' use 'remove' call
Previous Next
Reported by: Linda Walsh <coreutils <at> tlinx.org>
Date: Tue, 19 Nov 2013 11:58:02 UTC
Severity: normal
Tags: notabug, patch
Merged with 15943
Done: Assaf Gordon <assafgordon <at> gmail.com>
Bug is archived. No further changes may be made.
Full log
Message #42 received at 15926 <at> debbugs.gnu.org (full text, mbox):
On 11/20/2013 02:44 PM, Eric Blake wrote:
> On 11/19/2013 11:45 PM, Bernhard Voelker wrote:
>> Maybe "cannot remove directory" is a bit weak - it's more like
>> "refusing to remove dot|dot-dot|root directory".
>
> Indeed, a clearer error message would be possible.
What about the following?
$ src/rm -r src/.
src/rm: refusing to remove '.' or '..' directory: skipping 'src/.'
I didn't want to explicitly mention POSIX here ... it's just to clarify
that rm(1) does not swallow errors from the kernel like EPERM, etc.
The texinfo file is enhanced in the patch below, too.
Have a nice day,
Berny
From f85ec85852ea62e4fe4510044ffb4b31880a6b7c Mon Sep 17 00:00:00 2001
From: Bernhard Voelker <mail <at> bernhard-voelker.de>
Date: Thu, 21 Nov 2013 00:47:36 +0100
Subject: [PATCH] doc: enhance diagnostic when rm skips "." or ".." arguments
The error diagnostic
"rm: cannot remove directory: '.'"
does not give the user a hint for the reason.
Issue a clearer error message.
* src/remove.c (rm_fts): Enhance the error diagnostic in the above
case to emphasize that skipping is done deliberately.
In the corresponding comment, mention that POSIX mandates this
behavior. Likewise in the subsequent comment for skipping "/".
* doc/coreutils.texi (rm invocation): In the paragraph describing
the above behavior, mention that POSIX mandates it.
---
doc/coreutils.texi | 3 ++-
src/remove.c | 12 ++++++++----
2 files changed, 10 insertions(+), 5 deletions(-)
diff --git a/doc/coreutils.texi b/doc/coreutils.texi
index 035f2e6..64713dc 100644
--- a/doc/coreutils.texi
+++ b/doc/coreutils.texi
@@ -9281,7 +9281,8 @@ the @option{-f} or @option{--force} option is not given, or the
If the response is not affirmative, the file is skipped.
Any attempt to remove a file whose last file name component is
-@file{.} or @file{..} is rejected without any prompting.
+@file{.} or @file{..} is rejected without any prompting, as mandated
+by POSIX.
@emph{Warning}: If you use @command{rm} to remove a file, it is usually
possible to recover the contents of that file. If you want more assurance
diff --git a/src/remove.c b/src/remove.c
index cdbbec5..3d386cf 100644
--- a/src/remove.c
+++ b/src/remove.c
@@ -437,17 +437,21 @@ rm_fts (FTS *fts, FTSENT *ent, struct rm_options const *x)
/* Perform checks that can apply only for command-line arguments. */
if (ent->fts_level == FTS_ROOTLEVEL)
{
- /* If the basename of a command line argument is "." or "..",
+ /* POSIX says:
+ If the basename of a command line argument is "." or "..",
diagnose it and do nothing more with that argument. */
if (dot_or_dotdot (last_component (ent->fts_accpath)))
{
- error (0, 0, _("cannot remove directory: %s"),
- quote (ent->fts_path));
+ error (0, 0,
+ _("refusing to remove %s or %s directory: skipping %s"),
+ quote_n (0, "."), quote_n (1, ".."),
+ quote_n (2, ent->fts_path));
fts_skip_tree (fts, ent);
return RM_ERROR;
}
- /* If a command line argument resolves to "/" (and --preserve-root
+ /* POSIX also says:
+ If a command line argument resolves to "/" (and --preserve-root
is in effect -- default) diagnose and skip it. */
if (ROOT_DEV_INO_CHECK (x->root_dev_ino, ent->fts_statp))
{
--
1.8.3.1
This bug report was last modified 6 years and 225 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.