functions.c

Fri, 27 May 2011 14:45:16 +0200

author
Mike Becker <universe@uap-core.de>
date
Fri, 27 May 2011 14:45:16 +0200
changeset 6
be923400164c
parent 3
510d6b198dde
child 8
28319b20968c
permissions
-rw-r--r--

encapsulated suffix list in type suffix_list_t

universe@3 1 #include "cline.h"
universe@3 2 #include "functions.h"
universe@1 3
universe@1 4 int checkArgument(const char* arg, const char* expected) {
universe@1 5 int len = strlen(expected);
universe@1 6 int ret = 0;
universe@1 7
universe@1 8 if (arg[0] == '-') {
universe@1 9 if (arg[1] != '-') {
universe@1 10 for (int t = 0 ; t < len ; t++) {
universe@1 11 ret |= (strchr(arg, expected[t]) > 0) << t;
universe@1 12 }
universe@1 13 }
universe@1 14 }
universe@1 15
universe@1 16 return ret;
universe@1 17 }
universe@3 18
universe@3 19 bool testSuffix(char* filename, settings_t* settings) {
universe@3 20 bool ret = false;
universe@3 21 int tokenlen, fnamelen = strlen(filename);
universe@6 22 for (int t = 0 ; t < settings->suffixList->count ; t++) {
universe@6 23 tokenlen = strlen(settings->suffixList->items[t]);
universe@3 24 if (fnamelen >= tokenlen && tokenlen > 0) {
universe@3 25 if (strncmp(filename+fnamelen-tokenlen,
universe@6 26 settings->suffixList->items[t], tokenlen) == 0) {
universe@3 27 ret = true;
universe@3 28 break;
universe@3 29 }
universe@3 30 }
universe@3 31 }
universe@3 32 return ret ^ !settings->includeSuffixes;
universe@3 33 }
universe@3 34
universe@3 35 int scanDirectory(DIR *dir, const int spaces,
universe@3 36 char* currdir, settings_t* settings) {
universe@3 37 DIR *subdir;
universe@3 38 char* subdirname;
universe@3 39 struct dirent *entry;
universe@3 40 int lines, digits, a;
universe@3 41 int lineSum = 0;
universe@3 42
universe@3 43 while ((entry = readdir(dir)) != NULL) {
universe@3 44 if (strcmp(entry->d_name, ".") != 0 && strcmp(entry->d_name, "..") != 0) {
universe@3 45 // Print occurence
universe@3 46 char entryname[strlen(entry->d_name)+spaces];
universe@3 47 for (int t = 0 ; t < spaces ; t++) {
universe@3 48 entryname[t]=' ';
universe@3 49 }
universe@3 50 entryname[spaces] = 0;
universe@3 51 strcat(entryname, entry->d_name);
universe@3 52
universe@3 53 // Check for subdirectory
universe@3 54 char subdirname[(1+strlen(currdir)+strlen(entry->d_name))];
universe@3 55 strcpy(subdirname, currdir);
universe@3 56 strncat(subdirname, &settings->fileSeparator, 1);
universe@3 57 strcat(subdirname, entry->d_name);
universe@3 58 if ((subdir = opendir(subdirname)) != NULL) {
universe@3 59 printf("%-60s\n", entryname);
universe@3 60 if (settings->recursive) {
universe@3 61 lineSum += scanDirectory(subdir, spaces+1, subdirname, settings);
universe@3 62 }
universe@3 63 closedir(subdir);
universe@3 64 continue;
universe@3 65 }
universe@3 66
universe@3 67 // Count lines
universe@3 68 lines = 0;
universe@3 69 char filename[(1+strlen(currdir)+strlen(entry->d_name))];
universe@3 70 strcpy(filename, currdir);
universe@3 71 strncat(filename, &settings->fileSeparator, 1);
universe@3 72 strcat(filename, entry->d_name);
universe@3 73 if (testSuffix(filename, settings)) {
universe@3 74 FILE *file = fopen(filename, "r");
universe@3 75 if (file == NULL) {
universe@3 76 perror(" File acces failed");
universe@3 77 continue;
universe@3 78 }
universe@3 79
universe@3 80 do {
universe@3 81 a = fgetc(file);
universe@3 82
universe@3 83 if (a == 10) {
universe@3 84 lines++;
universe@3 85 }
universe@3 86 } while (a != EOF);
universe@3 87 fclose(file);
universe@3 88
universe@3 89 // Print line count
universe@3 90 #ifdef _WIN32
universe@3 91 printf("%-60s%13d lines\n", entryname, lines);
universe@3 92 #else
universe@3 93 printf("%-60s%14d lines\n", entryname, lines);
universe@3 94 #endif /* _WIN32 */
universe@3 95
universe@3 96 lineSum += lines;
universe@3 97 }
universe@3 98 else {
universe@3 99 if (!settings->matchesOnly) {
universe@3 100 // Print hint
universe@3 101 #ifdef _WIN32
universe@3 102 printf("%-60s%19s\n", entryname, "no match");
universe@3 103 #else
universe@3 104 printf("%-60s%20s\n", entryname, "no match");
universe@3 105 #endif /* _WIN32 */
universe@3 106 }
universe@3 107 }
universe@3 108 }
universe@3 109 }
universe@3 110 return lineSum;
universe@3 111 }

mercurial