summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Wemm <peter@FreeBSD.org>2014-02-11 17:11:54 +0000
committerPeter Wemm <peter@FreeBSD.org>2014-02-11 17:11:54 +0000
commite8e97dc6e416a658abbb556fd9e90b1eb0161768 (patch)
treecaaf04f42982eb7162df69fb046222f40e0ce673
parentf343923e21d525f5a2339b62c078ce6f8bb77a2d (diff)
downloadsrc-test2-e8e97dc6e416a658abbb556fd9e90b1eb0161768.tar.gz
src-test2-e8e97dc6e416a658abbb556fd9e90b1eb0161768.zip
Notes
-rw-r--r--usr.bin/uname/uname.128
-rw-r--r--usr.bin/uname/uname.c41
2 files changed, 65 insertions, 4 deletions
diff --git a/usr.bin/uname/uname.1 b/usr.bin/uname/uname.1
index 2a28464efa23..9d48caed3ba4 100644
--- a/usr.bin/uname/uname.1
+++ b/usr.bin/uname/uname.1
@@ -40,7 +40,7 @@
.Nd display information about the system
.Sh SYNOPSIS
.Nm
-.Op Fl aimnprsv
+.Op Fl aiKmnprsUv
.Sh DESCRIPTION
The
.Nm
@@ -59,6 +59,10 @@ and
were specified.
.It Fl i
Write the kernel ident to standard output.
+.It Fl K
+Write the
+.Fx
+version of the kernel.
.It Fl m
Write the type of the current hardware platform to standard output.
.It Fl n
@@ -70,6 +74,10 @@ Write the current release level of the operating system
to standard output.
.It Fl s
Write the name of the operating system implementation to standard output.
+.It Fl U
+Write the
+.Fx
+version of the user environment.
.It Fl v
Write the version level of this release of the operating system
to standard output.
@@ -79,6 +87,14 @@ If the
.Fl a
flag is specified, or multiple flags are specified, all
output is written on a single line, separated by spaces.
+.Pp
+The
+.Fl K
+and
+.Fl U
+flags are intended to be used for fine grain differentiation of incremental
+.Fx
+development and user visible changes.
.Sh ENVIRONMENT
An environment variable composed of the string
.Ev UNAME_
@@ -91,6 +107,8 @@ of the environment variable.
.Sh EXIT STATUS
.Ex -std
.Sh SEE ALSO
+.Xr feature_present 3 ,
+.Xr getosreldate 3 ,
.Xr sysctl 3 ,
.Xr uname 3 ,
.Xr sysctl 8
@@ -104,3 +122,11 @@ specification.
The
.Nm
command appeared in PWB UNIX.
+.Pp
+The
+.Fl K
+and
+.Fl U
+extension flags were first released in
+.Fx 10.0
+and then ported back to older stable branches.
diff --git a/usr.bin/uname/uname.c b/usr.bin/uname/uname.c
index 81aef452a74e..f752868c994a 100644
--- a/usr.bin/uname/uname.c
+++ b/usr.bin/uname/uname.c
@@ -54,6 +54,8 @@ static const char sccsid[] = "@(#)uname.c 8.2 (Berkeley) 5/4/95";
#include <stdlib.h>
#include <unistd.h>
+#include <osreldate.h>
+
#define MFLAG 0x01
#define NFLAG 0x02
#define PFLAG 0x04
@@ -61,9 +63,12 @@ static const char sccsid[] = "@(#)uname.c 8.2 (Berkeley) 5/4/95";
#define SFLAG 0x10
#define VFLAG 0x20
#define IFLAG 0x40
+#define UFLAG 0x80
+#define KFLAG 0x100
typedef void (*get_t)(void);
-get_t get_ident, get_platform, get_hostname, get_arch, get_release, get_sysname, get_version;
+get_t get_ident, get_platform, get_hostname, get_arch,
+ get_release, get_sysname, get_kernvers, get_uservers, get_version;
void native_ident(void);
void native_platform(void);
@@ -72,11 +77,13 @@ void native_arch(void);
void native_release(void);
void native_sysname(void);
void native_version(void);
+void native_kernvers(void);
+void native_uservers(void);
void print_uname(u_int);
void setup_get(void);
void usage(void);
-char *ident, *platform, *hostname, *arch, *release, *sysname, *version;
+char *ident, *platform, *hostname, *arch, *release, *sysname, *version, *kernvers, *uservers;
int space;
int
@@ -88,7 +95,7 @@ main(int argc, char *argv[])
setup_get();
flags = 0;
- while ((ch = getopt(argc, argv, "aimnprsv")) != -1)
+ while ((ch = getopt(argc, argv, "aiKmnprsUv")) != -1)
switch(ch) {
case 'a':
flags |= (MFLAG | NFLAG | RFLAG | SFLAG | VFLAG);
@@ -96,6 +103,9 @@ main(int argc, char *argv[])
case 'i':
flags |= IFLAG;
break;
+ case 'K':
+ flags |= KFLAG;
+ break;
case 'm':
flags |= MFLAG;
break;
@@ -111,6 +121,9 @@ main(int argc, char *argv[])
case 's':
flags |= SFLAG;
break;
+ case 'U':
+ flags |= UFLAG;
+ break;
case 'v':
flags |= VFLAG;
break;
@@ -151,6 +164,8 @@ setup_get(void)
CHECK_ENV("m", platform);
CHECK_ENV("p", arch);
CHECK_ENV("i", ident);
+ CHECK_ENV("K", kernvers);
+ CHECK_ENV("U", uservers);
}
#define PRINT_FLAG(flags,flag,var) \
@@ -174,6 +189,8 @@ print_uname(u_int flags)
PRINT_FLAG(flags, MFLAG, platform);
PRINT_FLAG(flags, PFLAG, arch);
PRINT_FLAG(flags, IFLAG, ident);
+ PRINT_FLAG(flags, KFLAG, kernvers);
+ PRINT_FLAG(flags, UFLAG, uservers);
printf("\n");
}
@@ -242,6 +259,24 @@ NATIVE_SYSCTLNAME_GET(ident, "kern.ident") {
} NATIVE_SET;
void
+native_uservers(void)
+{
+ static char buf[128];
+
+ snprintf(buf, sizeof(buf), "%d", __FreeBSD_version);
+ uservers = buf;
+}
+
+void
+native_kernvers(void)
+{
+ static char buf[128];
+
+ snprintf(buf, sizeof(buf), "%d", getosreldate());
+ kernvers = buf;
+}
+
+void
usage(void)
{
fprintf(stderr, "usage: uname [-aimnprsv]\n");