Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
[PATCH] rm: Accept -R as equivalent to -r
- X-seq: zsh-workers 44153
- From: Matthew Martin <phy1729@xxxxxxxxx>
- To: zsh-workers@xxxxxxx
- Subject: [PATCH] rm: Accept -R as equivalent to -r
- Date: Wed, 20 Mar 2019 23:13:29 -0500
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=date:from:to:subject:message-id:mail-followup-to:mime-version :content-disposition:user-agent; bh=HMk9v2s9rLKhs0gqDBWgM/JhI+7CWxJg7VlKEgassOs=; b=M9GuiC6pjuiUHVLATCAQfskcMQOUOJe3ebheH5TwNsQJwBnfC51tdfRwUB7LKViU9c QJnrfNvBbLLtie6EinC2/oftucRTf9ZvNXy6V19TD2x3GUgkcksRx22xKL3G23t621s7 RmlfAWhyENGQEbSws273bgT9DQDS38/lsKxW2W7g09ziMRZj1rduuk6VTh+CxJMvYO0G O5Su/+unP0UMeoMN/+nbTL/ZMuO8n3W2SNvu/AQZqdRBV3o1PhveYfVrNTacPnkgeY1f 3LGmjsaG3w62dN8X4ztT/CfldANdtooNVQ0sF6FN8POW0gOxxF7tQ+0vQa9B3Mia08/z uNkQ==
- List-help: <mailto:zsh-workers-help@zsh.org>
- List-id: Zsh Workers List <zsh-workers.zsh.org>
- List-post: <mailto:zsh-workers@zsh.org>
- List-unsubscribe: <mailto:zsh-workers-unsubscribe@zsh.org>
- Mail-followup-to: zsh-workers@xxxxxxx
- Mailing-list: contact zsh-workers-help@xxxxxxx; run by ezmlm
While updating the completers for builtins, I ran across that rm doesn't
support -R while it does support -r. POSIX defines -R and -r as
equivalent. I think it's easier to just support -R in the builtin rm
than fix the completer.
- Matthew Martin
---
Doc/Zsh/mod_files.yo | 14 +++++++-------
Src/Modules/files.c | 7 ++++---
2 files changed, 11 insertions(+), 10 deletions(-)
diff --git a/Doc/Zsh/mod_files.yo b/Doc/Zsh/mod_files.yo
index 3cf7b61e3..9f9634c86 100644
--- a/Doc/Zsh/mod_files.yo
+++ b/Doc/Zsh/mod_files.yo
@@ -144,15 +144,15 @@ fall back on copying and removing files; if this behaviour is desired,
use tt(cp) and tt(rm) manually. This may change in a future version.
)
findex(rm)
-item(tt(rm) [ tt(-dfirs) ] var(filename) ...)(
+item(tt(rm) [ tt(-dfiRrs) ] var(filename) ...)(
Removes files and directories specified.
-Normally, tt(rm) will not remove directories (except with the tt(-r)
-option). The tt(-d) option causes tt(rm) to try removing directories
+Normally, tt(rm) will not remove directories (except with the tt(-R) or tt(-r)
+options). The tt(-d) option causes tt(rm) to try removing directories
with tt(unlink) (see manref(unlink)(2)), the same method used for files.
Typically only the super-user can actually succeed in unlinking
directories in this way.
-tt(-d) takes precedence over tt(-r).
+tt(-d) takes precedence over tt(-R) and tt(-r).
By default, the user will be queried before removing any file
that the user cannot write to, but writable files will be silently
@@ -162,9 +162,9 @@ any files. The tt(-f) option causes files to be
silently deleted, without querying, and suppresses all error indications.
tt(-f) takes precedence.
-The tt(-r) option causes tt(rm) to recursively descend into directories,
-deleting all files in the directory before removing the directory with
-the tt(rmdir) system call (see manref(rmdir)(2)).
+The tt(-R) and tt(-r) options cause tt(rm) to recursively descend into
+directories, deleting all files in the directory before removing the directory
+with the tt(rmdir) system call (see manref(rmdir)(2)).
The tt(-s) option is a zsh extension to tt(rm) functionality. It enables
paranoid behaviour, intended to avoid common security problems involving
diff --git a/Src/Modules/files.c b/Src/Modules/files.c
index 85764d55e..6d20e38a8 100644
--- a/Src/Modules/files.c
+++ b/Src/Modules/files.c
@@ -613,7 +613,8 @@ bin_rm(char *nam, char **args, Options ops, UNUSED(int func))
rmm.opt_interact = OPT_ISSET(ops,'i') && !OPT_ISSET(ops,'f');
rmm.opt_unlinkdir = OPT_ISSET(ops,'d');
err = recursivecmd(nam, OPT_ISSET(ops,'f'),
- OPT_ISSET(ops,'r') && !OPT_ISSET(ops,'d'),
+ !OPT_ISSET(ops,'d') && (OPT_ISSET(ops,'R') ||
+ OPT_ISSET(ops,'r')),
OPT_ISSET(ops,'s'),
args, recurse_donothing, rm_dirpost, rm_leaf, &rmm);
return OPT_ISSET(ops,'f') ? 0 : err;
@@ -798,7 +799,7 @@ static struct builtin bintab[] = {
BUILTIN("ln", 0, bin_ln, 1, -1, BIN_LN, LN_OPTS, NULL),
BUILTIN("mkdir", 0, bin_mkdir, 1, -1, 0, "pm:", NULL),
BUILTIN("mv", 0, bin_ln, 2, -1, BIN_MV, "fi", NULL),
- BUILTIN("rm", 0, bin_rm, 1, -1, 0, "dfirs", NULL),
+ BUILTIN("rm", 0, bin_rm, 1, -1, 0, "dfiRrs", NULL),
BUILTIN("rmdir", 0, bin_rmdir, 1, -1, 0, NULL, NULL),
BUILTIN("sync", 0, bin_sync, 0, 0, 0, NULL, NULL),
/* The "safe" zsh-only names */
@@ -808,7 +809,7 @@ static struct builtin bintab[] = {
BUILTIN("zf_ln", 0, bin_ln, 1, -1, BIN_LN, LN_OPTS, NULL),
BUILTIN("zf_mkdir", 0, bin_mkdir, 1, -1, 0, "pm:", NULL),
BUILTIN("zf_mv", 0, bin_ln, 2, -1, BIN_MV, "fi", NULL),
- BUILTIN("zf_rm", 0, bin_rm, 1, -1, 0, "dfirs", NULL),
+ BUILTIN("zf_rm", 0, bin_rm, 1, -1, 0, "dfiRrs", NULL),
BUILTIN("zf_rmdir", 0, bin_rmdir, 1, -1, 0, NULL, NULL),
BUILTIN("zf_sync", 0, bin_sync, 0, 0, 0, NULL, NULL),
--
2.21.0
Messages sorted by:
Reverse Date,
Date,
Thread,
Author