xref: /netbsd-src/usr.bin/at/panic.c (revision d9047ae69bf92f9915971c583f8f86db60a3ee29)
1*d9047ae6Sdholland /*	$NetBSD: panic.c,v 1.14 2016/03/13 00:32:09 dholland Exp $	*/
25c84ea4dSglass 
3940867e3Scgd /*
4940867e3Scgd  * panic.c - terminate fast in case of error
5940867e3Scgd  * Copyright (c) 1993 by Thomas Koenig
6940867e3Scgd  *
7940867e3Scgd  * Redistribution and use in source and binary forms, with or without
8940867e3Scgd  * modification, are permitted provided that the following conditions
9940867e3Scgd  * are met:
10940867e3Scgd  * 1. Redistributions of source code must retain the above copyright
11940867e3Scgd  *    notice, this list of conditions and the following disclaimer.
12940867e3Scgd  * 2. The name of the author(s) may not be used to endorse or promote
13940867e3Scgd  *    products derived from this software without specific prior written
14940867e3Scgd  *    permission.
15940867e3Scgd  *
16940867e3Scgd  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
17940867e3Scgd  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
18940867e3Scgd  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
19ce0c0e02Schristos  * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
20940867e3Scgd  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
21940867e3Scgd  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22940867e3Scgd  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23940867e3Scgd  * THEORY OF LIABILITY, WETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24940867e3Scgd  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25940867e3Scgd  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26940867e3Scgd  */
27940867e3Scgd 
28940867e3Scgd /* System Headers */
29940867e3Scgd 
3027707948Smjl #include <err.h>
31940867e3Scgd #include <errno.h>
325f256bd3Schristos #include <stdbool.h>
33940867e3Scgd #include <stdio.h>
34940867e3Scgd #include <stdlib.h>
35940867e3Scgd #include <unistd.h>
36940867e3Scgd 
37940867e3Scgd /* Local headers */
38940867e3Scgd 
39940867e3Scgd #include "panic.h"
40940867e3Scgd #include "at.h"
41ce0c0e02Schristos #include "privs.h"
42940867e3Scgd 
43940867e3Scgd /* File scope variables */
44940867e3Scgd 
455c84ea4dSglass #ifndef lint
46ce0c0e02Schristos #if 0
47ce0c0e02Schristos static char rcsid[] = "$OpenBSD: panic.c,v 1.4 1997/03/01 23:40:09 millert Exp $";
48ce0c0e02Schristos #else
49*d9047ae6Sdholland __RCSID("$NetBSD: panic.c,v 1.14 2016/03/13 00:32:09 dholland Exp $");
50ce0c0e02Schristos #endif
515c84ea4dSglass #endif
52940867e3Scgd 
53940867e3Scgd /* Global functions */
54940867e3Scgd 
555f256bd3Schristos __dead
56940867e3Scgd void
panic(const char * a)575f256bd3Schristos panic(const char *a)
58940867e3Scgd {
597750ecc1Smrg 
60ce0c0e02Schristos 	/*
61ce0c0e02Schristos 	 * Something fatal has happened, print error message and exit.
62940867e3Scgd 	 */
63ce0c0e02Schristos 	if (fcreated) {
64*d9047ae6Sdholland 		privs_enter();
65ca282f35Schristos 		(void)unlink(atfile);
66*d9047ae6Sdholland 		privs_exit();
67ce0c0e02Schristos 	}
68a93b9bedSlukem 	errx(EXIT_FAILURE, "%s", a);
69940867e3Scgd }
70940867e3Scgd 
715f256bd3Schristos __dead
72940867e3Scgd void
perr(const char * a)735f256bd3Schristos perr(const char *a)
74940867e3Scgd {
757750ecc1Smrg 
76ce0c0e02Schristos 	/*
77ce0c0e02Schristos 	 * Some operating system error; print error message and exit.
78940867e3Scgd 	 */
79940867e3Scgd 	perror(a);
80ce0c0e02Schristos 	if (fcreated) {
81*d9047ae6Sdholland 		privs_enter();
82ca282f35Schristos 		(void)unlink(atfile);
83*d9047ae6Sdholland 		privs_exit();
84ce0c0e02Schristos 	}
85940867e3Scgd 	exit(EXIT_FAILURE);
86940867e3Scgd }
87940867e3Scgd 
885f256bd3Schristos __dead
89940867e3Scgd void
privs_fail(const char * msg)90*d9047ae6Sdholland privs_fail(const char *msg)
91*d9047ae6Sdholland {
92*d9047ae6Sdholland 	perr(msg);
93*d9047ae6Sdholland }
94*d9047ae6Sdholland 
95*d9047ae6Sdholland __dead
96*d9047ae6Sdholland void
usage(void)979ff98d4dSmjl usage(void)
98940867e3Scgd {
997750ecc1Smrg 
100ce0c0e02Schristos 	/* Print usage and exit.  */
1015f256bd3Schristos 	(void)fprintf(stderr,
1025f256bd3Schristos 	    "usage: at [-bdlmrVv] [-f file] [-q queue] -t [[CC]YY]MMDDhhmm[.SS]\n"
103625282a3Swiz 	    "       at [-bdlmrVv] [-f file] [-q queue] time\n"
104ce0c0e02Schristos 	    "       at [-V] -c job [job ...]\n"
105625282a3Swiz 	    "       atq [-Vv] [-q queue]\n"
106ce0c0e02Schristos 	    "       atrm [-V] job [job ...]\n"
107625282a3Swiz 	    "       batch [-mVv] [-f file] [-q queue] [-t [[CC]YY]MMDDhhmm[.SS]]\n"
108625282a3Swiz 	    "       batch [-mVv] [-f file] [-q queue] [time]\n");
109940867e3Scgd 	exit(EXIT_FAILURE);
110940867e3Scgd }
111