]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
arch: start using arch as a usage() example
authorSami Kerola <kerolasa@iki.fi>
Sat, 20 Aug 2011 17:25:46 +0000 (19:25 +0200)
committerSami Kerola <kerolasa@iki.fi>
Sun, 28 Aug 2011 08:50:36 +0000 (10:50 +0200)
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>
include/c.h
sys-utils/arch.c

index a9cd1f3f5e29fab509b2334629c1201f75547b4f..975cc1bf4c54998921b7b94f864cd1047db2bdf2 100644 (file)
@@ -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 */
index 33dff304bf264031c04a6111e6b0fde8536a3b8f..47aad7c975fd2273bcfcd7f88ffe3cb99630cb8a 100644 (file)
@@ -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;
 }