static void vperror_msg(const char *s, va_list p) { int err=errno; verror_msg(s, p); if (*s) s = ": "; fprintf(stderr, "%s%s\n", s, strerror(err)); }
void perror_msg(char *msg, ...) { va_list va; va_start(va, msg); verror_msg(msg, errno, va); va_end(va); }
void error_msg_and_die(const char *fmt, ...) { va_list p; va_start(p, fmt); verror_msg(0, fmt, p); die(); }
void error_msg(const char *fmt, ...) { va_list p; va_start(p, fmt); verror_msg(0, fmt, p); va_end(p); }
static void error_msg(const char *s, ...) { va_list p; va_start(p, s); verror_msg(s, p); va_end(p); putc('\n', stderr); }
static void warnx(const char *s, ...) { va_list p; va_start(p, s); verror_msg(s, p); va_end(p); fprintf(stderr, "\n"); }
extern void vherror_msg(const char *s, va_list p) { if(s == 0) s = ""; verror_msg(s, p); if (*s) fputs(": ", stderr); herror(""); }
static void error_msg_and_die(const char *s, ...) { va_list p; va_start(p, s); verror_msg(s, p); va_end(p); putc('\n', stderr); exit(EXIT_FAILURE); }
// Die with an error message. void error_exit(char *msg, ...) { va_list va; va_start(va, msg); verror_msg(msg, 0, va); va_end(va); xexit(); }
static void attribute_noreturn err(int errnum, const char *s, ...) { va_list p; va_start(p, s); verror_msg(s, p); va_end(p); fprintf(stderr, "\n"); exit(errnum); }
static void error_msg_and_die(const char *s, ...) { va_list p; va_start(p, s); verror_msg(s, p); va_end(p); putc('\n', stderr); exit(MKFS_ERROR); }
void error_msg_and_help(const char *fmt, ...) { if (fmt != NULL) { va_list p; va_start(p, fmt); verror_msg(0, fmt, p); } fprintf(stderr, "Try '%s -h' for more information.\n", program_invocation_name); die(); }
// Exit with an error message after showing help text. void help_exit(char *msg, ...) { va_list va; if (CFG_TOYBOX_HELP) show_help(stderr); va_start(va, msg); verror_msg(msg, 0, va); va_end(va); xexit(); }