[hackers] [sbase] Audit mv(1) || FRIGN
commit 4bfacf6d3ec2435654925706375ee0fd58cf6ad2
Author: FRIGN <dev_AT_frign.de>
Date: Wed Mar 4 23:22:43 2015 +0100
Audit mv(1)
1) Make argument-naming consistent with other tools (cp(1), ...)
2) style fixes
3) usage() fix
4) BUGFIX: Probably from the old non-arg.h days, the directory-
check was only done when argc > 3, but with arg.h, this ignores
the case when 3 arguments were given.
This is actually a pretty serious issue and I'm glad it's fixed.
5) Moreover, be more verbose when stat() fails and make it clearer
what the hell is going on at this checkpoint.
diff --git a/README b/README
index 7745254..4a52906 100644
--- a/README
+++ b/README
_AT_@ -47,7 +47,7 @@ The following tools are implemented ('*' == finished, '#' == UTF-8 support,
=* mkdir yes none
=*| mkfifo yes none
=* mktemp non-posix none
-=* mv yes none (-i)
+=*| mv yes none (-i)
=*| nice yes none
= nl no -d, -f, -h, -l, -p
=*| nohup yes none
diff --git a/mv.1 b/mv.1
index b3ec35d..5ddb80d 100644
--- a/mv.1
+++ b/mv.1
_AT_@ -1,4 +1,4 @@
-.Dd February 19, 2015
+.Dd March 4, 2015
.Dt MV 1
.Os sbase
.Sh NAME
_AT_@ -8,17 +8,17 @@
.Nm
.Op Fl f
.Ar source ...
-.Ar destination
+.Ar dest
.Sh DESCRIPTION
.Nm
moves each
.Ar source
to
-.Ar destination .
+.Ar dest .
If only one
.Ar source
is given and
-.Ar destination
+.Ar dest
is not a directory,
.Nm
overwrites the latter with the former.
_AT_@ -26,7 +26,7 @@ overwrites the latter with the former.
.Bl -tag -width Ds
.It Fl f
Do not prompt before overwriting.
-.Ar destination .
+.Ar dest .
Prompting has not been implemented yet.
.El
.Sh STANDARDS
diff --git a/mv.c b/mv.c
index b46981c..6734ee9 100644
--- a/mv.c
+++ b/mv.c
_AT_@ -12,7 +12,7 @@ static int mv_status = 0;
static int
mv(const char *s1, const char *s2, int depth)
{
- if (rename(s1, s2) == 0)
+ if (!rename(s1, s2))
return (mv_status = 0);
if (errno == EXDEV) {
cp_aflag = cp_rflag = cp_pflag = 1;
_AT_@ -23,13 +23,14 @@ mv(const char *s1, const char *s2, int depth)
return (mv_status = cp_status || rm_status);
}
mv_status = 1;
+
return -1;
}
static void
usage(void)
{
- eprintf("usage: %s [-f] source... dest\n", argv0);
+ eprintf("usage: %s [-f] source ... dest\n", argv0);
}
int
_AT_@ -47,8 +48,12 @@ main(int argc, char *argv[])
if (argc < 2)
usage();
- if (argc > 3 && !(stat(argv[argc-1], &st) == 0 && S_ISDIR(st.st_mode)))
- eprintf("%s: not a directory\n", argv[argc-1]);
+ if (argc > 2) {
+ if (stat(argv[argc - 1], &st) < 0)
+ eprintf("stat %s:", argv[argc - 1]);
+ if (!S_ISDIR(st.st_mode))
+ eprintf("%s: not a directory\n", argv[argc - 1]);
+ }
enmasse(argc, argv, mv);
return mv_status;
Received on Wed Mar 04 2015 - 23:54:08 CET
This archive was generated by hypermail 2.3.0
: Thu Mar 05 2015 - 00:00:28 CET