void add_ignore_pattern(ignores *ig, const char* pattern) { int i; /* Strip off the leading ./ so that matches are more likely. */ if (strncmp(pattern, "./", 2) == 0) { pattern += 2; } if (is_fnmatch(pattern)) { ig->regexes_len++; ig->regexes = ag_realloc(ig->regexes, ig->regexes_len * sizeof(char*)); ig->regexes[ig->regexes_len - 1] = ag_strdup(pattern); log_debug("added regex ignore pattern %s", pattern); } else { /* a balanced binary tree is best for performance, but I'm lazy */ ig->names_len++; ig->names = ag_realloc(ig->names, ig->names_len * sizeof(char*)); for (i = ig->names_len - 1; i > 0; i--) { if (strcmp(pattern, ig->names[i-1]) > 0) { break; } ig->names[i] = ig->names[i-1]; } ig->names[i] = ag_strdup(pattern); log_debug("added literal ignore pattern %s", pattern); } }
void add_ignore_pattern(ignores *ig, const char* pattern) { int i; int pattern_len; if ('/' == pattern[0]) { log_debug("Pattern begins with '/', skipping."); return; } /* Strip off the leading ./ so that matches are more likely. */ if (strncmp(pattern, "./", 2) == 0) { pattern += 2; } /* Kill trailing whitespace */ for (pattern_len = strlen(pattern); pattern_len > 0; pattern_len--) { if (!isspace(pattern[pattern_len-1])) { break; } } if (pattern_len == 0) { log_debug("Pattern is empty. Not adding any ignores."); return; } /* TODO: de-dupe these patterns */ if (is_fnmatch(pattern)) { ig->regexes_len++; ig->regexes = ag_realloc(ig->regexes, ig->regexes_len * sizeof(char*)); ig->regexes[ig->regexes_len - 1] = ag_strndup(pattern, pattern_len); log_debug("added regex ignore pattern %s", pattern); } else { /* a balanced binary tree is best for performance, but I'm lazy */ ig->names_len++; ig->names = ag_realloc(ig->names, ig->names_len * sizeof(char*)); for (i = ig->names_len - 1; i > 0; i--) { if (strcmp(pattern, ig->names[i-1]) > 0) { break; } ig->names[i] = ig->names[i-1]; } ig->names[i] = ag_strndup(pattern, pattern_len); log_debug("added literal ignore pattern %s", pattern); } }
void add_ignore_pattern(const char* pattern) { int i; if (is_fnmatch(pattern)) { ignore_patterns_len++; ignore_patterns = realloc(ignore_patterns, (ignore_patterns_len) * sizeof(char*)); ignore_patterns[ignore_patterns_len - 1] = strdup(pattern); log_debug("added regex ignore pattern %s", pattern); } else { /* a balanced binary tree is best for performance, but I'm lazy */ ignore_names_len++; ignore_names = realloc(ignore_names, ignore_names_len * sizeof(char*)); for (i = ignore_names_len-1; i > 0; i--) { if (strcmp(pattern, ignore_names[i-1]) > 0) { break; } ignore_names[i] = ignore_names[i-1]; } ignore_names[i] = strdup(pattern); log_debug("added literal ignore pattern %s", pattern); } }
void add_ignore_pattern(ignores *ig, const char *pattern) { int i; int pattern_len; /* Strip off the leading dot so that matches are more likely. */ if (strncmp(pattern, "./", 2) == 0) { pattern++; } /* Kill trailing whitespace */ for (pattern_len = strlen(pattern); pattern_len > 0; pattern_len--) { if (!isspace(pattern[pattern_len - 1])) { break; } } if (pattern_len == 0) { log_debug("Pattern is empty. Not adding any ignores."); return; } char ***patterns_p; size_t *patterns_len; if (is_fnmatch(pattern)) { if (pattern[0] == '/') { patterns_p = &(ig->slash_regexes); patterns_len = &(ig->slash_regexes_len); pattern++; pattern_len--; } else { patterns_p = &(ig->regexes); patterns_len = &(ig->regexes_len); } } else { if (pattern[0] == '/') { patterns_p = &(ig->slash_names); patterns_len = &(ig->slash_names_len); pattern++; pattern_len--; } else { patterns_p = &(ig->names); patterns_len = &(ig->names_len); } } ++*patterns_len; char **patterns; /* a balanced binary tree is best for performance, but I'm lazy */ *patterns_p = patterns = ag_realloc(*patterns_p, (*patterns_len) * sizeof(char *)); /* TODO: de-dupe these patterns */ for (i = *patterns_len - 1; i > 0; i--) { if (strcmp(pattern, patterns[i - 1]) > 0) { break; } patterns[i] = patterns[i - 1]; } patterns[i] = ag_strndup(pattern, pattern_len); log_debug("added ignore pattern %s to %s", pattern, ig == root_ignores ? "root ignores" : ig->abs_path); }