diff -ur bcrypt-master-old/src/includes.h bcrypt-master/src/includes.h
--- bcrypt-master-old/src/includes.h	2013-01-30 15:24:23.000000000 +0700
+++ bcrypt-master/src/includes.h	2015-04-19 13:44:23.000000000 +0700
@@ -22,4 +22,4 @@
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <zlib.h>
-
+#include <fcntl.h>
diff -ur bcrypt-master-old/src/rwfile.c bcrypt-master/src/rwfile.c
--- bcrypt-master-old/src/rwfile.c	2013-01-30 15:24:23.000000000 +0700
+++ bcrypt-master/src/rwfile.c	2015-04-19 13:42:10.000000000 +0700
@@ -21,44 +21,31 @@
   return(r);
 }
 
+/* I modified this function for low level file I/O because Linux OS buffering
+ 	wasn't commiting data written prior to deletion. The net result was that
+ 	the file being deleted WAS NOT overwrtten with random data before 
+	deletion. 	 - jafadmin
+*/
 int deletefile(char *file, BCoptions options, char *key, struct stat statbuf) {
-  int lsize;
-  long g;
-  uLong j = 0, k = 0;
-  signed char i;
-  char *state, *garbage;
-  FILE *fd;
+  int j, fd; signed char i; char ch = 0;
 
-  if (options.securedelete > 0) {
-    lsize = sizeof(long);
-    k = (statbuf.st_size / lsize) + 1;
-    if ((state = malloc(257)) == NULL)
-      memerror();
-
-    initstate((unsigned long) key, state, 256);
-    if ((garbage = malloc(lsize)) == NULL)
-      memerror();
-
-    fd = fopen(file, "r+b");
-    if (!fd) {
-        fprintf(stderr, "Error deleting file %s: %s\n", file, strerror(errno));
-        return(1);
-    }
-    for (i = options.securedelete; i > 0; i--) {
-      fseek(fd, 0, SEEK_SET);
-
-      for (j = 0; j < k; j += lsize) {
-        g = random();
-        memcpy(garbage, &g, lsize);
-        fwrite(garbage, lsize, 1, fd);
-      }
-      fflush(fd);
+  if (options.securedelete > 0) 
+  {        
+    for (i = options.securedelete; i > 0; i--) 
+    {
+		fd = open(file, O_WRONLY); 
+      	for (j = 0; j < statbuf.st_size; j++) 
+      	{
+        	ch = random();
+        	write(fd, &ch, 1);
+      	}
+      	fsync(fd);
+      	close(fd);
     }
-    fclose(fd);
   }
 
   if (unlink(file)) {
-    fprintf(stderr, "Error deleting file %s: %s\n", file, strerror(errno));
+    fprintf(stderr, "Error deleting file %s\n", file);
     return(1);
   }
   return(0);
