From c0c51139899f26f3f0a0e41af8a3179ca3cee1e1 Mon Sep 17 00:00:00 2001 From: Thomas Cort Date: Fri, 6 Sep 2013 21:40:42 -0400 Subject: [PATCH] Importing usr.bin/uname Change-Id: I4c316221e288edd839e26a2af4cb59f28bf722c1 --- commands/Makefile | 2 +- commands/uname/Makefile | 6 -- commands/uname/uname.c | 128 ----------------------------- man/man1/Makefile | 2 +- man/man1/uname.1 | 59 -------------- releasetools/nbsd_ports | 1 + usr.bin/Makefile | 9 ++- usr.bin/uname/Makefile | 10 +++ usr.bin/uname/uname.1 | 86 ++++++++++++++++++++ usr.bin/uname/uname.c | 175 ++++++++++++++++++++++++++++++++++++++++ 10 files changed, 279 insertions(+), 199 deletions(-) delete mode 100644 commands/uname/Makefile delete mode 100644 commands/uname/uname.c delete mode 100644 man/man1/uname.1 create mode 100644 usr.bin/uname/Makefile create mode 100644 usr.bin/uname/uname.1 create mode 100644 usr.bin/uname/uname.c diff --git a/commands/Makefile b/commands/Makefile index 7510c0c23..53fad8f6d 100644 --- a/commands/Makefile +++ b/commands/Makefile @@ -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 \ diff --git a/commands/uname/Makefile b/commands/uname/Makefile deleted file mode 100644 index 1f96ebae1..000000000 --- a/commands/uname/Makefile +++ /dev/null @@ -1,6 +0,0 @@ -PROG= uname -MAN= - -LINKS+= ${BINDIR}/uname ${BINDIR}/arch - -.include diff --git a/commands/uname/uname.c b/commands/uname/uname.c deleted file mode 100644 index c80d15319..000000000 --- a/commands/uname/uname.c +++ /dev/null @@ -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 -#include -#include -#include -#include -#include - -/* 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; -} diff --git a/man/man1/Makefile b/man/man1/Makefile index dd79a8e32..5b2282f92 100644 --- a/man/man1/Makefile +++ b/man/man1/Makefile @@ -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 diff --git a/man/man1/uname.1 b/man/man1/uname.1 deleted file mode 100644 index 7d02b8ac9..000000000 --- a/man/man1/uname.1 +++ /dev/null @@ -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). diff --git a/releasetools/nbsd_ports b/releasetools/nbsd_ports index 80b6af0a9..14f047d5e 100644 --- a/releasetools/nbsd_ports +++ b/releasetools/nbsd_ports @@ -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 diff --git a/usr.bin/Makefile b/usr.bin/Makefile index ae7dc7d1b..20903c571 100644 --- a/usr.bin/Makefile +++ b/usr.bin/Makefile @@ -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") diff --git a/usr.bin/uname/Makefile b/usr.bin/uname/Makefile new file mode 100644 index 000000000..44b3a6d53 --- /dev/null +++ b/usr.bin/uname/Makefile @@ -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 diff --git a/usr.bin/uname/uname.1 b/usr.bin/uname/uname.1 new file mode 100644 index 000000000..8253ea99f --- /dev/null +++ b/usr.bin/uname/uname.1 @@ -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. diff --git a/usr.bin/uname/uname.c b/usr.bin/uname/uname.c new file mode 100644 index 000000000..233fc6814 --- /dev/null +++ b/usr.bin/uname/uname.c @@ -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 +#ifndef lint +__RCSID("$NetBSD: uname.c,v 1.11 2011/09/06 18:35:13 joerg Exp $"); +#endif /* not lint */ + +#include +#include +#include +#include +#include +#include +#include + +#ifdef __minix +#include +#else /* !__minix */ +#include +#endif /* !__minix */ +#include + +__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); +}