|
Packit Service |
a8c26c |
/***********************************************************************
|
|
Packit Service |
a8c26c |
* *
|
|
Packit Service |
a8c26c |
* This software is part of the ast package *
|
|
Packit Service |
a8c26c |
* Copyright (c) 1992-2012 AT&T Intellectual Property *
|
|
Packit Service |
a8c26c |
* and is licensed under the *
|
|
Packit Service |
a8c26c |
* Eclipse Public License, Version 1.0 *
|
|
Packit Service |
a8c26c |
* by AT&T Intellectual Property *
|
|
Packit Service |
a8c26c |
* *
|
|
Packit Service |
a8c26c |
* A copy of the License is available at *
|
|
Packit Service |
a8c26c |
* http://www.eclipse.org/org/documents/epl-v10.html *
|
|
Packit Service |
a8c26c |
* (with md5 checksum b35adb5213ca9657e911e9befb180842) *
|
|
Packit Service |
a8c26c |
* *
|
|
Packit Service |
a8c26c |
* Information and Software Systems Research *
|
|
Packit Service |
a8c26c |
* AT&T Research *
|
|
Packit Service |
a8c26c |
* Florham Park NJ *
|
|
Packit Service |
a8c26c |
* *
|
|
Packit Service |
a8c26c |
* Glenn Fowler <gsf@research.att.com> *
|
|
Packit Service |
a8c26c |
* David Korn <dgk@research.att.com> *
|
|
Packit Service |
a8c26c |
* *
|
|
Packit Service |
a8c26c |
***********************************************************************/
|
|
Packit Service |
a8c26c |
#pragma prototyped
|
|
Packit Service |
a8c26c |
/*
|
|
Packit Service |
a8c26c |
* David Korn
|
|
Packit Service |
a8c26c |
* Glenn Fowler
|
|
Packit Service |
a8c26c |
* AT&T Research
|
|
Packit Service |
a8c26c |
*
|
|
Packit Service |
a8c26c |
* uname
|
|
Packit Service |
a8c26c |
*/
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
static const char usage[] =
|
|
Packit Service |
a8c26c |
"[-?\n@(#)$Id: uname (AT&T Research) 2007-04-19 $\n]"
|
|
Packit Service |
a8c26c |
USAGE_LICENSE
|
|
Packit Service |
a8c26c |
"[+NAME?uname - identify the current system ]"
|
|
Packit Service |
a8c26c |
"[+DESCRIPTION?By default \buname\b writes the operating system name to"
|
|
Packit Service |
a8c26c |
" standard output. When options are specified, one or more"
|
|
Packit Service |
a8c26c |
" system characteristics are written to standard output, space"
|
|
Packit Service |
a8c26c |
" separated, on a single line. When more than one option is specified"
|
|
Packit Service |
a8c26c |
" the output is in the order specfied by the \b-A\b option below."
|
|
Packit Service |
a8c26c |
" Unsupported option values are listed as \a[option]]\a. If any unknown"
|
|
Packit Service |
a8c26c |
" options are specified then the local \b/usr/bin/uname\b is called.]"
|
|
Packit Service |
a8c26c |
"[+?If any \aname\a operands are specified then the \bsysinfo\b(2) values"
|
|
Packit Service |
a8c26c |
" for each \aname\a are listed, separated by space, on one line."
|
|
Packit Service |
a8c26c |
" \bgetconf\b(1), a pre-existing \astandard\a interface, provides"
|
|
Packit Service |
a8c26c |
" access to the same information; vendors should spend more time"
|
|
Packit Service |
a8c26c |
" using standards than inventing them.]"
|
|
Packit Service |
a8c26c |
"[+?Selected information is printed in the same order as the options below.]"
|
|
Packit Service |
a8c26c |
"[a:all?Equivalent to \b-snrvmpio\b.]"
|
|
Packit Service |
a8c26c |
"[s:system|sysname|kernel-name?The detailed kernel name. This is the default.]"
|
|
Packit Service |
a8c26c |
"[n:nodename?The hostname or nodename.]"
|
|
Packit Service |
a8c26c |
"[r:release|kernel-release?The kernel release level.]"
|
|
Packit Service |
a8c26c |
"[v:version|kernel-version?The kernel version level.]"
|
|
Packit Service |
a8c26c |
"[m:machine?The name of the hardware type the system is running on.]"
|
|
Packit Service |
a8c26c |
"[p:processor?The name of the processor instruction set architecture.]"
|
|
Packit Service |
a8c26c |
"[i:implementation|platform|hardware-platform?The hardware implementation;"
|
|
Packit Service |
a8c26c |
" this is \b--host-id\b on some systems.]"
|
|
Packit Service |
a8c26c |
"[o:operating-system?The generic operating system name.]"
|
|
Packit Service |
a8c26c |
"[h:host-id|id?The host id in hex.]"
|
|
Packit Service |
a8c26c |
"[d:domain?The domain name returned by \agetdomainname\a(2).]"
|
|
Packit Service |
a8c26c |
"[R:extended-release?The extended release name.]"
|
|
Packit Service |
a8c26c |
"[A:everything?Equivalent to \b-snrvmpiohdR\b.]"
|
|
Packit Service |
a8c26c |
"[f:list?List all \bsysinfo\b(2) names and values, one per line.]"
|
|
Packit Service |
a8c26c |
"[S:sethost?Set the hostname or nodename to \aname\a. No output is"
|
|
Packit Service |
a8c26c |
" written to standard output.]:[name]"
|
|
Packit Service |
a8c26c |
"\n"
|
|
Packit Service |
a8c26c |
"\n[ name ... ]\n"
|
|
Packit Service |
a8c26c |
"\n"
|
|
Packit Service |
a8c26c |
"[+SEE ALSO?\bhostname\b(1), \bgetconf\b(1), \buname\b(2),"
|
|
Packit Service |
a8c26c |
" \bsysconf\b(2), \bsysinfo\b(2)]"
|
|
Packit Service |
a8c26c |
;
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
#if defined(__STDPP__directive) && defined(__STDPP__hide)
|
|
Packit Service |
a8c26c |
__STDPP__directive pragma pp:hide getdomainname gethostid gethostname sethostname
|
|
Packit Service |
a8c26c |
#else
|
|
Packit Service |
a8c26c |
#define getdomainname ______getdomainname
|
|
Packit Service |
a8c26c |
#define gethostid ______gethostid
|
|
Packit Service |
a8c26c |
#define gethostname ______gethostname
|
|
Packit Service |
a8c26c |
#define sethostname ______sethostname
|
|
Packit Service |
a8c26c |
#endif
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
#include <cmd.h>
|
|
Packit Service |
a8c26c |
#include <ctype.h>
|
|
Packit Service |
a8c26c |
#include <proc.h>
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
#include "FEATURE/utsname"
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
#define MAXHOSTNAME 64
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
#if _lib_uname && _sys_utsname
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
#include <sys/utsname.h>
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
#endif
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
#if defined(__STDPP__directive) && defined(__STDPP__hide)
|
|
Packit Service |
a8c26c |
__STDPP__directive pragma pp:nohide getdomainname gethostid gethostname sethostname
|
|
Packit Service |
a8c26c |
#else
|
|
Packit Service |
a8c26c |
#undef getdomainname
|
|
Packit Service |
a8c26c |
#undef gethostid
|
|
Packit Service |
a8c26c |
#undef gethostname
|
|
Packit Service |
a8c26c |
#undef sethostname
|
|
Packit Service |
a8c26c |
#endif
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
#if _lib_getdomainname
|
|
Packit Service |
a8c26c |
extern int getdomainname(char*, size_t);
|
|
Packit Service |
a8c26c |
#endif
|
|
Packit Service |
a8c26c |
#if _lib_gethostid
|
|
Packit Service |
a8c26c |
extern long gethostid(void);
|
|
Packit Service |
a8c26c |
#endif
|
|
Packit Service |
a8c26c |
#if _lib_gethostname
|
|
Packit Service |
a8c26c |
extern int gethostname(char*, size_t);
|
|
Packit Service |
a8c26c |
#endif
|
|
Packit Service |
a8c26c |
#if _lib_sethostname
|
|
Packit Service |
a8c26c |
extern int sethostname(const char*, size_t);
|
|
Packit Service |
a8c26c |
#endif
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
#ifndef HOSTTYPE
|
|
Packit Service |
a8c26c |
#define HOSTTYPE "unknown"
|
|
Packit Service |
a8c26c |
#endif
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
static const char hosttype[] = HOSTTYPE;
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
#if !_lib_uname || !_sys_utsname
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
#if defined(__STDPP__)
|
|
Packit Service |
a8c26c |
#define SYSNAME #(getprd machine)
|
|
Packit Service |
a8c26c |
#define RELEASE #(getprd release)
|
|
Packit Service |
a8c26c |
#define VERSION #(getprd version)
|
|
Packit Service |
a8c26c |
#define MACHINE #(getprd architecture)
|
|
Packit Service |
a8c26c |
#else
|
|
Packit Service |
a8c26c |
#define SYSNAME ""
|
|
Packit Service |
a8c26c |
#define RELEASE ""
|
|
Packit Service |
a8c26c |
#define VERSION ""
|
|
Packit Service |
a8c26c |
#define MACHINE ""
|
|
Packit Service |
a8c26c |
#endif
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
struct utsname
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
char* sysname;
|
|
Packit Service |
a8c26c |
char nodename[MAXHOSTNAME];
|
|
Packit Service |
a8c26c |
char* release;
|
|
Packit Service |
a8c26c |
char* version;
|
|
Packit Service |
a8c26c |
char* machine;
|
|
Packit Service |
a8c26c |
};
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
int
|
|
Packit Service |
a8c26c |
uname(register struct utsname* ut)
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
#ifdef HOSTTYPE
|
|
Packit Service |
a8c26c |
char* sys = 0;
|
|
Packit Service |
a8c26c |
char* arch = 0;
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
if (*hosttype)
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
static char buf[sizeof(hosttype)];
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
strcpy(buf, hosttype);
|
|
Packit Service |
a8c26c |
sys = buf;
|
|
Packit Service |
a8c26c |
if (arch = strchr(sys, '.'))
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
*arch++ = 0;
|
|
Packit Service |
a8c26c |
if (!*arch)
|
|
Packit Service |
a8c26c |
arch = 0;
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
if (!*sys)
|
|
Packit Service |
a8c26c |
sys = 0;
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
#endif
|
|
Packit Service |
a8c26c |
#ifdef _lib_gethostname
|
|
Packit Service |
a8c26c |
if (gethostname(ut->nodename, sizeof(ut->nodename) - 1))
|
|
Packit Service |
a8c26c |
return -1;
|
|
Packit Service |
a8c26c |
#else
|
|
Packit Service |
a8c26c |
strncpy(ut->nodename, "local", sizeof(ut->nodename) - 1);
|
|
Packit Service |
a8c26c |
#endif
|
|
Packit Service |
a8c26c |
#ifdef HOSTTYPE
|
|
Packit Service |
a8c26c |
if (!(ut->sysname = sys))
|
|
Packit Service |
a8c26c |
#endif
|
|
Packit Service |
a8c26c |
if (!*(ut->sysname = SYSNAME))
|
|
Packit Service |
a8c26c |
ut->sysname = ut->nodename;
|
|
Packit Service |
a8c26c |
#ifdef HOSTTYPE
|
|
Packit Service |
a8c26c |
if (!(ut->machine = arch))
|
|
Packit Service |
a8c26c |
#endif
|
|
Packit Service |
a8c26c |
ut->machine = MACHINE;
|
|
Packit Service |
a8c26c |
ut->release = RELEASE;
|
|
Packit Service |
a8c26c |
ut->version = VERSION;
|
|
Packit Service |
a8c26c |
return 0;
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
#endif
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
#define OPT_system (1<<0)
|
|
Packit Service |
a8c26c |
#define OPT_nodename (1<<1)
|
|
Packit Service |
a8c26c |
#define OPT_release (1<<2)
|
|
Packit Service |
a8c26c |
#define OPT_version (1<<3)
|
|
Packit Service |
a8c26c |
#define OPT_machine (1<<4)
|
|
Packit Service |
a8c26c |
#define OPT_processor (1<<5)
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
#define OPT_STANDARD 6
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
#define OPT_implementation (1<<6)
|
|
Packit Service |
a8c26c |
#define OPT_operating_system (1<<7)
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
#define OPT_ALL 8
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
#define OPT_hostid (1<<8)
|
|
Packit Service |
a8c26c |
#define OPT_vendor (1<<9)
|
|
Packit Service |
a8c26c |
#define OPT_domain (1<<10)
|
|
Packit Service |
a8c26c |
#define OPT_machine_type (1<<11)
|
|
Packit Service |
a8c26c |
#define OPT_base (1<<12)
|
|
Packit Service |
a8c26c |
#define OPT_extended_release (1<<13)
|
|
Packit Service |
a8c26c |
#define OPT_extra (1<<14)
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
#define OPT_TOTAL 15
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
#define OPT_all (1L<<29)
|
|
Packit Service |
a8c26c |
#define OPT_total (1L<<30)
|
|
Packit Service |
a8c26c |
#define OPT_standard ((1<
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
#ifndef MACHINE
|
|
Packit Service |
a8c26c |
#if defined(__STDPP__)
|
|
Packit Service |
a8c26c |
#define MACHINE #(getprd architecture)
|
|
Packit Service |
a8c26c |
#else
|
|
Packit Service |
a8c26c |
#define MACHINE ""
|
|
Packit Service |
a8c26c |
#endif
|
|
Packit Service |
a8c26c |
#endif
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
#ifndef HOSTTYPE
|
|
Packit Service |
a8c26c |
#define HOSTTYPE "unknown"
|
|
Packit Service |
a8c26c |
#endif
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
#define extra(m) do \
|
|
Packit Service |
a8c26c |
{ \
|
|
Packit Service |
a8c26c |
if ((char*)&ut.m[sizeof(ut.m)] > last) \
|
|
Packit Service |
a8c26c |
last = (char*)&ut.m[sizeof(ut.m)]; \
|
|
Packit Service |
a8c26c |
} while(0)
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
#define output(f,v,u) do \
|
|
Packit Service |
a8c26c |
{ \
|
|
Packit Service |
a8c26c |
if ((flags&(f))&&(*(v)||(flags&(OPT_all|OPT_total))==OPT_all&&((f)&OPT_standard)||!(flags&(OPT_all|OPT_total)))) \
|
|
Packit Service |
a8c26c |
{ \
|
|
Packit Service |
a8c26c |
if (sep) \
|
|
Packit Service |
a8c26c |
sfputc(sfstdout, ' '); \
|
|
Packit Service |
a8c26c |
else \
|
|
Packit Service |
a8c26c |
sep = 1; \
|
|
Packit Service |
a8c26c |
if (*(v)) \
|
|
Packit Service |
a8c26c |
sfputr(sfstdout, v, -1); \
|
|
Packit Service |
a8c26c |
else \
|
|
Packit Service |
a8c26c |
sfprintf(sfstdout, "[%s]", u); \
|
|
Packit Service |
a8c26c |
} \
|
|
Packit Service |
a8c26c |
} while (0)
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
int
|
|
Packit Service |
a8c26c |
b_uname(int argc, char** argv, Shbltin_t* context)
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
register long flags = 0;
|
|
Packit Service |
a8c26c |
register int sep = 0;
|
|
Packit Service |
a8c26c |
register int n;
|
|
Packit Service |
a8c26c |
register char* s;
|
|
Packit Service |
a8c26c |
char* t;
|
|
Packit Service |
a8c26c |
char* e;
|
|
Packit Service |
a8c26c |
char* sethost = 0;
|
|
Packit Service |
a8c26c |
int list = 0;
|
|
Packit Service |
a8c26c |
struct utsname ut;
|
|
Packit Service |
a8c26c |
char buf[257];
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
cmdinit(argc, argv, context, ERROR_CATALOG, 0);
|
|
Packit Service |
a8c26c |
for (;;)
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
switch (optget(argv, usage))
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
case 'a':
|
|
Packit Service |
a8c26c |
flags |= OPT_all|((1L<
|
|
Packit Service |
a8c26c |
continue;
|
|
Packit Service |
a8c26c |
case 'b':
|
|
Packit Service |
a8c26c |
flags |= OPT_base;
|
|
Packit Service |
a8c26c |
continue;
|
|
Packit Service |
a8c26c |
case 'c':
|
|
Packit Service |
a8c26c |
flags |= OPT_vendor;
|
|
Packit Service |
a8c26c |
continue;
|
|
Packit Service |
a8c26c |
case 'd':
|
|
Packit Service |
a8c26c |
flags |= OPT_domain;
|
|
Packit Service |
a8c26c |
continue;
|
|
Packit Service |
a8c26c |
case 'f':
|
|
Packit Service |
a8c26c |
list = 1;
|
|
Packit Service |
a8c26c |
continue;
|
|
Packit Service |
a8c26c |
case 'h':
|
|
Packit Service |
a8c26c |
flags |= OPT_hostid;
|
|
Packit Service |
a8c26c |
continue;
|
|
Packit Service |
a8c26c |
case 'i':
|
|
Packit Service |
a8c26c |
flags |= OPT_implementation;
|
|
Packit Service |
a8c26c |
continue;
|
|
Packit Service |
a8c26c |
case 'm':
|
|
Packit Service |
a8c26c |
flags |= OPT_machine;
|
|
Packit Service |
a8c26c |
continue;
|
|
Packit Service |
a8c26c |
case 'n':
|
|
Packit Service |
a8c26c |
flags |= OPT_nodename;
|
|
Packit Service |
a8c26c |
continue;
|
|
Packit Service |
a8c26c |
case 'o':
|
|
Packit Service |
a8c26c |
flags |= OPT_operating_system;
|
|
Packit Service |
a8c26c |
continue;
|
|
Packit Service |
a8c26c |
case 'p':
|
|
Packit Service |
a8c26c |
flags |= OPT_processor;
|
|
Packit Service |
a8c26c |
continue;
|
|
Packit Service |
a8c26c |
case 'r':
|
|
Packit Service |
a8c26c |
flags |= OPT_release;
|
|
Packit Service |
a8c26c |
continue;
|
|
Packit Service |
a8c26c |
case 's':
|
|
Packit Service |
a8c26c |
flags |= OPT_system;
|
|
Packit Service |
a8c26c |
continue;
|
|
Packit Service |
a8c26c |
case 't':
|
|
Packit Service |
a8c26c |
flags |= OPT_machine_type;
|
|
Packit Service |
a8c26c |
continue;
|
|
Packit Service |
a8c26c |
case 'v':
|
|
Packit Service |
a8c26c |
flags |= OPT_version;
|
|
Packit Service |
a8c26c |
continue;
|
|
Packit Service |
a8c26c |
case 'x':
|
|
Packit Service |
a8c26c |
flags |= OPT_extra;
|
|
Packit Service |
a8c26c |
continue;
|
|
Packit Service |
a8c26c |
case 'A':
|
|
Packit Service |
a8c26c |
flags |= OPT_total|((1L<
|
|
Packit Service |
a8c26c |
continue;
|
|
Packit Service |
a8c26c |
case 'R':
|
|
Packit Service |
a8c26c |
flags |= OPT_extended_release;
|
|
Packit Service |
a8c26c |
continue;
|
|
Packit Service |
a8c26c |
case 'S':
|
|
Packit Service |
a8c26c |
sethost = opt_info.arg;
|
|
Packit Service |
a8c26c |
continue;
|
|
Packit Service |
a8c26c |
case ':':
|
|
Packit Service |
a8c26c |
s = "/usr/bin/uname";
|
|
Packit Service |
a8c26c |
if (!streq(argv[0], s) && (!eaccess(s, X_OK) || !eaccess(s+=4, X_OK)))
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
argv[0] = s;
|
|
Packit Service |
a8c26c |
return sh_run(context, argc, argv);
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
error(2, "%s", opt_info.arg);
|
|
Packit Service |
a8c26c |
break;
|
|
Packit Service |
a8c26c |
case '?':
|
|
Packit Service |
a8c26c |
error(ERROR_usage(2), "%s", opt_info.arg);
|
|
Packit Service |
a8c26c |
break;
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
break;
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
argv += opt_info.index;
|
|
Packit Service |
a8c26c |
if (error_info.errors || *argv && (flags || sethost) || sethost && flags)
|
|
Packit Service |
a8c26c |
error(ERROR_usage(2), "%s", optusage(NiL));
|
|
Packit Service |
a8c26c |
if (sethost)
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
#if _lib_sethostname
|
|
Packit Service |
a8c26c |
if (sethostname(sethost, strlen(sethost) + 1))
|
|
Packit Service |
a8c26c |
#else
|
|
Packit Service |
a8c26c |
#ifdef ENOSYS
|
|
Packit Service |
a8c26c |
errno = ENOSYS;
|
|
Packit Service |
a8c26c |
#else
|
|
Packit Service |
a8c26c |
errno = EPERM;
|
|
Packit Service |
a8c26c |
#endif
|
|
Packit Service |
a8c26c |
#endif
|
|
Packit Service |
a8c26c |
error(ERROR_system(1), "%s: cannot set host name", sethost);
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
else if (list)
|
|
Packit Service |
a8c26c |
astconflist(sfstdout, NiL, ASTCONF_base|ASTCONF_defined|ASTCONF_lower|ASTCONF_quote|ASTCONF_matchcall, "CS|SI");
|
|
Packit Service |
a8c26c |
else if (*argv)
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
e = &buf[sizeof(buf)-1];
|
|
Packit Service |
a8c26c |
while (s = *argv++)
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
t = buf;
|
|
Packit Service |
a8c26c |
*t++ = 'C';
|
|
Packit Service |
a8c26c |
*t++ = 'S';
|
|
Packit Service |
a8c26c |
*t++ = '_';
|
|
Packit Service |
a8c26c |
while (t < e && (n = *s++))
|
|
Packit Service |
a8c26c |
*t++ = islower(n) ? toupper(n) : n;
|
|
Packit Service |
a8c26c |
*t = 0;
|
|
Packit Service |
a8c26c |
sfprintf(sfstdout, "%s%c", *(t = astconf(buf, NiL, NiL)) ? t : *(t = astconf(buf+3, NiL, NiL)) ? t : "unknown", *argv ? ' ' : '\n');
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
else
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
s = buf;
|
|
Packit Service |
a8c26c |
if (!flags)
|
|
Packit Service |
a8c26c |
flags = OPT_system;
|
|
Packit Service |
a8c26c |
memzero(&ut, sizeof(ut));
|
|
Packit Service |
a8c26c |
if (uname(&ut) < 0)
|
|
Packit Service |
a8c26c |
error(ERROR_usage(2), "information unavailable");
|
|
Packit Service |
a8c26c |
output(OPT_system, ut.sysname, "sysname");
|
|
Packit Service |
a8c26c |
if (flags & OPT_nodename)
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
#if !_mem_nodeext_utsname && _lib_gethostname
|
|
Packit Service |
a8c26c |
if (sizeof(ut.nodename) > 9 || gethostname(s, sizeof(buf)))
|
|
Packit Service |
a8c26c |
#endif
|
|
Packit Service |
a8c26c |
s = ut.nodename;
|
|
Packit Service |
a8c26c |
output(OPT_nodename, s, "nodename");
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
output(OPT_release, ut.release, "release");
|
|
Packit Service |
a8c26c |
output(OPT_version, ut.version, "version");
|
|
Packit Service |
a8c26c |
output(OPT_machine, ut.machine, "machine");
|
|
Packit Service |
a8c26c |
if (flags & OPT_processor)
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
if (!*(s = astconf("ARCHITECTURE", NiL, NiL)))
|
|
Packit Service |
a8c26c |
s = ut.machine;
|
|
Packit Service |
a8c26c |
output(OPT_processor, s, "processor");
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
if (flags & OPT_implementation)
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
if (!*(s = astconf("PLATFORM", NiL, NiL)) && !*(s = astconf("HW_NAME", NiL, NiL)))
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
if (t = strchr(hosttype, '.'))
|
|
Packit Service |
a8c26c |
t++;
|
|
Packit Service |
a8c26c |
else
|
|
Packit Service |
a8c26c |
t = (char*)hosttype;
|
|
Packit Service |
a8c26c |
strncpy(s = buf, t, sizeof(buf) - 1);
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
output(OPT_implementation, s, "implementation");
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
if (flags & OPT_operating_system)
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
s = astconf("OPERATING_SYSTEM", NiL, NiL);
|
|
Packit Service |
a8c26c |
if (!*s)
|
|
Packit Service |
a8c26c |
#ifdef _UNAME_os_DEFAULT
|
|
Packit Service |
a8c26c |
s = _UNAME_os_DEFAULT;
|
|
Packit Service |
a8c26c |
#else
|
|
Packit Service |
a8c26c |
s = ut.sysname;
|
|
Packit Service |
a8c26c |
#endif
|
|
Packit Service |
a8c26c |
output(OPT_operating_system, s, "operating-system");
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
if (flags & OPT_extended_release)
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
s = astconf("RELEASE", NiL, NiL);
|
|
Packit Service |
a8c26c |
output(OPT_extended_release, s, "extended-release");
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
#if _mem_idnumber_utsname
|
|
Packit Service |
a8c26c |
output(OPT_hostid, ut.idnumber, "hostid");
|
|
Packit Service |
a8c26c |
#else
|
|
Packit Service |
a8c26c |
if (flags & OPT_hostid)
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
if (!*(s = astconf("HW_SERIAL", NiL, NiL)))
|
|
Packit Service |
a8c26c |
#if _lib_gethostid
|
|
Packit Service |
a8c26c |
sfsprintf(s = buf, sizeof(buf), "%08x", gethostid());
|
|
Packit Service |
a8c26c |
#else
|
|
Packit Service |
a8c26c |
/*NOP*/;
|
|
Packit Service |
a8c26c |
#endif
|
|
Packit Service |
a8c26c |
output(OPT_hostid, s, "hostid");
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
#endif
|
|
Packit Service |
a8c26c |
if (flags & OPT_vendor)
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
s = astconf("HW_PROVIDER", NiL, NiL);
|
|
Packit Service |
a8c26c |
output(OPT_vendor, s, "vendor");
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
if (flags & OPT_domain)
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
if (!*(s = astconf("SRPC_DOMAIN", NiL, NiL)))
|
|
Packit Service |
a8c26c |
#if _lib_getdomainname
|
|
Packit Service |
a8c26c |
getdomainname(s, sizeof(buf));
|
|
Packit Service |
a8c26c |
#else
|
|
Packit Service |
a8c26c |
/*NOP*/;
|
|
Packit Service |
a8c26c |
#endif
|
|
Packit Service |
a8c26c |
output(OPT_domain, s, "domain");
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
#if _mem_m_type_utsname
|
|
Packit Service |
a8c26c |
s = ut.m_type;
|
|
Packit Service |
a8c26c |
#else
|
|
Packit Service |
a8c26c |
s = astconf("MACHINE", NiL, NiL);
|
|
Packit Service |
a8c26c |
#endif
|
|
Packit Service |
a8c26c |
output(OPT_machine_type, s, "m_type");
|
|
Packit Service |
a8c26c |
#if _mem_base_rel_utsname
|
|
Packit Service |
a8c26c |
s = ut.base_rel;
|
|
Packit Service |
a8c26c |
#else
|
|
Packit Service |
a8c26c |
s = astconf("BASE", NiL, NiL);
|
|
Packit Service |
a8c26c |
#endif
|
|
Packit Service |
a8c26c |
output(OPT_base, s, "base_rel");
|
|
Packit Service |
a8c26c |
if (flags & OPT_extra)
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
char* last = (char*)&ut;
|
|
Packit Service |
a8c26c |
|
|
Packit Service |
a8c26c |
extra(sysname);
|
|
Packit Service |
a8c26c |
extra(nodename);
|
|
Packit Service |
a8c26c |
extra(release);
|
|
Packit Service |
a8c26c |
extra(version);
|
|
Packit Service |
a8c26c |
extra(machine);
|
|
Packit Service |
a8c26c |
#if _mem_idnumber_utsname
|
|
Packit Service |
a8c26c |
extra(idnumber);
|
|
Packit Service |
a8c26c |
#endif
|
|
Packit Service |
a8c26c |
#if _mem_m_type_utsname
|
|
Packit Service |
a8c26c |
extra(m_type);
|
|
Packit Service |
a8c26c |
#endif
|
|
Packit Service |
a8c26c |
#if _mem_base_rel_utsname
|
|
Packit Service |
a8c26c |
extra(base_rel);
|
|
Packit Service |
a8c26c |
#endif
|
|
Packit Service |
a8c26c |
if (last < ((char*)(&ut + 1)))
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
s = t = last;
|
|
Packit Service |
a8c26c |
while (s < (char*)(&ut + 1))
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
if (!(n = *s++))
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
if ((s - t) > 1)
|
|
Packit Service |
a8c26c |
{
|
|
Packit Service |
a8c26c |
if (sep)
|
|
Packit Service |
a8c26c |
sfputc(sfstdout, ' ');
|
|
Packit Service |
a8c26c |
else
|
|
Packit Service |
a8c26c |
sep = 1;
|
|
Packit Service |
a8c26c |
sfputr(sfstdout, t, -1);
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
t = s;
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
else if (!isprint(n))
|
|
Packit Service |
a8c26c |
break;
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
if (sep)
|
|
Packit Service |
a8c26c |
sfputc(sfstdout, '\n');
|
|
Packit Service |
a8c26c |
}
|
|
Packit Service |
a8c26c |
return error_info.errors;
|
|
Packit Service |
a8c26c |
}
|