mirror of
https://github.com/systemd/systemd.git
synced 2025-03-19 22:50:17 +03:00
sd-device-enumerator: introduce sd_device_enumerator_add_nomatch_sysname()
This commit is contained in:
parent
c11810ed30
commit
9409710097
@ -776,4 +776,5 @@ global:
|
||||
sd_device_new_from_devname;
|
||||
sd_device_new_from_path;
|
||||
sd_device_open;
|
||||
sd_device_enumerator_add_nomatch_sysname;
|
||||
} LIBSYSTEMD_250;
|
||||
|
@ -1,6 +1,8 @@
|
||||
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
||||
#pragma once
|
||||
|
||||
#include <stdbool.h>
|
||||
|
||||
#include "sd-device.h"
|
||||
|
||||
typedef enum MatchInitializedType {
|
||||
|
@ -42,6 +42,7 @@ struct sd_device_enumerator {
|
||||
Hashmap *nomatch_sysattr;
|
||||
Hashmap *match_property;
|
||||
Set *match_sysname;
|
||||
Set *nomatch_sysname;
|
||||
Set *match_tag;
|
||||
Set *match_parent;
|
||||
MatchInitializedType match_initialized;
|
||||
@ -96,6 +97,7 @@ static sd_device_enumerator *device_enumerator_free(sd_device_enumerator *enumer
|
||||
hashmap_free(enumerator->nomatch_sysattr);
|
||||
hashmap_free(enumerator->match_property);
|
||||
set_free(enumerator->match_sysname);
|
||||
set_free(enumerator->nomatch_sysname);
|
||||
set_free(enumerator->match_tag);
|
||||
set_free(enumerator->match_parent);
|
||||
|
||||
@ -183,13 +185,13 @@ _public_ int sd_device_enumerator_add_match_property(sd_device_enumerator *enume
|
||||
return 1;
|
||||
}
|
||||
|
||||
_public_ int sd_device_enumerator_add_match_sysname(sd_device_enumerator *enumerator, const char *sysname) {
|
||||
static int device_enumerator_add_match_sysname(sd_device_enumerator *enumerator, const char *sysname, bool match) {
|
||||
int r;
|
||||
|
||||
assert_return(enumerator, -EINVAL);
|
||||
assert_return(sysname, -EINVAL);
|
||||
|
||||
r = set_put_strdup(&enumerator->match_sysname, sysname);
|
||||
r = set_put_strdup(match ? &enumerator->match_sysname : &enumerator->nomatch_sysname, sysname);
|
||||
if (r <= 0)
|
||||
return r;
|
||||
|
||||
@ -198,6 +200,14 @@ _public_ int sd_device_enumerator_add_match_sysname(sd_device_enumerator *enumer
|
||||
return 1;
|
||||
}
|
||||
|
||||
_public_ int sd_device_enumerator_add_match_sysname(sd_device_enumerator *enumerator, const char *sysname) {
|
||||
return device_enumerator_add_match_sysname(enumerator, sysname, true);
|
||||
}
|
||||
|
||||
_public_ int sd_device_enumerator_add_nomatch_sysname(sd_device_enumerator *enumerator, const char *sysname) {
|
||||
return device_enumerator_add_match_sysname(enumerator, sysname, false);
|
||||
}
|
||||
|
||||
_public_ int sd_device_enumerator_add_match_tag(sd_device_enumerator *enumerator, const char *tag) {
|
||||
int r;
|
||||
|
||||
@ -500,19 +510,10 @@ static bool match_tag(sd_device_enumerator *enumerator, sd_device *device) {
|
||||
}
|
||||
|
||||
static bool match_sysname(sd_device_enumerator *enumerator, const char *sysname) {
|
||||
const char *sysname_match;
|
||||
|
||||
assert(enumerator);
|
||||
assert(sysname);
|
||||
|
||||
if (set_isempty(enumerator->match_sysname))
|
||||
return true;
|
||||
|
||||
SET_FOREACH(sysname_match, enumerator->match_sysname)
|
||||
if (fnmatch(sysname_match, sysname, 0) == 0)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
return set_fnmatch(enumerator->match_sysname, enumerator->nomatch_sysname, sysname);
|
||||
}
|
||||
|
||||
static int match_initialized(sd_device_enumerator *enumerator, sd_device *device) {
|
||||
|
@ -126,6 +126,7 @@ int sd_device_enumerator_add_match_subsystem(sd_device_enumerator *enumerator, c
|
||||
int sd_device_enumerator_add_match_sysattr(sd_device_enumerator *enumerator, const char *sysattr, const char *value, int match);
|
||||
int sd_device_enumerator_add_match_property(sd_device_enumerator *enumerator, const char *property, const char *value);
|
||||
int sd_device_enumerator_add_match_sysname(sd_device_enumerator *enumerator, const char *sysname);
|
||||
int sd_device_enumerator_add_nomatch_sysname(sd_device_enumerator *enumerator, const char *sysname);
|
||||
int sd_device_enumerator_add_match_tag(sd_device_enumerator *enumerator, const char *tag);
|
||||
int sd_device_enumerator_add_match_parent(sd_device_enumerator *enumerator, sd_device *parent);
|
||||
int sd_device_enumerator_allow_uninitialized(sd_device_enumerator *enumerator);
|
||||
|
Loading…
x
Reference in New Issue
Block a user