[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