diff options
Diffstat (limited to '')
-rw-r--r-- | libexec_setenvf.c | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/libexec_setenvf.c b/libexec_setenvf.c new file mode 100644 index 0000000..7589dca --- /dev/null +++ b/libexec_setenvf.c @@ -0,0 +1,61 @@ +/* See LICENSE file for copyright and license details. */ +#include "common.h" +#ifndef TEST + + +int +libexec_setenvf(struct libexec_command *cmd, enum libexec_insert_mode how, const char *name, const char *value_fmt, ...) +{ + int ret; + va_list args; + va_start(args, value_fmt); + ret = libexec_vsetenvf(cmd, how, name, value_fmt, args); + va_end(args); + return ret; +} + + +#else + + +int +main(void) +{ + /* Correct usage is tested, indirectly, via + * libexec_setenvf_append.c, + * libexec_setenvf_noclobber.c, + * libexec_setenvf_noreplace.c, + * libexec_setenvf_prepend.c, and + * libexec_setenvf_replace.c */ + + struct libexec_command cmd, ref; + + libexec_init_command(&cmd); + memcpy(&ref, &cmd, sizeof(cmd)); + + errno = 0; + ASSERT_EQ_INT(libexec_setenvf(&cmd, (enum libexec_insert_mode)-1, "A", "%s", "B"), -1); + ASSERT_EQ_INT(errno, EINVAL); + ASSERT_IS_TRUE(!memcmp(&cmd, &ref, sizeof(cmd))); + + errno = 0; + ASSERT_EQ_INT(libexec_setenvf(&cmd, (enum libexec_insert_mode)LIBEXEC_INSERT_MODE__COUNT__, "A", "%s", "B"), -1); + ASSERT_EQ_INT(errno, EINVAL); + ASSERT_IS_TRUE(!memcmp(&cmd, &ref, sizeof(cmd))); + + libexec_clear_environ(&cmd); + ASSERT_ZERO(libexec_setenvf(&cmd, LIBEXEC_NOCLOBBER, "PATH", "%s:%s", "test", "path")); + ASSERT_EQ_STR(libexec_getenv(&cmd, "PATH"), "test:path"); + errno = 0; + ASSERT_EQ_INT(libexec_setenvf(&cmd, LIBEXEC_NOCLOBBER, "PATH", "%s", "x"), -1); + ASSERT_EQ_INT(errno, 0); + ASSERT_EQ_STR(libexec_getenv(&cmd, "PATH"), "test:path"); + ASSERT_ZERO(libexec_setenvf(&cmd, LIBEXEC_REPLACE, "PATH", "%s%s", "my", "path")); + ASSERT_EQ_STR(libexec_getenv(&cmd, "PATH"), "mypath"); + libexec_destroy_command(&cmd); + + return 0; +} + + +#endif |