dumpon(8): Add "dumpoff" variant to be "dumpon off"
[dragonfly.git] / sbin / dumpon / dumpon.c
CommitLineData
984263bc
MD
1/*
2 * Copyright (c) 1980, 1993
3 * The Regents of the University of California. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
dc71b7ab 13 * 3. Neither the name of the University nor the names of its contributors
984263bc
MD
14 * may be used to endorse or promote products derived from this software
15 * without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
21 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27 * SUCH DAMAGE.
1de703da 28 *
1de703da
MD
29 * @(#)swapon.c 8.1 (Berkeley) 6/5/93
30 * $FreeBSD: src/sbin/dumpon/dumpon.c,v 1.10.2.2 2001/07/30 10:30:05 dd Exp $
984263bc
MD
31 */
32
984263bc
MD
33#include <err.h>
34#include <stdio.h>
35#include <stdlib.h>
03f2fdd2 36#include <stdbool.h>
984263bc
MD
37#include <string.h>
38#include <unistd.h>
f2d62663 39#include <fstab.h>
984263bc
MD
40#include <sys/param.h>
41#include <sys/sysctl.h>
42#include <sys/stat.h>
43#include <sysexits.h>
44
03f2fdd2 45static void usage(void) __dead2;
984263bc
MD
46
47int
48main(int argc, char **argv)
49{
50 int ch, verbose, rv;
51 struct stat stab;
52 int mib[2];
03f2fdd2
AL
53 char *path, *p;
54 bool is_dumpoff;
55
56 if (strstr((p = strrchr(argv[0], '/')) ? p+1 : argv[0],
57 "dumpoff") != 0) {
58 is_dumpoff = true;
59 } else {
60 is_dumpoff = false;
61 }
984263bc
MD
62
63 verbose = rv = 0;
f2d62663 64 while ((ch = getopt(argc, argv, "v")) != -1) {
03f2fdd2 65 switch (ch) {
984263bc
MD
66 case 'v':
67 verbose = 1;
68 break;
69 case '?':
70 default:
71 usage();
72 }
f2d62663 73 }
03f2fdd2 74 argc -= optind;
984263bc
MD
75 argv += optind;
76
03f2fdd2 77 if ((is_dumpoff && argc != 0) || (!is_dumpoff && argc != 1))
984263bc
MD
78 usage();
79
f2d62663 80 path = argv[0];
03f2fdd2 81 if (is_dumpoff || strcmp(path, "off") == 0) {
f2d62663
MD
82 stab.st_rdev = NODEV;
83 } else {
84 path = getdevpath(path, 0);
85 rv = stat(path, &stab);
86 if (rv)
87 err(EX_OSFILE, "%s", path);
984263bc
MD
88
89 if (!S_ISCHR(stab.st_mode)) {
90 errx(EX_USAGE,
91 "%s: must specify a character disk device",
f2d62663 92 path);
984263bc 93 }
984263bc
MD
94 }
95
96 mib[0] = CTL_KERN;
97 mib[1] = KERN_DUMPDEV;
98
60233e58 99 rv = sysctl(mib, 2, NULL, NULL, &stab.st_rdev, sizeof stab.st_rdev);
984263bc
MD
100 if (rv) {
101 err(EX_OSERR, "sysctl: kern.dumpdev");
102 }
103
104 if (verbose) {
105 if (stab.st_rdev == NODEV) {
106 printf("dumpon: crash dumps disabled\n");
107 } else {
7fd902c9 108 printf("dumpon: crash dumps to %s (%lu, %#lx)\n",
f2d62663 109 path,
984263bc
MD
110 (unsigned long)major(stab.st_rdev),
111 (unsigned long)minor(stab.st_rdev));
112 }
113 }
114
115 return 0;
116}
117
03f2fdd2 118static void
b5744197 119usage(void)
984263bc
MD
120{
121 fprintf(stderr,
122 "usage: dumpon [-v] special_file\n"
03f2fdd2
AL
123 " dumpon [-v] off\n"
124 " dumpoff [-v]\n");
984263bc
MD
125 exit(EX_USAGE);
126}