Importing usr.bin/uname

Change-Id: I4c316221e288edd839e26a2af4cb59f28bf722c1
This commit is contained in:
Thomas Cort 2013-09-06 21:40:42 -04:00 committed by Lionel Sambuc
parent 070e42545f
commit f6568d3e0a
10 changed files with 275 additions and 196 deletions

View File

@ -27,7 +27,7 @@ SUBDIR= add_route arp ash at backup btrace \
stty svclog svrctl swifi synctree sysenv \
syslogd tail tcpd tcpdp tcpstat tee telnet \
telnetd term termcap tget time touch \
truncate tty udpstat umount uname \
truncate tty udpstat umount \
unstack update uud uue version vol \
whereis which write writeisofs fetch \
zdump zmodem pkgin_cd pkgin_all \

View File

@ -1,6 +0,0 @@
PROG= uname
MAN=
LINKS+= ${BINDIR}/uname ${BINDIR}/arch
.include <bsd.prog.mk>

View File

@ -1,128 +0,0 @@
/* uname - print system name Author: Earl Chew */
/* Print the following system information as returned by the uname()
* function:
*
* system name Minix
* node name 10.0.2.15
* release name 3.2.1
* version Minix 3.2.1 (GENERIC)
* machine name i686
* arch i386 (Minix specific)
*/
#include <sys/types.h>
#include <sys/utsname.h>
#include <stdarg.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
/* Define the uname components. */
#define ALL ((unsigned) 0x1F)
#define SYSNAME ((unsigned) 0x01)
#define NODENAME ((unsigned) 0x02)
#define RELEASE ((unsigned) 0x04)
#define VERSION ((unsigned) 0x08)
#define U_MACHINE ((unsigned) 0x10)
#define ARCH ((unsigned) 0x20)
int main(int argc, char **argv );
void print(int fd, ... );
void usage(void );
#ifdef __STDC__
void print(int fd, ...)
#else
void print(fd)
int fd;
#endif
{
/* Print a sequence of strings onto the named channel. */
va_list argp;
char *p;
va_start(argp, fd);
while (1) {
p = va_arg(argp, char *);
if (p == (char *) NULL) break;
write(fd, p, strlen(p));
}
va_end(argp);
}
char *name;
void usage()
{
print(STDERR_FILENO, "Usage: ", name, " -snrvmpa\n", (char *) NULL);
exit(EXIT_FAILURE);
}
int main(argc, argv)
int argc;
char **argv;
{
int info;
char *p;
struct utsname un;
name = strrchr(argv[0], '/');
if (name == NULL) name = argv[0]; else name++;
for (info = 0; argc > 1; argc--, argv++) {
if (argv[1][0] == '-') {
for (p = &argv[1][1]; *p; p++) {
switch (*p) {
case 'a': info |= ALL; break;
case 'm': info |= U_MACHINE; break;
case 'n': info |= NODENAME; break;
case 'r': info |= RELEASE; break;
case 's': info |= SYSNAME; break;
case 'v': info |= VERSION; break;
case 'p': info |= ARCH; break;
default: usage();
}
}
} else {
usage();
}
}
if (info == 0) info = strcmp(name, "arch") == 0 ? ARCH : SYSNAME;
if (uname(&un) != 0) {
print(STDERR_FILENO, "unable to determine uname values\n", (char *) NULL);
exit(EXIT_FAILURE);
}
if ((info & SYSNAME) != 0)
print(STDOUT_FILENO, un.sysname, (char *) NULL);
if ((info & NODENAME) != 0) {
if ((info & (SYSNAME)) != 0)
print(STDOUT_FILENO, " ", (char *) NULL);
print(STDOUT_FILENO, un.nodename, (char *) NULL);
}
if ((info & RELEASE) != 0) {
if ((info & (SYSNAME|NODENAME)) != 0)
print(STDOUT_FILENO, " ", (char *) NULL);
print(STDOUT_FILENO, un.release, (char *) NULL);
}
if ((info & VERSION) != 0) {
if ((info & (SYSNAME|NODENAME|RELEASE)) != 0)
print(STDOUT_FILENO, " ", (char *) NULL);
print(STDOUT_FILENO, un.version, (char *) NULL);
}
if ((info & U_MACHINE) != 0) {
if ((info & (SYSNAME|NODENAME|RELEASE|VERSION)) != 0)
print(STDOUT_FILENO, " ", (char *) NULL);
print(STDOUT_FILENO, un.machine, (char *) NULL);
}
if ((info & ARCH) != 0) {
if ((info & (SYSNAME|NODENAME|RELEASE|VERSION|U_MACHINE)) != 0)
print(STDOUT_FILENO, " ", (char *) NULL);
print(STDOUT_FILENO, un.arch, (char *) NULL);
}
print(STDOUT_FILENO, "\n", (char *) NULL);
return EXIT_SUCCESS;
}

