Since we can't use HAVE_ERR_H in configurator, provide a definition for the err.h functions used. The version provided is the one from musl libc, since it is concise and shares the MIT License with configurator.
Signed-off-by: Kevin Locke <ke...@kevinlocke.name> --- tools/configurator/configurator.c | 54 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 53 insertions(+), 1 deletion(-) diff --git a/tools/configurator/configurator.c b/tools/configurator/configurator.c index 4eed188..5929355 100644 --- a/tools/configurator/configurator.c +++ b/tools/configurator/configurator.c @@ -3,6 +3,9 @@ * * Copyright 2011 Rusty Russell <ru...@rustcorp.com.au>. MIT license. * + * err, errx, verr, verrx, vwarn, vwarnx functions from musl libc + * Copyright 2005-2013 Rich Felker. MIT license. + * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights @@ -25,9 +28,9 @@ #include <errno.h> #include <stdio.h> +#include <stdarg.h> #include <stdbool.h> #include <stdlib.h> -#include <err.h> #include <string.h> #ifdef _MSC_VER @@ -41,6 +44,7 @@ #define OUTPUT_FILE "configurator.out" #define INPUT_FILE "configuratortest.c" +static const char *progname = ""; static int verbose; enum test_style { @@ -370,6 +374,51 @@ static struct test tests[] = { }, }; +static void vwarn(const char *fmt, va_list ap) +{ + fprintf (stderr, "%s: ", progname); + if (fmt) { + vfprintf(stderr, fmt, ap); + fputs (": ", stderr); + } + perror(0); +} + +static void vwarnx(const char *fmt, va_list ap) +{ + fprintf (stderr, "%s: ", progname); + if (fmt) vfprintf(stderr, fmt, ap); + putc('\n', stderr); +} + +static void verr(int status, const char *fmt, va_list ap) +{ + vwarn(fmt, ap); + exit(status); +} + +static void verrx(int status, const char *fmt, va_list ap) +{ + vwarnx(fmt, ap); + exit(status); +} + +static void err(int status, const char *fmt, ...) +{ + va_list ap; + va_start(ap, fmt); + verr(status, fmt, ap); + va_end(ap); +} + +static void errx(int status, const char *fmt, ...) +{ + va_list ap; + va_start(ap, fmt); + verrx(status, fmt, ap); + va_end(ap); +} + static size_t fread_noeintr(void *ptr, size_t size, size_t nitems, FILE *stream) { @@ -610,6 +659,9 @@ int main(int argc, const char *argv[]) const char *default_args[] = { "", DEFAULT_COMPILER, DEFAULT_FLAGS, NULL }; + if (argc > 0) + progname = argv[0]; + if (argc > 1) { if (strcmp(argv[1], "--help") == 0) { printf("Usage: configurator [-v] [<compiler> <flags>...]\n" -- 2.9.3 _______________________________________________ ccan mailing list ccan@lists.ozlabs.org https://lists.ozlabs.org/listinfo/ccan