1*3bfd7915Sjoris /* $OpenBSD: fatal.c,v 1.14 2008/06/12 03:54:43 joris Exp $ */
20450b43bSjoris /*
30450b43bSjoris * Copyright (c) 2002 Markus Friedl. All rights reserved.
40450b43bSjoris *
50450b43bSjoris * Redistribution and use in source and binary forms, with or without
60450b43bSjoris * modification, are permitted provided that the following conditions
70450b43bSjoris * are met:
80450b43bSjoris * 1. Redistributions of source code must retain the above copyright
90450b43bSjoris * notice, this list of conditions and the following disclaimer.
100450b43bSjoris * 2. Redistributions in binary form must reproduce the above copyright
110450b43bSjoris * notice, this list of conditions and the following disclaimer in the
120450b43bSjoris * documentation and/or other materials provided with the distribution.
130450b43bSjoris *
140450b43bSjoris * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
150450b43bSjoris * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
160450b43bSjoris * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
170450b43bSjoris * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
180450b43bSjoris * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
190450b43bSjoris * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
200450b43bSjoris * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
210450b43bSjoris * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
220450b43bSjoris * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
230450b43bSjoris * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
240450b43bSjoris */
250450b43bSjoris
261f8531bdSotto #include <sys/stat.h>
271f8531bdSotto
281d062063Sray #include <err.h>
291f8531bdSotto #include <fcntl.h>
301f8531bdSotto #include <stdlib.h>
310450b43bSjoris
320450b43bSjoris #include "cvs.h"
339fac60a5Sjoris #include "remote.h"
340450b43bSjoris
350450b43bSjoris /* Fatal messages. This function never returns. */
360450b43bSjoris
370450b43bSjoris void
fatal(const char * fmt,...)380450b43bSjoris fatal(const char *fmt,...)
390450b43bSjoris {
408c13001eSray static int been_here;
410450b43bSjoris va_list args;
4230d6d63aSjoris
438c13001eSray /* Fatal should not loop, (the functions below can fatal). */
448c13001eSray if (been_here++)
451d062063Sray errx(1, "fatal loop");
468c13001eSray
47*3bfd7915Sjoris if (sig_received != 0) {
48*3bfd7915Sjoris cvs_log(LP_ABORT, "received signal %d", sig_received);
49*3bfd7915Sjoris } else {
500450b43bSjoris va_start(args, fmt);
514d5fe279Sjoris cvs_vlog(LP_ABORT, fmt, args);
520450b43bSjoris va_end(args);
53*3bfd7915Sjoris }
543ad3fb45Sjoris
55b0d19690Stobias if (current_cvsroot != NULL)
563ad3fb45Sjoris cvs_cleanup();
573ad3fb45Sjoris
58134ccf9fSniallo exit(1);
590450b43bSjoris }
60