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
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();
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();
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;
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;
}
bool udev_builtin_run_once(enum udev_builtin_cmd cmd) {
+ assert(cmd >= 0 && cmd < _UDEV_BUILTIN_MAX);
+
if (!builtins[cmd])
return false;
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;
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;
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) {
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;
} 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);
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