View File

@ -18,7 +18,7 @@ MAN= ash.1 at.1 \
split.1 stty.1 svc.1 svrctl.1 \
synctree.1 sysenv.1 sz.1 tail.1 tee.1 telnet.1 template.1 \
term.1 termcap.1 tget.1 time.1 true.1 \
truncate.1 tty.1 umount.1 uname.1 \
truncate.1 tty.1 umount.1 \
uud.1 uue.1 vol.1 whereis.1 which.1 \
write.1 yap.1 linkfarm.1 pkg_view.1

View File

@ -1,59 +0,0 @@
.TH UNAME 1
.SH NAME
uname, arch \- system info
.SH SYNOPSIS
\fBuname\fR [\fB\-snrvmpa\fR]\fR
.br
\fBarch\fR [\fB\-snrvmpa\fR]\fR
.br
.de FL
.TP
\\fB\\$1\\fR
\\$2
..
.de EX
.TP 20
\\fB\\$1\\fR
# \\$2
..
.SH OPTIONS
.TP 5
.B \-s
# System name
.TP 5
.B \-n
# Node/network name
.TP 5
.B \-r
# Operating system release
.TP 5
.B \-v
# Operating system version
.TP 5
.B \-m
# Machine type
.TP 5
.B \-p
# Processor family
.TP 5
.B \-a
# Short for \fB\-snrvm\fR
.SH EXAMPLES
.TP 20
.B uname -n
# Print the name of the system
.TP 20
.B arch
# Print the name of the system architecture
.SH DESCRIPTION
.PP
\fIUname\fP and \fIarch\fP give information about the system. The options
indicate which information strings must be printed. These strings are always
in the same order. \fIUname\fP and \fIarch\fP only differ w.r.t. the default
string to print, \fB\-s\fP and \fB\-p\fP respectively.
.PP
The strings are compiled into the commands except for the node name, it is
obtained from the file \fI/etc/hostname.file\fP. \fBUname \-m\fP should
return the actual machine type, not the same string as with \fB\-p\fP.
.SH "SEE ALSO"
.BR uname (3).

View File

@ -193,6 +193,7 @@
2012/10/17 12:00:00,usr.bin/tput
2012/10/17 12:00:00,usr.bin/tr
2012/10/17 12:00:00,usr.bin/tsort
2013/09/06 12:00:00,usr.bin/uname
2010/10/06 07:59:18,usr.bin/uniq
2012/10/17 12:00:00,usr.bin/wc
2013/03/22 12:00:00,usr.bin/whatis

View File

@ -28,7 +28,7 @@ SUBDIR= \
tic tput \
tr tsort unexpand \
toproto \
uniq \
uname uniq \
\
wc whatis who \
xargs xinstall yes

10
usr.bin/uname/Makefile Normal file
View File

@ -0,0 +1,10 @@
# $NetBSD: Makefile,v 1.3 1997/01/09 20:23:11 tls Exp $
# from: @(#)Makefile 5.3 (Berkeley) 5/11/90
PROG= uname
.if defined(__MINIX)
LINKS+= ${BINDIR}/uname ${BINDIR}/arch
.endif # __MINIX
.include <bsd.prog.mk>

86
usr.bin/uname/uname.1 Normal file
View File

@ -0,0 +1,86 @@
.\" $NetBSD: uname.1,v 1.12 2005/03/27 18:41:22 peter Exp $
.\"
.\" Copyright (c) 1990 The Regents of the University of California.
.\" All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\" notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\" notice, this list of conditions and the following disclaimer in the
.\" documentation and/or other materials provided with the distribution.
.\" 3. Neither the name of the University nor the names of its contributors
.\" may be used to endorse or promote products derived from this software
.\" without specific prior written permission.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
.\" from: @(#)du.1 6.13 (Berkeley) 6/20/91
.\" $NetBSD: uname.1,v 1.12 2005/03/27 18:41:22 peter Exp $
.\"
.Dd November 9, 1998
.Dt UNAME 1
.Os
.Sh NAME
.Nm uname
.Nd Print operating system name
.Sh SYNOPSIS
.Nm
.Op Fl amnprsv
.Sh DESCRIPTION
The
.Nm
utility writes symbols representing one or more system characteristics
to the standard output.
.Pp
The following options are available:
.Bl -tag -width indent
.It Fl a
Behave as though all of the options
.Fl mnrsv
were specified.
.It Fl m
print the machine hardware name.
.It Fl n
print the nodename (the nodename may be a name
that the system is known by to a communications
network).
.It Fl p
print the machine processor architecture name.
.It Fl r
print the operating system release.
.It Fl s
print the operating system name.
.It Fl v
print the operating system version.
.El
.Pp
If no options are specified,
.Nm
prints the operating system name as if the
.Fl s
option had been specified.
.Sh SEE ALSO
.Xr hostname 1 ,
.Xr machine 1 ,
.Xr uname 3
.Sh STANDARDS
The
.Nm
utility conforms to
.St -p1003.2-92 .
The
.Fl p
option is an extension to the standard.

