- case EVENT_FAILED:
- unlink(filename_failed);
- delete_path(filename_failed);
-
- /* don't remove, if events for the same path are still pending */
- list_for_each_entry(loop_msg, &running_list, node)
- if (loop_msg->devpath && strcmp(loop_msg->devpath, msg->devpath) == 0)
- return;
-
- list_for_each_entry(loop_msg, &exec_list, node)
- if (loop_msg->devpath && strcmp(loop_msg->devpath, msg->devpath) == 0)
- return;
-
- /* move failed events to the failed directory */
- if (state == EVENT_FAILED) {
- create_path(filename_failed);
- rename(filename, filename_failed);
+ if (msg->devpath_old != NULL) {
+ /* "move" event - rename failed file to current name, do not delete failed */
+ char filename_failed_old[PATH_SIZE];
+
+ strlcpy(filename_failed_old, udev_root, sizeof(filename_failed_old));
+ strlcat(filename_failed_old, "/", sizeof(filename_failed_old));
+ start = strlcat(filename_failed_old, EVENT_FAILED_DIR"/", sizeof(filename_failed_old));
+ strlcat(filename_failed_old, msg->devpath_old, sizeof(filename_failed_old));
+ path_encode(&filename_failed_old[start], sizeof(filename) - start);
+
+ if (rename(filename_failed_old, filename_failed) == 0)
+ info("renamed devpath, moved failed state of '%s' to %s'",
+ msg->devpath_old, msg->devpath);