diff options
author | Kay Sievers <kay.sievers@suse.de> | 2006-08-24 09:03:15 +0200 |
---|---|---|
committer | Kay Sievers <kay.sievers@suse.de> | 2006-08-24 09:03:15 +0200 |
commit | cea61f5c0303d7e2f0886688e789c091d7e4b9e2 (patch) | |
tree | fb2ac17552f7f48d595270facc0ea7381a068029 | |
parent | 34bb5d057c99fa433392e0d5c17f604c8c111381 (diff) |
use fnmatch() instead of our own pattern match code
-rw-r--r-- | udev.h | 1 | ||||
-rw-r--r-- | udev_rules.c | 5 | ||||
-rw-r--r-- | udev_utils_string.c | 53 |
3 files changed, 3 insertions, 56 deletions
@@ -143,7 +143,6 @@ extern uid_t lookup_user(const char *user); extern gid_t lookup_group(const char *group); /* udev_utils_string.c */ -extern int strcmp_pattern(const char *p, const char *s); extern int string_is_true(const char *str); extern void remove_trailing_chars(char *path, char c); extern int utf8_encoded_valid_unichar(const char *str); diff --git a/udev_rules.c b/udev_rules.c index d9e1d89e6c..267c79de03 100644 --- a/udev_rules.c +++ b/udev_rules.c @@ -28,6 +28,7 @@ #include <unistd.h> #include <errno.h> #include <syslog.h> +#include <fnmatch.h> #include <sys/wait.h> #include <sys/stat.h> @@ -246,7 +247,7 @@ static int import_parent_into_env(struct udevice *udev, const char *filter) if (pos) { pos[0] = '\0'; pos++; - if (strcmp_pattern(filter, name) == 0) { + if (fnmatch(filter, name, 0) == 0) { dbg("import key '%s'", name_loop->name); name_list_add(&udev->env_list, name_loop->name, 0); setenv(name, pos, 1); @@ -583,7 +584,7 @@ static int match_key(const char *key_name, struct udev_rule *rule, struct key *k pos++; } dbg("match %s '%s' <-> '%s'", key_name, key_value, val); - match = (strcmp_pattern(key_value, val) == 0); + match = (fnmatch(key_value, val, 0) == 0); if (match && (key->operation != KEY_OP_NOMATCH)) { dbg("%s is true (matching value)", key_name); return 0; diff --git a/udev_utils_string.c b/udev_utils_string.c index 5aebfed523..225e198587 100644 --- a/udev_utils_string.c +++ b/udev_utils_string.c @@ -32,59 +32,6 @@ #include "udev.h" -/* compare string with pattern (like fnmatch(), supports * ? [0-9] [!A-Z]) */ -int strcmp_pattern(const char *p, const char *s) -{ - if (s[0] == '\0') { - while (p[0] == '*') - p++; - return (p[0] != '\0'); - } - switch (p[0]) { - case '[': - { - int not = 0; - p++; - if (p[0] == '!') { - not = 1; - p++; - } - while ((p[0] != '\0') && (p[0] != ']')) { - int match = 0; - if (p[1] == '-') { - if ((s[0] >= p[0]) && (s[0] <= p[2])) - match = 1; - p += 3; - } else { - match = (p[0] == s[0]); - p++; - } - if (match ^ not) { - while ((p[0] != '\0') && (p[0] != ']')) - p++; - if (p[0] == ']') - return strcmp_pattern(p+1, s+1); - } - } - } - break; - case '*': - if (strcmp_pattern(p, s+1)) - return strcmp_pattern(p+1, s); - return 0; - case '\0': - if (s[0] == '\0') { - return 0; - } - break; - default: - if ((p[0] == s[0]) || (p[0] == '?')) - return strcmp_pattern(p+1, s+1); - break; - } - return 1; -} - int string_is_true(const char *str) { if (strcasecmp(str, "true") == 0) |