summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKay Sievers <kay.sievers@suse.de>2006-08-24 09:03:15 +0200
committerKay Sievers <kay.sievers@suse.de>2006-08-24 09:03:15 +0200
commitcea61f5c0303d7e2f0886688e789c091d7e4b9e2 (patch)
treefb2ac17552f7f48d595270facc0ea7381a068029
parent34bb5d057c99fa433392e0d5c17f604c8c111381 (diff)
use fnmatch() instead of our own pattern match code
-rw-r--r--udev.h1
-rw-r--r--udev_rules.c5
-rw-r--r--udev_utils_string.c53
3 files changed, 3 insertions, 56 deletions
diff --git a/udev.h b/udev.h
index 0377a8a65b..fc22cc76cb 100644
--- a/udev.h
+++ b/udev.h
@@ -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)