Skip to content

Commit

Permalink
NULL isn't a valid cross platform empty va_list
Browse files Browse the repository at this point in the history
This should fix #40
  • Loading branch information
cehoffman committed Apr 15, 2015
1 parent d6dde73 commit 301169e
Show file tree
Hide file tree
Showing 4 changed files with 84 additions and 96 deletions.
6 changes: 6 additions & 0 deletions src/CMakeLists.txt
Expand Up @@ -117,16 +117,22 @@ regex_test(perror ">2 perror:[^\\n]+\\n<")
regex_test(error ">[^:]*test_runner: (<>)?2 error[^\\n]+\\n<")
regex_test(error_at_line ">[^:]*test_runner:[^:]+:[0-9]+: (<>)?2 error_at_line[^\\n]+\\n<")
regex_test(err ">test_runner: (<>)?2 err(<>)?: [^\\n]+\\n<")
regex_test(err_empty ">test_runner: (<>)?2 err_empty(<>)?: [^\\n]+\\n<")
regex_test(verr ">test_runner: (<>)?2 verr(<>)?: [^\\n]+\\n<")
regex_test(errc ">test_runner: (<>)?2 errc(<>)?: [^\\n]+\\n<")
regex_test(errc_empty ">test_runner: (<>)?2 errc_empty(<>)?: [^\\n]+\\n<")
regex_test(verrc ">test_runner: (<>)?2 verrc(<>)?: [^\\n]+\\n<")
regex_test(errx ">test_runner: (<>)?2 errx(<>)?\\n<")
regex_test(errx_empty ">test_runner: (<>)?2 errx_empty(<>)?\\n<")
regex_test(verrx ">test_runner: (<>)?2 verrx(<>)?\\n<")
regex_test(warn ">test_runner: (<>)?2 warn(<>)?: [^\\n]+\\n<")
regex_test(warn_empty ">test_runner: (<>)?2 warn_empty(<>)?: [^\\n]+\\n<")
regex_test(vwarn ">test_runner: (<>)?2 vwarn(<>)?: [^\\n]+\\n<")
regex_test(warnc ">test_runner: (<>)?2 warnc(<>)?: [^\\n]+\\n<")
regex_test(warnc_empty ">test_runner: (<>)?2 warnc_empty(<>)?: [^\\n]+\\n<")
regex_test(vwarnc ">test_runner: (<>)?2 vwarnc(<>)?: [^\\n]+\\n<")
regex_test(warnx ">test_runner: (<>)?2 warnx(<>)?\\n<")
regex_test(warnx_empty ">test_runner: (<>)?2 warnx_empty(<>)?\\n<")
regex_test(vwarnx ">test_runner: (<>)?2 vwarnx(<>)?\\n<")
regex_test(err_uses_set_file "test_runner: 1 warnx\\n>>?test_runner: (<>)?2 warnx(<>)?\\n<")
do_test(blacklist test_runner "blacklist")
Expand Down
72 changes: 24 additions & 48 deletions src/polyfill.c
Expand Up @@ -93,14 +93,10 @@ void err_set_file(void *fp) {

#ifndef HAVE_ERR
void err(int eval, const char *fmt, ...) {
if (fmt) {
va_list ap;
va_start(ap, fmt);
verrc(eval, errno, fmt, ap);
va_end(ap);
} else {
verrc(eval, errno, NULL, NULL);
}
va_list ap;
va_start(ap, fmt);
verrc(eval, errno, fmt, ap);
va_end(ap);
}
#endif

Expand All @@ -112,14 +108,10 @@ void verr(int eval, const char *fmt, va_list args) {

#ifndef HAVE_ERRC
void errc(int eval, int code, const char *fmt, ...) {
if (fmt) {
va_list ap;
va_start(ap, fmt);
verrc(eval, code, fmt, ap);
va_end(ap);
} else {
verrc(eval, code, NULL, NULL);
}
va_list ap;
va_start(ap, fmt);
verrc(eval, code, fmt, ap);
va_end(ap);
}
#endif

Expand All @@ -132,14 +124,10 @@ void verrc(int eval, int code, const char *fmt, va_list args) {

#ifndef HAVE_ERRX
void errx(int eval, const char *fmt, ...) {
if (fmt) {
va_list ap;
va_start(ap, fmt);
verrx(eval, fmt, ap);
va_end(ap);
} else {
verrx(eval, NULL, NULL);
}
va_list ap;
va_start(ap, fmt);
verrx(eval, fmt, ap);
va_end(ap);
}
#endif

Expand All @@ -152,14 +140,10 @@ void verrx(int eval, const char *fmt, va_list args) {

#ifndef HAVE_WARN
void warn(const char *fmt, ...) {
if (fmt) {
va_list ap;
va_start(ap, fmt);
vwarnc(errno, fmt, ap);
va_end(ap);
} else {
vwarnc(errno, NULL, NULL);
}
va_list ap;
va_start(ap, fmt);
vwarnc(errno, fmt, ap);
va_end(ap);
}
#endif

Expand All @@ -171,14 +155,10 @@ void vwarn(const char *fmt, va_list args) {

#ifndef HAVE_WARNC
void warnc(int code, const char *fmt, ...) {
if (fmt) {
va_list ap;
va_start(ap, fmt);
vwarnc(code, fmt, ap);
va_end(ap);
} else {
vwarnc(code, NULL, NULL);
}
va_list ap;
va_start(ap, fmt);
vwarnc(code, fmt, ap);
va_end(ap);
}
#endif

Expand All @@ -199,14 +179,10 @@ void vwarnc(int code, const char *fmt, va_list args) {

#ifndef HAVE_WARNX
void warnx(const char *fmt, ...) {
if (fmt) {
va_list ap;
va_start(ap, fmt);
vwarnx(fmt, ap);
va_end(ap);
} else {
vwarnx(NULL, NULL);
}
va_list ap;
va_start(ap, fmt);
vwarnx(fmt, ap);
va_end(ap);
}
#endif

Expand Down
72 changes: 24 additions & 48 deletions src/stderred.c
Expand Up @@ -274,14 +274,10 @@ void FUNC(verrc)(int eval, int code, const char *fmt, va_list args) {
}

void FUNC(err)(int eval, const char *fmt, ...) {
if (fmt) {
va_list ap;
va_start(ap, fmt);
FUNC(verrc)(eval, errno, fmt, ap);
va_end(ap);
} else {
FUNC(verrc)(eval, errno, NULL, NULL);
}
va_list ap;
va_start(ap, fmt);
FUNC(verrc)(eval, errno, fmt, ap);
va_end(ap);
exit(eval); // Added to keep gcc from complaining - never reached
}

Expand All @@ -291,14 +287,10 @@ void FUNC(verr)(int eval, const char *fmt, va_list args) {
}

void FUNC(errc)(int eval, int code, const char *fmt, ...) {
if (fmt) {
va_list ap;
va_start(ap, fmt);
FUNC(verrc)(eval, code, fmt, ap);
va_end(ap);
} else {
FUNC(verrc)(eval, code, NULL, NULL);
}
va_list ap;
va_start(ap, fmt);
FUNC(verrc)(eval, code, fmt, ap);
va_end(ap);
exit(eval); // Added to keep gcc from complaining - never reached
}

Expand All @@ -308,52 +300,36 @@ void FUNC(verrx)(int eval, const char *fmt, va_list args) {
}

void FUNC(errx)(int eval, const char *fmt, ...) {
if (fmt) {
va_list ap;
va_start(ap, fmt);
FUNC(verrx)(eval, fmt, ap);
va_end(ap);
} else {
FUNC(verrx)(eval, fmt, NULL);
}
va_list ap;
va_start(ap, fmt);
FUNC(verrx)(eval, fmt, ap);
va_end(ap);
exit(eval); // Added to keep gcc from complaining - never reached
}

void FUNC(warn)(const char *fmt, ...) {
if (fmt) {
va_list ap;
va_start(ap, fmt);
FUNC(vwarnc)(errno, fmt, ap);
va_end(ap);
} else {
FUNC(vwarnc)(errno, NULL, NULL);
}
va_list ap;
va_start(ap, fmt);
FUNC(vwarnc)(errno, fmt, ap);
va_end(ap);
}

void FUNC(vwarn)(const char *fmt, va_list args) {
FUNC(vwarnc)(errno, fmt, args);
}

void FUNC(warnc)(int code, const char *fmt, ...) {
if (fmt) {
va_list ap;
va_start(ap, fmt);
FUNC(vwarnc)(code, fmt, ap);
va_end(ap);
} else {
FUNC(vwarnc)(code, NULL, NULL);
}
va_list ap;
va_start(ap, fmt);
FUNC(vwarnc)(code, fmt, ap);
va_end(ap);
}

void FUNC(warnx)(const char *fmt, ...) {
if (fmt) {
va_list ap;
va_start(ap, fmt);
FUNC(vwarnx)(fmt, ap);
va_end(ap);
} else {
FUNC(vwarnx)(fmt, NULL);
}
va_list ap;
va_start(ap, fmt);
FUNC(vwarnx)(fmt, ap);
va_end(ap);
}

#ifdef __APPLE__
Expand Down
30 changes: 30 additions & 0 deletions src/test.c
Expand Up @@ -101,6 +101,10 @@ TEST(err) {
err(EXIT_SUCCESS, "%s", "2 err");
}

TEST(err_empty) {
err(EXIT_SUCCESS, "2 err_empty");
}

static void test_verr_helper(int eval, const char *fmt, ...) {
va_list args;
va_start(args, fmt);
Expand All @@ -116,6 +120,10 @@ TEST(errc) {
errc(EXIT_SUCCESS, ENOSYS, "%s", "2 errc");
}

TEST(errc_empty) {
errc(EXIT_SUCCESS, ENOSYS, "2 errc_empty");
}

static void test_verrc_helper(int eval, int code, const char *fmt, ...) {
va_list args;
va_start(args, fmt);
Expand All @@ -131,6 +139,10 @@ TEST(errx) {
errx(EXIT_SUCCESS, "%s", "2 errx");
}

TEST(errx_empty) {
errx(EXIT_SUCCESS, "2 errx_empty");
}

static void test_verrx_helper(int eval, const char *fmt, ...) {
va_list args;
va_start(args, fmt);
Expand All @@ -146,6 +158,10 @@ TEST(warn) {
warn("%s", "2 warn");
}

TEST(warn_empty) {
warn("2 warn_empty");
}

static void test_vwarn_helper(const char *fmt, ...) {
va_list args;
va_start(args, fmt);
Expand All @@ -161,6 +177,10 @@ TEST(warnc) {
warnc(ENOSYS, "%s", "2 warnc");
}

TEST(warnc_empty) {
warnc(ENOSYS, "2 warnc_empty");
}

static void test_vwarnc_helper(int code, const char *fmt, ...) {
va_list args;
va_start(args, fmt);
Expand All @@ -176,6 +196,10 @@ TEST(warnx) {
warnx("%s", "2 warnx");
}

TEST(warnx_empty) {
warnx("2 warnx_empty");
}

static void test_vwarnx_helper(const char *fmt, ...) {
va_list args;
va_start(args, fmt);
Expand Down Expand Up @@ -238,16 +262,22 @@ unit_test tests[] = {
UNIT(error),
UNIT(error_at_line),
UNIT(err),
UNIT(err_empty),
UNIT(verr),
UNIT(errc),
UNIT(errc_empty),
UNIT(verrc),
UNIT(errx),
UNIT(errx_empty),
UNIT(verrx),
UNIT(warn),
UNIT(warn_empty),
UNIT(vwarn),
UNIT(warnc),
UNIT(warnc_empty),
UNIT(vwarnc),
UNIT(warnx),
UNIT(warnx_empty),
UNIT(vwarnx),
UNIT(err_uses_set_file),
UNIT(blacklist)
Expand Down

0 comments on commit 301169e

Please sign in to comment.