diff --git a/mount/lomount.c b/mount/lomount.c index 6130be1dd..54b9f8e9a 100644 --- a/mount/lomount.c +++ b/mount/lomount.c @@ -884,8 +884,8 @@ find_unused_loop_device (void) { #include "strtosize.h" static void -usage(void) { - fprintf(stderr, _("\nUsage:\n" +usage(FILE *f) { + fprintf(f, _("\nUsage:\n" " %1$s loop_device give info\n" " %1$s -a | --all list all used\n" " %1$s -d | --detach [ ...] delete\n" @@ -895,7 +895,7 @@ usage(void) { " %1$s [ options ] {-f|--find|loopdev} setup\n"), progname); - fprintf(stderr, _("\nOptions:\n" + fprintf(f, _("\nOptions:\n" " -e | --encryption enable data encryption with specified \n" " -h | --help this help\n" " -o | --offset start at offset into file\n" @@ -904,7 +904,8 @@ usage(void) { " -r | --read-only setup read-only loop device\n" " --show print device name (with -f )\n" " -v | --verbose verbose mode\n\n")); - exit(1); + + exit(f == stderr ? EXIT_FAILURE : EXIT_SUCCESS); } int @@ -966,6 +967,9 @@ main(int argc, char **argv) { case 'f': find = 1; break; + case 'h': + usage(stdout); + break; case 'j': assoc = optarg; break; @@ -987,42 +991,42 @@ main(int argc, char **argv) { break; default: - usage(); + usage(stderr); } } if (argc == 1) { - usage(); + usage(stderr); } else if (delete) { if (argc < optind+1 || encryption || offset || sizelimit || capacity || find || all || showdev || assoc || ro) - usage(); + usage(stderr); } else if (find) { if (capacity || all || assoc || argc < optind || argc > optind+1) - usage(); + usage(stderr); } else if (all) { if (argc > 2) - usage(); + usage(stderr); } else if (assoc) { if (capacity || encryption || showdev || passfd || ro) - usage(); + usage(stderr); } else if (capacity) { if (argc != optind + 1 || encryption || offset || sizelimit || showdev || ro) - usage(); + usage(stderr); } else { if (argc < optind+1 || argc > optind+2) - usage(); + usage(stderr); } if (offset && strtosize(offset, &off)) { error(_("%s: invalid offset '%s' specified"), progname, offset); - usage(); + usage(stderr); } if (sizelimit && strtosize(sizelimit, &slimit)) { error(_("%s: invalid sizelimit '%s' specified"), progname, sizelimit); - usage(); + usage(stderr); } if (all) @@ -1057,7 +1061,7 @@ main(int argc, char **argv) { res = show_loop(device); else { if (passfd && sscanf(passfd, "%d", &pfd) != 1) - usage(); + usage(stderr); do { res = set_loop(device, file, off, slimit, encryption, pfd, &ro); if (res == 2 && find) {