1*6d38604fSBaptiste Daroussin /* $Id: compat_err.c,v 1.5 2020/06/15 01:37:14 schwarze Exp $ */
261d06d6bSBaptiste Daroussin /*
361d06d6bSBaptiste Daroussin * Copyright (c) 1993
461d06d6bSBaptiste Daroussin * The Regents of the University of California. All rights reserved.
561d06d6bSBaptiste Daroussin *
661d06d6bSBaptiste Daroussin * Redistribution and use in source and binary forms, with or without
761d06d6bSBaptiste Daroussin * modification, are permitted provided that the following conditions
861d06d6bSBaptiste Daroussin * are met:
961d06d6bSBaptiste Daroussin * 1. Redistributions of source code must retain the above copyright
1061d06d6bSBaptiste Daroussin * notice, this list of conditions and the following disclaimer.
1161d06d6bSBaptiste Daroussin * 2. Redistributions in binary form must reproduce the above copyright
1261d06d6bSBaptiste Daroussin * notice, this list of conditions and the following disclaimer in the
1361d06d6bSBaptiste Daroussin * documentation and/or other materials provided with the distribution.
1461d06d6bSBaptiste Daroussin * 3. Neither the name of the University nor the names of its contributors
1561d06d6bSBaptiste Daroussin * may be used to endorse or promote products derived from this software
1661d06d6bSBaptiste Daroussin * without specific prior written permission.
1761d06d6bSBaptiste Daroussin *
1861d06d6bSBaptiste Daroussin * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
1961d06d6bSBaptiste Daroussin * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
2061d06d6bSBaptiste Daroussin * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
2161d06d6bSBaptiste Daroussin * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
2261d06d6bSBaptiste Daroussin * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
2361d06d6bSBaptiste Daroussin * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
2461d06d6bSBaptiste Daroussin * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2561d06d6bSBaptiste Daroussin * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
2661d06d6bSBaptiste Daroussin * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
2761d06d6bSBaptiste Daroussin * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
2861d06d6bSBaptiste Daroussin * SUCH DAMAGE.
2961d06d6bSBaptiste Daroussin */
30*6d38604fSBaptiste Daroussin #include "config.h"
3161d06d6bSBaptiste Daroussin
3261d06d6bSBaptiste Daroussin #include <errno.h>
3361d06d6bSBaptiste Daroussin #include <stdarg.h>
3461d06d6bSBaptiste Daroussin #include <stdio.h>
3561d06d6bSBaptiste Daroussin #include <stdlib.h>
3661d06d6bSBaptiste Daroussin #include <string.h>
3761d06d6bSBaptiste Daroussin
3861d06d6bSBaptiste Daroussin static void vwarni(const char *, va_list);
3961d06d6bSBaptiste Daroussin static void vwarnxi(const char *, va_list);
4061d06d6bSBaptiste Daroussin
4161d06d6bSBaptiste Daroussin static void
vwarnxi(const char * fmt,va_list ap)4261d06d6bSBaptiste Daroussin vwarnxi(const char *fmt, va_list ap)
4361d06d6bSBaptiste Daroussin {
4461d06d6bSBaptiste Daroussin fprintf(stderr, "%s: ", getprogname());
4561d06d6bSBaptiste Daroussin if (fmt != NULL)
4661d06d6bSBaptiste Daroussin vfprintf(stderr, fmt, ap);
4761d06d6bSBaptiste Daroussin }
4861d06d6bSBaptiste Daroussin
4961d06d6bSBaptiste Daroussin static void
vwarni(const char * fmt,va_list ap)5061d06d6bSBaptiste Daroussin vwarni(const char *fmt, va_list ap)
5161d06d6bSBaptiste Daroussin {
5261d06d6bSBaptiste Daroussin int sverrno;
5361d06d6bSBaptiste Daroussin
5461d06d6bSBaptiste Daroussin sverrno = errno;
5561d06d6bSBaptiste Daroussin vwarnxi(fmt, ap);
5661d06d6bSBaptiste Daroussin if (fmt != NULL)
5761d06d6bSBaptiste Daroussin fputs(": ", stderr);
5861d06d6bSBaptiste Daroussin fprintf(stderr, "%s\n", strerror(sverrno));
5961d06d6bSBaptiste Daroussin }
6061d06d6bSBaptiste Daroussin
6161d06d6bSBaptiste Daroussin void
err(int eval,const char * fmt,...)6261d06d6bSBaptiste Daroussin err(int eval, const char *fmt, ...)
6361d06d6bSBaptiste Daroussin {
6461d06d6bSBaptiste Daroussin va_list ap;
6561d06d6bSBaptiste Daroussin
6661d06d6bSBaptiste Daroussin va_start(ap, fmt);
6761d06d6bSBaptiste Daroussin vwarni(fmt, ap);
6861d06d6bSBaptiste Daroussin va_end(ap);
6961d06d6bSBaptiste Daroussin exit(eval);
7061d06d6bSBaptiste Daroussin }
7161d06d6bSBaptiste Daroussin
7261d06d6bSBaptiste Daroussin void
errx(int eval,const char * fmt,...)7361d06d6bSBaptiste Daroussin errx(int eval, const char *fmt, ...)
7461d06d6bSBaptiste Daroussin {
7561d06d6bSBaptiste Daroussin va_list ap;
7661d06d6bSBaptiste Daroussin
7761d06d6bSBaptiste Daroussin va_start(ap, fmt);
7861d06d6bSBaptiste Daroussin vwarnxi(fmt, ap);
7961d06d6bSBaptiste Daroussin va_end(ap);
8061d06d6bSBaptiste Daroussin fputc('\n', stderr);
8161d06d6bSBaptiste Daroussin exit(eval);
8261d06d6bSBaptiste Daroussin }
8361d06d6bSBaptiste Daroussin
8461d06d6bSBaptiste Daroussin void
warn(const char * fmt,...)8561d06d6bSBaptiste Daroussin warn(const char *fmt, ...)
8661d06d6bSBaptiste Daroussin {
8761d06d6bSBaptiste Daroussin va_list ap;
8861d06d6bSBaptiste Daroussin
8961d06d6bSBaptiste Daroussin va_start(ap, fmt);
9061d06d6bSBaptiste Daroussin vwarni(fmt, ap);
9161d06d6bSBaptiste Daroussin va_end(ap);
9261d06d6bSBaptiste Daroussin }
9361d06d6bSBaptiste Daroussin
9461d06d6bSBaptiste Daroussin void
warnx(const char * fmt,...)9561d06d6bSBaptiste Daroussin warnx(const char *fmt, ...)
9661d06d6bSBaptiste Daroussin {
9761d06d6bSBaptiste Daroussin va_list ap;
9861d06d6bSBaptiste Daroussin
9961d06d6bSBaptiste Daroussin va_start(ap, fmt);
10061d06d6bSBaptiste Daroussin vwarnxi(fmt, ap);
10161d06d6bSBaptiste Daroussin va_end(ap);
10261d06d6bSBaptiste Daroussin fputc('\n', stderr);
10361d06d6bSBaptiste Daroussin }
104