encapsulated suffix list in type suffix_list_t

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 5
9393eff3d2f9
child 7
1b55f3fa52c9

encapsulated suffix list in type suffix_list_t

cline.c file | annotate | diff | comparison | revisions
cline.h file | annotate | diff | comparison | revisions
functions.c file | annotate | diff | comparison | revisions
     1.1 --- a/cline.c	Fri May 27 13:20:15 2011 +0200
     1.2 +++ b/cline.c	Fri May 27 14:45:16 2011 +0200
     1.3 @@ -1,6 +1,29 @@
     1.4  #include "cline.h"
     1.5  #include "functions.h"
     1.6  
     1.7 +suffix_list_t* new_suffix_list_t() {
     1.8 +  suffix_list_t* suffixList = malloc(sizeof(suffix_list_t*));
     1.9 +  suffixList->count = 0;
    1.10 +  suffixList->items = NULL;
    1.11 +}
    1.12 +
    1.13 +void destroy_suffix_list_t(suffix_list_t* list) {
    1.14 +  while (--list->count >= 0) {
    1.15 +    free(list->items[list->count]);
    1.16 +  }
    1.17 +  free(list);
    1.18 +}
    1.19 +
    1.20 +void add_suffix(suffix_list_t* list, char* item) {
    1.21 +  char** reallocated_list =
    1.22 +    realloc(list->items, sizeof(char**) * list->count + 1);
    1.23 +  if (reallocated_list != NULL) {
    1.24 +    list->items = reallocated_list;
    1.25 +    list->items[list->count] = item;
    1.26 +    list->count++;
    1.27 +  }
    1.28 +}
    1.29 +
    1.30  settings_t* new_settings_t() {
    1.31    settings_t *settings = malloc(sizeof(settings_t*));
    1.32    if (settings != NULL) {
    1.33 @@ -9,19 +32,17 @@
    1.34    #else
    1.35      settings->fileSeparator      = '/';
    1.36    #endif /* _WIN32 */
    1.37 -    settings->suffixc            = 1;
    1.38      settings->recursive          = false;
    1.39      settings->includeSuffixes    = false;
    1.40      settings->matchesOnly        = false;
    1.41 +    settings->suffixList         = new_suffix_list_t();
    1.42    }
    1.43    
    1.44    return settings;
    1.45  }
    1.46  
    1.47  void destroy_settings_t(settings_t* settings) {
    1.48 -  if (settings->suffixv != NULL) {
    1.49 -    free(settings->suffixv);
    1.50 -  }
    1.51 +  destroy_suffix_list_t(settings->suffixList);
    1.52    free(settings);
    1.53  }
    1.54  
    1.55 @@ -149,7 +170,7 @@
    1.56        checked |= 32;
    1.57        settings->matchesOnly = true;
    1.58      }
    1.59 -    // other
    1.60 +    // Path
    1.61      if (argflags == 0) {
    1.62        if ((checked & 8) > 0) {
    1.63          printHelpText(prgName);
    1.64 @@ -178,23 +199,9 @@
    1.65    }
    1.66  
    1.67    // Find tokens
    1.68 -  char* finder;
    1.69 -  finder = strchr(suffix, ',');
    1.70 +  char* finder = strtok(suffix, ",");
    1.71    while (finder != NULL) {
    1.72 -    settings->suffixc++;
    1.73 -    finder = strchr(finder+1, ',');
    1.74 -  }
    1.75 -  settings->suffixv = (char**) malloc(sizeof(char**)*settings->suffixc);
    1.76 -  if (settings->suffixv == NULL) {
    1.77 -    fprintf(stderr, "Memory allocation failed.\n");
    1.78 -    destroy_settings_t(settings);
    1.79 -    return 1;
    1.80 -  }
    1.81 -  finder = strtok(suffix, ",");
    1.82 -  int c = 0;
    1.83 -  while (finder != NULL) {
    1.84 -    settings->suffixv[c] = finder;
    1.85 -    c++;
    1.86 +    add_suffix(settings->suffixList, finder);
    1.87      finder = strtok(NULL, ",");
    1.88    }
    1.89  
    1.90 @@ -227,5 +234,6 @@
    1.91    #endif /* _WIN32 */
    1.92  
    1.93    destroy_settings_t(settings);
    1.94 +
    1.95    return 0;
    1.96  }
     2.1 --- a/cline.h	Fri May 27 13:20:15 2011 +0200
     2.2 +++ b/cline.h	Fri May 27 14:45:16 2011 +0200
     2.3 @@ -7,10 +7,15 @@
     2.4  #include <stdlib.h>
     2.5  #include <dirent.h>
     2.6  
     2.7 +
     2.8 +typedef struct _suffix_list {
     2.9 +  int count;
    2.10 +  char** items;
    2.11 +} suffix_list_t;
    2.12 +
    2.13  typedef struct _settings {
    2.14    char fileSeparator;
    2.15 -  int suffixc;
    2.16 -  char** suffixv;
    2.17 +  suffix_list_t* suffixList;
    2.18    bool recursive;
    2.19    bool includeSuffixes;
    2.20    bool matchesOnly;
    2.21 @@ -21,6 +26,9 @@
    2.22  #endif
    2.23  settings_t* new_settings_t();
    2.24  void destroy_settings_t(settings_t*);
    2.25 +suffix_list_t* new_suffix_list_t();
    2.26 +void destroy_suffix_list_t(suffix_list_t*);
    2.27 +void add_suffix(suffix_list_t*, char*);
    2.28  
    2.29  void printHelpText(const char*);
    2.30  #ifdef _cplusplus
     3.1 --- a/functions.c	Fri May 27 13:20:15 2011 +0200
     3.2 +++ b/functions.c	Fri May 27 14:45:16 2011 +0200
     3.3 @@ -19,11 +19,11 @@
     3.4  bool testSuffix(char* filename, settings_t* settings) {
     3.5    bool ret = false;
     3.6    int tokenlen, fnamelen = strlen(filename);
     3.7 -  for (int t = 0 ; t < settings->suffixc ; t++) {
     3.8 -    tokenlen = strlen(settings->suffixv[t]);
     3.9 +  for (int t = 0 ; t < settings->suffixList->count ; t++) {
    3.10 +    tokenlen = strlen(settings->suffixList->items[t]);
    3.11      if (fnamelen >= tokenlen && tokenlen > 0) {
    3.12        if (strncmp(filename+fnamelen-tokenlen,
    3.13 -                  settings->suffixv[t], tokenlen) == 0) {
    3.14 +                  settings->suffixList->items[t], tokenlen) == 0) {
    3.15          ret = true;
    3.16          break;
    3.17        }

mercurial