source: MondoRescue/branches/2.2.8.selinux/mindi-busybox/coreutils/uname.c@ 3528

Last change on this file since 3528 was 1765, checked in by Bruno Cornec, 16 years ago

Update to busybox 1.7.2

File size: 2.2 KB
Line 
1/* vi: set sw=4 ts=4: */
2/* uname -- print system information
3 * Copyright (C) 1989-1999 Free Software Foundation, Inc.
4 *
5 * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
6 */
7
8/* BB_AUDIT SUSv3 compliant */
9/* http://www.opengroup.org/onlinepubs/007904975/utilities/uname.html */
10
11/* Option Example
12
13 -s, --sysname SunOS
14 -n, --nodename rocky8
15 -r, --release 4.0
16 -v, --version
17 -m, --machine sun
18 -a, --all SunOS rocky8 4.0 sun
19
20 The default behavior is equivalent to `-s'.
21
22 David MacKenzie <djm@gnu.ai.mit.edu> */
23
24/* Busyboxed by Erik Andersen */
25
26/* Further size reductions by Glenn McGrath and Manuel Novoa III. */
27
28/* Mar 16, 2003 Manuel Novoa III (mjn3@codepoet.org)
29 *
30 * Now does proper error checking on i/o. Plus some further space savings.
31 */
32
33#include <sys/utsname.h>
34#include "libbb.h"
35
36typedef struct {
37 struct utsname name;
38 char processor[8]; /* for "unknown" */
39} uname_info_t;
40
41static const char options[] ALIGN1 = "snrvmpa";
42static const unsigned short utsname_offset[] ALIGN2 = {
43 offsetof(uname_info_t,name.sysname),
44 offsetof(uname_info_t,name.nodename),
45 offsetof(uname_info_t,name.release),
46 offsetof(uname_info_t,name.version),
47 offsetof(uname_info_t,name.machine),
48 offsetof(uname_info_t,processor)
49};
50
51int uname_main(int argc, char **argv);
52int uname_main(int argc, char **argv)
53{
54 uname_info_t uname_info;
55#if defined(__sparc__) && defined(__linux__)
56 char *fake_sparc = getenv("FAKE_SPARC");
57#endif
58 const unsigned short int *delta;
59 char toprint;
60
61 toprint = getopt32(argv, options);
62
63 if (argc != optind) {
64 bb_show_usage();
65 }
66
67 if (toprint & (1 << 6)) {
68 toprint = 0x3f;
69 }
70
71 if (toprint == 0) {
72 toprint = 1; /* sysname */
73 }
74
75 if (uname(&uname_info.name) == -1) {
76 bb_error_msg_and_die("cannot get system name");
77 }
78
79#if defined(__sparc__) && defined(__linux__)
80 if ((fake_sparc != NULL)
81 && ((fake_sparc[0] == 'y')
82 || (fake_sparc[0] == 'Y'))) {
83 strcpy(uname_info.name.machine, "sparc");
84 }
85#endif
86
87 strcpy(uname_info.processor, "unknown");
88
89 delta = utsname_offset;
90 do {
91 if (toprint & 1) {
92 printf(((char *)(&uname_info)) + *delta);
93 if (toprint > 1) {
94 putchar(' ');
95 }
96 }
97 ++delta;
98 } while (toprint >>= 1);
99 putchar('\n');
100
101 fflush_stdout_and_exit(EXIT_SUCCESS);
102}
Note: See TracBrowser for help on using the repository browser.