From: Kay Sievers Date: Mon, 9 Jul 2007 01:59:08 +0000 (+0200) Subject: udevtrigger: allow to specify action string X-Git-Tag: 174~1892 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=285e2a24f67b1c09d7b4c54587802fc0a9d623eb udevtrigger: allow to specify action string --- diff --git a/udevtest.c b/udevtest.c index 418d43de1..7b3ea6311 100644 --- a/udevtest.c +++ b/udevtest.c @@ -90,9 +90,9 @@ out: int main(int argc, char *argv[], char *envp[]) { int force = 0; - char *action = "add"; - char *subsystem = NULL; - char *devpath = NULL; + const char *action = "add"; + const char *subsystem = NULL; + const char *devpath = NULL; struct udevice *udev; struct sysfs_device *dev; struct udev_rules rules = {}; diff --git a/udevtrigger.8 b/udevtrigger.8 index 58a379495..5ef9e8f81 100644 --- a/udevtrigger.8 +++ b/udevtrigger.8 @@ -14,7 +14,7 @@ udevtrigger \- request kernel devices events for coldplug .SH "SYNOPSIS" .HP 12 -\fBudevtrigger\fR [\fB\-\-verbose\fR] [\fB\-\-dry\-run\fR] [\fB\-\-retry\-failed\fR] [\fB\-\-help\fR] [\fB\-\-subsystem\-match=\fR\fB\fIsubsystem\fR\fR] [\fB\-\-subsystem\-nomatch=\fR\fB\fIsubsystem\fR\fR] [\fB\-\-attr\-match=\fR\fB\fIattribute=value\fR\fR] [\fB\-\-attr\-nomatch=\fR\fB\fIattribute=value\fR\fR] +\fBudevtrigger\fR [\fB\-\-verbose\fR] [\fB\-\-dry\-run\fR] [\fB\-\-retry\-failed\fR] [\fB\-\-help\fR] [\fB\-\-action=\fR\fB\fIaction\fR\fR] [\fB\-\-subsystem\-match=\fR\fB\fIsubsystem\fR\fR] [\fB\-\-subsystem\-nomatch=\fR\fB\fIsubsystem\fR\fR] [\fB\-\-attr\-match=\fR\fB\fIattribute=value\fR\fR] [\fB\-\-attr\-nomatch=\fR\fB\fIattribute=value\fR\fR] .SH "DESCRIPTION" .PP Trigger kernel device uevents to replay missing events at system coldplug. @@ -35,6 +35,11 @@ Do not actually trigger the event. Trigger only the events which are failed during a previous run. .RE .PP +\fB\-\-action=\fR\fB\fIaction\fR\fR +.RS 4 +Type of event to be triggered. The default value is "add". +.RE +.PP \fB\-\-subsystem\-match=\fR\fB\fIsubsystem\fR\fR .RS 4 Trigger events for devices which belong to a matching subsystem. This option can be specified multiple times and supports shell style pattern matching. diff --git a/udevtrigger.c b/udevtrigger.c index 3b5be2006..4ef9612af 100644 --- a/udevtrigger.c +++ b/udevtrigger.c @@ -101,7 +101,7 @@ static int device_list_insert(const char *path) return 0; } -static void trigger_uevent(const char *devpath) +static void trigger_uevent(const char *devpath, const char *action) { char filename[PATH_SIZE]; int fd; @@ -122,13 +122,13 @@ static void trigger_uevent(const char *devpath) return; } - if (write(fd, "add", 3) < 0) - info("error on triggering %s: %s", filename, strerror(errno)); + if (write(fd, action, strlen(action)) < 0) + info("error writing '%s' to '%s': %s", action, filename, strerror(errno)); close(fd); } -static void exec_list(void) +static void exec_list(const char *action) { struct name_entry *loop_device; struct name_entry *tmp_device; @@ -137,14 +137,14 @@ static void exec_list(void) if (delay_device(loop_device->name)) continue; - trigger_uevent(loop_device->name); + trigger_uevent(loop_device->name, action); list_del(&loop_device->node); free(loop_device); } /* trigger remaining delayed devices */ list_for_each_entry_safe(loop_device, tmp_device, &device_list, node) { - trigger_uevent(loop_device->name); + trigger_uevent(loop_device->name, action); list_del(&loop_device->node); free(loop_device); } @@ -425,11 +425,13 @@ int main(int argc, char *argv[], char *envp[]) { int failed = 0; int option; + const char *action = "add"; static const struct option options[] = { { "verbose", 0, NULL, 'v' }, { "dry-run", 0, NULL, 'n' }, { "retry-failed", 0, NULL, 'F' }, { "help", 0, NULL, 'h' }, + { "action", 1, NULL, 'c' }, { "subsystem-match", 1, NULL, 's' }, { "subsystem-nomatch", 1, NULL, 'S' }, { "attr-match", 1, NULL, 'a' }, @@ -443,7 +445,7 @@ int main(int argc, char *argv[], char *envp[]) sysfs_init(); while (1) { - option = getopt_long(argc, argv, "vnFhs:S:a:A:", options, NULL); + option = getopt_long(argc, argv, "vnFhc:s:S:a:A:", options, NULL); if (option == -1) break; @@ -457,6 +459,9 @@ int main(int argc, char *argv[], char *envp[]) case 'F': failed = 1; break; + case 'c': + action = optarg; + break; case 's': name_list_add(&filter_subsystem_match_list, optarg, 0); break; @@ -511,7 +516,7 @@ int main(int argc, char *argv[], char *envp[]) scan_block(); } } - exec_list(); + exec_list(action); exit: name_list_cleanup(&filter_subsystem_match_list); diff --git a/udevtrigger.xml b/udevtrigger.xml index 60a7b1eaf..eb2b9851c 100644 --- a/udevtrigger.xml +++ b/udevtrigger.xml @@ -29,6 +29,7 @@ + @@ -60,6 +61,12 @@ Trigger only the events which are failed during a previous run. + + + + Type of event to be triggered. The default value is "add". + +