- if (udev_db_add_device(udev) != 0)
- dbg("udev_db_add_dev failed, remove might not work for custom names");
- } else if (strcmp(udev->dev->subsystem, "net") == 0) {
- /* look if we want to change the name of the netif */
- if (strcmp(udev->name, udev->dev->kernel_name) != 0) {
- retval = rename_net_if(udev);
- if (retval != 0)
- goto exit;
-
- info("renamed netif to '%s'", udev->name);
- /* we've changed the name, now fake the devpath, because the
- * original kernel name sleeps with the fishes and we don't
- * get an event from the kernel with the new name
- */
- pos = strrchr(udev->dev->devpath, '/');
- if (pos != NULL) {
- pos[1] = '\0';
- strlcat(udev->dev->devpath, udev->name, sizeof(udev->dev->devpath));
- strlcpy(udev->dev->kernel_name, udev->name, sizeof(udev->dev->kernel_name));
- setenv("DEVPATH", udev->dev->devpath, 1);
- setenv("INTERFACE", udev->name, 1);
- }
+ if (stat(filename, &stats) != 0) {
+ dbg("device node '%s' not found", filename);
+ return -1;
+ }
+ if (udev->devt && stats.st_rdev != udev->devt) {
+ info("device node '%s' points to a different device, skip removal", filename);
+ return -1;
+ }
+
+ info("removing device node '%s'", filename);
+ retval = unlink_secure(filename);
+ if (retval)
+ return retval;
+
+ setenv("DEVNAME", filename, 1);
+
+ num = udev->partitions;
+ if (num > 0) {
+ info("removing all_partitions '%s[1-%i]'", filename, num);
+ if (num > 255) {
+ info("garbage from udev database, skip all_partitions removal");
+ return -1;
+ }
+ for (i = 1; i <= num; i++) {
+ snprintf(partitionname, sizeof(partitionname), "%s%d", filename, i);
+ partitionname[sizeof(partitionname)-1] = '\0';
+ unlink_secure(partitionname);