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