1
0
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:
Yu Watanabe 2018-10-14 03:09:13 +09:00
parent d277e33916
commit c45b369dd1
5 changed files with 29 additions and 16 deletions

View File

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

View File

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

View File

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

View File

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

View File

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