]> git.draconx.ca Git - rarpd-dx.git/blobdiff - src/rarpd.c
Adjust usage message and add explicit help option.
[rarpd-dx.git] / src / rarpd.c
index 2943942b7fa69cc32525ff7ba0e44bcb70786f39..b7aa2e1007e5236318cbd10fb69b753fc7bbc838 100644 (file)
@@ -32,7 +32,9 @@
 #include <sys/ioctl.h>
 #include <sys/socket.h>
 
-#include "iputils_common.h"
+#if HAVE_ERROR_H
+#include <error.h>
+#endif
 
 int do_reload = 1;
 
@@ -46,8 +48,9 @@ int listen_arp;
 char *ifname;
 char *tftp_dir = "/etc/tftpboot";
 
+static const char *progname = "rarpd";
+
 extern int ether_ntohost(char *name, unsigned char *ea);
-void usage(void) __attribute__((noreturn));
 
 struct iflink
 {
@@ -78,22 +81,30 @@ struct rarp_map
        uint32_t                ipaddr;
 } *rarp_db;
 
-void usage(void)
+static void print_usage(FILE *f)
 {
-       fprintf(stderr,
-               "\nUsage:\n"
-               "  rarpd [options] [interface]\n"
-               "\nOptions:\n"
-               "  -A        listen also arp messages\n"
-               "  -a        listen on all the interfaces\n"
-               "  -b <dir>  tftpd boot directory\n"
-               "  -d        debug mode\n"
-               "  -e        /etc/ethers markup alone is fine\n"
-               "  -v        verbose mode\n"
-               "  -V        print version and exit\n"
-               "\nFor more details see rarpd(8).\n"
-       );
-       exit(1);
+       fprintf(f, "Usage: %s [options] [interface]\n", progname);
+       if (f != stdout)
+               fprintf(f, "Try %s -H for more information.\n", progname);
+}
+
+static void print_help(void)
+{
+       print_usage(stdout);
+       putchar('\n');
+
+       puts("Options:");
+       puts("  -A        listen also arp messages");
+       puts("  -a        listen on all the interfaces");
+       puts("  -b <dir>  tftpd boot directory");
+       puts("  -d        debug mode");
+       puts("  -e        /etc/ethers markup alone is fine");
+       puts("  -v        verbose mode");
+       puts("  -V        print version and then exit");
+       puts("  -H        print this message and then exit");
+       putchar('\n');
+
+       puts("For more information, see the rarpd(8) man page.");
 }
 
 static void print_version(void)
@@ -586,9 +597,11 @@ int main(int argc, char **argv)
        int psize;
        int opt;
 
-       atexit(close_stdout);
+       if (argc > 0)
+               progname = argv[0];
+
        opterr = 0;
-       while ((opt = getopt(argc, argv, "aAb:dvoeV")) != EOF) {
+       while ((opt = getopt(argc, argv, "aAb:dvoeVH")) != EOF) {
                switch (opt) {
                case 'a':
                        ++all_ifaces;
@@ -620,13 +633,19 @@ int main(int argc, char **argv)
                case 'V':
                        print_version();
                        return 0;
+               case 'H':
+                       print_help();
+                       return 0;
                default:
-                       usage();
+                       print_usage(stderr);
+                       return EXIT_FAILURE;
                }
        }
        if (argc > optind) {
-               if (argc > optind+1)
-                       usage();
+               if (argc > optind+1) {
+                       print_usage(stderr);
+                       return EXIT_FAILURE;
+               }
                ifname = argv[optind];
        }