diff -r 28319b20968c -r ecf787666f44 scanner.c --- /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; +}