mirror of
https://github.com/sheumann/hush.git
synced 2024-09-12 00:55:11 +00:00
mv: fix a case when we move dangling symlink
This commit is contained in:
parent
a87045ce37
commit
13afb2acda
@ -26,16 +26,13 @@ static const char mv_longopts[] ALIGN1 =
|
|||||||
#define OPT_FILEUTILS_FORCE 1
|
#define OPT_FILEUTILS_FORCE 1
|
||||||
#define OPT_FILEUTILS_INTERACTIVE 2
|
#define OPT_FILEUTILS_INTERACTIVE 2
|
||||||
|
|
||||||
static const char fmt[] ALIGN1 =
|
|
||||||
"cannot overwrite %sdirectory with %sdirectory";
|
|
||||||
|
|
||||||
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)
|
||||||
{
|
{
|
||||||
struct stat dest_stat;
|
struct stat dest_stat;
|
||||||
const char *last;
|
const char *last;
|
||||||
const char *dest;
|
const char *dest;
|
||||||
unsigned long flags;
|
unsigned flags;
|
||||||
int dest_exists;
|
int dest_exists;
|
||||||
int status = 0;
|
int status = 0;
|
||||||
int copy_flag = 0;
|
int copy_flag = 0;
|
||||||
@ -57,7 +54,7 @@ int mv_main(int argc, char **argv)
|
|||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(dest_exists & 2)) {
|
if (!(dest_exists & 2)) { /* last is not a directory */
|
||||||
dest = last;
|
dest = last;
|
||||||
goto DO_MOVE;
|
goto DO_MOVE;
|
||||||
}
|
}
|
||||||
@ -88,10 +85,13 @@ int mv_main(int argc, char **argv)
|
|||||||
int source_exists;
|
int source_exists;
|
||||||
|
|
||||||
if (errno != EXDEV
|
if (errno != EXDEV
|
||||||
|| (source_exists = cp_mv_stat(*argv, &source_stat)) < 1
|
|| (source_exists = cp_mv_stat2(*argv, &source_stat, lstat)) < 1
|
||||||
) {
|
) {
|
||||||
bb_perror_msg("cannot rename '%s'", *argv);
|
bb_perror_msg("cannot rename '%s'", *argv);
|
||||||
} else {
|
} else {
|
||||||
|
static const char fmt[] ALIGN1 =
|
||||||
|
"cannot overwrite %sdirectory with %sdirectory";
|
||||||
|
|
||||||
if (dest_exists) {
|
if (dest_exists) {
|
||||||
if (dest_exists == 3) {
|
if (dest_exists == 3) {
|
||||||
if (source_exists != 3) {
|
if (source_exists != 3) {
|
||||||
|
Loading…
Reference in New Issue
Block a user