diff options
author | Karel Zak <kzak@redhat.com> | 2007-06-05 23:29:32 +0200 |
---|---|---|
committer | Jim Meyering <jim@meyering.net> | 2007-07-10 19:00:00 +0200 |
commit | 264021699cb9a460ebcdd3d080e88d55c269cc61 (patch) | |
tree | 8aa51f56ead922e46fd2b9eeb8953be4db4de317 /src/uname.c | |
parent | 33342c1a0a464f198df3f177432a0e98e482e7a4 (diff) | |
download | coreutils-264021699cb9a460ebcdd3d080e88d55c269cc61.tar.xz |
New program: arch
* NEWS: Mention arch.
* README: Add arch to the list of programs.
* AUTHORS: Add arch.
* src/uname.c: Include "uname.h".
(PROGRAM_NAME): Handle arch, too.
(ARCH_AUTHORS): Define.
(uname_long_options, arch_long_options): Renamed and new globals.
(usage): Handle arch-mode as well as uname-mode.
(decode_switches): New function, extracted from main,
to handle arch-mode as well as uname-mode.
(main): Handle both modes.
* src/uname-arch.c: New program, alias for "uname -m".
* src/uname-uname.c: New file, default uname mode.
* src/uname.h: New file, uname modes.
* src/Makefile.am (EXTRA_PROGRAMS): Add arch.
(uname_SOURCES, arch_SOURCES): Define.
* man/arch.x: New file.
* man/Makefile.am (dist_man_MANS): Add arch.1.
(arch.1): New dependency.
* tests/misc/arch: New test, compare "arch" with "uname -m"
* configure.ac (OPTIONAL_BIN_PROGS): Add arch.
(MAN): Add arch.1.
* .x-sc_require_config_h: Exempt uname-arch.c and uname-uname.c
from the always-include-<config.h> rule.
Signed-off-by: Karel Zak <kzak@redhat.com>
Signed-off-by: Jim Meyering <jim@meyering.net>
Diffstat (limited to 'src/uname.c')
-rw-r--r-- | src/uname.c | 158 |
1 files changed, 107 insertions, 51 deletions
diff --git a/src/uname.c b/src/uname.c index c7ae92676..ebd68da05 100644 --- a/src/uname.c +++ b/src/uname.c @@ -1,7 +1,7 @@ /* uname -- print system information - Copyright (C) 1989, 1992, 1993, 1996, 1997, 1999, 2000, 2001, 2002, - 2003, 2004, 2005 Free Software Foundation, Inc. + Copyright (C) 1989, 1992, 1993, 1996, 1997, 1999-2005, 2007 + Free Software Foundation, Inc. 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 @@ -54,11 +54,13 @@ #include "system.h" #include "error.h" #include "quote.h" +#include "uname.h" /* The official name of this program (e.g., no `g' prefix). */ -#define PROGRAM_NAME "uname" +#define PROGRAM_NAME (uname_mode == UNAME_UNAME ? "uname" : "arch") #define AUTHORS "David MacKenzie" +#define ARCH_AUTHORS "David MacKenzie", "Karel Zak" /* Values that are bitwise or'd into `toprint'. */ /* Kernel name. */ @@ -88,7 +90,7 @@ /* The name this program was run with, for error messages. */ char *program_name; -static struct option const long_options[] = +static struct option const uname_long_options[] = { {"all", no_argument, NULL, 'a'}, {"kernel-name", no_argument, NULL, 's'}, @@ -106,6 +108,13 @@ static struct option const long_options[] = {NULL, 0, NULL, 0} }; +static struct option const arch_long_options[] = +{ + {GETOPT_HELP_OPTION_DECL}, + {GETOPT_VERSION_OPTION_DECL}, + {NULL, 0, NULL, 0} +}; + void usage (int status) { @@ -115,7 +124,10 @@ usage (int status) else { printf (_("Usage: %s [OPTION]...\n"), program_name); - fputs (_("\ + + if (uname_mode == UNAME_UNAME) + { + fputs (_("\ Print certain system information. With no OPTION, same as -s.\n\ \n\ -a, --all print all information, in the following order,\n\ @@ -124,13 +136,22 @@ Print certain system information. With no OPTION, same as -s.\n\ -n, --nodename print the network node hostname\n\ -r, --kernel-release print the kernel release\n\ "), stdout); - fputs (_("\ + fputs (_("\ -v, --kernel-version print the kernel version\n\ -m, --machine print the machine hardware name\n\ -p, --processor print the processor type or \"unknown\"\n\ -i, --hardware-platform print the hardware platform or \"unknown\"\n\ -o, --operating-system print the operating system\n\ "), stdout); + } + else + { + fputs (_("\ +Print machine architecture.\n\ +\n\ +"), stdout); + } + fputs (HELP_OPTION_DESCRIPTION, stdout); fputs (VERSION_OPTION_DESCRIPTION, stdout); emit_bug_reporting_address (); @@ -151,69 +172,83 @@ print_element (char const *element) fputs (element, stdout); } -int -main (int argc, char **argv) + +/* Set all the option flags according to the switches specified. + Return the mask indicating which elements to print. */ + +static int +decode_switches (int argc, char **argv) { int c; - static char const unknown[] = "unknown"; - - /* Mask indicating which elements to print. */ unsigned int toprint = 0; - initialize_main (&argc, &argv); - program_name = argv[0]; - setlocale (LC_ALL, ""); - bindtextdomain (PACKAGE, LOCALEDIR); - textdomain (PACKAGE); + if (uname_mode == UNAME_ARCH) + { + while ((c = getopt_long (argc, argv, "", + arch_long_options, NULL)) != -1) + { + switch (c) + { + case_GETOPT_HELP_CHAR; - atexit (close_stdout); + case_GETOPT_VERSION_CHAR (PROGRAM_NAME, ARCH_AUTHORS); - while ((c = getopt_long (argc, argv, "asnrvmpio", long_options, NULL)) != -1) + default: + usage (EXIT_FAILURE); + } + } + toprint = PRINT_MACHINE; + } + else { - switch (c) - { - case 'a': - toprint = UINT_MAX; - break; + while ((c = getopt_long (argc, argv, "asnrvmpio", + uname_long_options, NULL)) != -1) + { + switch (c) + { + case 'a': + toprint = UINT_MAX; + break; - case 's': - toprint |= PRINT_KERNEL_NAME; - break; + case 's': + toprint |= PRINT_KERNEL_NAME; + break; - case 'n': - toprint |= PRINT_NODENAME; - break; + case 'n': + toprint |= PRINT_NODENAME; + break; - case 'r': - toprint |= PRINT_KERNEL_RELEASE; - break; + case 'r': + toprint |= PRINT_KERNEL_RELEASE; + break; - case 'v': - toprint |= PRINT_KERNEL_VERSION; - break; + case 'v': + toprint |= PRINT_KERNEL_VERSION; + break; - case 'm': - toprint |= PRINT_MACHINE; - break; + case 'm': + toprint |= PRINT_MACHINE; + break; - case 'p': - toprint |= PRINT_PROCESSOR; - break; + case 'p': + toprint |= PRINT_PROCESSOR; + break; - case 'i': - toprint |= PRINT_HARDWARE_PLATFORM; - break; + case 'i': + toprint |= PRINT_HARDWARE_PLATFORM; + break; - case 'o': - toprint |= PRINT_OPERATING_SYSTEM; - break; + case 'o': + toprint |= PRINT_OPERATING_SYSTEM; + break; - case_GETOPT_HELP_CHAR; + case_GETOPT_HELP_CHAR; - case_GETOPT_VERSION_CHAR (PROGRAM_NAME, AUTHORS); + case_GETOPT_VERSION_CHAR (PROGRAM_NAME, AUTHORS); - default: - usage (EXIT_FAILURE); + default: + usage (EXIT_FAILURE); + } } } @@ -223,6 +258,27 @@ main (int argc, char **argv) usage (EXIT_FAILURE); } + return toprint; +} + +int +main (int argc, char **argv) +{ + static char const unknown[] = "unknown"; + + /* Mask indicating which elements to print. */ + unsigned int toprint = 0; + + initialize_main (&argc, &argv); + program_name = argv[0]; + setlocale (LC_ALL, ""); + bindtextdomain (PACKAGE, LOCALEDIR); + textdomain (PACKAGE); + + atexit (close_stdout); + + toprint = decode_switches (argc, argv); + if (toprint == 0) toprint = PRINT_KERNEL_NAME; |