From 8b16416dce3d5feab0827668e1184301a19074a8 Mon Sep 17 00:00:00 2001 From: "greg@kroah.com" Date: Thu, 10 Apr 2003 11:16:34 -0700 Subject: [PATCH] [PATCH] remove now works! --- test | 5 +++-- udev.c | 37 ++++++++++++++++++++++++++++++++----- 2 files changed, 35 insertions(+), 7 deletions(-) diff --git a/test b/test index 9cab4a6db..730f0a446 100644 --- a/test +++ b/test @@ -1,5 +1,6 @@ #!/bin/sh -export ACTION=add -export DEVPATH=/devices/pci0/00:09.0/usb1/1-1/1-1.2/ttyUSB7 +#export ACTION=add +export ACTION=remove +export DEVPATH=/devices/pci0/00:09.0/usb1/1-1/1-1.1/ttyUSB7 ./udev tty diff --git a/udev.c b/udev.c index 4bb41a869..5aa9b43d4 100644 --- a/udev.c +++ b/udev.c @@ -183,7 +183,21 @@ static int create_node(char *name, char type, int major, int minor, int mode) return retval; } -static int add_node(char *device, char type) +/* + * We also want to clean up any symlinks that were created in create_node() + */ +static int delete_node(char *name) +{ + char filename[255]; + + strncpy(filename, UDEV_ROOT, sizeof(filename)); + strncat(filename, name, sizeof(filename)); + + dbg("unlinking %s", filename); + return unlink(filename); +} + +static int add_device(char *device, char type) { char *name; int major; @@ -217,9 +231,22 @@ exit: return retval; } -static int remove_node(char *device) +static int remove_device(char *device) { - return 0; + char *name; + int retval = 0; + + name = get_name(device, 0, 0); + if (name == NULL) { + dbg ("get_name failed"); + retval = -ENODEV; + goto exit; + } + + return delete_node(name); + +exit: + return retval; } int main(int argc, char *argv[]) @@ -256,10 +283,10 @@ int main(int argc, char *argv[]) dbg("looking at %s", device); if (strcmp(action, "add") == 0) - return add_node(device, type); + return add_device(device, type); if (strcmp(action, "remove") == 0) - return remove_node(device); + return remove_device(device); dbg("Unknown action: %s", action); return -EINVAL; -- 2.30.2