175
usr.bin/uname/uname.c Normal file
View File

@ -0,0 +1,175 @@
/* $NetBSD: uname.c,v 1.11 2011/09/06 18:35:13 joerg Exp $ */
/*
* Copyright (c) 1994 Winning Strategies, Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by Winning Strategies, Inc.
* 4. The name of Winning Strategies, Inc. may not be used to endorse or
* promote products derived from this software without specific prior
* written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
#ifndef lint
__RCSID("$NetBSD: uname.c,v 1.11 2011/09/06 18:35:13 joerg Exp $");
#endif /* not lint */
#include <sys/param.h>
#include <limits.h>
#include <locale.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <err.h>
#ifdef __minix
#include <string.h>
#else /* !__minix */
#include <sys/sysctl.h>
#endif /* !__minix */
#include <sys/utsname.h>
__dead static void usage(void);
/* Note that PRINT_MACHINE_ARCH is excluded from PRINT_ALL! */
#define PRINT_SYSNAME 0x01
#define PRINT_NODENAME 0x02
#define PRINT_RELEASE 0x04
#define PRINT_VERSION 0x08
#define PRINT_MACHINE 0x10
#define PRINT_MACHINE_ARCH 0x20
#define PRINT_ALL \
(PRINT_SYSNAME|PRINT_NODENAME|PRINT_RELEASE|PRINT_VERSION|PRINT_MACHINE)
int
main(int argc, char **argv)
{
struct utsname u;
char machine_arch[SYS_NMLN];
int c;
int space = 0;
int print_mask = 0;
(void)setlocale(LC_ALL, "");
while ((c = getopt(argc,argv,"amnprsv")) != -1) {
switch (c) {
case 'a':
print_mask |= PRINT_ALL;
break;
case 'm':
print_mask |= PRINT_MACHINE;
break;
case 'n':
print_mask |= PRINT_NODENAME;
break;
case 'p':
print_mask |= PRINT_MACHINE_ARCH;
break;
case 'r':
print_mask |= PRINT_RELEASE;
break;
case 's':
print_mask |= PRINT_SYSNAME;
break;
case 'v':
print_mask |= PRINT_VERSION;
break;
default:
usage();
/* NOTREACHED */
}
}
if (optind != argc) {
usage();
/* NOTREACHED */
}
if (!print_mask) {
#ifdef __minix
setprogname(argv[0]);
/* When executed via the `arch` symlink, do `uname -p` */
if (getprogname() != NULL && strcmp(getprogname(), "arch") == 0)
print_mask = PRINT_MACHINE_ARCH;
else
#endif /* __minix */
print_mask = PRINT_SYSNAME;
}
if (uname(&u) != 0) {
err(EXIT_FAILURE, "uname");
/* NOTREACHED */
}
if (print_mask & PRINT_MACHINE_ARCH) {
#ifdef __minix
strlcpy(machine_arch, u.arch, sizeof(machine_arch));
#else /* !__minix */
int mib[2] = { CTL_HW, HW_MACHINE_ARCH };
size_t len = sizeof (machine_arch);
if (sysctl(mib, sizeof (mib) / sizeof (mib[0]), machine_arch,
&len, NULL, 0) < 0)
err(EXIT_FAILURE, "sysctl");
#endif /* !__minix */
}
if (print_mask & PRINT_SYSNAME) {
space++;
fputs(u.sysname, stdout);
}
if (print_mask & PRINT_NODENAME) {
if (space++) putchar(' ');
fputs(u.nodename, stdout);
}
if (print_mask & PRINT_RELEASE) {
if (space++) putchar(' ');
fputs(u.release, stdout);
}
if (print_mask & PRINT_VERSION) {
if (space++) putchar(' ');
fputs(u.version, stdout);
}
if (print_mask & PRINT_MACHINE) {
if (space++) putchar(' ');
fputs(u.machine, stdout);
}
if (print_mask & PRINT_MACHINE_ARCH) {
if (space++) putchar(' ');
fputs(machine_arch, stdout);
}
putchar('\n');
exit(EXIT_SUCCESS);
/* NOTREACHED */
}
static void
usage(void)
{
fprintf(stderr, "usage: uname [-amnprsv]\n");
exit(EXIT_FAILURE);
}