Add usage and avoid execution when there is no argument
authorSofian Brabez <sbz@FreeBSD.org>
Thu, 16 Apr 2020 01:42:12 +0000 (03:42 +0200)
committerSofian Brabez <sbz@FreeBSD.org>
Fri, 17 Apr 2020 00:33:53 +0000 (02:33 +0200)
elfdbg.1
elfdbg.c

index 6ad6bd26ad964bcebded648624b067e21e9ac14c..ab99e1f1985ba49f7b1fe7ac4ed04ad6e68c6c1f 100644 (file)
--- a/elfdbg.1
+++ b/elfdbg.1
@@ -30,7 +30,7 @@
 .Nd analyze if binary is compiled with debug sections
 .Sh SYNOPSIS
 .Nm
-.Op Ar file
+.Ar file
 .Sh DESCRIPTION
 The
 .Nm
index a3676fad63af9f7921ed7581aecc3674b0f249d7..4c219773e6ccefded5caa7323163e26ff25d5fc5 100644 (file)
--- a/elfdbg.c
+++ b/elfdbg.c
@@ -33,6 +33,8 @@
 #include <sysexits.h>
 #include <unistd.h>
 
+extern char *__progname;
+
 static int
 elf_debug_sections(Elf *e)
 {
@@ -59,23 +61,35 @@ elf_debug_sections(Elf *e)
        return (has_debug > 0);
 }
 
+static void
+usage(void) {
+       fprintf(stderr, "Usage: %s file\n", __progname);
+       exit(EX_USAGE);
+}
+
 int
 main(int argc, char *argv[])
 {
+       const char *filename;
        int fd, rc;
        Elf *e;
        int has_debug;
 
+       if (argc == 1)
+               usage();
+
+       filename = argv[1];
+
        if (elf_version(EV_CURRENT) == EV_NONE)
                errx(EX_SOFTWARE, "ELF library initialization failed : %s ",
                    elf_errmsg(-1));
 
-       if ((fd = open(argv[1], O_RDONLY, 0)) < 0)
-               err(EX_NOINPUT, "open %s failed ", argv[1]);
+       if ((fd = open(filename, O_RDONLY, 0)) < 0)
+               err(EX_NOINPUT, "open %s failed ", filename);
        if ((e = elf_begin(fd, ELF_C_READ, NULL)) == NULL)
                errx(EX_SOFTWARE, "elf_begin() failed : %s", elf_errmsg(-1));
        if (elf_kind(e) != ELF_K_ELF)
-               errx(EX_DATAERR, "%s is not an ELF object", argv[1]);
+               errx(EX_DATAERR, "%s is not an ELF object", filename);
 
        has_debug = elf_debug_sections(e);
        printf(has_debug ? "HAS DEBUG\n" : "NO DEBUG\n");