]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
use fnmatch() instead of our own pattern match code
authorKay Sievers <kay.sievers@suse.de>
Thu, 24 Aug 2006 07:03:15 +0000 (09:03 +0200)
committerKay Sievers <kay.sievers@suse.de>
Thu, 24 Aug 2006 07:03:15 +0000 (09:03 +0200)
udev.h
udev_rules.c
udev_utils_string.c

diff --git a/udev.h b/udev.h
index 0377a8a65b9a9492876b22bc13d3179d7ddcf467..fc22cc76cbd646e07f2a92f5c38f565f3b0a149d 100644 (file)
--- 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);
index d9e1d89e6c91b249a9028e9a933cf5c836ef103d..267c79de03936d4509b1b9c8a42d15dd6ca7e7c3 100644 (file)
@@ -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;
index 5aebfed52394fb3f532e2e5f1f7b17422c683b5d..225e1985879ef16de3fc34b75c81479a3ac59711 100644 (file)
 
 #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)