xref: /openbsd/usr.bin/uname/uname.c (revision df930be7)
1*df930be7Sderaadt /*
2*df930be7Sderaadt  * Copyright (c) 1994 Winning Strategies, Inc.
3*df930be7Sderaadt  * All rights reserved.
4*df930be7Sderaadt  *
5*df930be7Sderaadt  * Redistribution and use in source and binary forms, with or without
6*df930be7Sderaadt  * modification, are permitted provided that the following conditions
7*df930be7Sderaadt  * are met:
8*df930be7Sderaadt  * 1. Redistributions of source code must retain the above copyright
9*df930be7Sderaadt  *    notice, this list of conditions and the following disclaimer.
10*df930be7Sderaadt  * 2. Redistributions in binary form must reproduce the above copyright
11*df930be7Sderaadt  *    notice, this list of conditions and the following disclaimer in the
12*df930be7Sderaadt  *    documentation and/or other materials provided with the distribution.
13*df930be7Sderaadt  * 3. All advertising materials mentioning features or use of this software
14*df930be7Sderaadt  *    must display the following acknowledgement:
15*df930be7Sderaadt  *      This product includes software developed by Winning Strategies, Inc.
16*df930be7Sderaadt  * 4. The name of Winning Strategies, Inc. may not be used to endorse or
17*df930be7Sderaadt  *    promote products derived from this software without specific prior
18*df930be7Sderaadt  *    written permission.
19*df930be7Sderaadt  *
20*df930be7Sderaadt  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
21*df930be7Sderaadt  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
22*df930be7Sderaadt  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
23*df930be7Sderaadt  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
24*df930be7Sderaadt  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
25*df930be7Sderaadt  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26*df930be7Sderaadt  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27*df930be7Sderaadt  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28*df930be7Sderaadt  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
29*df930be7Sderaadt  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30*df930be7Sderaadt  */
31*df930be7Sderaadt 
32*df930be7Sderaadt #ifndef lint
33*df930be7Sderaadt static char rcsid[] = "$Id: uname.c,v 1.1.1.1 1995/10/18 08:46:28 deraadt Exp $";
34*df930be7Sderaadt #endif /* not lint */
35*df930be7Sderaadt 
36*df930be7Sderaadt #include <stdio.h>
37*df930be7Sderaadt #include <locale.h>
38*df930be7Sderaadt #include <unistd.h>
39*df930be7Sderaadt #include <sys/utsname.h>
40*df930be7Sderaadt #include <err.h>
41*df930be7Sderaadt 
42*df930be7Sderaadt static void usage();
43*df930be7Sderaadt 
44*df930be7Sderaadt #define	PRINT_SYSNAME	0x01
45*df930be7Sderaadt #define	PRINT_NODENAME	0x02
46*df930be7Sderaadt #define	PRINT_RELEASE	0x04
47*df930be7Sderaadt #define	PRINT_VERSION	0x08
48*df930be7Sderaadt #define	PRINT_MACHINE	0x10
49*df930be7Sderaadt #define	PRINT_ALL	0x1f
50*df930be7Sderaadt 
51*df930be7Sderaadt int
52*df930be7Sderaadt main(argc, argv)
53*df930be7Sderaadt 	int argc;
54*df930be7Sderaadt 	char **argv;
55*df930be7Sderaadt {
56*df930be7Sderaadt 	struct utsname u;
57*df930be7Sderaadt 	int c;
58*df930be7Sderaadt 	int space = 0;
59*df930be7Sderaadt 	int print_mask = 0;
60*df930be7Sderaadt 
61*df930be7Sderaadt 	setlocale(LC_ALL, "");
62*df930be7Sderaadt 
63*df930be7Sderaadt 	while ((c = getopt(argc,argv,"amnrsv")) != -1 ) {
64*df930be7Sderaadt 		switch ( c ) {
65*df930be7Sderaadt 		case 'a':
66*df930be7Sderaadt 			print_mask |= PRINT_ALL;
67*df930be7Sderaadt 			break;
68*df930be7Sderaadt 		case 'm':
69*df930be7Sderaadt 			print_mask |= PRINT_MACHINE;
70*df930be7Sderaadt 			break;
71*df930be7Sderaadt 		case 'n':
72*df930be7Sderaadt 			print_mask |= PRINT_NODENAME;
73*df930be7Sderaadt 			break;
74*df930be7Sderaadt 		case 'r':
75*df930be7Sderaadt 			print_mask |= PRINT_RELEASE;
76*df930be7Sderaadt 			break;
77*df930be7Sderaadt 		case 's':
78*df930be7Sderaadt 			print_mask |= PRINT_SYSNAME;
79*df930be7Sderaadt 			break;
80*df930be7Sderaadt 		case 'v':
81*df930be7Sderaadt 			print_mask |= PRINT_VERSION;
82*df930be7Sderaadt 			break;
83*df930be7Sderaadt 		default:
84*df930be7Sderaadt 			usage();
85*df930be7Sderaadt 			/* NOTREACHED */
86*df930be7Sderaadt 		}
87*df930be7Sderaadt 	}
88*df930be7Sderaadt 
89*df930be7Sderaadt 	if (optind != argc) {
90*df930be7Sderaadt 		usage();
91*df930be7Sderaadt 		/* NOTREACHED */
92*df930be7Sderaadt 	}
93*df930be7Sderaadt 
94*df930be7Sderaadt 	if (!print_mask) {
95*df930be7Sderaadt 		print_mask = PRINT_SYSNAME;
96*df930be7Sderaadt 	}
97*df930be7Sderaadt 
98*df930be7Sderaadt 	if (uname(&u)) {
99*df930be7Sderaadt 		err(1, NULL);
100*df930be7Sderaadt 		/* NOTREACHED */
101*df930be7Sderaadt 	}
102*df930be7Sderaadt 
103*df930be7Sderaadt 	if (print_mask & PRINT_SYSNAME) {
104*df930be7Sderaadt 		space++;
105*df930be7Sderaadt 		fputs(u.sysname, stdout);
106*df930be7Sderaadt 	}
107*df930be7Sderaadt 	if (print_mask & PRINT_NODENAME) {
108*df930be7Sderaadt 		if (space++) putchar(' ');
109*df930be7Sderaadt 		fputs(u.nodename, stdout);
110*df930be7Sderaadt 	}
111*df930be7Sderaadt 	if (print_mask & PRINT_RELEASE) {
112*df930be7Sderaadt 		if (space++) putchar(' ');
113*df930be7Sderaadt 		fputs(u.release, stdout);
114*df930be7Sderaadt 	}
115*df930be7Sderaadt 	if (print_mask & PRINT_VERSION) {
116*df930be7Sderaadt 		if (space++) putchar(' ');
117*df930be7Sderaadt 		fputs(u.version, stdout);
118*df930be7Sderaadt 	}
119*df930be7Sderaadt 	if (print_mask & PRINT_MACHINE) {
120*df930be7Sderaadt 		if (space++) putchar(' ');
121*df930be7Sderaadt 		fputs(u.machine, stdout);
122*df930be7Sderaadt 	}
123*df930be7Sderaadt 	putchar('\n');
124*df930be7Sderaadt 
125*df930be7Sderaadt 	exit(0);
126*df930be7Sderaadt 	/* NOTREACHED */
127*df930be7Sderaadt }
128*df930be7Sderaadt 
129*df930be7Sderaadt static void
130*df930be7Sderaadt usage()
131*df930be7Sderaadt {
132*df930be7Sderaadt 	fprintf(stderr, "usage: uname [-amnrsv]\n");
133*df930be7Sderaadt 	exit(1);
134*df930be7Sderaadt }
135