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:
parent
34bb5d057c
commit
cea61f5c03
1
udev.h
1
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);
|
||||
|
@ -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;
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user