1
0
mirror of https://git.FreeBSD.org/src.git synced 2024-12-27 11:55:06 +00:00

Add an option to display the current dump device via dumpon -l.

MFC after:	2 weeks
This commit is contained in:
Alfred Perlstein 2012-11-01 18:59:19 +00:00
parent 33bfa8dc1d
commit f6848434fe
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=242451
2 changed files with 49 additions and 3 deletions

View File

@ -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 reported by the
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

View File

@ -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();