diff options
author | Sami Kerola | 2011-08-20 19:25:46 +0200 |
---|---|---|
committer | Sami Kerola | 2011-08-28 10:50:36 +0200 |
commit | cd7accd4465ba51d3435ca90c8a474d5784747d1 (patch) | |
tree | eb563ec8e73c8f752aebea874db28c1254a7ad53 | |
parent | docs: new file Documentation/release-schedule.txt (diff) | |
download | kernel-qcow2-util-linux-cd7accd4465ba51d3435ca90c8a474d5784747d1.tar.gz kernel-qcow2-util-linux-cd7accd4465ba51d3435ca90c8a474d5784747d1.tar.xz kernel-qcow2-util-linux-cd7accd4465ba51d3435ca90c8a474d5784747d1.zip |
arch: start using arch as a usage() example
The arch command is hijacked to be example of howto write usage
as defined in Documentation/howto-usage-function.txt
Signed-off-by: Sami Kerola <kerolasa@iki.fi>
-rw-r--r-- | include/c.h | 13 | ||||
-rw-r--r-- | sys-utils/arch.c | 62 |
2 files changed, 64 insertions, 11 deletions
diff --git a/include/c.h b/include/c.h index a9cd1f3f5..975cc1bf4 100644 --- a/include/c.h +++ b/include/c.h @@ -210,4 +210,17 @@ static inline int dirfd(DIR *d) #define IUTF8 0040000 #endif +/* + * Constant strings for usage() functions. For more info see + * Documentation/howto-usage-function.txt and sys-utils/arch.c + */ +#define USAGE_HEADER _("\nUsage:\n") +#define USAGE_OPTIONS _("\nOptions:\n") +#define USAGE_HELP _(" -h, --help display this help and exit\n") +#define USAGE_VERSION _(" -V, --version output version information and exit\n") +#define USAGE_BEGIN_TAIL _("\n") +#define USAGE_MAN_TAIL _("For more details see %s.\n") + +#define UTIL_LINUX_VERSION _("%s from %s\n"), program_invocation_short_name, PACKAGE_STRING + #endif /* UTIL_LINUX_C_H */ diff --git a/sys-utils/arch.c b/sys-utils/arch.c index 33dff304b..47aad7c97 100644 --- a/sys-utils/arch.c +++ b/sys-utils/arch.c @@ -2,34 +2,74 @@ * Created: Mon Dec 20 12:27:15 1993 by faith@cs.unc.edu * Revised: Mon Dec 20 12:29:23 1993 by faith@cs.unc.edu * Copyright 1993 Rickard E. Faith (faith@cs.unc.edu) - + * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 2, or (at your option) any * later version. - + * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. - + * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 675 Mass Ave, Cambridge, MA 02139, USA. */ +#include <err.h> +#include <errno.h> +#include <getopt.h> #include <stdio.h> #include <sys/utsname.h> -int main (void) +#include "c.h" +#include "nls.h" + +static void __attribute__ ((__noreturn__)) usage(FILE * out) { - struct utsname utsbuf; + fprintf(out, USAGE_HEADER); + /* Synopsis */ + fprintf(out, " %s\n", program_invocation_short_name); + fprintf(out, USAGE_OPTIONS); + /* Additional options to here. */ + fprintf(out, USAGE_HELP); + fprintf(out, USAGE_VERSION); + fprintf(out, USAGE_BEGIN_TAIL); + /* Remove USAGE_MAN_TAIL line when man page does not exist. */ + fprintf(out, USAGE_MAN_TAIL, "arch(1)"); + exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS); +} + +int main(int argc, char **argv) +{ + struct utsname utsbuf; + int ch; + static const struct option longopts[] = { + {"version", no_argument, NULL, 'V'}, + {"help", no_argument, NULL, 'h'}, + {NULL, 0, NULL, 0} + }; + + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, LOCALEDIR); + textdomain(PACKAGE); + + while ((ch = getopt_long(argc, argv, "Vh", longopts, NULL)) != -1) + switch (ch) { + case 'V': + printf(UTIL_LINUX_VERSION); + return EXIT_SUCCESS; + case 'h': + usage(stdout); + default: + usage(stderr); + } - if (uname( &utsbuf )) { - perror( "arch" ); - return 1; - } + if (uname(&utsbuf)) + err(EXIT_FAILURE, _("uname failed")); - printf( "%s\n", utsbuf.machine ); + printf("%s\n", utsbuf.machine); - return 0; + return EXIT_SUCCESS; } |