X-Git-Url: https://git.draconx.ca/gitweb/rarpd-dx.git/blobdiff_plain/7848d2e1002e486171bd4e6a1b8d84d64f389af4..e47d657a9839025639a93fbf4b3d57f24508f284:/src/rarpd.c diff --git a/src/rarpd.c b/src/rarpd.c index 76b92e5..b7aa2e1 100644 --- a/src/rarpd.c +++ b/src/rarpd.c @@ -48,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 { @@ -80,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 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 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) @@ -588,8 +597,11 @@ int main(int argc, char **argv) int psize; int opt; + 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; @@ -621,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]; }