Updates
diff --git a/rm.c b/rm.c
index e6132ab..ba5d30e 100644
--- a/rm.c
+++ b/rm.c
@@ -26,6 +26,7 @@
 #include <time.h>
 #include <utime.h>
 #include <dirent.h>
+#include <errno.h>
 
 static const char* rm_usage = "rm [OPTION]... FILE...\n\n"
 "Remove (unlink) the FILE(s).\n\n"
@@ -59,6 +60,7 @@
 
 extern int rm_main(int argc, char **argv)
 {
+    struct stat statbuf;
 
     if (argc < 2) {
 	usage( rm_usage);
@@ -85,9 +87,14 @@
 
     while (argc-- > 0) {
 	srcName = *(argv++);
-	if (recursiveAction( srcName, recursiveFlag, FALSE, TRUE, 
-			       fileAction, dirAction) == FALSE) {
-	    exit( FALSE);
+	if (forceFlag == TRUE && lstat(srcName, &statbuf) != 0 && errno == ENOENT) {
+	    /* do not reports errors for non-existent files if -f, just skip them */
+	}
+	else {
+	    if (recursiveAction( srcName, recursiveFlag, FALSE, 
+			TRUE, fileAction, dirAction) == FALSE) {
+		exit( FALSE);
+	    }
 	}
     }
     exit( TRUE);