hardlink: small regex stuff refactoring
Signed-off-by: Karel Zak <kzak@redhat.com>
This commit is contained in:
parent
d3f77b4b8b
commit
8ff8b02782
|
@ -118,6 +118,13 @@ static struct statistics {
|
||||||
struct timeval start_time;
|
struct timeval start_time;
|
||||||
} stats;
|
} stats;
|
||||||
|
|
||||||
|
|
||||||
|
struct hdl_regex {
|
||||||
|
regex_t re; /* POSIX compatible regex handler */
|
||||||
|
|
||||||
|
struct hdl_regex *next;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct options - Processed command-line options
|
* struct options - Processed command-line options
|
||||||
* @include: A linked list of regular expressions for the --include option
|
* @include: A linked list of regular expressions for the --include option
|
||||||
|
@ -135,10 +142,8 @@ static struct statistics {
|
||||||
* @min_size: Minimum size of files to consider. (default = 1 byte)
|
* @min_size: Minimum size of files to consider. (default = 1 byte)
|
||||||
*/
|
*/
|
||||||
static struct options {
|
static struct options {
|
||||||
struct regex_link {
|
struct hdl_regex *include;
|
||||||
regex_t preg;
|
struct hdl_regex *exclude;
|
||||||
struct regex_link *next;
|
|
||||||
} *include, *exclude;
|
|
||||||
|
|
||||||
signed int verbosity;
|
signed int verbosity;
|
||||||
unsigned int respect_mode:1;
|
unsigned int respect_mode:1;
|
||||||
|
@ -207,17 +212,41 @@ static void jlog(enum log_level level, const char *format, ...)
|
||||||
#define CMP(a, b) ((a) > (b) ? 1 : ((a) < (b) ? -1 : 0))
|
#define CMP(a, b) ((a) > (b) ? 1 : ((a) < (b) ? -1 : 0))
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* regexec_any - Match against multiple regular expressions
|
* register_regex - Compile and insert a regular expression into list
|
||||||
|
* @pregs: Pointer to a linked list of regular expressions
|
||||||
|
* @regex: String containing the regular expression to be compiled
|
||||||
|
*/
|
||||||
|
static void register_regex(struct hdl_regex **pregs, const char *regex)
|
||||||
|
{
|
||||||
|
struct hdl_regex *link;
|
||||||
|
int err;
|
||||||
|
|
||||||
|
link = xmalloc(sizeof(*link));
|
||||||
|
|
||||||
|
if ((err = regcomp(&link->re, regex, REG_NOSUB | REG_EXTENDED)) != 0) {
|
||||||
|
size_t size = regerror(err, &link->re, NULL, 0);
|
||||||
|
char *buf = xmalloc(size + 1);
|
||||||
|
|
||||||
|
regerror(err, &link->re, buf, size);
|
||||||
|
|
||||||
|
errx(EXIT_FAILURE, _("could not compile regular expression %s: %s"),
|
||||||
|
regex, buf);
|
||||||
|
}
|
||||||
|
link->next = *pregs; *pregs = link;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* match_any_regex - Match against multiple regular expressions
|
||||||
* @pregs: A linked list of regular expressions
|
* @pregs: A linked list of regular expressions
|
||||||
* @what: The string to match against
|
* @what: The string to match against
|
||||||
*
|
*
|
||||||
* Checks whether any of the regular expressions in the list matches the
|
* Checks whether any of the regular expressions in the list matches the
|
||||||
* string.
|
* string.
|
||||||
*/
|
*/
|
||||||
static int regexec_any(struct regex_link *pregs, const char *what)
|
static int match_any_regex(struct hdl_regex *pregs, const char *what)
|
||||||
{
|
{
|
||||||
for (; pregs != NULL; pregs = pregs->next) {
|
for (; pregs != NULL; pregs = pregs->next) {
|
||||||
if (regexec(&pregs->preg, what, 0, NULL, 0) == 0)
|
if (regexec(&pregs->re, what, 0, NULL, 0) == 0)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
@ -744,8 +773,8 @@ static int inserter(const char *fpath, const struct stat *sb,
|
||||||
if (typeflag != FTW_F || !S_ISREG(sb->st_mode))
|
if (typeflag != FTW_F || !S_ISREG(sb->st_mode))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
included = regexec_any(opts.include, fpath);
|
included = match_any_regex(opts.include, fpath);
|
||||||
excluded = regexec_any(opts.exclude, fpath);
|
excluded = match_any_regex(opts.exclude, fpath);
|
||||||
|
|
||||||
if ((opts.exclude && excluded && !included) ||
|
if ((opts.exclude && excluded && !included) ||
|
||||||
(!opts.exclude && opts.include && !included))
|
(!opts.exclude && opts.include && !included))
|
||||||
|
@ -906,29 +935,6 @@ static void __attribute__((__noreturn__)) usage(void)
|
||||||
exit(EXIT_SUCCESS);
|
exit(EXIT_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* register_regex - Compile and insert a regular expression into list
|
|
||||||
* @pregs: Pointer to a linked list of regular expressions
|
|
||||||
* @regex: String containing the regular expression to be compiled
|
|
||||||
*/
|
|
||||||
static void register_regex(struct regex_link **pregs, const char *regex)
|
|
||||||
{
|
|
||||||
struct regex_link *link;
|
|
||||||
int err;
|
|
||||||
|
|
||||||
link = xmalloc(sizeof(*link));
|
|
||||||
|
|
||||||
if ((err = regcomp(&link->preg, regex, REG_NOSUB | REG_EXTENDED)) != 0) {
|
|
||||||
size_t size = regerror(err, &link->preg, NULL, 0);
|
|
||||||
char *buf = xmalloc(size + 1);
|
|
||||||
|
|
||||||
regerror(err, &link->preg, buf, size);
|
|
||||||
|
|
||||||
errx(EXIT_FAILURE, _("could not compile regular expression %s: %s"),
|
|
||||||
regex, buf);
|
|
||||||
}
|
|
||||||
link->next = *pregs; *pregs = link;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* parse_options - Parse the command line options
|
* parse_options - Parse the command line options
|
||||||
|
|
Loading…
Reference in New Issue