mirror of
https://github.com/systemd/systemd-stable.git
synced 2024-12-25 23:21:33 +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);
|
extern gid_t lookup_group(const char *group);
|
||||||
|
|
||||||
/* udev_utils_string.c */
|
/* udev_utils_string.c */
|
||||||
extern int strcmp_pattern(const char *p, const char *s);
|
|
||||||
extern int string_is_true(const char *str);
|
extern int string_is_true(const char *str);
|
||||||
extern void remove_trailing_chars(char *path, char c);
|
extern void remove_trailing_chars(char *path, char c);
|
||||||
extern int utf8_encoded_valid_unichar(const char *str);
|
extern int utf8_encoded_valid_unichar(const char *str);
|
||||||
|
@ -28,6 +28,7 @@
|
|||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <syslog.h>
|
#include <syslog.h>
|
||||||
|
#include <fnmatch.h>
|
||||||
#include <sys/wait.h>
|
#include <sys/wait.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
|
||||||
@ -246,7 +247,7 @@ static int import_parent_into_env(struct udevice *udev, const char *filter)
|
|||||||
if (pos) {
|
if (pos) {
|
||||||
pos[0] = '\0';
|
pos[0] = '\0';
|
||||||
pos++;
|
pos++;
|
||||||
if (strcmp_pattern(filter, name) == 0) {
|
if (fnmatch(filter, name, 0) == 0) {
|
||||||
dbg("import key '%s'", name_loop->name);
|
dbg("import key '%s'", name_loop->name);
|
||||||
name_list_add(&udev->env_list, name_loop->name, 0);
|
name_list_add(&udev->env_list, name_loop->name, 0);
|
||||||
setenv(name, pos, 1);
|
setenv(name, pos, 1);
|
||||||
@ -583,7 +584,7 @@ static int match_key(const char *key_name, struct udev_rule *rule, struct key *k
|
|||||||
pos++;
|
pos++;
|
||||||
}
|
}
|
||||||
dbg("match %s '%s' <-> '%s'", key_name, key_value, val);
|
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)) {
|
if (match && (key->operation != KEY_OP_NOMATCH)) {
|
||||||
dbg("%s is true (matching value)", key_name);
|
dbg("%s is true (matching value)", key_name);
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -32,59 +32,6 @@
|
|||||||
|
|
||||||
#include "udev.h"
|
#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)
|
int string_is_true(const char *str)
|
||||||
{
|
{
|
||||||
if (strcasecmp(str, "true") == 0)
|
if (strcasecmp(str, "true") == 0)
|
||||||
|
Loading…
Reference in New Issue
Block a user