183f9dfabSGarrett Wollman /* 283f9dfabSGarrett Wollman * Copyright (c) 1980, 1993 383f9dfabSGarrett Wollman * The Regents of the University of California. All rights reserved. 483f9dfabSGarrett Wollman * 583f9dfabSGarrett Wollman * Redistribution and use in source and binary forms, with or without 683f9dfabSGarrett Wollman * modification, are permitted provided that the following conditions 783f9dfabSGarrett Wollman * are met: 883f9dfabSGarrett Wollman * 1. Redistributions of source code must retain the above copyright 983f9dfabSGarrett Wollman * notice, this list of conditions and the following disclaimer. 1083f9dfabSGarrett Wollman * 2. Redistributions in binary form must reproduce the above copyright 1183f9dfabSGarrett Wollman * notice, this list of conditions and the following disclaimer in the 1283f9dfabSGarrett Wollman * documentation and/or other materials provided with the distribution. 1383f9dfabSGarrett Wollman * 3. All advertising materials mentioning features or use of this software 1483f9dfabSGarrett Wollman * must display the following acknowledgement: 1583f9dfabSGarrett Wollman * This product includes software developed by the University of 1683f9dfabSGarrett Wollman * California, Berkeley and its contributors. 1783f9dfabSGarrett Wollman * 4. Neither the name of the University nor the names of its contributors 1883f9dfabSGarrett Wollman * may be used to endorse or promote products derived from this software 1983f9dfabSGarrett Wollman * without specific prior written permission. 2083f9dfabSGarrett Wollman * 2183f9dfabSGarrett Wollman * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 2283f9dfabSGarrett Wollman * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 2383f9dfabSGarrett Wollman * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 2483f9dfabSGarrett Wollman * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 2583f9dfabSGarrett Wollman * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 2683f9dfabSGarrett Wollman * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2783f9dfabSGarrett Wollman * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2883f9dfabSGarrett Wollman * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2983f9dfabSGarrett Wollman * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 3083f9dfabSGarrett Wollman * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 3183f9dfabSGarrett Wollman * SUCH DAMAGE. 3283f9dfabSGarrett Wollman */ 3383f9dfabSGarrett Wollman 3483f9dfabSGarrett Wollman #ifndef lint 3583f9dfabSGarrett Wollman static char copyright[] = 3683f9dfabSGarrett Wollman "@(#) Copyright (c) 1980, 1993\n\ 3783f9dfabSGarrett Wollman The Regents of the University of California. All rights reserved.\n"; 3883f9dfabSGarrett Wollman #endif /* not lint */ 3983f9dfabSGarrett Wollman 4083f9dfabSGarrett Wollman #ifndef lint 4183f9dfabSGarrett Wollman /*static char sccsid[] = "From: @(#)swapon.c 8.1 (Berkeley) 6/5/93";*/ 4283f9dfabSGarrett Wollman static const char rcsid[] = 4383f9dfabSGarrett Wollman "$Id$"; 4483f9dfabSGarrett Wollman #endif /* not lint */ 4583f9dfabSGarrett Wollman 4683f9dfabSGarrett Wollman #include <errno.h> 4783f9dfabSGarrett Wollman #include <stdio.h> 4883f9dfabSGarrett Wollman #include <stdlib.h> 4983f9dfabSGarrett Wollman #include <unistd.h> 5083f9dfabSGarrett Wollman #include <sys/param.h> 5183f9dfabSGarrett Wollman #include <sys/types.h> 5283f9dfabSGarrett Wollman #include <sys/sysctl.h> 5383f9dfabSGarrett Wollman #include <sys/stat.h> 5483f9dfabSGarrett Wollman #include <sysexits.h> 5583f9dfabSGarrett Wollman #include <err.h> 5683f9dfabSGarrett Wollman 5783f9dfabSGarrett Wollman void usage __P((void)) __dead2; 5883f9dfabSGarrett Wollman static char *whoami; 5983f9dfabSGarrett Wollman 6083f9dfabSGarrett Wollman int 6183f9dfabSGarrett Wollman main(int argc, char **argv) 6283f9dfabSGarrett Wollman { 6383f9dfabSGarrett Wollman extern char *optarg; 6483f9dfabSGarrett Wollman extern int optind; 6583f9dfabSGarrett Wollman int ch, verbose, rv; 6683f9dfabSGarrett Wollman struct stat stab; 6783f9dfabSGarrett Wollman int mib[2]; 6883f9dfabSGarrett Wollman 6983f9dfabSGarrett Wollman verbose = rv = 0; 7083f9dfabSGarrett Wollman whoami = argv[0]; 7183f9dfabSGarrett Wollman while ((ch = getopt(argc, argv, "v")) != EOF) 7283f9dfabSGarrett Wollman switch((char)ch) { 7383f9dfabSGarrett Wollman case 'v': 7483f9dfabSGarrett Wollman verbose = 1; 7583f9dfabSGarrett Wollman break; 7683f9dfabSGarrett Wollman case '?': 7783f9dfabSGarrett Wollman default: 7883f9dfabSGarrett Wollman usage(); 7983f9dfabSGarrett Wollman } 8083f9dfabSGarrett Wollman argv += optind; 8183f9dfabSGarrett Wollman 8283f9dfabSGarrett Wollman if (!argv[0] || argv[1]) 8383f9dfabSGarrett Wollman usage(); 8483f9dfabSGarrett Wollman 8583f9dfabSGarrett Wollman if (strcmp(argv[0], "off")) { 8683f9dfabSGarrett Wollman rv = stat(argv[0], &stab); 8783f9dfabSGarrett Wollman if (rv) { 8883f9dfabSGarrett Wollman err(EX_OSFILE, "%s", argv[0]); 8983f9dfabSGarrett Wollman } 9083f9dfabSGarrett Wollman 9183f9dfabSGarrett Wollman if (!S_ISBLK(stab.st_mode)) { 9283f9dfabSGarrett Wollman errx(EX_USAGE, "%s: must specify a block device", 9383f9dfabSGarrett Wollman argv[0]); 9483f9dfabSGarrett Wollman } 9583f9dfabSGarrett Wollman } else { 9683f9dfabSGarrett Wollman stab.st_rdev = NODEV; 9783f9dfabSGarrett Wollman } 9883f9dfabSGarrett Wollman 9983f9dfabSGarrett Wollman mib[0] = CTL_KERN; 10083f9dfabSGarrett Wollman mib[1] = KERN_DUMPDEV; 10183f9dfabSGarrett Wollman 10283f9dfabSGarrett Wollman rv = sysctl(mib, 2, (void *)0, (size_t *)0, &stab.st_rdev, 10383f9dfabSGarrett Wollman sizeof stab.st_rdev); 10483f9dfabSGarrett Wollman if (rv) { 10583f9dfabSGarrett Wollman err(EX_OSERR, "sysctl: kern.dumpdev"); 10683f9dfabSGarrett Wollman } 10783f9dfabSGarrett Wollman 10883f9dfabSGarrett Wollman if (verbose) { 10983f9dfabSGarrett Wollman if (stab.st_rdev == NODEV) { 11083f9dfabSGarrett Wollman printf("%s: crash dumps disabled\n", whoami); 11183f9dfabSGarrett Wollman } else { 11283f9dfabSGarrett Wollman printf("%s: crash dumps to %s (%lu, %lu)\n", 11383f9dfabSGarrett Wollman whoami, argv[0], 11483f9dfabSGarrett Wollman (unsigned long)major(stab.st_rdev), 11583f9dfabSGarrett Wollman (unsigned long)minor(stab.st_rdev)); 11683f9dfabSGarrett Wollman } 11783f9dfabSGarrett Wollman } 11883f9dfabSGarrett Wollman 11983f9dfabSGarrett Wollman return 0; 12083f9dfabSGarrett Wollman } 12183f9dfabSGarrett Wollman 12283f9dfabSGarrett Wollman void 12383f9dfabSGarrett Wollman usage() 12483f9dfabSGarrett Wollman { 12583f9dfabSGarrett Wollman fprintf(stderr, 12683f9dfabSGarrett Wollman "usage: %s [-v] special_file\n" 12783f9dfabSGarrett Wollman " %s [-v] off\n", whoami, whoami); 12883f9dfabSGarrett Wollman exit(EX_USAGE); 12983f9dfabSGarrett Wollman } 130