universe@10: /* universe@20: * scanner.c universe@10: * universe@10: * Created on: 23.05.2011 universe@20: * Author: Mike universe@10: */ universe@1: universe@1: universe@10: #include "scanner.h" universe@10: #include "suffix_fnc.h" universe@21: #include "bfile_heuristics.h" universe@3: universe@3: int scanDirectory(DIR *dir, const int spaces, universe@3: char* currdir, settings_t* settings) { universe@3: DIR *subdir; universe@3: struct dirent *entry; universe@18: int lines, a; universe@3: int lineSum = 0; universe@21: bool bfile; universe@3: universe@3: while ((entry = readdir(dir)) != NULL) { universe@3: if (strcmp(entry->d_name, ".") != 0 && strcmp(entry->d_name, "..") != 0) { universe@22: /* Print occurence */ universe@3: char entryname[strlen(entry->d_name)+spaces]; universe@3: for (int t = 0 ; t < spaces ; t++) { universe@3: entryname[t]=' '; universe@3: } universe@3: entryname[spaces] = 0; universe@3: strcat(entryname, entry->d_name); universe@3: universe@14: char filename[(1+strlen(currdir)+strlen(entry->d_name))]; universe@14: strcpy(filename, currdir); universe@14: strncat(filename, &settings->fileSeparator, 1); universe@14: strcat(filename, entry->d_name); universe@14: universe@22: /* Check for subdirectory */ universe@14: if ((subdir = opendir(filename)) != NULL) { universe@3: printf("%-60s\n", entryname); universe@3: if (settings->recursive) { universe@14: lineSum += scanDirectory(subdir, spaces+1, filename, settings); universe@3: } universe@3: closedir(subdir); universe@3: continue; universe@3: } universe@3: universe@22: /* Count lines */ universe@3: lines = 0; universe@21: bfile = false; universe@22: bfile_reset(settings->bfileHeuristics); universe@3: if (testSuffix(filename, settings)) { universe@3: FILE *file = fopen(filename, "r"); universe@3: if (file == NULL) { universe@3: perror(" File acces failed"); universe@3: continue; universe@3: } universe@3: universe@3: do { universe@3: a = fgetc(file); universe@3: universe@21: bfile = bfile_check(settings->bfileHeuristics, a); universe@21: universe@3: if (a == 10) { universe@3: lines++; universe@3: } universe@21: } while (!bfile && a != EOF); universe@3: fclose(file); universe@3: universe@22: /* Print and sum line count */ universe@21: if (bfile) { universe@22: if (!settings->matchesOnly) { universe@22: printf("%-60s%19s\n", entryname, "binary"); universe@22: } universe@21: } else { universe@22: lineSum += lines; universe@3: printf("%-60s%13d lines\n", entryname, lines); universe@21: } universe@16: } else { universe@3: if (!settings->matchesOnly) { universe@22: /* Print hint */ universe@21: printf("%-60s%19s\n", entryname, "no match"); universe@3: } universe@3: } universe@3: } universe@3: } universe@3: return lineSum; universe@3: }