version 1.3, 1993/08/07 07:58:19 |
version 1.4, 1994/01/27 18:00:06 |
|
|
/* |
/* |
* uname - print system information. Jeff Comstock - Bloomington, MN USA 1992 |
* Copyright (c) 1994 Winning Strategies, Inc. |
* Usage: uname [-asnrvm] |
* All rights reserved. |
* -s prints system name |
* |
* -n prints nodename |
* Redistribution and use in source and binary forms, with or without |
* -r prints software release |
* modification, are permitted provided that the following conditions |
* -v prints os version |
* are met: |
* -m prints machine name |
* 1. Redistributions of source code must retain the above copyright |
* -a prinst all the above information |
* notice, this list of conditions and the following disclaimer. |
|
* 2. Redistributions in binary form must reproduce the above copyright |
|
* notice, this list of conditions and the following disclaimer in the |
|
* documentation and/or other materials provided with the distribution. |
|
* 3. All advertising materials mentioning features or use of this software |
|
* must display the following acknowledgement: |
|
* This product includes software developed by Winning Strategies, Inc. |
|
* 4. The name of Winning Strategies, Inc. may not be used to endorse or |
|
* promote products derived from this software withough specific prior |
|
* written permission. |
|
* |
|
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
|
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
|
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
|
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
|
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
|
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
|
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
|
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
*/ |
|
|
#ifndef lint |
#ifndef lint |
Line 14 static char rcsid[] = "$Id$"; |
|
Line 34 static char rcsid[] = "$Id$"; |
|
#endif /* not lint */ |
#endif /* not lint */ |
|
|
#include <stdio.h> |
#include <stdio.h> |
|
#include <locale.h> |
#include <unistd.h> |
#include <unistd.h> |
#include <sysexits.h> |
|
#include <sys/utsname.h> |
#include <sys/utsname.h> |
|
|
#define SYSNAME 0 |
static void usage(); |
#define NODENAME 1 |
|
#define RELEASE 2 |
#define PRINT_SYSNAME 0x01 |
#define VERSION 3 |
#define PRINT_NODENAME 0x02 |
#define MACHINE 4 |
#define PRINT_RELEASE 0x04 |
|
#define PRINT_VERSION 0x08 |
struct utsname u; |
#define PRINT_MACHINE 0x10 |
|
#define PRINT_ALL 0x1f |
struct utstab { |
|
char *str; |
int |
int requested; |
main(argc, argv) |
} uttab[] = { |
int argc; |
{ u.sysname, 0 }, |
char **argv; |
{ u.nodename, 0 }, |
{ |
{ u.release, 0 }, |
struct utsname u; |
{ u.version, 0 }, |
int c; |
{ u.machine, 0 } |
int space = 0; |
}; |
int print_mask = 0; |
|
|
main(int argc, char **argv) { |
setlocale(LC_ALL, ""); |
char *opts="amnrsv"; |
|
register int c,space, all=0; |
while ((c = getopt(argc,argv,"amnrsv")) != -1 ) { |
|
switch ( c ) { |
if ( ! uname(&u) ) { |
case 'a': |
if ( argc == 1 ) { |
print_mask = PRINT_ALL; |
puts(u.sysname); |
break; |
} else { |
case 'm': |
while ( (c = getopt(argc,argv,opts)) != -1 ) { |
print_mask = PRINT_MACHINE; |
switch ( c ) { |
break; |
case 'a' : all++; |
case 'n': |
break; |
print_mask = PRINT_NODENAME; |
case 'm' : uttab[MACHINE].requested++; |
break; |
break; |
case 'r': |
case 'n' : uttab[NODENAME].requested++; |
print_mask = PRINT_RELEASE; |
break; |
break; |
case 'r' : uttab[RELEASE].requested++; |
case 's': |
break; |
print_mask = PRINT_SYSNAME; |
case 's' : uttab[SYSNAME].requested++; |
break; |
break; |
case 'v': |
case 'v' : uttab[VERSION].requested++; |
print_mask = PRINT_VERSION; |
break; |
break; |
} |
default: |
} |
usage(); |
space=0; |
/* NOTREACHED */ |
for(c=0; c <= MACHINE; c++) { |
|
if ( uttab[c].requested || all ) { |
|
if ( space ) |
|
putchar(' '); |
|
printf("%s", uttab[c].str); |
|
space++; |
|
} |
|
} |
|
puts(""); |
|
} |
} |
exit (EX_OK); |
|
} else { |
|
perror("uname"); |
|
exit (EX_OSERR); |
|
} |
} |
|
|
|
if (optind != argc) { |
|
usage(); |
|
/* NOTREACHED */ |
|
} |
|
|
|
if (!print_mask) { |
|
print_mask = PRINT_SYSNAME; |
|
} |
|
|
|
if (uname(&u)) { |
|
err(1, NULL); |
|
/* NOTREACHED */ |
|
} |
|
|
|
if (print_mask & PRINT_SYSNAME) { |
|
space++; |
|
fputs(u.sysname, stdout); |
|
} |
|
if (print_mask & PRINT_NODENAME) { |
|
if (space++) putchar(' '); |
|
fputs(u.nodename, stdout); |
|
} |
|
if (print_mask & PRINT_RELEASE) { |
|
if (space++) putchar(' '); |
|
fputs(u.release, stdout); |
|
} |
|
if (print_mask & PRINT_VERSION) { |
|
if (space++) putchar(' '); |
|
fputs(u.version, stdout); |
|
} |
|
if (print_mask & PRINT_MACHINE) { |
|
if (space++) putchar(' '); |
|
fputs(u.machine, stdout); |
|
} |
|
putchar('\n'); |
|
|
|
exit(0); |
|
/* NOTREACHED */ |
|
} |
|
|
|
static void |
|
usage() |
|
{ |
|
fprintf(stderr, "usage: uname [-amnrsv]\n"); |
|
exit(1); |
} |
} |