diff options
author | kay.sievers@vrfy.org <kay.sievers@vrfy.org> | 2004-10-06 23:20:39 -0700 |
---|---|---|
committer | Greg KH <gregkh@suse.de> | 2005-04-26 21:37:03 -0700 |
commit | f608f8ac16889ce0e7e800c7f11dacc558d097c1 (patch) | |
tree | 62bd906f51ed64867e2ae890ad23279a792e4269 /udevstart.c | |
parent | 71144b744acb191d357dbfeb85a256389d4fac3b (diff) |
[PATCH] fix problems using scsi_id with udevstart
when udevstart was running we didn't set the environment and the
subsystem argument for the callouts the dev.d/ scripts.
Here is a fix, that sets that with every udevstart iteration, corrects
argv[0] to be the basename() only not the whole path and adds a test
for invoking callouts without arguments.
Diffstat (limited to 'udevstart.c')
-rw-r--r-- | udevstart.c | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/udevstart.c b/udevstart.c index ba63745620..cabafb0abc 100644 --- a/udevstart.c +++ b/udevstart.c @@ -86,6 +86,21 @@ static char *first_list[] = { NULL, }; +static void add_device(char *path, char *subsys, int fake) +{ + char *argv[3]; + + /* fake argument vector and environment for callouts and dev.d/ */ + argv[0] = "udev"; + argv[1] = subsys; + argv[2] = NULL; + + main_argv = argv; + setenv("DEVPATH", path, 1); + setenv("ACTION", "add", 1); + udev_add_device(path, subsys, fake); +} + static void exec_list(struct list_head *device_list) { struct device *loop_device; @@ -96,7 +111,7 @@ static void exec_list(struct list_head *device_list) list_for_each_entry_safe(loop_device, tmp_device, device_list, list) { for (i=0; first_list[i] != NULL; i++) { if (strncmp(loop_device->path, first_list[i], strlen(first_list[i])) == 0) { - udev_add_device(loop_device->path, loop_device->subsys, NOFAKE); + add_device(loop_device->path, loop_device->subsys, NOFAKE); list_del(&loop_device->list); free(loop_device); break; @@ -116,14 +131,14 @@ static void exec_list(struct list_head *device_list) if (found) continue; - udev_add_device(loop_device->path, loop_device->subsys, NOFAKE); + add_device(loop_device->path, loop_device->subsys, NOFAKE); list_del(&loop_device->list); free(loop_device); } /* handle the rest of the devices left over, if any */ list_for_each_entry_safe(loop_device, tmp_device, device_list, list) { - udev_add_device(loop_device->path, loop_device->subsys, NOFAKE); + add_device(loop_device->path, loop_device->subsys, NOFAKE); list_del(&loop_device->list); free(loop_device); } |