uname.c revision da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/***********************************************************************
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* This software is part of the ast package *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* Copyright (c) 1992-2007 AT&T Knowledge Ventures *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* and is licensed under the *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* Common Public License, Version 1.0 *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* by AT&T Knowledge Ventures *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* A copy of the License is available at *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* Information and Software Systems Research *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* AT&T Research *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* Florham Park NJ *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* Glenn Fowler <gsf@research.att.com> *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* David Korn <dgk@research.att.com> *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin***********************************************************************/
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * David Korn
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * Glenn Fowler
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * AT&T Research
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinstatic const char usage[] =
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin"[-?\n@(#)$Id: uname (AT&T Research) 2007-01-22 $\n]"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin"[+NAME?uname - identify the current system ]"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin"[+DESCRIPTION?By default \buname\b writes the operating system name to"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin" standard output. When options are specified, one or more"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin" system characteristics are written to standard output, space"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin" separated, on a single line. When more than one option is specifed"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin" the output is in the order specfied by the \b-A\b option below."
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin" Unsupported option values are listed as \a[option]]\a. If any unknown"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin" options are specified then the local \b/usr/bin/uname\b is called.]"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin"[+?If any \aname\a operands are specified then the \bsysinfo\b(2) values"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin" for each \aname\a are listed, separated by space, on one line."
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin" \bgetconf\b(1), a pre-existing \astandard\a interface, provides"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin" access to the same information; vendors should spend more time"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin" using standards than inventing them.]"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin"[+?Selected information is printed in the same order as the options below.]"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin"[a:all?Equivalent to \b-snrvmpio\b.]"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin"[s:system|sysname|kernel-name?The detailed kernel name. This is the default.]"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin"[n:nodename?The hostname or nodename.]"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin"[r:release|kernel-release?The kernel release level.]"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin"[v:version|kernel-version?The kernel version level.]"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin"[m:machine?The name of the hardware type the system is running on.]"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin"[p:processor?The name of the processor instruction set architecture.]"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin"[i:implementation|platform|hardware-platform?The hardware implementation;"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin" this is \b--host-id\b on some systems.]"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin"[o:operating-system?The generic operating system name.]"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin"[h:host-id|id?The host id in hex.]"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin"[d:domain?The domain name returned by \agetdomainname\a(2).]"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin"[R:extended-release?The extended release name.]"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin"[A:everything?Equivalent to \b-snrvmpiohdR\b.]"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin"[f:list?List all \bsysinfo\b(2) names and values, one per line.]"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin"[S:sethost?Set the hostname or nodename to \aname\a. No output is"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin" written to standard output.]:[name]"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin"[+SEE ALSO?\bhostname\b(1), \bgetconf\b(1), \buname\b(2),"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin" \bsysconf\b(2), \bsysinfo\b(2)]"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#if defined(__STDPP__directive) && defined(__STDPP__hide)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin__STDPP__directive pragma pp:hide getdomainname gethostid gethostname sethostname
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#if defined(__STDPP__directive) && defined(__STDPP__hide)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin__STDPP__directive pragma pp:nohide getdomainname gethostid gethostname sethostname
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern int gethostid(void);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char* sys = 0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char* arch = 0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (gethostname(ut->nodename, sizeof(ut->nodename) - 1))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin return -1;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin strncpy(ut->nodename, "local", sizeof(ut->nodename) - 1);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define extra(m) do \
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin } while(0)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define output(f,v,u) do \
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if ((flags&(f))&&(*(v)||(flags&(OPT_all|OPT_total))==OPT_all&&((f)&OPT_standard)||!(flags&(OPT_all|OPT_total)))) \
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (*(v)) \
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin } while (0)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin register long flags = 0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin register int sep = 0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin register int n;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin register char* s;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (!streq(argv[0], s) && (!eaccess(s, X_OK) || !eaccess(s+=4, X_OK)))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (error_info.errors || *argv && (flags || sethost) || sethost && flags)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin error(ERROR_system(1), "%s: cannot set host name", sethost);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin astconflist(sfstdout, NiL, ASTCONF_base|ASTCONF_defined|ASTCONF_lower|ASTCONF_quote|ASTCONF_matchcall, "CS|SI");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin else if (*argv)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin while (s = *argv++)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin *t++ = 'C';
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin *t++ = 'S';
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin *t++ = '_';
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin while (t < e && (n = *s++))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin sfprintf(sfstdout, "%s%c", *(t = astconf(buf, NiL, NiL)) ? t : "unknown", *argv ? ' ' : '\n');
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (sizeof(ut.nodename) > 9 || gethostname(s, sizeof(buf)))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (!*(s = astconf("PLATFORM", NiL, NiL)) && !*(s = astconf("HW_NAME", NiL, NiL)))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin t = (char*)hosttype;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (!(n = *s++))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if ((s - t) > 1)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin else if (!isprint(n))