mirror of
https://github.com/systemd/systemd.git
synced 2025-02-14 05:57:40 +03:00
udev-builtin: modernize code a bit
- introduce _UDEV_BUILTIN_INVALID, - use _UDEV_BUILTIN_MAX where applicable, - add several assertions.
This commit is contained in:
parent
d277e33916
commit
c45b369dd1
@ -11,7 +11,7 @@
|
||||
|
||||
static bool initialized;
|
||||
|
||||
static const struct udev_builtin *builtins[] = {
|
||||
static const struct udev_builtin *builtins[_UDEV_BUILTIN_MAX] = {
|
||||
#if HAVE_BLKID
|
||||
[UDEV_BUILTIN_BLKID] = &udev_builtin_blkid,
|
||||
#endif
|
||||
@ -37,7 +37,7 @@ void udev_builtin_init(void) {
|
||||
if (initialized)
|
||||
return;
|
||||
|
||||
for (i = 0; i < ELEMENTSOF(builtins); i++)
|
||||
for (i = 0; i < _UDEV_BUILTIN_MAX; i++)
|
||||
if (builtins[i] && builtins[i]->init)
|
||||
builtins[i]->init();
|
||||
|
||||
@ -50,7 +50,7 @@ void udev_builtin_exit(void) {
|
||||
if (!initialized)
|
||||
return;
|
||||
|
||||
for (i = 0; i < ELEMENTSOF(builtins); i++)
|
||||
for (i = 0; i < _UDEV_BUILTIN_MAX; i++)
|
||||
if (builtins[i] && builtins[i]->exit)
|
||||
builtins[i]->exit();
|
||||
|
||||
@ -60,7 +60,7 @@ void udev_builtin_exit(void) {
|
||||
bool udev_builtin_validate(void) {
|
||||
unsigned i;
|
||||
|
||||
for (i = 0; i < ELEMENTSOF(builtins); i++)
|
||||
for (i = 0; i < _UDEV_BUILTIN_MAX; i++)
|
||||
if (builtins[i] && builtins[i]->validate && builtins[i]->validate())
|
||||
return true;
|
||||
return false;
|
||||
@ -69,12 +69,14 @@ bool udev_builtin_validate(void) {
|
||||
void udev_builtin_list(void) {
|
||||
unsigned i;
|
||||
|
||||
for (i = 0; i < ELEMENTSOF(builtins); i++)
|
||||
for (i = 0; i < _UDEV_BUILTIN_MAX; i++)
|
||||
if (builtins[i])
|
||||
fprintf(stderr, " %-14s %s\n", builtins[i]->name, builtins[i]->help);
|
||||
}
|
||||
|
||||
const char *udev_builtin_name(enum udev_builtin_cmd cmd) {
|
||||
assert(cmd >= 0 && cmd < _UDEV_BUILTIN_MAX);
|
||||
|
||||
if (!builtins[cmd])
|
||||
return NULL;
|
||||
|
||||
@ -82,6 +84,8 @@ const char *udev_builtin_name(enum udev_builtin_cmd cmd) {
|
||||
}
|
||||
|
||||
bool udev_builtin_run_once(enum udev_builtin_cmd cmd) {
|
||||
assert(cmd >= 0 && cmd < _UDEV_BUILTIN_MAX);
|
||||
|
||||
if (!builtins[cmd])
|
||||
return false;
|
||||
|
||||
@ -96,15 +100,20 @@ enum udev_builtin_cmd udev_builtin_lookup(const char *command) {
|
||||
|
||||
command += strspn(command, WHITESPACE);
|
||||
n = strcspn(command, WHITESPACE);
|
||||
for (i = 0; i < ELEMENTSOF(builtins); i++)
|
||||
for (i = 0; i < _UDEV_BUILTIN_MAX; i++)
|
||||
if (builtins[i] && strneq(builtins[i]->name, command, n))
|
||||
return i;
|
||||
return UDEV_BUILTIN_MAX;
|
||||
|
||||
return _UDEV_BUILTIN_INVALID;
|
||||
}
|
||||
|
||||
int udev_builtin_run(sd_device *dev, enum udev_builtin_cmd cmd, const char *command, bool test) {
|
||||
_cleanup_strv_free_ char **argv = NULL;
|
||||
|
||||
assert(dev);
|
||||
assert(cmd >= 0 && cmd < _UDEV_BUILTIN_MAX);
|
||||
assert(command);
|
||||
|
||||
if (!builtins[cmd])
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
@ -120,6 +129,9 @@ int udev_builtin_run(sd_device *dev, enum udev_builtin_cmd cmd, const char *comm
|
||||
int udev_builtin_add_property(sd_device *dev, bool test, const char *key, const char *val) {
|
||||
int r;
|
||||
|
||||
assert(dev);
|
||||
assert(key);
|
||||
|
||||
r = device_add_property(dev, key, val);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
@ -23,7 +23,8 @@ enum udev_builtin_cmd {
|
||||
#if HAVE_ACL
|
||||
UDEV_BUILTIN_UACCESS,
|
||||
#endif
|
||||
UDEV_BUILTIN_MAX
|
||||
_UDEV_BUILTIN_MAX,
|
||||
_UDEV_BUILTIN_INVALID = -1,
|
||||
};
|
||||
|
||||
struct udev_builtin {
|
||||
|
@ -900,7 +900,7 @@ void udev_event_execute_run(struct udev_event *event, usec_t timeout_usec, usec_
|
||||
|
||||
udev_event_apply_format(event, cmd, command, sizeof(command), false);
|
||||
|
||||
if (builtin_cmd < UDEV_BUILTIN_MAX)
|
||||
if (builtin_cmd >= 0 && builtin_cmd < _UDEV_BUILTIN_MAX)
|
||||
udev_builtin_run(event->dev->device, builtin_cmd, command, false);
|
||||
else {
|
||||
if (event->exec_delay > 0) {
|
||||
|
@ -1228,7 +1228,7 @@ static void add_rule(struct udev_rules *rules, char *line,
|
||||
if (value[0] != '/') {
|
||||
const enum udev_builtin_cmd cmd = udev_builtin_lookup(value);
|
||||
|
||||
if (cmd < UDEV_BUILTIN_MAX) {
|
||||
if (cmd >= 0) {
|
||||
LOG_RULE_DEBUG("IMPORT found builtin '%s', replacing", value);
|
||||
rule_add_key(&rule_tmp, TK_M_IMPORT_BUILTIN, op, value, &cmd);
|
||||
continue;
|
||||
@ -1238,7 +1238,7 @@ static void add_rule(struct udev_rules *rules, char *line,
|
||||
} else if (streq(attr, "builtin")) {
|
||||
const enum udev_builtin_cmd cmd = udev_builtin_lookup(value);
|
||||
|
||||
if (cmd >= UDEV_BUILTIN_MAX)
|
||||
if (cmd < 0)
|
||||
LOG_RULE_WARNING("IMPORT{builtin} '%s' unknown", value);
|
||||
else
|
||||
rule_add_key(&rule_tmp, TK_M_IMPORT_BUILTIN, op, value, &cmd);
|
||||
@ -1276,12 +1276,12 @@ static void add_rule(struct udev_rules *rules, char *line,
|
||||
if (streq(attr, "builtin")) {
|
||||
const enum udev_builtin_cmd cmd = udev_builtin_lookup(value);
|
||||
|
||||
if (cmd < UDEV_BUILTIN_MAX)
|
||||
rule_add_key(&rule_tmp, TK_A_RUN_BUILTIN, op, value, &cmd);
|
||||
else
|
||||
if (cmd < 0)
|
||||
LOG_RULE_ERROR("RUN{builtin}: '%s' unknown", value);
|
||||
else
|
||||
rule_add_key(&rule_tmp, TK_A_RUN_BUILTIN, op, value, &cmd);
|
||||
} else if (streq(attr, "program")) {
|
||||
const enum udev_builtin_cmd cmd = UDEV_BUILTIN_MAX;
|
||||
const enum udev_builtin_cmd cmd = _UDEV_BUILTIN_MAX;
|
||||
|
||||
rule_add_key(&rule_tmp, TK_A_RUN_PROGRAM, op, value, &cmd);
|
||||
} else
|
||||
|
@ -86,7 +86,7 @@ int builtin_main(int argc, char *argv[], void *userdata) {
|
||||
udev_builtin_init();
|
||||
|
||||
cmd = udev_builtin_lookup(arg_command);
|
||||
if (cmd >= UDEV_BUILTIN_MAX) {
|
||||
if (cmd < 0) {
|
||||
log_error("Unknown command '%s'", arg_command);
|
||||
r = -EINVAL;
|
||||
goto finish;
|
||||
|
Loading…
x
Reference in New Issue
Block a user