From 2994cd6c2cb1103613f3116ef7c371a64ae5221f Mon Sep 17 00:00:00 2001 From: Mattias Andrée Date: Sun, 26 Aug 2018 19:09:45 +0200 Subject: Add test for putenvf MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Mattias Andrée --- Makefile | 1 + libsimple.h | 2 +- vputenvf.c | 39 ++++++++++++++++++++++++++++++++++----- 3 files changed, 36 insertions(+), 6 deletions(-) diff --git a/Makefile b/Makefile index 048d690..d235867 100644 --- a/Makefile +++ b/Makefile @@ -88,6 +88,7 @@ TESTS =\ timespectostr.test\ timevaltostr.test\ vasprintf.test\ + vputenvf.test\ libsimple.test all: libsimple.a $(TESTS) diff --git a/libsimple.h b/libsimple.h index 371cd83..3a18365 100644 --- a/libsimple.h +++ b/libsimple.h @@ -1224,7 +1224,7 @@ void libsimple_envputenvf(int, const char *, va_list); _LIBSIMPLE_GCC_ONLY(__attribute__((__nonnull__, __format__(__printf__, 1, 2)))) static inline int -libsimple_putenvf(const char *__fmt, ...) /* TODO test */ +libsimple_putenvf(const char *__fmt, ...) { va_list __ap; va_start(__ap, __fmt); diff --git a/vputenvf.c b/vputenvf.c index 5a70c6b..0d66b0c 100644 --- a/vputenvf.c +++ b/vputenvf.c @@ -1,9 +1,10 @@ /* See LICENSE file for copyright and license details. */ #include "libsimple.h" +#ifndef TEST int -libsimple_vputenvf(const char *fmt, va_list ap) /* TODO test */ +libsimple_vputenvf(const char *fmt, va_list ap) { va_list ap2; int n; @@ -13,11 +14,39 @@ libsimple_vputenvf(const char *fmt, va_list ap) /* TODO test */ va_end(ap2); if (n < 0) return -1; - if ((size_t)n == SIZE_MAX) { - errno = ENOMEM; - return -1; - } s = alloca((size_t)n + 1); vsprintf(s, fmt, ap); return putenv(s); } + + +#else +#include "test.h" + +int +main(void) +{ + unsetenv("X"); + assert(!getenv("X")); + unsetenv("Y"); + assert(!getenv("Y")); + + putenvf("X=xyz"); + assert(!strcmpnul(getenv("X"), "xyz")); + putenvf("Y=xyz"); + assert(!strcmpnul(getenv("Y"), "xyz")); + + putenvf("X=x%sz", "abc"); + assert(!strcmpnul(getenv("X"), "xabcz")); + putenvf("Y=x%sz", "abc"); + assert(!strcmpnul(getenv("Y"), "xabcz")); + + putenvf("X=%ix%sz%i", 10, "abc", -11); + assert(!strcmpnul(getenv("X"), "10xabcz-11")); + putenvf("Y=%ix%sz%i", 10, "abc", -11); + assert(!strcmpnul(getenv("Y"), "10xabcz-11")); + + return 0; +} + +#endif -- cgit v1.2.3-70-g09d2