1
0
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:
Yu Watanabe 2022-04-25 11:20:11 +09:00
parent c11810ed30
commit 9409710097
4 changed files with 17 additions and 12 deletions

View File

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

View File

@ -1,6 +1,8 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
#pragma once
#include <stdbool.h>
#include "sd-device.h"
typedef enum MatchInitializedType {

View File

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

View File

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