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