summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKiyoshi Aman <kiyoshi.aman+adelie@gmail.com>2019-07-20 15:57:24 -0500
committerKiyoshi Aman <kiyoshi.aman+adelie@gmail.com>2019-07-20 15:57:24 -0500
commit48809202858c5b24383b3d8622f0130679971fa4 (patch)
tree760481c2b1516ca5cae98f372e3c3e346066721e
parent9fbfdbc5316981cdd27525320c0fe3740e9d086f (diff)
downloaduserland-48809202858c5b24383b3d8622f0130679971fa4.tar.gz
userland-48809202858c5b24383b3d8622f0130679971fa4.tar.bz2
userland-48809202858c5b24383b3d8622f0130679971fa4.tar.xz
userland-48809202858c5b24383b3d8622f0130679971fa4.zip
bin/uname: add POSIX-compliant uname(1)
-rw-r--r--bin/uname/uname.186
-rw-r--r--bin/uname/uname.c112
-rw-r--r--bin/uname/uname.gpr6
3 files changed, 204 insertions, 0 deletions
diff --git a/bin/uname/uname.1 b/bin/uname/uname.1
new file mode 100644
index 0000000..a8c6659
--- /dev/null
+++ b/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 amnorsv
+.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 mnorsv
+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 o
+print the operating system name (nonstandard; present for compatibility
+with GNU coreutils' implementation).
+.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 uname 3
+.Sh STANDARDS
+The
+.Nm
+utility conforms to
+.St -p1003.2-92 .
+The
+.Fl o
+option is an extension to the standard.
diff --git a/bin/uname/uname.c b/bin/uname/uname.c
new file mode 100644
index 0000000..f648f92
--- /dev/null
+++ b/bin/uname/uname.c
@@ -0,0 +1,112 @@
+/*
+ * Copyright (c) 2019 The Adélie Userland Team. 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 copyright holder 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 COPYRIGHT HOLDERS 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 COPYRIGHT
+ * HOLDER 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.
+ */
+
+#include <sys/utsname.h>
+
+#include <errno.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+void usage(void) __attribute__((noreturn));
+
+int main(int argc, char **argv) {
+ struct utsname sysinfo;
+ bool mflag, nflag, oflag, rflag, sflag, vflag;
+ mflag = nflag = oflag = rflag = sflag = vflag = false;
+ char ch;
+
+ while ((ch = getopt(argc, argv, "amnorsv")) != -1) {
+ switch (ch) {
+ case 'a':
+ mflag = nflag = oflag = rflag = sflag = vflag = true;
+ break;
+ case 'm':
+ mflag = true;
+ break;
+ case 'n':
+ nflag = true;
+ break;
+ case 'o':
+ oflag = true;
+ break;
+ case 'r':
+ rflag = true;
+ break;
+ case 's':
+ sflag = true;
+ break;
+ case 'v':
+ vflag = true;
+ break;
+ default:
+ usage();
+ /*UNREACHABLE*/
+ }
+ }
+ if (!(mflag || nflag || rflag || vflag)) {
+ sflag = true;
+ }
+
+ if (uname(&sysinfo) != 0) {
+ fprintf(stderr, "uname failed: %s\n", strerror(errno));
+ exit(errno);
+ }
+
+ if (sflag) {
+ printf("%s ", sysinfo.sysname);
+ }
+ if (nflag) {
+ printf("%s ", sysinfo.nodename);
+ }
+ if (rflag) {
+ printf("%s ", sysinfo.release);
+ }
+ if (vflag) {
+ printf("%s ", sysinfo.version);
+ }
+ if (mflag) {
+ printf("%s ", sysinfo.machine);
+ }
+ if (oflag) {
+ printf("%s ", sysinfo.sysname);
+ }
+ printf("\n");
+
+ return EXIT_SUCCESS;
+}
+
+void usage(void) {
+ fprintf(stderr, "usage: uname [-amnorsv]\n");
+ exit(1);
+}
diff --git a/bin/uname/uname.gpr b/bin/uname/uname.gpr
new file mode 100644
index 0000000..01ba708
--- /dev/null
+++ b/bin/uname/uname.gpr
@@ -0,0 +1,6 @@
+project uname extends "template/bin.gpr" is
+
+ for Main use (project'Name);
+ for Object_Dir use External ("BUILDROOT") & "/" & project'Name;
+
+end uname;