Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/usr.bin/ar/util.c
34677 views
1
/*-
2
* SPDX-License-Identifier: BSD-2-Clause
3
*
4
* Copyright (c) 2003-2007 Tim Kientzle
5
* All rights reserved.
6
*
7
* Redistribution and use in source and binary forms, with or without
8
* modification, are permitted provided that the following conditions
9
* are met:
10
* 1. Redistributions of source code must retain the above copyright
11
* notice, this list of conditions and the following disclaimer.
12
* 2. Redistributions in binary form must reproduce the above copyright
13
* notice, this list of conditions and the following disclaimer in the
14
* documentation and/or other materials provided with the distribution.
15
*
16
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
17
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
20
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26
* SUCH DAMAGE.
27
*/
28
29
#include <sys/cdefs.h>
30
#include <sys/queue.h>
31
#include <sys/types.h>
32
#include <errno.h>
33
#include <stdarg.h>
34
#include <stdio.h>
35
#include <stdlib.h>
36
#include <string.h>
37
38
#include "ar.h"
39
40
static void bsdar_vwarnc(struct bsdar *, int code,
41
const char *fmt, va_list ap);
42
static void bsdar_verrc(struct bsdar *bsdar, int code,
43
const char *fmt, va_list ap);
44
45
static void
46
bsdar_vwarnc(struct bsdar *bsdar, int code, const char *fmt, va_list ap)
47
{
48
49
fprintf(stderr, "%s: warning: ", bsdar->progname);
50
vfprintf(stderr, fmt, ap);
51
if (code != 0)
52
fprintf(stderr, ": %s", strerror(code));
53
fprintf(stderr, "\n");
54
}
55
56
void
57
bsdar_warnc(struct bsdar *bsdar, int code, const char *fmt, ...)
58
{
59
va_list ap;
60
61
va_start(ap, fmt);
62
bsdar_vwarnc(bsdar, code, fmt, ap);
63
va_end(ap);
64
}
65
66
static void
67
bsdar_verrc(struct bsdar *bsdar, int code, const char *fmt, va_list ap)
68
{
69
70
fprintf(stderr, "%s: fatal: ", bsdar->progname);
71
vfprintf(stderr, fmt, ap);
72
if (code != 0)
73
fprintf(stderr, ": %s", strerror(code));
74
fprintf(stderr, "\n");
75
}
76
77
void
78
bsdar_errc(struct bsdar *bsdar, int code, const char *fmt, ...)
79
{
80
va_list ap;
81
82
va_start(ap, fmt);
83
bsdar_verrc(bsdar, code, fmt, ap);
84
va_end(ap);
85
exit(EXIT_FAILURE);
86
}
87
88