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];
}