summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSami Kerola2011-08-20 19:25:46 +0200
committerSami Kerola2011-08-28 10:50:36 +0200
commitcd7accd4465ba51d3435ca90c8a474d5784747d1 (patch)
treeeb563ec8e73c8f752aebea874db28c1254a7ad53
parentdocs: new file Documentation/release-schedule.txt (diff)
downloadkernel-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.h13
-rw-r--r--sys-utils/arch.c62
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;
}