Magellan Linux

Contents of /tags/mkinitrd-6.1.5/busybox/coreutils/uname.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 898 - (show annotations) (download)
Wed Aug 5 17:52:14 2009 UTC (14 years, 10 months ago) by niro
File MIME type: text/plain
File size: 2383 byte(s)
tagged 'mkinitrd-6.1.5'
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
36 typedef struct {
37 struct utsname name;
38 char processor[8]; /* for "unknown" */
39 } uname_info_t;
40
41 static const char options[] ALIGN1 = "snrvmpa";
42 static const unsigned short utsname_offset[] = {
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
51 int uname_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
52 int uname_main(int argc UNUSED_PARAM, 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 *delta;
59 char toprint;
60
61 toprint = getopt32(argv, options);
62
63 if (argv[optind]) { /* coreutils-6.9 compat */
64 bb_show_usage();
65 }
66
67 if (toprint & (1 << 6)) { /* -a => all opts on */
68 toprint = 0x3f;
69 }
70
71 if (toprint == 0) { /* no opts => -s (sysname) */
72 toprint = 1;
73 }
74
75 uname(&uname_info.name); /* never fails */
76
77 #if defined(__sparc__) && defined(__linux__)
78 if (fake_sparc && (fake_sparc[0] | 0x20) == 'y') {
79 strcpy(uname_info.name.machine, "sparc");
80 }
81 #endif
82
83 strcpy(uname_info.processor, "unknown");
84
85 delta = utsname_offset;
86 do {
87 if (toprint & 1) {
88 /* printf would not be safe here */
89 fputs((char *)(&uname_info) + *delta, stdout);
90 if (toprint > 1) {
91 bb_putchar(' ');
92 }
93 }
94 ++delta;
95 } while (toprint >>= 1);
96 bb_putchar('\n');
97
98 fflush_stdout_and_exit(EXIT_SUCCESS); /* coreutils-6.9 compat */
99 }