xref: /freebsd-src/contrib/mandoc/compat_err.c (revision 61d06d6bd19dafe8ea971dd43e8328fa1b473456)
1*61d06d6bSBaptiste Daroussin #include "config.h"
2*61d06d6bSBaptiste Daroussin 
3*61d06d6bSBaptiste Daroussin #if HAVE_ERR
4*61d06d6bSBaptiste Daroussin 
5*61d06d6bSBaptiste Daroussin int dummy;
6*61d06d6bSBaptiste Daroussin 
7*61d06d6bSBaptiste Daroussin #else
8*61d06d6bSBaptiste Daroussin 
9*61d06d6bSBaptiste Daroussin /* $Id: compat_err.c,v 1.4 2015/11/26 07:42:11 schwarze Exp $ */
10*61d06d6bSBaptiste Daroussin /*
11*61d06d6bSBaptiste Daroussin  * Copyright (c) 1993
12*61d06d6bSBaptiste Daroussin  *      The Regents of the University of California.  All rights reserved.
13*61d06d6bSBaptiste Daroussin  *
14*61d06d6bSBaptiste Daroussin  * Redistribution and use in source and binary forms, with or without
15*61d06d6bSBaptiste Daroussin  * modification, are permitted provided that the following conditions
16*61d06d6bSBaptiste Daroussin  * are met:
17*61d06d6bSBaptiste Daroussin  * 1. Redistributions of source code must retain the above copyright
18*61d06d6bSBaptiste Daroussin  *    notice, this list of conditions and the following disclaimer.
19*61d06d6bSBaptiste Daroussin  * 2. Redistributions in binary form must reproduce the above copyright
20*61d06d6bSBaptiste Daroussin  *    notice, this list of conditions and the following disclaimer in the
21*61d06d6bSBaptiste Daroussin  *    documentation and/or other materials provided with the distribution.
22*61d06d6bSBaptiste Daroussin  * 3. Neither the name of the University nor the names of its contributors
23*61d06d6bSBaptiste Daroussin  *    may be used to endorse or promote products derived from this software
24*61d06d6bSBaptiste Daroussin  *    without specific prior written permission.
25*61d06d6bSBaptiste Daroussin  *
26*61d06d6bSBaptiste Daroussin  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
27*61d06d6bSBaptiste Daroussin  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28*61d06d6bSBaptiste Daroussin  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
29*61d06d6bSBaptiste Daroussin  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
30*61d06d6bSBaptiste Daroussin  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
31*61d06d6bSBaptiste Daroussin  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
32*61d06d6bSBaptiste Daroussin  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
33*61d06d6bSBaptiste Daroussin  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
34*61d06d6bSBaptiste Daroussin  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
35*61d06d6bSBaptiste Daroussin  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
36*61d06d6bSBaptiste Daroussin  * SUCH DAMAGE.
37*61d06d6bSBaptiste Daroussin  */
38*61d06d6bSBaptiste Daroussin 
39*61d06d6bSBaptiste Daroussin #include <errno.h>
40*61d06d6bSBaptiste Daroussin #include <stdarg.h>
41*61d06d6bSBaptiste Daroussin #include <stdio.h>
42*61d06d6bSBaptiste Daroussin #include <stdlib.h>
43*61d06d6bSBaptiste Daroussin #include <string.h>
44*61d06d6bSBaptiste Daroussin 
45*61d06d6bSBaptiste Daroussin static void vwarni(const char *, va_list);
46*61d06d6bSBaptiste Daroussin static void vwarnxi(const char *, va_list);
47*61d06d6bSBaptiste Daroussin 
48*61d06d6bSBaptiste Daroussin static void
49*61d06d6bSBaptiste Daroussin vwarnxi(const char *fmt, va_list ap)
50*61d06d6bSBaptiste Daroussin {
51*61d06d6bSBaptiste Daroussin 	fprintf(stderr, "%s: ", getprogname());
52*61d06d6bSBaptiste Daroussin 	if (fmt != NULL)
53*61d06d6bSBaptiste Daroussin 		vfprintf(stderr, fmt, ap);
54*61d06d6bSBaptiste Daroussin }
55*61d06d6bSBaptiste Daroussin 
56*61d06d6bSBaptiste Daroussin static void
57*61d06d6bSBaptiste Daroussin vwarni(const char *fmt, va_list ap)
58*61d06d6bSBaptiste Daroussin {
59*61d06d6bSBaptiste Daroussin 	int sverrno;
60*61d06d6bSBaptiste Daroussin 
61*61d06d6bSBaptiste Daroussin 	sverrno = errno;
62*61d06d6bSBaptiste Daroussin 	vwarnxi(fmt, ap);
63*61d06d6bSBaptiste Daroussin 	if (fmt != NULL)
64*61d06d6bSBaptiste Daroussin 		fputs(": ", stderr);
65*61d06d6bSBaptiste Daroussin 	fprintf(stderr, "%s\n", strerror(sverrno));
66*61d06d6bSBaptiste Daroussin }
67*61d06d6bSBaptiste Daroussin 
68*61d06d6bSBaptiste Daroussin void
69*61d06d6bSBaptiste Daroussin err(int eval, const char *fmt, ...)
70*61d06d6bSBaptiste Daroussin {
71*61d06d6bSBaptiste Daroussin 	va_list ap;
72*61d06d6bSBaptiste Daroussin 
73*61d06d6bSBaptiste Daroussin 	va_start(ap, fmt);
74*61d06d6bSBaptiste Daroussin 	vwarni(fmt, ap);
75*61d06d6bSBaptiste Daroussin 	va_end(ap);
76*61d06d6bSBaptiste Daroussin 	exit(eval);
77*61d06d6bSBaptiste Daroussin }
78*61d06d6bSBaptiste Daroussin 
79*61d06d6bSBaptiste Daroussin void
80*61d06d6bSBaptiste Daroussin errx(int eval, const char *fmt, ...)
81*61d06d6bSBaptiste Daroussin {
82*61d06d6bSBaptiste Daroussin 	va_list ap;
83*61d06d6bSBaptiste Daroussin 
84*61d06d6bSBaptiste Daroussin 	va_start(ap, fmt);
85*61d06d6bSBaptiste Daroussin 	vwarnxi(fmt, ap);
86*61d06d6bSBaptiste Daroussin 	va_end(ap);
87*61d06d6bSBaptiste Daroussin 	fputc('\n', stderr);
88*61d06d6bSBaptiste Daroussin 	exit(eval);
89*61d06d6bSBaptiste Daroussin }
90*61d06d6bSBaptiste Daroussin 
91*61d06d6bSBaptiste Daroussin void
92*61d06d6bSBaptiste Daroussin warn(const char *fmt, ...)
93*61d06d6bSBaptiste Daroussin {
94*61d06d6bSBaptiste Daroussin 	va_list ap;
95*61d06d6bSBaptiste Daroussin 
96*61d06d6bSBaptiste Daroussin 	va_start(ap, fmt);
97*61d06d6bSBaptiste Daroussin 	vwarni(fmt, ap);
98*61d06d6bSBaptiste Daroussin 	va_end(ap);
99*61d06d6bSBaptiste Daroussin }
100*61d06d6bSBaptiste Daroussin 
101*61d06d6bSBaptiste Daroussin void
102*61d06d6bSBaptiste Daroussin warnx(const char *fmt, ...)
103*61d06d6bSBaptiste Daroussin {
104*61d06d6bSBaptiste Daroussin 	va_list ap;
105*61d06d6bSBaptiste Daroussin 
106*61d06d6bSBaptiste Daroussin 	va_start(ap, fmt);
107*61d06d6bSBaptiste Daroussin 	vwarnxi(fmt, ap);
108*61d06d6bSBaptiste Daroussin 	va_end(ap);
109*61d06d6bSBaptiste Daroussin 	fputc('\n', stderr);
110*61d06d6bSBaptiste Daroussin }
111*61d06d6bSBaptiste Daroussin 
112*61d06d6bSBaptiste Daroussin #endif
113