Author: peter
Date: Wed Nov 20 17:46:23 2013
New Revision: 258394
URL: http://svnweb.freebsd.org/changeset/base/258394

Log:
  MFC r256557: add uname flags to access userland's __FreeBSD_version more
  conveniently than the traditional way of scripts parsing #include files.
  
  Approved by:  re (hrs)

Modified:
  stable/10/usr.bin/uname/uname.1
  stable/10/usr.bin/uname/uname.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/usr.bin/uname/uname.1
==============================================================================
--- stable/10/usr.bin/uname/uname.1     Wed Nov 20 16:42:01 2013        
(r258393)
+++ stable/10/usr.bin/uname/uname.1     Wed Nov 20 17:46:23 2013        
(r258394)
@@ -28,7 +28,7 @@
 .\"    @(#)uname.1     8.3 (Berkeley) 4/8/94
 .\" $FreeBSD$
 .\"
-.Dd January 26, 2010
+.Dd November 20, 2013
 .Dt UNAME 1
 .Os
 .Sh NAME
@@ -36,7 +36,7 @@
 .Nd display information about the system
 .Sh SYNOPSIS
 .Nm
-.Op Fl aimnoprsv
+.Op Fl aiKmnoprsUv
 .Sh DESCRIPTION
 The
 .Nm
@@ -55,6 +55,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 o
 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,10 @@ specification.
 The
 .Nm
 command appeared in PWB UNIX.
+.Pp
+The
+.Fl K
+and
+.Fl U
+extension flags appeared in
+.Fx 10.0 .

Modified: stable/10/usr.bin/uname/uname.c
==============================================================================
--- stable/10/usr.bin/uname/uname.c     Wed Nov 20 16:42:01 2013        
(r258393)
+++ stable/10/usr.bin/uname/uname.c     Wed Nov 20 17:46:23 2013        
(r258394)
@@ -54,6 +54,8 @@ static const char sccsid[] = "@(#)uname.
 #include <stdlib.h>
 #include <unistd.h>
 
+#include <osreldate.h>
+
 #define        MFLAG   0x01
 #define        NFLAG   0x02
 #define        PFLAG   0x04
@@ -61,10 +63,12 @@ static const char sccsid[] = "@(#)uname.
 #define        SFLAG   0x10
 #define        VFLAG   0x20
 #define        IFLAG   0x40
+#define        UFLAG   0x80
+#define        KFLAG   0x100
 
 typedef void (*get_t)(void);
 static get_t get_ident, get_platform, get_hostname, get_arch,
-    get_release, get_sysname, get_version;
+    get_release, get_sysname, get_kernvers, get_uservers, get_version;
 
 static void native_ident(void);
 static void native_platform(void);
@@ -73,11 +77,13 @@ static void native_arch(void);
 static void native_release(void);
 static void native_sysname(void);
 static void native_version(void);
+static void native_kernvers(void);
+static void native_uservers(void);
 static void print_uname(u_int);
 static void setup_get(void);
 static void usage(void);
 
-static char *ident, *platform, *hostname, *arch, *release, *sysname, *version;
+static char *ident, *platform, *hostname, *arch, *release, *sysname, *version, 
*kernvers, *uservers;
 static int space;
 
 int
@@ -89,7 +95,7 @@ main(int argc, char *argv[])
        setup_get();
        flags = 0;
 
-       while ((ch = getopt(argc, argv, "aimnoprsv")) != -1)
+       while ((ch = getopt(argc, argv, "aiKmnoprsUv")) != -1)
                switch(ch) {
                case 'a':
                        flags |= (MFLAG | NFLAG | RFLAG | SFLAG | VFLAG);
@@ -97,6 +103,9 @@ main(int argc, char *argv[])
                case 'i':
                        flags |= IFLAG;
                        break;
+               case 'K':
+                       flags |= KFLAG;
+                       break;
                case 'm':
                        flags |= MFLAG;
                        break;
@@ -113,6 +122,9 @@ main(int argc, char *argv[])
                case 'o':
                        flags |= SFLAG;
                        break;
+               case 'U':
+                       flags |= UFLAG;
+                       break;
                case 'v':
                        flags |= VFLAG;
                        break;
@@ -153,6 +165,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)              \
@@ -176,6 +190,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");
 }
 
@@ -244,8 +260,26 @@ NATIVE_SYSCTLNAME_GET(ident, "kern.ident
 } NATIVE_SET;
 
 static void
+native_uservers(void)
+{
+       static char buf[128];
+
+       snprintf(buf, sizeof(buf), "%d", __FreeBSD_version);
+       uservers = buf;
+}
+
+static void
+native_kernvers(void)
+{
+       static char buf[128];
+
+       snprintf(buf, sizeof(buf), "%d", getosreldate());
+       kernvers = buf;
+}
+
+static void
 usage(void)
 {
-       fprintf(stderr, "usage: uname [-aimnoprsv]\n");
+       fprintf(stderr, "usage: uname [-aiKmnoprsUv]\n");
        exit(1);
 }
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to