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:
parent
33bfa8dc1d
commit
f6848434fe
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=242451
@ -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
|
||||
|
@ -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();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user