#include "udev.h"
#include "udev_version.h"
+#include "namedev.h"
static char *get_action(void)
return retval;
}
-static int remove_node(char *name)
+/*
+ * We also want to clean up any symlinks that were created in create_node()
+ */
+static int delete_node(char *name)
{
- return 0;
+ char filename[255];
+
+ strncpy(filename, UDEV_ROOT, sizeof(filename));
+ strncat(filename, name, sizeof(filename));
+
+ dbg("unlinking %s", filename);
+ return unlink(filename);
}
-static int do_it(char *action, char *name, char type, int major, int minor, int mode)
+static int add_device(char *device, char type)
{
- if (strcmp(action, "add") == 0)
- return create_node(name, type, major, minor, mode);
+ char *name;
+ int major;
+ int minor;
+ int mode;
+ int retval = -EINVAL;
- if (strcmp(action, "remove") == 0)
- return remove_node(name);
+ retval = get_major_minor(device, &major, &minor);
+ if (retval) {
+ dbg ("get_major_minor failed");
+ goto exit;
+ }
- dbg("Unknown action: %s", action);
- return -EINVAL;
+ name = get_name(device, major, minor);
+ if (name == NULL) {
+ dbg ("get_name failed");
+ retval = -ENODEV;
+ goto exit;
+ }
+
+ mode = get_mode(name, device, major, minor);
+ if (mode < 0) {
+ dbg ("get_mode failed");
+ retval = -EINVAL;
+ goto exit;
+ }
+
+ return create_node(name, type, major, minor, mode);
+
+exit:
+ return retval;
+}
+
+static int remove_device(char *device)
+{
+ 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[])
char *subsystem;
char *action;
char *device;
- char *name;
char type;
- int major;
- int minor;
- int mode;
int retval = -EINVAL;
if (argc != 2) {
goto exit;
}
+ namedev_init();
+
+ /* sleep for a second or two to give the kernel a chance to
+ * create the dev file
+ */
+ sleep(2);
+
/* for now, the block layer is the only place where block devices are */
subsystem = argv[1];
if (strcmp(subsystem, "block") == 0)
}
dbg("looking at %s", device);
- retval = get_major_minor(device, &major, &minor);
- if (retval) {
- dbg ("get_major_minor failed");
- goto exit;
- }
-
- name = get_name(device, major, minor);
- if (name == NULL) {
- dbg ("get_name failed");
- retval = -ENODEV;
- goto exit;
- }
+ if (strcmp(action, "add") == 0)
+ return add_device(device, type);
- mode = get_mode(name, device, major, minor);
- if (mode < 0) {
- dbg ("get_mode failed");
- retval = -EINVAL;
- goto exit;
- }
+ if (strcmp(action, "remove") == 0)
+ return remove_device(device);
- retval = do_it(action, name, type, major, minor, mode);
- if (retval) {
- dbg ("do_it failed");
- goto exit;
- }
+ dbg("Unknown action: %s", action);
+ return -EINVAL;
retval = 0;
exit: