scanner.c

changeset 10
ecf787666f44
parent 8
28319b20968c
child 14
ee9333c91dda
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/scanner.c	Thu Sep 15 13:29:06 2011 +0200
@@ -0,0 +1,88 @@
+/*
+ * functions.c
+ *
+ *  Created on: 23.05.2011
+ *      Author: beckermi
+ */
+
+
+#include "scanner.h"
+#include "suffix_fnc.h"
+
+int scanDirectory(DIR *dir, const int spaces,
+                  char* currdir, settings_t* settings) {
+  DIR *subdir;
+  char* subdirname;
+  struct dirent *entry;
+  int lines, digits, a;
+  int lineSum = 0;
+
+  while ((entry = readdir(dir)) != NULL) {
+    if (strcmp(entry->d_name, ".") != 0 && strcmp(entry->d_name, "..") != 0) {
+      // Print occurence
+      char entryname[strlen(entry->d_name)+spaces];
+      for (int t = 0 ; t < spaces ; t++) {
+        entryname[t]=' ';
+      }
+      entryname[spaces] = 0;
+      strcat(entryname, entry->d_name);
+  
+      // Check for subdirectory
+      char subdirname[(1+strlen(currdir)+strlen(entry->d_name))];
+      strcpy(subdirname, currdir);
+      strncat(subdirname, &settings->fileSeparator, 1);
+      strcat(subdirname, entry->d_name);
+      if ((subdir = opendir(subdirname)) != NULL) {
+        printf("%-60s\n", entryname);
+        if (settings->recursive) {
+          lineSum += scanDirectory(subdir, spaces+1, subdirname, settings);
+        }
+        closedir(subdir);
+        continue;
+      }
+
+      // Count lines
+      lines = 0;
+      char filename[(1+strlen(currdir)+strlen(entry->d_name))];
+      strcpy(filename, currdir);
+      strncat(filename, &settings->fileSeparator, 1);
+      strcat(filename, entry->d_name);
+      if (testSuffix(filename, settings)) {
+        FILE *file = fopen(filename, "r");
+        if (file == NULL) {
+          perror("  File acces failed");
+          continue;
+        }
+
+        do {
+          a = fgetc(file);
+
+          if (a == 10) {
+            lines++;
+          }
+        } while (a != EOF);
+        fclose(file);
+
+        // Print line count
+        #ifdef _WIN32
+          printf("%-60s%13d lines\n", entryname, lines);
+        #else
+          printf("%-60s%14d lines\n", entryname, lines);
+        #endif /* _WIN32 */
+
+        lineSum += lines;
+      }
+      else {
+        if (!settings->matchesOnly) {
+          // Print hint
+          #ifdef _WIN32
+            printf("%-60s%19s\n", entryname, "no match");
+          #else
+            printf("%-60s%20s\n", entryname, "no match");
+          #endif /* _WIN32 */
+        }
+      }
+    }
+  }
+  return lineSum;
+}

mercurial