da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/***********************************************************************
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* This software is part of the ast package *
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner* Copyright (c) 1992-2010 AT&T Intellectual Property *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* and is licensed under the *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* Common Public License, Version 1.0 *
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin* by AT&T Intellectual Property *
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[] =
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin"[-?\n@(#)$Id: uname (AT&T Research) 2007-04-19 $\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"
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner" separated, on a single line. When more than one option is specified"
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]"
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin"\n"
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin"\n[ name ... ]\n"
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin"\n"
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
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzextern long 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;
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin return sh_run(context, argc, 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;
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin sfprintf(sfstdout, "%s%c", *(t = astconf(buf, NiL, NiL)) ? t : *(t = astconf(buf+3, 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}