#include "libudev-private.h"
static int udev_device_set_devnode(struct udev_device *udev_device, const char *devnode);
+static struct udev_list_entry *udev_device_add_property_internal(struct udev_device *udev_device, const char *key, const char *value);
/**
* SECTION:libudev-device
udev_device->seqnum = seqnum;
snprintf(num, sizeof(num), "%llu", seqnum);
- udev_device_add_property(udev_device, "SEQNUM", num);
+ udev_device_add_property_internal(udev_device, "SEQNUM", num);
return 0;
}
udev_device->ifindex = ifindex;
snprintf(num, sizeof(num), "%d", ifindex);
- udev_device_add_property(udev_device, "IFINDEX", num);
+ udev_device_add_property_internal(udev_device, "IFINDEX", num);
return 0;
}
udev_device->devnum = devnum;
snprintf(num, sizeof(num), "%u", major(devnum));
- udev_device_add_property(udev_device, "MAJOR", num);
+ udev_device_add_property_internal(udev_device, "MAJOR", num);
snprintf(num, sizeof(num), "%u", minor(devnum));
- udev_device_add_property(udev_device, "MINOR", num);
+ udev_device_add_property_internal(udev_device, "MINOR", num);
return 0;
}
udev_device->devpath_old = strdup(devpath_old);
if (udev_device->devpath_old == NULL)
return -ENOMEM;
- udev_device_add_property(udev_device, "DEVPATH_OLD", udev_device->devpath_old);
+ udev_device_add_property_internal(udev_device, "DEVPATH_OLD", udev_device->devpath_old);
pos = strrchr(udev_device->devpath_old, '/');
if (pos == NULL)
if (udev_device->driver == NULL)
return -ENOMEM;
udev_device->driver_set = true;
- udev_device_add_property(udev_device, "DRIVER", udev_device->driver);
+ udev_device_add_property_internal(udev_device, "DRIVER", udev_device->driver);
return 0;
}
if (udev_device->devtype == NULL)
return -ENOMEM;
udev_device->devtype_set = true;
- udev_device_add_property(udev_device, "DEVTYPE", udev_device->devtype);
+ udev_device_add_property_internal(udev_device, "DEVTYPE", udev_device->devtype);
return 0;
}
if (udev_device->subsystem == NULL)
return -ENOMEM;
udev_device->subsystem_set = true;
- udev_device_add_property(udev_device, "SUBSYSTEM", udev_device->subsystem);
+ udev_device_add_property_internal(udev_device, "SUBSYSTEM", udev_device->subsystem);
return 0;
}
udev_device->devnode_mode = mode;
snprintf(num, sizeof(num), "%#o", mode);
- udev_device_add_property(udev_device, "DEVMODE", num);
+ udev_device_add_property_internal(udev_device, "DEVMODE", num);
return 0;
}
udev_device->devnode_uid = uid;
snprintf(num, sizeof(num), "%u", uid);
- udev_device_add_property(udev_device, "DEVUID", num);
+ udev_device_add_property_internal(udev_device, "DEVUID", num);
return 0;
}
udev_device->devnode_gid = gid;
snprintf(num, sizeof(num), "%u", gid);
- udev_device_add_property(udev_device, "DEVGID", num);
+ udev_device_add_property_internal(udev_device, "DEVGID", num);
return 0;
}
-struct udev_list_entry *udev_device_add_property(struct udev_device *udev_device, const char *key, const char *value)
+static struct udev_list_entry *udev_device_add_property_internal(struct udev_device *udev_device, const char *key, const char *value)
{
udev_device->envp_uptodate = false;
if (value == NULL) {
return udev_list_entry_add(&udev_device->properties_list, key, value);
}
+
+int udev_device_add_property(struct udev_device *udev_device, const char *key, const char *value)
+{
+ struct udev_list_entry *property;
+
+ property = udev_device_add_property_internal(udev_device, key, value);
+
+ /* store in db, skip private keys */
+ if (key[0] != '.')
+ udev_list_entry_set_num(property, true);
+
+ return 0;
+}
+
static struct udev_list_entry *udev_device_add_property_from_string(struct udev_device *udev_device, const char *property)
{
char name[UTIL_LINE_SIZE];
val = &val[1];
if (val[0] == '\0')
val = NULL;
- return udev_device_add_property(udev_device, name, val);
+ return udev_device_add_property_internal(udev_device, name, val);
}
static int udev_device_set_syspath(struct udev_device *udev_device, const char *syspath)
if (udev_device->syspath == NULL)
return -ENOMEM;
udev_device->devpath = udev_device->syspath + strlen("/sys");
- udev_device_add_property(udev_device, "DEVPATH", udev_device->devpath);
+ udev_device_add_property_internal(udev_device, "DEVPATH", udev_device->devpath);
pos = strrchr(udev_device->syspath, '/');
if (pos == NULL)
l = strpcpyl(&s, sizeof(symlinks), udev_list_entry_get_name(list_entry), NULL);
udev_list_entry_foreach(list_entry, udev_list_entry_get_next(list_entry))
l = strpcpyl(&s, l, " ", udev_list_entry_get_name(list_entry), NULL);
- udev_device_add_property(udev_device, "DEVLINKS", symlinks);
+ udev_device_add_property_internal(udev_device, "DEVLINKS", symlinks);
}
}
if (!udev_device->tags_uptodate) {
l = strpcpyl(&s, sizeof(tags), ":", NULL);
udev_list_entry_foreach(list_entry, udev_device_get_tags_list_entry(udev_device))
l = strpcpyl(&s, l, udev_list_entry_get_name(list_entry), ":", NULL);
- udev_device_add_property(udev_device, "TAGS", tags);
+ udev_device_add_property_internal(udev_device, "TAGS", tags);
}
}
return udev_list_get_entry(&udev_device->properties_list);
udev_device->usec_initialized = usec_initialized;
snprintf(num, sizeof(num), USEC_FMT, usec_initialized);
- udev_device_add_property(udev_device, "USEC_INITIALIZED", num);
+ udev_device_add_property_internal(udev_device, "USEC_INITIALIZED", num);
}
/**
}
if (udev_device->devnode == NULL)
return -ENOMEM;
- udev_device_add_property(udev_device, "DEVNAME", udev_device->devnode);
+ udev_device_add_property_internal(udev_device, "DEVNAME", udev_device->devnode);
return 0;
}
udev_device->action = strdup(action);
if (udev_device->action == NULL)
return -ENOMEM;
- udev_device_add_property(udev_device, "ACTION", udev_device->action);
+ udev_device_add_property_internal(udev_device, "ACTION", udev_device->action);
return 0;
}
interface = udev_device_get_property_value(udev_device, "INTERFACE");
if (interface) {
/* like DEVPATH_OLD, INTERFACE_OLD is not saved to the db, but only stays around for the current event */
- udev_device_add_property(udev_device, "INTERFACE_OLD", interface);
- udev_device_add_property(udev_device, "INTERFACE", name);
+ udev_device_add_property_internal(udev_device, "INTERFACE_OLD", interface);
+ udev_device_add_property_internal(udev_device, "INTERFACE", name);
}
return 0;
val++;
}
- entry = udev_device_add_property(dev, key, val);
- /* store in db, skip private keys */
- if (key[0] != '.')
- udev_list_entry_set_num(entry, true);
+ udev_device_add_property(dev, key, val);
return 0;
}
const char *val = udev_list_entry_get_value(list_entry);
if (fnmatch(filter, key, 0) == 0) {
- struct udev_list_entry *entry;
-
- entry = udev_device_add_property(dev, key, val);
- /* store in db, skip private keys */
- if (key[0] != '.')
- udev_list_entry_set_num(entry, true);
+ udev_device_add_property(dev, key, val);
}
}
return 0;
const char *value;
value = udev_device_get_property_value(event->dev_db, key);
- if (value != NULL) {
- struct udev_list_entry *entry;
-
- entry = udev_device_add_property(event->dev, key, value);
- udev_list_entry_set_num(entry, true);
- } else {
+ if (value != NULL)
+ udev_device_add_property(event->dev, key, value);
+ else {
if (cur->key.op != OP_NOMATCH)
goto nomatch;
}
pos = strstr(cmdline, key);
if (pos != NULL) {
- struct udev_list_entry *entry;
-
pos += strlen(key);
if (pos[0] == '\0' || isspace(pos[0])) {
/* we import simple flags as 'FLAG=1' */
- entry = udev_device_add_property(event->dev, key, "1");
- udev_list_entry_set_num(entry, true);
+ udev_device_add_property(event->dev, key, "1");
imported = true;
} else if (pos[0] == '=') {
const char *value;
while (pos[0] != '\0' && !isspace(pos[0]))
pos++;
pos[0] = '\0';
- entry = udev_device_add_property(event->dev, key, value);
- udev_list_entry_set_num(entry, true);
+ udev_device_add_property(event->dev, key, value);
imported = true;
}
}
char *value = rules_str(rules, cur->key.value_off);
char value_new[UTIL_NAME_SIZE];
const char *value_old = NULL;
- struct udev_list_entry *entry;
if (value[0] == '\0') {
if (cur->key.op == OP_ADD)
} else
udev_event_apply_format(event, value, value_new, sizeof(value_new));
- entry = udev_device_add_property(event->dev, name, value_new);
- /* store in db, skip private keys */
- if (name[0] != '.')
- udev_list_entry_set_num(entry, true);
+ udev_device_add_property(event->dev, name, value_new);
break;
}
case TK_A_TAG: {