+ if (!udev_device->envp_uptodate) {
+ unsigned int i;
+ struct udev_list_entry *list_entry;
+
+ for (i = 0; i < ARRAY_SIZE(udev_device->envp) && udev_device->envp[i] != NULL; i++)
+ free(udev_device->envp[i]);
+ i = 0;
+ udev_list_entry_foreach(list_entry, udev_device_get_properties_list_entry(udev_device)) {
+ asprintf(&udev_device->envp[i++], "%s=%s",
+ udev_list_entry_get_name(list_entry),
+ udev_list_entry_get_value(list_entry));
+ if (i+1 >= ARRAY_SIZE(udev_device->envp))
+ break;
+ }
+ udev_device->envp[i] = NULL;
+ info(udev_device->udev, "constructed envp from %u properties\n", i);
+ udev_device->envp_uptodate = 1;
+ }
+ return udev_device->envp;
+}
+
+int udev_device_set_action(struct udev_device *udev_device, const char *action)
+{
+ free(udev_device->action);