Author: alfred
Date: Thu Nov  1 18:59:19 2012
New Revision: 242451
URL: http://svn.freebsd.org/changeset/base/242451

Log:
  Add an option to display the current dump device via dumpon -l.
  
  MFC after:    2 weeks

Modified:
  head/sbin/dumpon/dumpon.8
  head/sbin/dumpon/dumpon.c
Directory Properties:
  head/sbin/dumpon/   (props changed)

Modified: head/sbin/dumpon/dumpon.8
==============================================================================
--- head/sbin/dumpon/dumpon.8   Thu Nov  1 18:55:17 2012        (r242450)
+++ head/sbin/dumpon/dumpon.8   Thu Nov  1 18:59:19 2012        (r242451)
@@ -41,6 +41,8 @@
 .Nm
 .Op Fl v
 .Cm off
+.Nm
+.Fl l
 .Sh DESCRIPTION
 The
 .Nm
@@ -72,6 +74,13 @@ total amount of physical memory as repor
 variable.
 .Pp
 The
+.Fl l
+flag causes
+.Nm
+to print the current dump device or _PATH_DEVNULL ("/dev/null") if no device is
+configured.
+.Pp
+The
 .Fl v
 flag causes
 .Nm

Modified: head/sbin/dumpon/dumpon.c
==============================================================================
--- head/sbin/dumpon/dumpon.c   Thu Nov  1 18:55:17 2012        (r242450)
+++ head/sbin/dumpon/dumpon.c   Thu Nov  1 18:59:19 2012        (r242451)
@@ -46,6 +46,7 @@ __FBSDID("$FreeBSD$");
 #include <sys/sysctl.h>
 
 #include <err.h>
+#include <errno.h>
 #include <fcntl.h>
 #include <paths.h>
 #include <stdint.h>
@@ -60,9 +61,10 @@ static int   verbose;
 static void
 usage(void)
 {
-       fprintf(stderr, "%s\n%s\n",
+       fprintf(stderr, "%s\n%s\n%s\n",
            "usage: dumpon [-v] special_file",
-           "       dumpon [-v] off");
+           "       dumpon [-v] off",
+           "       dumpon -l");
        exit(EX_USAGE);
 }
 
@@ -92,15 +94,45 @@ check_size(int fd, const char *fn)
        }
 }
 
+static void
+listdumpdev(void)
+{
+       char dumpdev[PATH_MAX];
+       size_t len;
+       const char *sysctlname = "kern.shutdown.dumpdevname";
+
+       len = sizeof(dumpdev);
+       if (sysctlbyname(sysctlname, &dumpdev, &len, NULL, 0) != 0) {
+               if (errno == ENOMEM) {
+                       err(EX_OSERR, "Kernel returned too large of a buffer 
for '%s'\n",
+                               sysctlname);
+               } else {
+                       err(EX_OSERR, "Sysctl get '%s'\n", sysctlname);
+               }
+       }
+       if (verbose) {
+               printf("kernel dumps on ");
+       }
+       if (strlen(dumpdev) == 0) {
+               printf("%s\n", _PATH_DEVNULL);
+       } else {
+               printf("%s\n", dumpdev);
+       }
+}
+
 int
 main(int argc, char *argv[])
 {
        int ch;
        int i, fd;
        u_int u;
+       int do_listdumpdev = 0;
 
-       while ((ch = getopt(argc, argv, "v")) != -1)
+       while ((ch = getopt(argc, argv, "lv")) != -1)
                switch((char)ch) {
+               case 'l':
+                       do_listdumpdev = 1;
+                       break;
                case 'v':
                        verbose = 1;
                        break;
@@ -111,6 +143,11 @@ main(int argc, char *argv[])
        argc -= optind;
        argv += optind;
 
+       if (do_listdumpdev) {
+               listdumpdev();
+               exit(EX_OK);
+       }
+
        if (argc != 1)
                usage();
 
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to