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