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))
vwarn(const char * fmt,va_list args)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))
vwarnx(const char * fmt,va_list args)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))
warn(const char * fmt,...)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))
warnx(const char * fmt,...)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))
verr(int eval,const char * fmt,va_list args)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))
verrx(int eval,const char * fmt,va_list args)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))
err(int eval,const char * fmt,...)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))
errx(int eval,const char * fmt,...)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