chiark / gitweb /
udevd: use getopt_long()
authorKay Sievers <kay.sievers@suse.de>
Fri, 8 Sep 2006 09:27:03 +0000 (11:27 +0200)
committerKay Sievers <kay.sievers@suse.de>
Fri, 8 Sep 2006 09:27:03 +0000 (11:27 +0200)
udevd.8
udevd.c
udevd.xml

diff --git a/udevd.8 b/udevd.8
index a57ff7aab00cba25f0b060b9fcb4bb04637bcbda..bb6d27fb41ebb88a3f96f3e5b3e077e1fe0d6f69 100644 (file)
--- a/udevd.8
+++ b/udevd.8
@@ -14,7 +14,7 @@
 udevd \- event managing daemon
 .SH "SYNOPSIS"
 .HP 6
-\fBudevd\fR [\fB\-\-daemon\fR]
+\fBudevd\fR [\fB\-\-daemon\fR] [\fB\-\-help\fR]
 .HP 20
 \fBudevcontrol \fR\fB\fIcommand\fR\fR
 .SH "DESCRIPTION"
@@ -25,6 +25,9 @@ udevd listens to kernel uevents and passes the incoming events to udev. It ensur
 \fB\-\-daemon\fR
 Detach and run in the background.
 .TP 3n
+\fB\-\-help\fR
+Print usage.
+.TP 3n
 \fBlog_priority=\fR\fB\fIvalue\fR\fR
 udevcontrol can dynamically set the log level of udevd. Valid values are the numerical syslog priorities or their textual representations:
 \fBerr\fR,
diff --git a/udevd.c b/udevd.c
index a21d2ab77d6cfe050bad776f66ca96be9948d80b..df6e2228106173db10212ee025cb1184bb633f6b 100644 (file)
--- a/udevd.c
+++ b/udevd.c
@@ -29,6 +29,7 @@
 #include <fcntl.h>
 #include <syslog.h>
 #include <time.h>
+#include <getopt.h>
 #include <sys/select.h>
 #include <sys/wait.h>
 #include <sys/types.h>
@@ -76,6 +77,7 @@ void log_message(int priority, const char *format, ...)
        vsyslog(priority, format, args);
        va_end(args);
 }
+
 #endif
 
 static void asmlinkage udev_event_sig_handler(int signum)
@@ -916,7 +918,12 @@ int main(int argc, char *argv[], char *envp[])
        fd_set readfds;
        const char *value;
        int daemonize = 0;
-       int i;
+       int option;
+       static const struct option options[] = {
+               { "daemon", 0, NULL, 'd' },
+               { "help", 0, NULL, 'h' },
+               {}
+       };
        int rc = 1;
        int maxfd;
 
@@ -926,16 +933,20 @@ int main(int argc, char *argv[], char *envp[])
        dbg("version %s", UDEV_VERSION);
 
        /* parse commandline options */
-       for (i = 1 ; i < argc; i++) {
-               char *arg = argv[i];
-               if (strcmp(arg, "--daemon") == 0 || strcmp(arg, "-d") == 0)
+       while (1) {
+               option = getopt_long(argc, argv, "dtvh", options, NULL);
+               if (option == -1)
+                       break;
+
+               switch (option) {
+               case 'd':
                        daemonize = 1;
-               else if (strcmp(arg, "--help") == 0 || strcmp(arg, "-h") == 0) {
+                       break;
+               case 'h':
                        printf("Usage: udevd [--help] [--daemon]\n");
                        goto exit;
-               } else {
-                       fprintf(stderr, "unrecognized option '%s'\n", arg);
-                       err("unrecognized option '%s'\n", arg);
+               default:
+                       goto exit;
                }
        }
 
index 7feede27771311ba6f67255aa90073f7ff2a2bb7..f0682ed00c3b8600d84b3936adc3c5864414bdae 100644 (file)
--- a/udevd.xml
+++ b/udevd.xml
@@ -26,6 +26,7 @@
         <cmdsynopsis>
           <command>udevd</command>
           <arg><option>--daemon</option></arg>
+          <arg><option>--help</option></arg>
         </cmdsynopsis>
         <cmdsynopsis>
           <command>udevcontrol <replaceable>command</replaceable></command>
               <para>Detach and run in the background.</para>
             </listitem>
           </varlistentry>
+          <varlistentry>
+            <term><option>--help</option></term>
+            <listitem>
+              <para>Print usage.</para>
+            </listitem>
+          </varlistentry>
           <varlistentry>
             <term><option>log_priority=<replaceable>value</replaceable></option></term>
             <listitem>