diff --git a/Documentation/boilerplate.c b/Documentation/boilerplate.c index b70955d54..d0c163d8c 100644 --- a/Documentation/boilerplate.c +++ b/Documentation/boilerplate.c @@ -34,8 +34,9 @@ * Other usage() constants that are not demonstrated below: * USAGE_FUNCTIONS USAGE_COMMANDS USAGE_COLUMNS */ -static void __attribute__((__noreturn__)) usage(FILE *out) +static void __attribute__((__noreturn__)) usage(void) { + FILE *out = stdout; fputs(USAGE_HEADER, out); fprintf(out, _(" %s [options] file...\n"), program_invocation_short_name); @@ -58,7 +59,7 @@ static void __attribute__((__noreturn__)) usage(FILE *out) fputs(USAGE_HELP, out); fputs(USAGE_VERSION, out); fprintf(out, USAGE_MAN_TAIL("fixme-command-name(1)")); - exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS); + exit(EXIT_SUCCESS); } int main(int argc, char **argv) @@ -101,7 +102,7 @@ int main(int argc, char **argv) printf(UTIL_LINUX_VERSION); return EXIT_SUCCESS; case 'h': - usage(stdout); + usage(); default: errtryhelp(EXIT_FAILURE); } diff --git a/Makefile.am b/Makefile.am index 28a9d04e8..325d1f4fa 100644 --- a/Makefile.am +++ b/Makefile.am @@ -183,11 +183,15 @@ checkdecl: checkcompletion: @ $(top_srcdir)/tools/checkcompletion.sh $(top_srcdir) +checkusage: + @ $(top_srcdir)/tools/checkusage.sh \ + $(bin_PROGRAMS) $(sbin_PROGRAMS) \ + $(usrbin_exec_PROGRAMS) $(usrsbin_exec_PROGRAMS) + DISTCHECK_CONFIGURE_FLAGS = \ --disable-use-tty-group \ --disable-silent-rules \ --enable-all-programs \ - --disable-makeinstall-chown \ --enable-static-programs \ --enable-gtk-doc \ --with-python \ diff --git a/disk-utils/addpart.c b/disk-utils/addpart.c index f99e9bc9c..07f4ca9a1 100644 --- a/disk-utils/addpart.c +++ b/disk-utils/addpart.c @@ -8,8 +8,9 @@ #include "partx.h" #include "strutils.h" -static void __attribute__ ((__noreturn__)) usage(FILE * out) +static void __attribute__((__noreturn__)) usage(void) { + FILE *out = stdout; fputs(USAGE_HEADER, out); fprintf(out, _(" %s \n"), program_invocation_short_name); @@ -21,7 +22,7 @@ static void __attribute__ ((__noreturn__)) usage(FILE * out) fputs(USAGE_HELP, out); fputs(USAGE_VERSION, out); fprintf(out, USAGE_MAN_TAIL("addpart(8)")); - exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS); + exit(EXIT_SUCCESS); } int main(int argc, char **argv) @@ -44,13 +45,15 @@ int main(int argc, char **argv) printf(UTIL_LINUX_VERSION); return EXIT_SUCCESS; case 'h': - usage(stdout); + usage(); default: errtryhelp(EXIT_FAILURE); } - if (argc != 5) - usage(stderr); + if (argc != 5) { + warnx(_("not enough arguments")); + errtryhelp(EXIT_FAILURE); + } if ((fd = open(argv[1], O_RDONLY)) < 0) err(EXIT_FAILURE, _("cannot open %s"), argv[1]); diff --git a/disk-utils/blockdev.c b/disk-utils/blockdev.c index 2f6681ce2..4760e021b 100644 --- a/disk-utils/blockdev.c +++ b/disk-utils/blockdev.c @@ -178,9 +178,11 @@ static const struct bdc bdcms[] = } }; -static void __attribute__ ((__noreturn__)) usage(FILE * out) +static void __attribute__((__noreturn__)) usage(void) { + FILE * out = stdout; size_t i; + fprintf(out, _("\nUsage:\n" " %1$s -V\n" " %1$s --report [devices]\n" @@ -197,8 +199,9 @@ static void __attribute__ ((__noreturn__)) usage(FILE * out) fprintf(out, " %-25s %s\n", bdcms[i].name, _(bdcms[i].help)); } - fputc('\n', out); - exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS); + + fprintf(out, USAGE_MAN_TAIL("blockdev(1)")); + exit(EXIT_SUCCESS); } static int find_cmd(char *s) @@ -225,8 +228,10 @@ int main(int argc, char **argv) textdomain(PACKAGE); atexit(close_stdout); - if (argc < 2) - usage(stderr); + if (argc < 2) { + warnx(_("not enough arguments")); + errtryhelp(EXIT_FAILURE); + } /* -V not together with commands */ if (!strcmp(argv[1], "-V") || !strcmp(argv[1], "--version")) { @@ -234,7 +239,7 @@ int main(int argc, char **argv) return EXIT_SUCCESS; } if (!strcmp(argv[1], "-h") || !strcmp(argv[1], "--help")) - usage(stdout); + usage(); /* --report not together with other commands */ if (!strcmp(argv[1], "--report")) { @@ -267,8 +272,10 @@ int main(int argc, char **argv) break; } - if (d >= argc) - usage(stderr); + if (d >= argc) { + warnx(_("no device specified")); + errtryhelp(EXIT_FAILURE); + } for (k = d; k < argc; k++) { fd = open(argv[k], O_RDONLY, 0); @@ -315,7 +322,7 @@ static void do_commands(int fd, char **argv, int d) j = find_cmd(argv[i]); if (j == -1) { warnx(_("Unknown command: %s"), argv[i]); - usage(stderr); + errtryhelp(EXIT_FAILURE); } switch (bdcms[j].argtype) { @@ -332,7 +339,7 @@ static void do_commands(int fd, char **argv, int d) if (i == d - 1) { warnx(_("%s requires an argument"), bdcms[j].name); - usage(stderr); + errtryhelp(EXIT_FAILURE); } iarg = atoi(argv[++i]); } else diff --git a/disk-utils/cfdisk.c b/disk-utils/cfdisk.c index efff1b825..e17bc9167 100644 --- a/disk-utils/cfdisk.c +++ b/disk-utils/cfdisk.c @@ -2542,8 +2542,9 @@ static int ui_run(struct cfdisk *cf) return 0; } -static void __attribute__ ((__noreturn__)) usage(FILE *out) +static void __attribute__((__noreturn__)) usage(void) { + FILE *out = stdout; fputs(USAGE_HEADER, out); fprintf(out, _(" %1$s [options] \n"), program_invocation_short_name); @@ -2562,7 +2563,7 @@ static void __attribute__ ((__noreturn__)) usage(FILE *out) fputs(USAGE_VERSION, out); fprintf(out, USAGE_MAN_TAIL("cfdisk(8)")); - exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS); + exit(EXIT_SUCCESS); } int main(int argc, char *argv[]) @@ -2588,7 +2589,7 @@ int main(int argc, char *argv[]) while((c = getopt_long(argc, argv, "L::hVz", longopts, NULL)) != -1) { switch(c) { case 'h': - usage(stdout); + usage(); break; case 'L': colormode = UL_COLORMODE_AUTO; diff --git a/disk-utils/delpart.c b/disk-utils/delpart.c index 1f82b58e9..7f347c886 100644 --- a/disk-utils/delpart.c +++ b/disk-utils/delpart.c @@ -8,8 +8,9 @@ #include "partx.h" #include "strutils.h" -static void __attribute__ ((__noreturn__)) usage(FILE * out) +static void __attribute__((__noreturn__)) usage(void) { + FILE *out = stdout; fputs(USAGE_HEADER, out); fprintf(out, _(" %s \n"), program_invocation_short_name); @@ -21,7 +22,7 @@ static void __attribute__ ((__noreturn__)) usage(FILE * out) fputs(USAGE_HELP, out); fputs(USAGE_VERSION, out); fprintf(out, USAGE_MAN_TAIL("delpart(8)")); - exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS); + exit(EXIT_SUCCESS); } int main(int argc, char **argv) @@ -44,13 +45,15 @@ int main(int argc, char **argv) printf(UTIL_LINUX_VERSION); return EXIT_SUCCESS; case 'h': - usage(stdout); + usage(); default: errtryhelp(EXIT_FAILURE); } - if (argc != 3) - usage(stderr); + if (argc != 3) { + warnx(_("not enough arguments")); + errtryhelp(EXIT_FAILURE); + } if ((fd = open(argv[1], O_RDONLY)) < 0) diff --git a/disk-utils/fdformat.c b/disk-utils/fdformat.c index 60d61dcf8..4b5ed5690 100644 --- a/disk-utils/fdformat.c +++ b/disk-utils/fdformat.c @@ -138,8 +138,9 @@ static void verify_disk(int ctrl, unsigned int track_from, unsigned int track_to printf(_("done\n")); } -static void __attribute__ ((__noreturn__)) usage(FILE * out) +static void __attribute__((__noreturn__)) usage(void) { + FILE *out = stdout; fputs(USAGE_HEADER, out); fprintf(out, _(" %s [options] \n"), program_invocation_short_name); @@ -159,7 +160,7 @@ static void __attribute__ ((__noreturn__)) usage(FILE * out) fputs(USAGE_VERSION, out); fprintf(out, USAGE_MAN_TAIL("fdformat(8)")); - exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS); + exit(EXIT_SUCCESS); } int main(int argc, char **argv) @@ -207,7 +208,7 @@ int main(int argc, char **argv) printf(UTIL_LINUX_VERSION); exit(EXIT_SUCCESS); case 'h': - usage(stdout); + usage(); default: errtryhelp(EXIT_FAILURE); } @@ -215,8 +216,10 @@ int main(int argc, char **argv) argc -= optind; argv += optind; - if (argc < 1) - usage(stderr); + if (argc < 1) { + warnx(_("no device specified")); + errtryhelp(EXIT_FAILURE); + } if (stat(argv[0], &st) < 0) err(EXIT_FAILURE, _("stat of %s failed"), argv[0]); if (!S_ISBLK(st.st_mode)) diff --git a/disk-utils/fdisk.c b/disk-utils/fdisk.c index 832ae4959..afd968076 100644 --- a/disk-utils/fdisk.c +++ b/disk-utils/fdisk.c @@ -749,8 +749,10 @@ void follow_wipe_mode(struct fdisk_context *cxt) fdisk_get_collision(cxt)); } -static void __attribute__ ((__noreturn__)) usage(FILE *out) +static void __attribute__((__noreturn__)) usage(void) { + FILE *out = stdout; + fputs(USAGE_HEADER, out); fprintf(out, @@ -789,7 +791,7 @@ static void __attribute__ ((__noreturn__)) usage(FILE *out) list_available_columns(out); fprintf(out, USAGE_MAN_TAIL("fdisk(8)")); - exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS); + exit(EXIT_SUCCESS); } @@ -852,7 +854,7 @@ int main(int argc, char **argv) size_t sz = strtou32_or_err(optarg, _("invalid sector size argument")); if (sz != 512 && sz != 1024 && sz != 2048 && sz != 4096) - usage(stderr); + errx(EXIT_FAILURE, _("invalid sector size argument")); fdisk_save_user_sector_size(cxt, sz, sz); break; } @@ -879,10 +881,8 @@ int main(int argc, char **argv) fdisk_dos_enable_compatible(lb, TRUE); else if (strcmp(p, "nondos") == 0) fdisk_dos_enable_compatible(lb, FALSE); - else { - warnx(_("unknown compatibility mode '%s'"), p); - usage(stderr); - } + else + errx(EXIT_FAILURE, _("unknown compatibility mode '%s'"), p); } /* use default if no optarg specified */ break; @@ -929,7 +929,7 @@ int main(int argc, char **argv) if (optarg && *optarg == '=') optarg++; if (fdisk_set_unit(cxt, optarg) != 0) - usage(stderr); + errx(EXIT_FAILURE, _("unsupported unit")); break; case 'V': /* preferred for util-linux */ case 'v': /* for backward compatibility only */ @@ -946,7 +946,7 @@ int main(int argc, char **argv) errx(EXIT_FAILURE, _("unsupported wipe mode")); break; case 'h': - usage(stdout); + usage(); case OPT_BYTES: fdisk_set_size_unit(cxt, FDISK_SIZEUNIT_BYTES); break; @@ -985,9 +985,10 @@ int main(int argc, char **argv) case ACT_SHOWSIZE: /* deprecated */ - if (argc - optind <= 0) - usage(stderr); - + if (argc - optind <= 0) { + warnx(_("bad usage")); + errtryhelp(EXIT_FAILURE); + } for (i = optind; i < argc; i++) { uintmax_t blks = get_dev_blocks(argv[i]); @@ -999,8 +1000,10 @@ int main(int argc, char **argv) break; case ACT_FDISK: - if (argc-optind != 1) - usage(stderr); + if (argc-optind != 1) { + warnx(_("bad usage")); + errtryhelp(EXIT_FAILURE); + } /* Here starts interactive mode, use fdisk_{warn,info,..} functions */ color_scheme_enable("welcome", UL_COLOR_GREEN); diff --git a/disk-utils/fsck.cramfs.c b/disk-utils/fsck.cramfs.c index 1dba95eb5..ff056c869 100644 --- a/disk-utils/fsck.cramfs.c +++ b/disk-utils/fsck.cramfs.c @@ -102,11 +102,9 @@ static char *outbuffer; static size_t blksize = 0; - -/* Input status of 0 to print help and exit without an error. */ -static void __attribute__((__noreturn__)) usage(int status) +static void __attribute__((__noreturn__)) usage(void) { - FILE *out = status ? stderr : stdout; + FILE *out = stdout; fputs(USAGE_HEADER, out); fprintf(out, @@ -126,7 +124,7 @@ static void __attribute__((__noreturn__)) usage(int status) fputs(USAGE_VERSION, out); fputs(USAGE_SEPARATOR, out); - exit(status); + exit(FSCK_EX_OK); } static int get_superblock_endianness(uint32_t magic) @@ -669,7 +667,7 @@ int main(int argc, char **argv) case 'y': break; case 'h': - usage(FSCK_EX_OK); + usage(); break; case 'V': printf(UTIL_LINUX_VERSION); @@ -689,8 +687,10 @@ int main(int argc, char **argv) errtryhelp(FSCK_EX_USAGE); } - if ((argc - optind) != 1) - usage(FSCK_EX_USAGE); + if ((argc - optind) != 1){ + warnx(_("bad usage")); + errtryhelp(FSCK_EX_USAGE); + } filename = argv[optind]; test_super(&start, &length); diff --git a/disk-utils/fsck.minix.c b/disk-utils/fsck.minix.c index bff810ec3..13b12926c 100644 --- a/disk-utils/fsck.minix.c +++ b/disk-utils/fsck.minix.c @@ -177,7 +177,8 @@ leave(int status) { } static void __attribute__((__noreturn__)) -usage(FILE *out) { +usage(void) { + FILE *out = stdout; fputs(USAGE_HEADER, out); fprintf(out, _(" %s [options] \n"), program_invocation_short_name); fputs(USAGE_SEPARATOR, out); @@ -194,7 +195,7 @@ usage(FILE *out) { fputs(USAGE_HELP, out); fputs(USAGE_VERSION, out); fprintf(out, USAGE_MAN_TAIL("fsck.minix(8)")); - leave(out == stderr ? FSCK_EX_USAGE : FSCK_EX_OK); + exit(FSCK_EX_OK); } static void die(const char *fmt, ...) @@ -1329,7 +1330,7 @@ main(int argc, char **argv) { printf(UTIL_LINUX_VERSION); return FSCK_EX_OK; case 'h': - usage(stdout); + usage(); default: errtryhelp(FSCK_EX_USAGE); } @@ -1337,9 +1338,10 @@ main(int argc, char **argv) { argv += optind; if (0 < argc) { device_name = argv[0]; - } else - usage(stderr); - + } else { + warnx(_("no device specified")); + errtryhelp(FSCK_EX_USAGE); + } check_mount(); /* trying to check a mounted filesystem? */ if (repair && !automatic && (!isatty(STDIN_FILENO) || !isatty(STDOUT_FILENO))) die(_("need terminal for interactive repairs")); diff --git a/disk-utils/isosize.c b/disk-utils/isosize.c index b5ac56262..ed43c9d70 100644 --- a/disk-utils/isosize.c +++ b/disk-utils/isosize.c @@ -126,8 +126,9 @@ static void isosize(int argc, char *filenamep, int xflag, long divisor) close(fd); } -static void __attribute__((__noreturn__)) usage(FILE *out) +static void __attribute__((__noreturn__)) usage(void) { + FILE *out = stdout; fputs(USAGE_HEADER, out); fprintf(out, _(" %s [options] \n"), @@ -144,7 +145,7 @@ static void __attribute__((__noreturn__)) usage(FILE *out) fputs(USAGE_VERSION, out); fprintf(out, USAGE_MAN_TAIL("isosize(8)")); - exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS); + exit(EXIT_SUCCESS); } int main(int argc, char **argv) @@ -179,15 +180,17 @@ int main(int argc, char **argv) printf(UTIL_LINUX_VERSION); return EXIT_SUCCESS; case 'h': - usage(stdout); + usage(); default: errtryhelp(EXIT_FAILURE); } ct = argc - optind; - if (ct <= 0) - usage(stderr); + if (ct <= 0) { + warnx(_("no device specified")); + errtryhelp(EXIT_FAILURE); + } for (j = optind; j < argc; j++) isosize(ct, argv[j], xflag, divisor); diff --git a/disk-utils/mkfs.bfs.c b/disk-utils/mkfs.bfs.c index 0bf18509e..b19afa7cd 100644 --- a/disk-utils/mkfs.bfs.c +++ b/disk-utils/mkfs.bfs.c @@ -67,8 +67,9 @@ struct bfsde { char d_name[BFS_NAMELEN]; }; -static void __attribute__ ((__noreturn__)) usage(FILE * out) +static void __attribute__((__noreturn__)) usage(void) { + FILE *out = stdout; fprintf(out, _("Usage: %s [options] device [block-count]\n"), program_invocation_short_name); @@ -88,7 +89,7 @@ static void __attribute__ ((__noreturn__)) usage(FILE * out) " -h, --help display this help and exit\n\n")); fprintf(out, USAGE_MAN_TAIL("mkfs.bfs(8)")); - exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS); + exit(EXIT_SUCCESS); } static void __attribute__ ((__noreturn__)) print_version(void) @@ -129,9 +130,10 @@ int main(int argc, char **argv) textdomain(PACKAGE); atexit(close_stdout); - if (argc < 2) - usage(stderr); - + if (argc < 2) { + warnx(_("not enough arguments")); + errtryhelp(EXIT_FAILURE); + } if (argc == 2 && !strcmp(argv[1], "-V")) print_version(); @@ -170,14 +172,16 @@ int main(int argc, char **argv) case VERSION_OPTION: print_version(); case 'h': - usage(stdout); + usage(); default: errtryhelp(EXIT_FAILURE); } } - if (optind == argc) - usage(stderr); + if (optind == argc) { + warnx(_("no device specified")); + errtryhelp(EXIT_FAILURE); + } device = argv[optind++]; @@ -191,8 +195,10 @@ int main(int argc, char **argv) if (optind == argc - 1) user_specified_total_blocks = strtou64_or_err(argv[optind], _("invalid block-count")); - else if (optind != argc) - usage(stderr); + else if (optind != argc) { + warnx(_("bad usage")); + errtryhelp(EXIT_FAILURE); + } if (blkdev_get_sectors(fd, &total_blocks) == -1) { if (!user_specified_total_blocks) diff --git a/disk-utils/mkfs.c b/disk-utils/mkfs.c index cf1a312d9..25cc59d20 100644 --- a/disk-utils/mkfs.c +++ b/disk-utils/mkfs.c @@ -38,8 +38,9 @@ #define DEFAULT_FSTYPE "ext2" #endif -static void __attribute__ ((__noreturn__)) usage(FILE * out) +static void __attribute__((__noreturn__)) usage(void) { + FILE *out = stdout; fputs(USAGE_HEADER, out); fprintf(out, _(" %s [options] [-t ] [fs-options] []\n"), program_invocation_short_name); @@ -60,7 +61,7 @@ static void __attribute__ ((__noreturn__)) usage(FILE * out) fprintf(out, USAGE_MAN_TAIL("mkfs(8)")); - exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS); + exit(EXIT_SUCCESS); } static void __attribute__ ((__noreturn__)) print_version(void) @@ -106,7 +107,7 @@ int main(int argc, char **argv) fstype = optarg; break; case 'h': - usage(stdout); + usage(); case VERSION_OPTION: print_version(); default: @@ -114,8 +115,10 @@ int main(int argc, char **argv) more = 1; break; /* start of specific arguments */ } - if (optind == argc) - usage(stderr); + if (optind == argc) { + warnx(_("no device specified")); + errtryhelp(EXIT_FAILURE); + } /* If -t wasn't specified, use the default */ if (fstype == NULL) diff --git a/disk-utils/mkfs.minix.c b/disk-utils/mkfs.minix.c index 98a62668a..39e159f7a 100644 --- a/disk-utils/mkfs.minix.c +++ b/disk-utils/mkfs.minix.c @@ -131,8 +131,9 @@ static char *zone_map; #define mark_zone(x) (setbit(zone_map,(x)-get_first_zone()+1)) #define unmark_zone(x) (clrbit(zone_map,(x)-get_first_zone()+1)) -static void __attribute__((__noreturn__)) usage(FILE *out) +static void __attribute__((__noreturn__)) usage(void) { + FILE *out = stdout; fputs(USAGE_HEADER, out); fprintf(out, _(" %s [options] /dev/name [blocks]\n"), program_invocation_short_name); fputs(USAGE_OPTIONS, out); @@ -147,7 +148,7 @@ static void __attribute__((__noreturn__)) usage(FILE *out) fputs(USAGE_HELP, out); fputs(USAGE_VERSION, out); fprintf(out, USAGE_MAN_TAIL("mkfs.minix(8)")); - exit(out == stderr ? MKFS_EX_USAGE : MKFS_EX_OK); + exit(MKFS_EX_OK); } #ifdef TEST_SCRIPT @@ -795,7 +796,7 @@ int main(int argc, char ** argv) printf(UTIL_LINUX_VERSION); return MKFS_EX_OK; case 'h': - usage(stdout); + usage(); default: errtryhelp(MKFS_EX_USAGE); } @@ -810,7 +811,8 @@ int main(int argc, char ** argv) ctl.fs_blocks = strtoul_or_err(argv[0], _("failed to parse number of blocks")); if (!ctl.device_name) { - usage(stderr); + warnx(_("no device specified")); + errtryhelp(MKFS_EX_USAGE); } check_user_instructions(&ctl); if (is_mounted(ctl.device_name)) diff --git a/disk-utils/mkswap.c b/disk-utils/mkswap.c index ff076c8ab..73e5258ed 100644 --- a/disk-utils/mkswap.c +++ b/disk-utils/mkswap.c @@ -141,8 +141,9 @@ static void set_uuid_and_label(const struct mkswap_control *ctl) } } -static void __attribute__ ((__noreturn__)) usage(FILE *out) +static void __attribute__((__noreturn__)) usage(void) { + FILE *out = stdout; fprintf(out, _("\nUsage:\n" " %s [options] device [size]\n"), @@ -162,7 +163,7 @@ static void __attribute__ ((__noreturn__)) usage(FILE *out) " -V, --version output version information and exit\n" " -h, --help display this help and exit\n\n")); - exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS); + exit(EXIT_SUCCESS); } static void page_bad(struct mkswap_control *ctl, unsigned int page) @@ -400,7 +401,7 @@ int main(int argc, char **argv) printf(UTIL_LINUX_VERSION); exit(EXIT_SUCCESS); case 'h': - usage(stdout); + usage(); default: errtryhelp(EXIT_FAILURE); } @@ -412,7 +413,7 @@ int main(int argc, char **argv) block_count = argv[optind++]; if (optind != argc) { warnx(_("only one device argument is currently supported")); - usage(stderr); + errtryhelp(EXIT_FAILURE); } #ifdef HAVE_LIBUUID @@ -428,7 +429,7 @@ int main(int argc, char **argv) if (!ctl.devname) { warnx(_("error: Nowhere to set up swap on?")); - usage(stderr); + errtryhelp(EXIT_FAILURE); } if (block_count) { /* this silly user specified the number of blocks explicitly */ diff --git a/disk-utils/partx.c b/disk-utils/partx.c index 93fbc9c1d..9a868cd81 100644 --- a/disk-utils/partx.c +++ b/disk-utils/partx.c @@ -743,8 +743,9 @@ static blkid_partlist get_partlist(blkid_probe pr, return ls; } -static void __attribute__((__noreturn__)) usage(FILE *out) +static void __attribute__((__noreturn__)) usage(void) { + FILE *out = stdout; size_t i; fputs(USAGE_HEADER, out); @@ -781,7 +782,7 @@ static void __attribute__((__noreturn__)) usage(FILE *out) fprintf(out, USAGE_MAN_TAIL("partx(8)")); - exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS); + exit(EXIT_SUCCESS); } int main(int argc, char **argv) @@ -891,7 +892,7 @@ int main(int argc, char **argv) return EXIT_SUCCESS; } case 'h': - usage(stdout); + usage(); case 'V': printf(UTIL_LINUX_VERSION); return EXIT_SUCCESS; @@ -963,9 +964,10 @@ int main(int argc, char **argv) device = NULL; part_devno = 0; } - } else - usage(stderr); - + } else { + warnx(_("bad usage")); + errtryhelp(EXIT_FAILURE); + } if (device && (upper || lower)) errx(EXIT_FAILURE, _("--nr and are mutually exclusive")); diff --git a/disk-utils/raw.c b/disk-utils/raw.c index 395e36703..c881d86ee 100644 --- a/disk-utils/raw.c +++ b/disk-utils/raw.c @@ -42,10 +42,9 @@ void open_raw_ctl(void); static int query(int minor_raw, const char *raw_name, int quiet); static int bind(int minor_raw, int block_major, int block_minor); -static void __attribute__ ((__noreturn__)) usage(int err) +static void __attribute__((__noreturn__)) usage(void) { - FILE *out = err == EXIT_SUCCESS ? stdout : stderr; - + FILE *out = stdout; fputs(USAGE_HEADER, out); fprintf(out, _(" %1$s %2$srawN \n" @@ -63,7 +62,7 @@ static void __attribute__ ((__noreturn__)) usage(int err) fputs(USAGE_HELP, out); fputs(USAGE_VERSION, out); fprintf(out, USAGE_MAN_TAIL("raw(8)")); - exit(err); + exit(EXIT_SUCCESS); } static long strtol_octal_or_err(const char *str, const char *errmesg) @@ -124,7 +123,7 @@ int main(int argc, char *argv[]) printf(UTIL_LINUX_VERSION); return EXIT_SUCCESS; case 'h': - usage(EXIT_SUCCESS); + usage(); default: errtryhelp(EXIT_FAILURE); } @@ -135,8 +134,10 @@ int main(int argc, char *argv[]) open_raw_ctl(); if (do_query_all) { - if (optind < argc) - usage(EXIT_FAILURE); + if (optind < argc) { + warnx(_("bad usage")); + errtryhelp(EXIT_FAILURE); + } for (i = 1; i < RAW_NR_MINORS; i++) query(i, NULL, 1); exit(EXIT_SUCCESS); @@ -146,8 +147,10 @@ int main(int argc, char *argv[]) * It's a bind or a single query. Either way we need a raw device. */ - if (optind >= argc) - usage(EXIT_FAILURE); + if (optind >= argc) { + warnx(_("bad usage")); + errtryhelp(EXIT_FAILURE); + } raw_name = argv[optind++]; /* @@ -156,9 +159,10 @@ int main(int argc, char *argv[]) * causes udev to *remove* /dev/rawctl */ rc = sscanf(raw_name, _PATH_RAWDEVDIR "raw%d", &raw_minor); - if (rc != 1) - usage(EXIT_FAILURE); - + if (rc != 1) { + warnx(_("bad usage")); + errtryhelp(EXIT_FAILURE); + } if (raw_minor == 0) errx(EXIT_RAW_ACCESS, _("Device '%s' is the control raw device " @@ -197,7 +201,8 @@ int main(int argc, char *argv[]) break; default: - usage(EXIT_FAILURE); + warnx(_("bad usage")); + errtryhelp(EXIT_FAILURE); } return bind(raw_minor, block_major, block_minor); diff --git a/disk-utils/resizepart.c b/disk-utils/resizepart.c index 97533e26f..a234c8079 100644 --- a/disk-utils/resizepart.c +++ b/disk-utils/resizepart.c @@ -13,8 +13,9 @@ #include "strutils.h" #include "closestream.h" -static void __attribute__ ((__noreturn__)) usage(FILE * out) +static void __attribute__((__noreturn__)) usage(void) { + FILE *out = stdout; fputs(USAGE_HEADER, out); fprintf(out, _(" %s \n"), program_invocation_short_name); @@ -26,7 +27,7 @@ static void __attribute__ ((__noreturn__)) usage(FILE * out) fputs(USAGE_HELP, out); fputs(USAGE_VERSION, out); fprintf(out, USAGE_MAN_TAIL("resizepart(8)")); - exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS); + exit(EXIT_SUCCESS); } static int get_partition_start(int fd, int partno, uint64_t *start) @@ -86,13 +87,15 @@ int main(int argc, char **argv) printf(UTIL_LINUX_VERSION); return EXIT_SUCCESS; case 'h': - usage(stdout); + usage(); default: errtryhelp(EXIT_FAILURE); } - if (argc != 4) - usage(stderr); + if (argc != 4) { + warnx(_("not enough arguments")); + errtryhelp(EXIT_FAILURE); + } wholedisk = argv[1]; partno = strtou32_or_err(argv[2], _("invalid partition number argument")); diff --git a/disk-utils/sfdisk.c b/disk-utils/sfdisk.c index 2a75190f5..6f88780d7 100644 --- a/disk-utils/sfdisk.c +++ b/disk-utils/sfdisk.c @@ -1839,8 +1839,9 @@ static int command_fdisk(struct sfdisk *sf, int argc, char **argv) return rc; } -static void __attribute__ ((__noreturn__)) usage(FILE *out) +static void __attribute__((__noreturn__)) usage(void) { + FILE *out = stdout; fputs(USAGE_HEADER, out); fprintf(out, @@ -1906,7 +1907,7 @@ static void __attribute__ ((__noreturn__)) usage(FILE *out) list_available_columns(out); fprintf(out, USAGE_MAN_TAIL("sfdisk(8)")); - exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS); + exit(EXIT_SUCCESS); } @@ -2042,7 +2043,7 @@ int main(int argc, char *argv[]) sf->act = ACT_SHOW_GEOM; break; case 'h': - usage(stdout); + usage(); break; case 'l': sf->act = ACT_LIST; diff --git a/disk-utils/swaplabel.c b/disk-utils/swaplabel.c index 233f027d1..c8fede25e 100644 --- a/disk-utils/swaplabel.c +++ b/disk-utils/swaplabel.c @@ -111,8 +111,9 @@ err: return -1; } -static void __attribute__((__noreturn__)) usage(FILE *out) +static void __attribute__((__noreturn__)) usage(void) { + FILE *out = stdout; fputs(USAGE_HEADER, out); fprintf(out, _(" %s [options] \n"), program_invocation_short_name); @@ -127,7 +128,7 @@ static void __attribute__((__noreturn__)) usage(FILE *out) fputs(USAGE_HELP, out); fputs(USAGE_VERSION, out); fprintf(out, USAGE_MAN_TAIL("swaplabel(8)")); - exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS); + exit(EXIT_SUCCESS); } int main(int argc, char *argv[]) @@ -152,7 +153,7 @@ int main(int argc, char *argv[]) while ((c = getopt_long(argc, argv, "hVL:U:", longopts, NULL)) != -1) { switch (c) { case 'h': - usage(stdout); + usage(); break; case 'V': printf(UTIL_LINUX_VERSION); @@ -172,9 +173,10 @@ int main(int argc, char *argv[]) } } - if (optind == argc) - usage(stderr); - + if (optind == argc) { + warnx(_("no device specified")); + errtryhelp(EXIT_FAILURE); + } devname = argv[optind]; pr = get_swap_prober(devname); if (pr) { diff --git a/libsmartcols/samples/fromfile.c b/libsmartcols/samples/fromfile.c index 674f01206..de0a8eac4 100644 --- a/libsmartcols/samples/fromfile.c +++ b/libsmartcols/samples/fromfile.c @@ -194,8 +194,9 @@ static void compose_tree(struct libscols_table *tb, int parent_col, int id_col) } -static void __attribute__ ((__noreturn__)) usage(FILE * out) +static void __attribute__((__noreturn__)) usage(void) { + FILE *out = stdout; fprintf(out, "\n %s [options] ...\n\n", program_invocation_short_name); @@ -212,7 +213,7 @@ static void __attribute__ ((__noreturn__)) usage(FILE * out) fputs(" -h, --help this help\n", out); fputs("\n", out); - exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS); + exit(EXIT_SUCCESS); } int main(int argc, char *argv[]) @@ -298,9 +299,9 @@ int main(int argc, char *argv[]) scols_table_set_termwidth(tb, strtou32_or_err(optarg, "failed to parse terminal width")); break; case 'h': - usage(stdout); + usage(); default: - usage(stderr); + errtryhelp(EXIT_FAILURE); } } diff --git a/login-utils/chfn.c b/login-utils/chfn.c index 3a951a193..7a57e9169 100644 --- a/login-utils/chfn.c +++ b/login-utils/chfn.c @@ -89,8 +89,9 @@ struct chfn_control { /* we do not accept gecos field sizes longer than MAX_FIELD_SIZE */ #define MAX_FIELD_SIZE 256 -static void __attribute__((__noreturn__)) usage(FILE *fp) +static void __attribute__((__noreturn__)) usage(void) { + FILE *fp = stdout; fputs(USAGE_HEADER, fp); fprintf(fp, _(" %s [options] []\n"), program_invocation_short_name); @@ -106,7 +107,7 @@ static void __attribute__((__noreturn__)) usage(FILE *fp) fputs(_(" -u, --help display this help and exit\n"), fp); fputs(_(" -v, --version output version information and exit\n"), fp); fprintf(fp, USAGE_MAN_TAIL("chfn(1)")); - exit(fp == stderr ? EXIT_FAILURE : EXIT_SUCCESS); + exit(EXIT_SUCCESS); } /* @@ -178,7 +179,7 @@ static void parse_argv(struct chfn_control *ctl, int argc, char **argv) printf(UTIL_LINUX_VERSION); exit(EXIT_SUCCESS); case 'u': - usage(stdout); + usage(); default: errtryhelp(EXIT_FAILURE); } @@ -189,8 +190,10 @@ static void parse_argv(struct chfn_control *ctl, int argc, char **argv) exit(EXIT_FAILURE); /* done parsing arguments. check for a username. */ if (optind < argc) { - if (optind + 1 < argc) - usage(stderr); + if (optind + 1 < argc) { + warnx(_("cannot handle multiple usernames")); + errtryhelp(EXIT_FAILURE); + } ctl->username = argv[optind]; } return; diff --git a/login-utils/chsh.c b/login-utils/chsh.c index 10b0bdcda..1083583b9 100644 --- a/login-utils/chsh.c +++ b/login-utils/chsh.c @@ -70,8 +70,9 @@ struct sinfo { /* global due readline completion */ static char **global_shells; -static void __attribute__((__noreturn__)) usage (FILE *fp) +static void __attribute__((__noreturn__)) usage(void) { + FILE *fp = stdout; fputs(USAGE_HEADER, fp); fprintf(fp, _(" %s [options] []\n"), program_invocation_short_name); @@ -85,7 +86,7 @@ static void __attribute__((__noreturn__)) usage (FILE *fp) fputs(_(" -u, --help display this help and exit\n"), fp); fputs(_(" -v, --version output version information and exit\n"), fp); fprintf(fp, USAGE_MAN_TAIL("chsh(1)")); - exit(fp == stderr ? EXIT_FAILURE : EXIT_SUCCESS); + exit(EXIT_SUCCESS); } /* @@ -229,7 +230,7 @@ static void parse_argv(int argc, char **argv, struct sinfo *pinfo) exit(EXIT_SUCCESS); case 'u': /* deprecated */ case 'h': - usage(stdout); + usage(); case 'l': init_shells(); print_shells(); @@ -243,8 +244,9 @@ static void parse_argv(int argc, char **argv, struct sinfo *pinfo) } /* done parsing arguments. check for a username. */ if (optind < argc) { - if (optind + 1 < argc) - usage(stderr); + if (optind + 1 < argc) { + errx(EXIT_FAILURE, _("cannot handle multiple usernames")); + } pinfo->username = argv[optind]; } } diff --git a/login-utils/last.c b/login-utils/last.c index 50451b2e2..9cf6eb377 100644 --- a/login-utils/last.c +++ b/login-utils/last.c @@ -560,8 +560,9 @@ static int list(const struct last_control *ctl, struct utmpx *p, time_t logout_t } -static void __attribute__((__noreturn__)) usage(const struct last_control *ctl, FILE *out) +static void __attribute__((__noreturn__)) usage(const struct last_control *ctl) { + FILE *out = stdout; fputs(USAGE_HEADER, out); fprintf(out, _( " %s [options] [...] [...]\n"), program_invocation_short_name); @@ -953,7 +954,7 @@ int main(int argc, char **argv) switch(c) { case 'h': - usage(&ctl, stdout); + usage(&ctl); break; case 'V': printf(UTIL_LINUX_VERSION); diff --git a/login-utils/lslogins.c b/login-utils/lslogins.c index c6c849e14..c15b347f2 100644 --- a/login-utils/lslogins.c +++ b/login-utils/lslogins.c @@ -1219,8 +1219,9 @@ static int parse_time_mode(const char *s) errx(EXIT_FAILURE, _("unknown time format: %s"), s); } -static void __attribute__((__noreturn__)) usage(FILE *out) +static void __attribute__((__noreturn__)) usage(void) { + FILE *out = stdout; size_t i; fputs(USAGE_HEADER, out); @@ -1261,7 +1262,7 @@ static void __attribute__((__noreturn__)) usage(FILE *out) fprintf(out, USAGE_MAN_TAIL("lslogins(1)")); - exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS); + exit(EXIT_SUCCESS); } int main(int argc, char *argv[]) @@ -1365,7 +1366,7 @@ int main(int argc, char *argv[]) groups = optarg; break; case 'h': - usage(stdout); + usage(); break; case 'L': add_column(columns, ncolumns++, COL_LAST_TTY); diff --git a/login-utils/newgrp.c b/login-utils/newgrp.c index 63a45cd6a..767ae4bcf 100644 --- a/login-utils/newgrp.c +++ b/login-utils/newgrp.c @@ -166,19 +166,20 @@ static int allow_setgid(const struct passwd *pe, const struct group *ge) return FALSE; } -static void __attribute__((__noreturn__)) usage(FILE *out) +static void __attribute__((__noreturn__)) usage(void) { - fprintf(out, USAGE_HEADER); + FILE *out = stdout; + fputs(USAGE_HEADER, out); fprintf(out, _(" %s \n"), program_invocation_short_name); fputs(USAGE_SEPARATOR, out); fputs(_("Log in to a new group.\n"), out); - fprintf(out, USAGE_OPTIONS); - fprintf(out, USAGE_HELP); - fprintf(out, USAGE_VERSION); + fputs(USAGE_OPTIONS, out); + fputs(USAGE_HELP,out); + fputs(USAGE_VERSION,out); fprintf(out, USAGE_MAN_TAIL("newgrp(1)")); - exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS); + exit(EXIT_SUCCESS); } int main(int argc, char *argv[]) @@ -204,7 +205,7 @@ int main(int argc, char *argv[]) printf(UTIL_LINUX_VERSION); return EXIT_SUCCESS; case 'h': - usage(stdout); + usage(); default: errtryhelp(EXIT_FAILURE); } diff --git a/login-utils/nologin.c b/login-utils/nologin.c index e950d2a3f..00b4b8af8 100644 --- a/login-utils/nologin.c +++ b/login-utils/nologin.c @@ -19,8 +19,9 @@ * Always return EXIT_FAILURE (1), don't try to be smart! */ -static void __attribute__((__noreturn__)) usage(FILE *out) +static void __attribute__((__noreturn__)) usage(void) { + FILE *out = stdout; fputs(USAGE_HEADER, out); fprintf(out, _(" %s [options]\n"), program_invocation_short_name); @@ -53,7 +54,7 @@ int main(int argc, char *argv[]) while ((c = getopt_long(argc, argv, "hV", longopts, NULL)) != -1) { switch (c) { case 'h': - usage(stdout); + usage(); break; case 'V': printf(UTIL_LINUX_VERSION); diff --git a/login-utils/su-common.c b/login-utils/su-common.c index 032d62f9f..d7b0a93dd 100644 --- a/login-utils/su-common.c +++ b/login-utils/su-common.c @@ -672,7 +672,7 @@ restricted_shell (const char * const shell) } static void __attribute__((__noreturn__)) -usage (const int status) +usage(void) { if (su_mode == RUNUSER_MODE) { fputs(USAGE_HEADER, stdout); @@ -712,7 +712,7 @@ usage (const int status) fputs(USAGE_HELP, stdout); fputs(USAGE_VERSION, stdout); printf(USAGE_MAN_TAIL(su_mode == SU_MODE ? "su(1)" : "runuser(1)")); - exit (status); + exit(EXIT_SUCCESS); } static @@ -851,13 +851,15 @@ su_main (int argc, char **argv, int mode) break; case 'u': - if (su_mode != RUNUSER_MODE) - usage (EXIT_FAILURE); + if (su_mode != RUNUSER_MODE) { + warnx(_("invalid option -- 'u'")); + errtryhelp(EXIT_FAILURE); + } runuser_user = optarg; break; case 'h': - usage(0); + usage(); case 'V': printf(UTIL_LINUX_VERSION); diff --git a/login-utils/sulogin.c b/login-utils/sulogin.c index 72bba623a..ac6a15c38 100644 --- a/login-utils/sulogin.c +++ b/login-utils/sulogin.c @@ -795,8 +795,9 @@ static void sushell(struct passwd *pwd) warn(_("failed to execute %s"), "/bin/sh"); } -static void usage(FILE *out) +static void usage(void) { + FILE *out = stdout; fputs(USAGE_HEADER, out); fprintf(out, _( " %s [options] [tty device]\n"), program_invocation_short_name); @@ -872,11 +873,10 @@ int main(int argc, char **argv) printf(UTIL_LINUX_VERSION); return EXIT_SUCCESS; case 'h': - usage(stdout); + usage(); return EXIT_SUCCESS; default: - usage(stderr); - /* Do not exit! */ + /* Do not exit! getopt prints a warning. */ break; } } diff --git a/login-utils/utmpdump.c b/login-utils/utmpdump.c index 385a96bf9..5bcb4c35f 100644 --- a/login-utils/utmpdump.c +++ b/login-utils/utmpdump.c @@ -296,8 +296,9 @@ static void undump(FILE *in, FILE *out) free(linestart); } -static void __attribute__((__noreturn__)) usage(FILE *out) +static void __attribute__((__noreturn__)) usage(void) { + FILE *out = stdout; fputs(USAGE_HEADER, out); fprintf(out, @@ -314,7 +315,7 @@ static void __attribute__((__noreturn__)) usage(FILE *out) fputs(USAGE_VERSION, out); fprintf(out, USAGE_MAN_TAIL("utmpdump(1)")); - exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS); + exit(EXIT_SUCCESS); } int main(int argc, char **argv) @@ -356,7 +357,7 @@ int main(int argc, char **argv) break; case 'h': - usage(stdout); + usage(); break; case 'V': printf(UTIL_LINUX_VERSION); diff --git a/login-utils/vipw.c b/login-utils/vipw.c index 7d4a831de..e3cca4906 100644 --- a/login-utils/vipw.c +++ b/login-utils/vipw.c @@ -296,8 +296,9 @@ static void edit_file(int is_shadow) ulckpwdf(); } -static void __attribute__((__noreturn__)) usage(FILE *out) +static void __attribute__((__noreturn__)) usage(void) { + FILE *out = stdout; fputs(USAGE_HEADER, out); fprintf(out, " %s\n", program_invocation_short_name); @@ -308,7 +309,7 @@ static void __attribute__((__noreturn__)) usage(FILE *out) fputs(USAGE_HELP, out); fputs(USAGE_VERSION, out); fprintf(out, USAGE_MAN_TAIL("vipw(8)")); - exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS); + exit(EXIT_SUCCESS); } int main(int argc, char *argv[]) @@ -339,7 +340,7 @@ int main(int argc, char *argv[]) printf(UTIL_LINUX_VERSION); return EXIT_SUCCESS; case 'h': - usage(stdout); + usage(); default: errtryhelp(EXIT_FAILURE); } diff --git a/misc-utils/blkid.c b/misc-utils/blkid.c index 52179e5e1..f4757e8c8 100644 --- a/misc-utils/blkid.c +++ b/misc-utils/blkid.c @@ -68,9 +68,9 @@ static void print_version(FILE *out) LIBBLKID_VERSION, LIBBLKID_DATE); } -static void usage(int error) +static void __attribute__((__noreturn__)) usage(void) { - FILE *out = error ? stderr : stdout; + FILE *out = stdout; fputs(USAGE_HEADER, out); fprintf(out, _( " %s --label