Add -f option, use getopt for args parsing.
We need rm -rf.
Change-Id: I838413df70924c687cd7046033aad7d5ddc547bc
diff --git a/rm.c b/rm.c
index bd66311..63878b8 100644
--- a/rm.c
+++ b/rm.c
@@ -9,7 +9,7 @@
static int usage()
{
- fprintf(stderr,"rm [-rR] <target>\n");
+ fprintf(stderr,"rm [-rRf] <target>\n");
return -1;
}
@@ -65,23 +65,34 @@
int rm_main(int argc, char *argv[])
{
- int ret;
+ int opt;
int i = 1;
int recursive = 0;
+ int force = 0;
if (argc < 2)
return usage();
- /* check if recursive */
- if (argc >=2 && (!strcmp(argv[1], "-r") || !strcmp(argv[1], "-R"))) {
- recursive = 1;
- i = 2;
+ while ((opt = getopt(argc, argv, "rRf")) != -1) {
+ switch (opt) {
+ case 'r':
+ case 'R':
+ recursive = 1;
+ break;
+ case 'f':
+ force = 1;
+ break;
+ default:
+ return usage();
+ }
}
-
+
+ i = optind;
+
/* loop over the file/directory args */
for (; i < argc; i++) {
int ret = recursive ? unlink_recursive(argv[i]) : unlink(argv[i]);
- if (ret < 0) {
+ if (ret < 0 && !force) {
fprintf(stderr, "rm failed for %s, %s\n", argv[i], strerror(errno));
return -1;
}
@@ -89,4 +100,3 @@
return 0;
}
-