diff --git a/abuild-tar.c b/abuild-tar.c index 44ebf17..d404bbd 100644 --- a/abuild-tar.c +++ b/abuild-tar.c @@ -104,9 +104,9 @@ static void tarhdr_checksum(struct tar_header *hdr) put_octal(hdr->chksum, sizeof(hdr->chksum)-1, chksum); } -static int usage(void) +static int usage(FILE *out) { - fprintf(stderr, + fprintf(out, "abuild-tar " VERSION "\n" "\n" "usage: abuild-tar [--hash[=]] [--cut]\n" @@ -367,9 +367,10 @@ err: int main(int argc, char **argv) { - static int cut = 0; + static int cut = 0, help = 0; static const struct option options[] = { { "hash", optional_argument }, + { "help", no_argument, &help, 1 }, { "cut", no_argument, &cut, 1 }, { NULL } }; @@ -388,15 +389,18 @@ int main(int argc, char **argv) digest = optarg ? optarg : "sha1"; } + if (help) + return usage(stdout) && 0; + if (digest == NULL && cut == 0) - return usage(); + return usage(stderr); if (isatty(STDIN_FILENO)) - return usage(); + return usage(stderr); if (digest != NULL) { md = EVP_get_digestbyname(digest); if (md == NULL) - return usage(); + return usage(stderr); } return do_it(md, cut); diff --git a/tests/abuild_tar_test b/tests/abuild_tar_test new file mode 100755 index 0000000..5ca89e6 --- /dev/null +++ b/tests/abuild_tar_test @@ -0,0 +1,20 @@ +#!/usr/bin/env atf-sh + +. $(atf_get_srcdir)/test_env.sh +init_tests \ + abuild_tar_help \ + abuild_tar_invalid_opt + +DATADIR=$(atf_get_srcdir)/testdata + +abuild_tar_help_body() { + atf_check -s exit:0 \ + -o match:"usage:" \ + abuild-tar --help +} + +abuild_tar_invalid_opt_body() { + atf_check -s not-exit:0 \ + -e match:"usage:" \ + abuild-tar --invalid +}