- if (strchr(name, '/')) {
- char *pos;
-
- pos = strrchr(filename, '/');
- while (1) {
- *pos = 0x00;
- pos = strrchr(filename, '/');
-
- /* don't remove the last one */
- if ((pos == filename) || (pos == NULL))
- break;
-
- /* remove if empty */
- retval = rmdir(filename);
- if (retval) {
- if (errno == ENOTEMPTY)
- return 0;
- dbg("rmdir(%s) failed with error '%s'",
- filename, strerror(errno));
- break;
- }
- dbg("removed %s", filename);
+ if (strchr(dev->name, '/'))
+ delete_path(filename);
+
+ foreach_strpart(dev->symlink, " ", pos, len) {
+ strnfieldcpy(linkname, dev->symlink + pos, len+1);
+ strfieldcpy(filename, udev_root);
+ strfieldcat(filename, linkname);
+
+ dbg("unlinking symlink '%s'", filename);
+ retval = unlink(filename);
+ if (errno == ENOENT)
+ retval = 0;
+ if (retval) {
+ dbg("unlink(%s) failed with error '%s'",
+ filename, strerror(errno));
+ return retval;
+ }
+ if (strchr(dev->symlink, '/')) {
+ delete_path(filename);