util.c revision 302408
1133819Stjr/*-
2133819Stjr * Copyright (c) 2003-2007 Tim Kientzle
3133819Stjr * All rights reserved.
4133819Stjr *
5133819Stjr * Redistribution and use in source and binary forms, with or without
6163761Snetchild * modification, are permitted provided that the following conditions
7133819Stjr * are met:
8133819Stjr * 1. Redistributions of source code must retain the above copyright
9133819Stjr *    notice, this list of conditions and the following disclaimer
10133819Stjr *    in this position and unchanged.
11133819Stjr * 2. Redistributions in binary form must reproduce the above copyright
12133819Stjr *    notice, this list of conditions and the following disclaimer in the
13133819Stjr *    documentation and/or other materials provided with the distribution.
14164199Sru *
15133819Stjr * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
16133819Stjr * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
17161330Sjhb * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
18161330Sjhb * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
19133819Stjr * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
20133819Stjr * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
21133819Stjr * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
22133819Stjr * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23133819Stjr * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
24133819Stjr * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25133819Stjr */
26133819Stjr
27133819Stjr#include <sys/cdefs.h>
28133819Stjr__FBSDID("$FreeBSD: stable/11/usr.bin/ar/util.c 200462 2009-12-13 03:14:06Z delphij $");
29133819Stjr
30133819Stjr#include <sys/queue.h>
31133819Stjr#include <sys/types.h>
32133819Stjr#include <errno.h>
33133819Stjr#include <stdarg.h>
34143198Ssobomax#include <stdio.h>
35133819Stjr#include <stdlib.h>
36133819Stjr#include <string.h>
37133819Stjr
38133819Stjr#include "ar.h"
39133819Stjr
40133819Stjrstatic void	bsdar_vwarnc(struct bsdar *, int code,
41133819Stjr		    const char *fmt, va_list ap);
42133819Stjrstatic void	bsdar_verrc(struct bsdar *bsdar, int code,
43133819Stjr		    const char *fmt, va_list ap);
44133819Stjr
45133819Stjrstatic void
46133819Stjrbsdar_vwarnc(struct bsdar *bsdar, int code, const char *fmt, va_list ap)
47133819Stjr{
48133819Stjr
49133819Stjr	fprintf(stderr, "%s: warning: ", bsdar->progname);
50133819Stjr	vfprintf(stderr, fmt, ap);
51133819Stjr	if (code != 0)
52133819Stjr		fprintf(stderr, ": %s", strerror(code));
53133819Stjr	fprintf(stderr, "\n");
54133819Stjr}
55133819Stjr
56133819Stjrvoid
57133819Stjrbsdar_warnc(struct bsdar *bsdar, int code, const char *fmt, ...)
58133819Stjr{
59133819Stjr	va_list ap;
60133819Stjr
61133819Stjr	va_start(ap, fmt);
62133819Stjr	bsdar_vwarnc(bsdar, code, fmt, ap);
63133819Stjr	va_end(ap);
64133819Stjr}
65133819Stjr
66133819Stjrstatic void
67133819Stjrbsdar_verrc(struct bsdar *bsdar, int code, const char *fmt, va_list ap)
68133819Stjr{
69133819Stjr
70133819Stjr	fprintf(stderr, "%s: fatal: ", bsdar->progname);
71133819Stjr	vfprintf(stderr, fmt, ap);
72133819Stjr	if (code != 0)
73133819Stjr		fprintf(stderr, ": %s", strerror(code));
74133819Stjr	fprintf(stderr, "\n");
75133819Stjr}
76133819Stjr
77133819Stjrvoid
78133819Stjrbsdar_errc(struct bsdar *bsdar, int eval, int code, const char *fmt, ...)
79133819Stjr{
80133819Stjr	va_list ap;
81133819Stjr
82133819Stjr	va_start(ap, fmt);
83133819Stjr	bsdar_verrc(bsdar, code, fmt, ap);
84156919Snetchild	va_end(ap);
85156919Snetchild	exit(eval);
86156919Snetchild}
87156919Snetchild