xref: /linux/tools/include/nolibc/err.h (revision 0fc8f6200d2313278fbf4539bbab74677c685531)
1*9da0f529SThomas Weißschuh /* SPDX-License-Identifier: LGPL-2.1 OR MIT */
2*9da0f529SThomas Weißschuh /*
3*9da0f529SThomas Weißschuh  * formatted error message for NOLIBC
4*9da0f529SThomas Weißschuh  * Copyright (C) 2026 Thomas Weißschuh <linux@weissschuh.net>
5*9da0f529SThomas Weißschuh  */
6*9da0f529SThomas Weißschuh 
7*9da0f529SThomas Weißschuh /* make sure to include all global symbols */
8*9da0f529SThomas Weißschuh #include "nolibc.h"
9*9da0f529SThomas Weißschuh 
10*9da0f529SThomas Weißschuh #ifndef _NOLIBC_ERR_H
11*9da0f529SThomas Weißschuh #define _NOLIBC_ERR_H
12*9da0f529SThomas Weißschuh 
13*9da0f529SThomas Weißschuh #include "errno.h"
14*9da0f529SThomas Weißschuh #include "stdarg.h"
15*9da0f529SThomas Weißschuh #include "sys.h"
16*9da0f529SThomas Weißschuh 
17*9da0f529SThomas Weißschuh static __attribute__((unused))
18*9da0f529SThomas Weißschuh void vwarn(const char *fmt, va_list args)
19*9da0f529SThomas Weißschuh {
20*9da0f529SThomas Weißschuh 	fprintf(stderr, "%s: ", program_invocation_short_name);
21*9da0f529SThomas Weißschuh 	vfprintf(stderr, fmt, args);
22*9da0f529SThomas Weißschuh 	fprintf(stderr, ": %m\n");
23*9da0f529SThomas Weißschuh }
24*9da0f529SThomas Weißschuh 
25*9da0f529SThomas Weißschuh static __attribute__((unused))
26*9da0f529SThomas Weißschuh void vwarnx(const char *fmt, va_list args)
27*9da0f529SThomas Weißschuh {
28*9da0f529SThomas Weißschuh 	fprintf(stderr, "%s: ", program_invocation_short_name);
29*9da0f529SThomas Weißschuh 	vfprintf(stderr, fmt, args);
30*9da0f529SThomas Weißschuh 	fprintf(stderr, "\n");
31*9da0f529SThomas Weißschuh }
32*9da0f529SThomas Weißschuh 
33*9da0f529SThomas Weißschuh static __attribute__((unused))
34*9da0f529SThomas Weißschuh void warn(const char *fmt, ...)
35*9da0f529SThomas Weißschuh {
36*9da0f529SThomas Weißschuh 	va_list args;
37*9da0f529SThomas Weißschuh 
38*9da0f529SThomas Weißschuh 	va_start(args, fmt);
39*9da0f529SThomas Weißschuh 	vwarn(fmt, args);
40*9da0f529SThomas Weißschuh 	va_end(args);
41*9da0f529SThomas Weißschuh }
42*9da0f529SThomas Weißschuh 
43*9da0f529SThomas Weißschuh static __attribute__((unused))
44*9da0f529SThomas Weißschuh void warnx(const char *fmt, ...)
45*9da0f529SThomas Weißschuh {
46*9da0f529SThomas Weißschuh 	va_list args;
47*9da0f529SThomas Weißschuh 
48*9da0f529SThomas Weißschuh 	va_start(args, fmt);
49*9da0f529SThomas Weißschuh 	vwarnx(fmt, args);
50*9da0f529SThomas Weißschuh 	va_end(args);
51*9da0f529SThomas Weißschuh }
52*9da0f529SThomas Weißschuh 
53*9da0f529SThomas Weißschuh static __attribute__((noreturn, unused))
54*9da0f529SThomas Weißschuh void verr(int eval, const char *fmt, va_list args)
55*9da0f529SThomas Weißschuh {
56*9da0f529SThomas Weißschuh 	vwarn(fmt, args);
57*9da0f529SThomas Weißschuh 	exit(eval);
58*9da0f529SThomas Weißschuh }
59*9da0f529SThomas Weißschuh 
60*9da0f529SThomas Weißschuh static __attribute__((noreturn, unused))
61*9da0f529SThomas Weißschuh void verrx(int eval, const char *fmt, va_list args)
62*9da0f529SThomas Weißschuh {
63*9da0f529SThomas Weißschuh 	warnx(fmt, args);
64*9da0f529SThomas Weißschuh 	exit(eval);
65*9da0f529SThomas Weißschuh }
66*9da0f529SThomas Weißschuh 
67*9da0f529SThomas Weißschuh static __attribute__((noreturn, unused))
68*9da0f529SThomas Weißschuh void err(int eval, const char *fmt, ...)
69*9da0f529SThomas Weißschuh {
70*9da0f529SThomas Weißschuh 	va_list args;
71*9da0f529SThomas Weißschuh 
72*9da0f529SThomas Weißschuh 	va_start(args, fmt);
73*9da0f529SThomas Weißschuh 	verr(eval, fmt, args);
74*9da0f529SThomas Weißschuh 	va_end(args);
75*9da0f529SThomas Weißschuh }
76*9da0f529SThomas Weißschuh 
77*9da0f529SThomas Weißschuh static __attribute__((noreturn, unused))
78*9da0f529SThomas Weißschuh void errx(int eval, const char *fmt, ...)
79*9da0f529SThomas Weißschuh {
80*9da0f529SThomas Weißschuh 	va_list args;
81*9da0f529SThomas Weißschuh 
82*9da0f529SThomas Weißschuh 	va_start(args, fmt);
83*9da0f529SThomas Weißschuh 	verrx(eval, fmt, args);
84*9da0f529SThomas Weißschuh 	va_end(args);
85*9da0f529SThomas Weißschuh }
86*9da0f529SThomas Weißschuh 
87*9da0f529SThomas Weißschuh #endif /* _NOLIBC_ERR_H */
88