* It can be called as many times as needed, without caring about
* references.
*
- * Returns: a new udev device, or #NULL, if no matching parent exists.
+ * Returns: a new udev device, or #NULL if no matching parent exists.
**/
struct udev_device *udev_device_get_parent_with_subsystem_devtype(struct udev_device *udev_device, const char *subsystem, const char *devtype)
{
* @udev_device: udev device
* @sysattr: attribute name
*
- * The retrieved value is cached in the device. Repeated reads will return the same
+ * The retrieved value is cached in the device. Repeated calls will return the same
* value and not open the attribute again.
*
* Returns: the content of a sys attribute file, or #NULL if there is no sys attribute value.
s = udev_device->monitor_buf;
l = MONITOR_BUF_SIZE;
udev_list_entry_foreach(list_entry, udev_device_get_properties_list_entry(udev_device)) {
+ const char *key;
+
+ key = udev_list_entry_get_name(list_entry);
+ /* skip private variables */
+ if (key[0] == '.')
+ continue;
+
/* add string to envp array */
udev_device->envp[i++] = s;
if (i+1 >= ENVP_SIZE)
return -EINVAL;
/* add property string to monitor buffer */
- l = util_strpcpyl(&s, l, udev_list_entry_get_name(list_entry), "=",
- udev_list_entry_get_value(list_entry), NULL);
+ l = util_strpcpyl(&s, l, key, "=", udev_list_entry_get_value(list_entry), NULL);
if (l == 0)
return -EINVAL;
s++;
int udev_device_set_devpath_old(struct udev_device *udev_device, const char *devpath_old)
{
+ free(udev_device->devpath_old);
udev_device->devpath_old = strdup(devpath_old);
if (udev_device->devpath_old == NULL)
return -ENOMEM;
int udev_device_set_knodename(struct udev_device *udev_device, const char *knodename)
{
+ free(udev_device->knodename);
udev_device->knodename = strdup(knodename);
if (udev_device->knodename == NULL)
return -ENOMEM;
+ udev_device_add_property(udev_device, "DEVNAME", udev_device->knodename);
return 0;
}