--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/functions.c Thu May 26 14:39:52 2011 +0200 @@ -0,0 +1,111 @@ +#include "cline.h" +#include "functions.h" + +int checkArgument(const char* arg, const char* expected) { + int len = strlen(expected); + int ret = 0; + + if (arg[0] == '-') { + if (arg[1] != '-') { + for (int t = 0 ; t < len ; t++) { + ret |= (strchr(arg, expected[t]) > 0) << t; + } + } + } + + return ret; +} + +bool testSuffix(char* filename, settings_t* settings) { + bool ret = false; + int tokenlen, fnamelen = strlen(filename); + for (int t = 0 ; t < settings->suffixc ; t++) { + tokenlen = strlen(settings->suffixv[t]); + if (fnamelen >= tokenlen && tokenlen > 0) { + if (strncmp(filename+fnamelen-tokenlen, + settings->suffixv[t], tokenlen) == 0) { + ret = true; + break; + } + } + } + return ret ^ !settings->includeSuffixes; +} + +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; +}