mv: implement -n option
function old new delta mv_longopts 23 36 +13 mv_main 510 520 +10 packed_usage 27218 27225 +7 Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
This commit is contained in:
parent
a43e969574
commit
4c46d85469
@ -16,15 +16,30 @@
|
|||||||
#include "libbb.h"
|
#include "libbb.h"
|
||||||
#include "libcoreutils/coreutils.h"
|
#include "libcoreutils/coreutils.h"
|
||||||
|
|
||||||
|
//usage:#define mv_trivial_usage
|
||||||
|
//usage: "[-fin] SOURCE DEST\n"
|
||||||
|
//usage: "or: mv [-fin] SOURCE... DIRECTORY"
|
||||||
|
//usage:#define mv_full_usage "\n\n"
|
||||||
|
//usage: "Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY\n"
|
||||||
|
//usage: "\nOptions:"
|
||||||
|
//usage: "\n -f Don't prompt before overwriting"
|
||||||
|
//usage: "\n -i Interactive, prompt before overwrite"
|
||||||
|
//usage: "\n -n Don't overwrite an existing file"
|
||||||
|
//usage:
|
||||||
|
//usage:#define mv_example_usage
|
||||||
|
//usage: "$ mv /tmp/foo /bin/bar\n"
|
||||||
|
|
||||||
#if ENABLE_FEATURE_MV_LONG_OPTIONS
|
#if ENABLE_FEATURE_MV_LONG_OPTIONS
|
||||||
static const char mv_longopts[] ALIGN1 =
|
static const char mv_longopts[] ALIGN1 =
|
||||||
"interactive\0" No_argument "i"
|
"interactive\0" No_argument "i"
|
||||||
"force\0" No_argument "f"
|
"force\0" No_argument "f"
|
||||||
|
"no-clobber\0" No_argument "n"
|
||||||
;
|
;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define OPT_FILEUTILS_FORCE 1
|
#define OPT_FILEUTILS_FORCE 1
|
||||||
#define OPT_FILEUTILS_INTERACTIVE 2
|
#define OPT_FILEUTILS_INTERACTIVE 2
|
||||||
|
#define OPT_FILEUTILS_NOCLOBBER 4
|
||||||
|
|
||||||
int mv_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
|
int mv_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
|
||||||
int mv_main(int argc, char **argv)
|
int mv_main(int argc, char **argv)
|
||||||
@ -40,10 +55,11 @@ int mv_main(int argc, char **argv)
|
|||||||
#if ENABLE_FEATURE_MV_LONG_OPTIONS
|
#if ENABLE_FEATURE_MV_LONG_OPTIONS
|
||||||
applet_long_options = mv_longopts;
|
applet_long_options = mv_longopts;
|
||||||
#endif
|
#endif
|
||||||
// Need at least two arguments
|
/* Need at least two arguments.
|
||||||
// -f unsets -i, -i unsets -f
|
* If more than one of -f, -i, -n is specified , only the final one
|
||||||
opt_complementary = "-2:f-i:i-f";
|
* takes effect (it unsets previous options). */
|
||||||
flags = getopt32(argv, "fi");
|
opt_complementary = "-2:f-in:i-fn:n-fi";
|
||||||
|
flags = getopt32(argv, "fin");
|
||||||
argc -= optind;
|
argc -= optind;
|
||||||
argv += optind;
|
argv += optind;
|
||||||
last = argv[argc - 1];
|
last = argv[argc - 1];
|
||||||
@ -68,18 +84,22 @@ int mv_main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
DO_MOVE:
|
DO_MOVE:
|
||||||
if (dest_exists
|
if (dest_exists) {
|
||||||
&& !(flags & OPT_FILEUTILS_FORCE)
|
if (flags & OPT_FILEUTILS_NOCLOBBER)
|
||||||
&& ((access(dest, W_OK) < 0 && isatty(0))
|
|
||||||
|| (flags & OPT_FILEUTILS_INTERACTIVE))
|
|
||||||
) {
|
|
||||||
if (fprintf(stderr, "mv: overwrite '%s'? ", dest) < 0) {
|
|
||||||
goto RET_1; /* Ouch! fprintf failed! */
|
|
||||||
}
|
|
||||||
if (!bb_ask_confirmation()) {
|
|
||||||
goto RET_0;
|
goto RET_0;
|
||||||
|
if (!(flags & OPT_FILEUTILS_FORCE)
|
||||||
|
&& ((access(dest, W_OK) < 0 && isatty(0))
|
||||||
|
|| (flags & OPT_FILEUTILS_INTERACTIVE))
|
||||||
|
) {
|
||||||
|
if (fprintf(stderr, "mv: overwrite '%s'? ", dest) < 0) {
|
||||||
|
goto RET_1; /* Ouch! fprintf failed! */
|
||||||
|
}
|
||||||
|
if (!bb_ask_confirmation()) {
|
||||||
|
goto RET_0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rename(*argv, dest) < 0) {
|
if (rename(*argv, dest) < 0) {
|
||||||
struct stat source_stat;
|
struct stat source_stat;
|
||||||
int source_exists;
|
int source_exists;
|
||||||
|
@ -2695,18 +2695,6 @@ INSERT
|
|||||||
"ras3 reset retension rewind rewoffline seek setblk setdensity\n" \
|
"ras3 reset retension rewind rewoffline seek setblk setdensity\n" \
|
||||||
"setpart tell unload unlock weof wset" \
|
"setpart tell unload unlock weof wset" \
|
||||||
|
|
||||||
#define mv_trivial_usage \
|
|
||||||
"[-fi] SOURCE DEST\n" \
|
|
||||||
"or: mv [-fi] SOURCE... DIRECTORY"
|
|
||||||
#define mv_full_usage "\n\n" \
|
|
||||||
"Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY\n" \
|
|
||||||
"\nOptions:" \
|
|
||||||
"\n -f Don't prompt before overwriting" \
|
|
||||||
"\n -i Interactive, prompt before overwrite" \
|
|
||||||
|
|
||||||
#define mv_example_usage \
|
|
||||||
"$ mv /tmp/foo /bin/bar\n"
|
|
||||||
|
|
||||||
#define nameif_trivial_usage \
|
#define nameif_trivial_usage \
|
||||||
"[-s] [-c FILE] [{IFNAME MACADDR}]"
|
"[-s] [-c FILE] [{IFNAME MACADDR}]"
|
||||||
#define nameif_full_usage "\n\n" \
|
#define nameif_full_usage "\n\n" \
|
||||||
|
Loading…
Reference in New Issue
Block a user