OSDN Git Service

Fix no pic
[uclinux-h8/uClinux-dist.git] / user / shutils / uname.c
1 #include <unistd.h>
2 #include <string.h>
3 #include <sys/utsname.h>
4
5 static void print_element ();
6
7 /* Values that are bitwise or'd into toprint'. */
8 /* Operating system name. */
9 #define PRINT_SYSNAME 1
10
11 /* Node name on a communications network. */
12 #define PRINT_NODENAME 2
13
14 /* Operating system release. */
15 #define PRINT_RELEASE 4
16
17 /* Operating system version. */
18 #define PRINT_VERSION 8
19
20 /* Machine hardware name. */
21 #define PRINT_MACHINE 16
22
23 /* Mask indicating which elements of the name to print. */
24 static unsigned char toprint;
25
26 int
27 main (argc, argv)
28         int argc;
29         char **argv;
30 {
31         int     i;
32         struct utsname name;
33
34         toprint = 0;
35
36         for(i=1;i<argc;i++)
37         {
38                 switch(argv[i][1])
39                 {
40                 case 's':
41                         toprint |= PRINT_SYSNAME;
42                         break;
43
44                 case 'n':
45                         toprint |= PRINT_NODENAME;
46                         break;
47
48                 case 'r':
49                         toprint |= PRINT_RELEASE;
50                         break;
51
52                 case 'v':
53                         toprint |= PRINT_VERSION;
54                         break;
55
56                 case 'm':
57                         toprint |= PRINT_MACHINE;
58                         break;
59
60                 case 'a':
61                         toprint = PRINT_SYSNAME | PRINT_NODENAME |
62                         PRINT_RELEASE | PRINT_VERSION | PRINT_MACHINE;
63                         break;
64
65                 default:
66                         break;
67                 }
68         }
69         if (toprint == 0)
70                 toprint = PRINT_SYSNAME;
71         if (uname (&name) != -1)
72         {
73                 print_element (PRINT_SYSNAME, name.sysname);
74                 print_element (PRINT_NODENAME, name.nodename);
75                 print_element (PRINT_RELEASE, name.release);
76                 print_element (PRINT_VERSION, name.version);
77                 print_element (PRINT_MACHINE, name.machine);
78         }
79
80         exit(0);
81 }
82
83 static void
84 print_element (mask, element)
85         unsigned char mask;
86         char *element;
87 {
88         if (toprint & mask)
89         {
90                 toprint &= ~mask;
91                 write(STDOUT_FILENO,element,strlen(element));
92                 write(STDOUT_FILENO,toprint ? " " : "\n",1);
93         }
94 }
95