Do not exit early on errors when -f is specified
When running with the -f option, do not stop recursion or proccessing command line args if an error occurs. Continue trying to remove all the items specified on the command line. However, still return an error status if some files could not be removed. Change-Id: I83d66babe833da8a68aad68248647ba0601c5d32
This commit is contained in:
parent
13495a1cbb
commit
0354829763
1 changed files with 11 additions and 4 deletions
15
toolbox/rm.c
15
toolbox/rm.c
|
|
@ -45,8 +45,10 @@ static int unlink_recursive(const char* name, int flags)
|
|||
continue;
|
||||
sprintf(dn, "%s/%s", name, de->d_name);
|
||||
if (unlink_recursive(dn, flags) < 0) {
|
||||
fail = 1;
|
||||
break;
|
||||
if (!(flags & OPT_FORCE)) {
|
||||
fail = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
errno = 0;
|
||||
}
|
||||
|
|
@ -71,6 +73,7 @@ int rm_main(int argc, char *argv[])
|
|||
int ret;
|
||||
int i, c;
|
||||
int flags = 0;
|
||||
int something_failed = 0;
|
||||
|
||||
if (argc < 2)
|
||||
return usage();
|
||||
|
|
@ -110,10 +113,14 @@ int rm_main(int argc, char *argv[])
|
|||
|
||||
if (ret < 0) {
|
||||
fprintf(stderr, "rm failed for %s, %s\n", argv[i], strerror(errno));
|
||||
return -1;
|
||||
if (!(flags & OPT_FORCE)) {
|
||||
return -1;
|
||||
} else {
|
||||
something_failed = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
return something_failed;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue