1
1
mirror of https://github.com/systemd/systemd-stable.git synced 2024-12-24 21:34:08 +03:00

use fnmatch() instead of our own pattern match code

This commit is contained in:
Kay Sievers 2006-08-24 09:03:15 +02:00
parent 34bb5d057c
commit cea61f5c03
3 changed files with 3 additions and 56 deletions

1
udev.h
View File

@ -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);

View 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;

View File

@ -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)