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 f5dbfe789e
commit c0c5113989
10 changed files with 279 additions and 199 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 telnet \
telnetd term termcap tget time touch \
truncate udpstat umount uname \
truncate udpstat umount \
unstack update uud uue version vol \
whereis which 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

@ -19,7 +19,7 @@ MAN= ash.1 at.1 \
stty.1 svc.1 svrctl.1 \
synctree.1 sysenv.1 sz.1 tail.1 telnet.1 template.1 \
term.1 termcap.1 tget.1 time.1 true.1 \
truncate.1 umount.1 uname.1 \
truncate.1 umount.1 \
uud.1 uue.1 vol.1 whereis.1 which.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

@ -239,6 +239,7 @@
2012/10/17 12:00:00,usr.bin/tsort
2012/10/17 12:00:00,usr.bin/tty
2012/10/17 12:00:00,usr.bin/ul
2013/09/06 12:00:00,usr.bin/uname
2012/10/17 12:00:00,usr.bin/unifdef
2010/10/06 07:59:18,usr.bin/uniq
2013/10/23 12:00:00,usr.bin/units

View file

@ -26,12 +26,12 @@ SUBDIR= asa \
sdiff sed seq shlock \
shuffle soelim sort split stat su \
tee tic tput \
tr tsort tty ul unexpand unifdef \
tr tsort tty ul uname unexpand unifdef \
toproto \
uniq units unvis unzip users \
uuidgen vis \
\
wc what whatis who whois \
wc what who whois \
write xargs xinstall xstr yes
.if !defined(__MINIX)
@ -42,10 +42,11 @@ SUBDIR+= ministat
# Minix commands
SUBDIR+= top
SUBDIR+= toproto
# LSC FIXME For now we compile unconditionnaly apropos even if we
# LSC FIXME For now we compile unconditionnaly apropos and whatis even if we
# do not have whatis
SUBDIR+= apropos
SUBDIR+= apropos whatis
.endif # defie
.if (${MKMAKEMANDB} == "no")

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);
}