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;
 }
-