uname.c revision da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/***********************************************************************
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* *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* A copy of the License is available at *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* http://www.opensource.org/licenses/cpl1.0.txt *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* Information and Software Systems Research *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* AT&T Research *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* Florham Park NJ *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* Glenn Fowler <gsf@research.att.com> *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* David Korn <dgk@research.att.com> *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin***********************************************************************/
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#pragma prototyped
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/*
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * David Korn
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * Glenn Fowler
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * AT&T Research
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * uname
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinstatic const char usage[] =
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin"[-?\n@(#)$Id: uname (AT&T Research) 2007-01-22 $\n]"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinUSAGE_LICENSE
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
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin"[+SEE ALSO?\bhostname\b(1), \bgetconf\b(1), \buname\b(2),"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin" \bsysconf\b(2), \bsysinfo\b(2)]"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#if defined(__STDPP__directive) && defined(__STDPP__hide)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin__STDPP__directive pragma pp:hide getdomainname gethostid gethostname sethostname
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#else
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define getdomainname ______getdomainname
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define gethostid ______gethostid
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define gethostname ______gethostname
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define sethostname ______sethostname
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#endif
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#include <cmd.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#include <ctype.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#include <proc.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#include "FEATURE/utsname"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define MAXHOSTNAME 64
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#if _lib_uname && _sys_utsname
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#include <sys/utsname.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#endif
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#if defined(__STDPP__directive) && defined(__STDPP__hide)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin__STDPP__directive pragma pp:nohide getdomainname gethostid gethostname sethostname
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#else
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#undef getdomainname
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#undef gethostid
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#undef gethostname
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#undef sethostname
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#endif
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#if _lib_getdomainname
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern int getdomainname(char*, size_t);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#endif
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#if _lib_gethostid
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern int gethostid(void);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#endif
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#if _lib_gethostname
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern int gethostname(char*, size_t);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#endif
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#if _lib_sethostname
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern int sethostname(const char*, size_t);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#endif
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#ifndef HOSTTYPE
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define HOSTTYPE "unknown"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#endif
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinstatic const char hosttype[] = HOSTTYPE;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#if !_lib_uname || !_sys_utsname
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#if defined(__STDPP__)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SYSNAME #(getprd machine)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define RELEASE #(getprd release)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define VERSION #(getprd version)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define MACHINE #(getprd architecture)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#else
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SYSNAME ""
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define RELEASE ""
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define VERSION ""
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define MACHINE ""
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#endif
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinstruct utsname
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char* sysname;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char nodename[MAXHOSTNAME];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char* release;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char* version;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char* machine;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin};
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinint
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinuname(register struct utsname* ut)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#ifdef HOSTTYPE
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char* sys = 0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char* arch = 0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (*hosttype)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin static char buf[sizeof(hosttype)];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin strcpy(buf, hosttype);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin sys = buf;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (arch = strchr(sys, '.'))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin *arch++ = 0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (!*arch)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin arch = 0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (!*sys)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin sys = 0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#endif
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#ifdef _lib_gethostname
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (gethostname(ut->nodename, sizeof(ut->nodename) - 1))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin return -1;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#else
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin strncpy(ut->nodename, "local", sizeof(ut->nodename) - 1);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#endif
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#ifdef HOSTTYPE
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (!(ut->sysname = sys))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#endif
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (!*(ut->sysname = SYSNAME))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin ut->sysname = ut->nodename;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#ifdef HOSTTYPE
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (!(ut->machine = arch))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#endif
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin ut->machine = MACHINE;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin ut->release = RELEASE;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin ut->version = VERSION;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin return 0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin}
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#endif
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define OPT_system (1<<0)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define OPT_nodename (1<<1)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define OPT_release (1<<2)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define OPT_version (1<<3)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define OPT_machine (1<<4)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define OPT_processor (1<<5)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define OPT_STANDARD 6
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define OPT_implementation (1<<6)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define OPT_operating_system (1<<7)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define OPT_ALL 8
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define OPT_hostid (1<<8)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define OPT_vendor (1<<9)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define OPT_domain (1<<10)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define OPT_machine_type (1<<11)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define OPT_base (1<<12)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define OPT_extended_release (1<<13)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define OPT_extra (1<<14)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define OPT_TOTAL 15
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define OPT_all (1L<<29)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define OPT_total (1L<<30)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define OPT_standard ((1<<OPT_STANDARD)-1)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#ifndef MACHINE
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#if defined(__STDPP__)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define MACHINE #(getprd architecture)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#else
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define MACHINE ""
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#endif
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#endif
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#ifndef HOSTTYPE
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define HOSTTYPE "unknown"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#endif
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define extra(m) do \
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin { \
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if ((char*)&ut.m[sizeof(ut.m)] > last) \
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin last = (char*)&ut.m[sizeof(ut.m)]; \
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin } while(0)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define output(f,v,u) do \
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin { \
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if ((flags&(f))&&(*(v)||(flags&(OPT_all|OPT_total))==OPT_all&&((f)&OPT_standard)||!(flags&(OPT_all|OPT_total)))) \
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin { \
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (sep) \
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin sfputc(sfstdout, ' '); \
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin else \
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin sep = 1; \
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (*(v)) \
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin sfputr(sfstdout, v, -1); \
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin else \
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin sfprintf(sfstdout, "[%s]", u); \
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin } \
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin } while (0)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinint
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinb_uname(int argc, char** argv, void* context)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin register long flags = 0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin register int sep = 0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin register int n;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin register char* s;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char* t;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char* e;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char* sethost = 0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int list = 0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin struct utsname ut;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char buf[257];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin cmdinit(argc, argv, context, ERROR_CATALOG, 0);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin for (;;)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin switch (optget(argv, usage))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin case 'a':
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin flags |= OPT_all|((1L<<OPT_ALL)-1);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin continue;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin case 'b':
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin flags |= OPT_base;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin continue;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin case 'c':
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin flags |= OPT_vendor;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin continue;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin case 'd':
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin flags |= OPT_domain;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin continue;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin case 'f':
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin list = 1;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin continue;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin case 'h':
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin flags |= OPT_hostid;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin continue;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin case 'i':
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin flags |= OPT_implementation;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin continue;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin case 'm':
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin flags |= OPT_machine;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin continue;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin case 'n':
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin flags |= OPT_nodename;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin continue;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin case 'o':
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin flags |= OPT_operating_system;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin continue;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin case 'p':
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin flags |= OPT_processor;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin continue;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin case 'r':
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin flags |= OPT_release;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin continue;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin case 's':
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin flags |= OPT_system;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin continue;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin case 't':
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin flags |= OPT_machine_type;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin continue;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin case 'v':
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin flags |= OPT_version;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin continue;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin case 'x':
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin flags |= OPT_extra;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin continue;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin case 'A':
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin flags |= OPT_total|((1L<<OPT_TOTAL)-1);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin continue;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin case 'R':
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin flags |= OPT_extended_release;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin continue;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin case 'S':
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin sethost = opt_info.arg;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin continue;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin case ':':
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin s = "/usr/bin/uname";
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (!streq(argv[0], s) && (!eaccess(s, X_OK) || !eaccess(s+=4, X_OK)))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin argv[0] = s;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin return procrun(s, argv);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin error(2, "%s", opt_info.arg);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin break;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin case '?':
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin error(ERROR_usage(2), "%s", opt_info.arg);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin break;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin break;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin argv += opt_info.index;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (error_info.errors || *argv && (flags || sethost) || sethost && flags)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin error(ERROR_usage(2), "%s", optusage(NiL));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (sethost)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#if _lib_sethostname
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (sethostname(sethost, strlen(sethost) + 1))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#else
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#ifdef ENOSYS
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin errno = ENOSYS;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#else
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin errno = EPERM;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#endif
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#endif
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin error(ERROR_system(1), "%s: cannot set host name", sethost);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin else if (list)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin astconflist(sfstdout, NiL, ASTCONF_base|ASTCONF_defined|ASTCONF_lower|ASTCONF_quote|ASTCONF_matchcall, "CS|SI");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin else if (*argv)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin e = &buf[sizeof(buf)-1];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin while (s = *argv++)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin t = buf;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin *t++ = 'C';
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin *t++ = 'S';
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin *t++ = '_';
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin while (t < e && (n = *s++))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin *t++ = islower(n) ? toupper(n) : n;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin *t = 0;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin sfprintf(sfstdout, "%s%c", *(t = astconf(buf, NiL, NiL)) ? t : "unknown", *argv ? ' ' : '\n');
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin else
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin s = buf;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (!flags)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin flags = OPT_system;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin memzero(&ut, sizeof(ut));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (uname(&ut) < 0)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin error(ERROR_usage(2), "information unavailable");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin output(OPT_system, ut.sysname, "sysname");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (flags & OPT_nodename)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#if !_mem_nodeext_utsname && _lib_gethostname
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (sizeof(ut.nodename) > 9 || gethostname(s, sizeof(buf)))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#endif
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin s = ut.nodename;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin output(OPT_nodename, s, "nodename");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin output(OPT_release, ut.release, "release");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin output(OPT_version, ut.version, "version");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin output(OPT_machine, ut.machine, "machine");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (flags & OPT_processor)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (!*(s = astconf("ARCHITECTURE", NiL, NiL)))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin s = ut.machine;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin output(OPT_processor, s, "processor");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (flags & OPT_implementation)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (!*(s = astconf("PLATFORM", NiL, NiL)) && !*(s = astconf("HW_NAME", NiL, NiL)))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (t = strchr(hosttype, '.'))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin t++;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin else
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin t = (char*)hosttype;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin strncpy(s = buf, t, sizeof(buf) - 1);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin output(OPT_implementation, s, "implementation");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (flags & OPT_operating_system)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin s = astconf("OPERATING_SYSTEM", NiL, NiL);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (!*s)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#ifdef _UNAME_os_DEFAULT
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin s = _UNAME_os_DEFAULT;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#else
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin s = ut.sysname;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#endif
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin output(OPT_operating_system, s, "operating-system");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (flags & OPT_extended_release)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin s = astconf("RELEASE", NiL, NiL);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin output(OPT_extended_release, s, "extended-release");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#if _mem_idnumber_utsname
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin output(OPT_hostid, ut.idnumber, "hostid");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#else
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (flags & OPT_hostid)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (!*(s = astconf("HW_SERIAL", NiL, NiL)))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#if _lib_gethostid
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin sfsprintf(s = buf, sizeof(buf), "%08x", gethostid());
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#else
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin /*NOP*/;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#endif
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin output(OPT_hostid, s, "hostid");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#endif
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (flags & OPT_vendor)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin s = astconf("HW_PROVIDER", NiL, NiL);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin output(OPT_vendor, s, "vendor");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (flags & OPT_domain)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (!*(s = astconf("SRPC_DOMAIN", NiL, NiL)))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#if _lib_getdomainname
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin getdomainname(s, sizeof(buf));
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#else
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin /*NOP*/;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#endif
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin output(OPT_domain, s, "domain");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#if _mem_m_type_utsname
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin s = ut.m_type;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#else
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin s = astconf("MACHINE", NiL, NiL);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#endif
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin output(OPT_machine_type, s, "m_type");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#if _mem_base_rel_utsname
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin s = ut.base_rel;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#else
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin s = astconf("BASE", NiL, NiL);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#endif
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin output(OPT_base, s, "base_rel");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (flags & OPT_extra)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char* last = (char*)&ut;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin extra(sysname);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin extra(nodename);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin extra(release);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin extra(version);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin extra(machine);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#if _mem_idnumber_utsname
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin extra(idnumber);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#endif
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#if _mem_m_type_utsname
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin extra(m_type);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#endif
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#if _mem_base_rel_utsname
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin extra(base_rel);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#endif
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (last < ((char*)(&ut + 1)))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin s = t = last;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin while (s < (char*)(&ut + 1))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (!(n = *s++))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if ((s - t) > 1)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin {
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (sep)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin sfputc(sfstdout, ' ');
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin else
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin sep = 1;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin sfputr(sfstdout, t, -1);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin t = s;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin else if (!isprint(n))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin break;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (sep)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin sfputc(sfstdout, '\n');
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin return error_info.errors;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin}