]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - usr.bin/uname/uname.c
unfinished sblive driver, playback/mixer only for now - not enabled in
[FreeBSD/FreeBSD.git] / usr.bin / uname / uname.c
1 /*-
2  * Copyright (c) 1993
3  *      The Regents of the University of California.  All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  *    notice, this list of conditions and the following disclaimer in the
12  *    documentation and/or other materials provided with the distribution.
13  * 3. All advertising materials mentioning features or use of this software
14  *    must display the following acknowledgement:
15  *      This product includes software developed by the University of
16  *      California, Berkeley and its contributors.
17  * 4. Neither the name of the University nor the names of its contributors
18  *    may be used to endorse or promote products derived from this software
19  *    without specific prior written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
22  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
25  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31  * SUCH DAMAGE.
32  */
33
34 #ifndef lint
35 static char copyright[] =
36 "@(#) Copyright (c) 1993\n\
37         The Regents of the University of California.  All rights reserved.\n";
38 #endif /* not lint */
39
40 #ifndef lint
41 static char sccsid[] = "@(#)uname.c     8.2 (Berkeley) 5/4/95";
42 #endif /* not lint */
43
44 #include <sys/param.h>
45 #include <sys/sysctl.h>
46
47 #include <err.h>
48 #include <stdio.h>
49 #include <stdlib.h>
50 #include <unistd.h>
51
52 void usage __P((void));
53
54 int
55 main(argc, argv)
56         int argc;
57         char *argv[];
58 {
59 #define MFLAG   0x01
60 #define NFLAG   0x02
61 #define RFLAG   0x04
62 #define SFLAG   0x08
63 #define VFLAG   0x10
64         u_int flags;
65         int ch, mib[2];
66         size_t len, tlen;
67         char *p, *prefix, buf[1024];
68
69         flags = 0;
70         while ((ch = getopt(argc, argv, "amnprsv")) != -1)
71                 switch(ch) {
72                 case 'a':
73                         flags |= (MFLAG | NFLAG | RFLAG | SFLAG | VFLAG);
74                         break;
75                 case 'p':
76                 case 'm':
77                         flags |= MFLAG;
78                         break;
79                 case 'n':
80                         flags |= NFLAG;
81                         break;
82                 case 'r':
83                         flags |= RFLAG;
84                         break;
85                 case 's':
86                         flags |= SFLAG;
87                         break;
88                 case 'v':
89                         flags |= VFLAG;
90                         break;
91                 case '?':
92                 default:
93                         usage();
94                 }
95
96         argc -= optind;
97         argv += optind;
98
99         if (argc)
100                 usage();
101
102         if (!flags)
103                 flags |= SFLAG;
104
105         prefix = "";
106
107         if (flags & SFLAG) {
108                 mib[0] = CTL_KERN;
109                 mib[1] = KERN_OSTYPE;
110                 len = sizeof(buf);
111                 if (sysctl(mib, 2, &buf, &len, NULL, 0) == -1)
112                         err(1, "sysctl");
113                 (void)printf("%s%.*s", prefix, (int)len, buf);
114                 prefix = " ";
115         }
116         if (flags & NFLAG) {
117                 mib[0] = CTL_KERN;
118                 mib[1] = KERN_HOSTNAME;
119                 len = sizeof(buf);
120                 if (sysctl(mib, 2, &buf, &len, NULL, 0) == -1)
121                         err(1, "sysctl");
122                 (void)printf("%s%.*s", prefix, (int)len, buf);
123                 prefix = " ";
124         }
125         if (flags & RFLAG) {
126                 mib[0] = CTL_KERN;
127                 mib[1] = KERN_OSRELEASE;
128                 len = sizeof(buf);
129                 if (sysctl(mib, 2, &buf, &len, NULL, 0) == -1)
130                         err(1, "sysctl");
131                 (void)printf("%s%.*s", prefix, (int)len, buf);
132                 prefix = " ";
133         }
134         if (flags & VFLAG) {
135                 mib[0] = CTL_KERN;
136                 mib[1] = KERN_VERSION;
137                 len = sizeof(buf);
138                 if (sysctl(mib, 2, &buf, &len, NULL, 0) == -1)
139                         err(1, "sysctl");
140                 for (p = buf, tlen = len; tlen--; ++p)
141                         if (*p == '\n' || *p == '\t')
142                                 *p = ' ';
143                 (void)printf("%s%.*s", prefix, (int)len, buf);
144                 prefix = " ";
145         }
146         if (flags & MFLAG) {
147                 mib[0] = CTL_HW;
148                 mib[1] = HW_MACHINE;
149                 len = sizeof(buf);
150                 if (sysctl(mib, 2, &buf, &len, NULL, 0) == -1)
151                         err(1, "sysctl");
152                 (void)printf("%s%.*s", prefix, (int)len, buf);
153                 prefix = " ";
154         }
155         (void)printf("\n");
156         exit (0);
157 }
158
159 void
160 usage()
161 {
162         (void)fprintf(stderr, "usage: uname [-amnrsv]\n");
163         exit(1);
164 }