Read contents of all regular files processed.
authorMichael Vrable <mvrable@cs.ucsd.edu>
Wed, 13 Dec 2006 16:44:21 +0000 (08:44 -0800)
committerMichael Vrable <mvrable@beleg.ucsd.edu>
Wed, 13 Dec 2006 16:44:21 +0000 (08:44 -0800)
scandir.cc

index 64aec8a..4b8f27f 100644 (file)
@@ -4,6 +4,7 @@
 #include <stdlib.h>
 #include <stdint.h>
 #include <dirent.h>
+#include <errno.h>
 #include <fcntl.h>
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -22,11 +23,30 @@ void dumpfile(int fd)
 {
     struct stat stat_buf;
     fstat(fd, &stat_buf);
+    int64_t size = 0;
+
+    char buf[4096];
 
     if ((stat_buf.st_mode & S_IFMT) != S_IFREG) {
         printf("file is no longer a regular file!\n");
         return;
     }
+
+    while (true) {
+        ssize_t res = read(fd, buf, sizeof(buf));
+        if (res < 0) {
+            if (errno == EINTR)
+                continue;
+            printf("Error while reading: %m\n");
+            return;
+        } else if (res == 0) {
+            break;
+        } else {
+            size += res;
+        }
+    }
+
+    printf("Bytes read: %Ld\n", size);
 }
 
 void scanfile(const string& path)