summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKay Sievers <kay.sievers@vrfy.org>2007-07-09 03:59:08 +0200
committerKay Sievers <kay.sievers@vrfy.org>2007-07-09 03:59:08 +0200
commit285e2a24f67b1c09d7b4c54587802fc0a9d623eb (patch)
treea7468587f7233ca5149b50033f0948e3cc13f810
parent2e08169ed4618718636e162bca5be147179da91c (diff)
udevtrigger: allow to specify action string
-rw-r--r--udevtest.c6
-rw-r--r--udevtrigger.87
-rw-r--r--udevtrigger.c21
-rw-r--r--udevtrigger.xml7
4 files changed, 29 insertions, 12 deletions
diff --git a/udevtest.c b/udevtest.c
index 418d43de14..7b3ea6311d 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 58a379495f..5ef9e8f812 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 3b5be2006e..4ef9612af0 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 60a7b1eaf7..eb2b9851cd 100644
--- a/udevtrigger.xml
+++ b/udevtrigger.xml
@@ -29,6 +29,7 @@
<arg><option>--dry-run</option></arg>
<arg><option>--retry-failed</option></arg>
<arg><option>--help</option></arg>
+ <arg><option>--action=<replaceable>action</replaceable></option></arg>
<arg><option>--subsystem-match=<replaceable>subsystem</replaceable></option></arg>
<arg><option>--subsystem-nomatch=<replaceable>subsystem</replaceable></option></arg>
<arg><option>--attr-match=<replaceable>attribute=value</replaceable></option></arg>
@@ -61,6 +62,12 @@
</listitem>
</varlistentry>
<varlistentry>
+ <term><option>--action=<replaceable>action</replaceable></option></term>
+ <listitem>
+ <para>Type of event to be triggered. The default value is "add".</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
<term><option>--subsystem-match=<replaceable>subsystem</replaceable></option></term>
<listitem>
<para>Trigger events for devices which belong to a matching subsystem. This option