1 /*
2 * Copyright (c) 2016 Dmitry V. Levin <ldv@strace.io>
3 * Copyright (c) 2016-2021 The strace developers.
4 * All rights reserved.
5 *
6 * SPDX-License-Identifier: GPL-2.0-or-later
7 */
8
9 #define perror_msg_and_fail perror_msg_and_fail
10 #define error_msg_and_fail error_msg_and_fail
11
12 #include "tests.h"
13 #include <errno.h>
14 #include <stdarg.h>
15 #include <stdio.h>
16 #include <stdlib.h>
17 #include <string.h>
18
19 void
20 perror_msg_and_fail(const char *fmt, ...)
21 {
22 int err_no = errno;
23 va_list p;
24
25 va_start(p, fmt);
26 vfprintf(stderr, fmt, p);
27 if (err_no)
28 fprintf(stderr, ": %s\n", strerror(err_no));
29 else
30 putc('\n', stderr);
31 exit(1);
32 }
33
34 void
35 error_msg_and_fail(const char *fmt, ...)
36 {
37 va_list p;
38
39 va_start(p, fmt);
40 vfprintf(stderr, fmt, p);
41 putc('\n', stderr);
42 exit(1);
43 }
44
45 void
46 error_msg_and_skip(const char *fmt, ...)
47 {
48 va_list p;
49
50 va_start(p, fmt);
51 vfprintf(stderr, fmt, p);
52 putc('\n', stderr);
53 exit(77);
54 }
55
56 void
57 perror_msg_and_skip(const char *fmt, ...)
58 {
59 int err_no = errno;
60 va_list p;
61
62 va_start(p, fmt);
63 vfprintf(stderr, fmt, p);
64 if (err_no)
65 fprintf(stderr, ": %s\n", strerror(err_no));
66 else
67 putc('\n', stderr);
68 exit(77);
69 }