/* Test environment varialbe substitution */ #include "config.h" #include #include #include "check_confuse.h" static int testconfig(const char *buf, const char *parameter) { cfg_opt_t opts[] = { CFG_STR("parameter", NULL, CFGF_NONE), CFG_END() }; char *param; cfg_t *cfg; cfg = cfg_init(opts, CFGF_NONE); if (!cfg) return 0; if (cfg_parse_buf(cfg, buf) != CFG_SUCCESS) return 0; param = cfg_getstr(cfg, "parameter"); if (!param) return 0; if (strcmp(param, parameter) != 0) return 0; cfg_free(cfg); return 1; } int main(void) { #if defined(HAVE_SETENV) && defined(HAVE_UNSETENV) fail_unless(setenv("MYVAR", "testing", 1) == 0); fail_unless(unsetenv("MYUNSETVAR") == 0); #elif defined(HAVE__PUTENV) fail_unless(_putenv("MYVAR=testing") == 0); fail_unless(_putenv("MYUNSETVAR=") == 0); #else #error "Not sure how to set environment variables." #endif /* Check basic string parsing */ fail_unless(testconfig("parameter=\"abc\\ndef\"", "abc\ndef")); fail_unless(testconfig("parameter=\"abc\\adef\"", "abc\adef")); fail_unless(testconfig("parameter=\"abc\\040def\"", "abc def")); fail_unless(testconfig("parameter=\"abc\\x20def\"", "abc def")); fail_unless(testconfig("parameter=\"${}\"", "")); /* Check unquoted environment variable handling */ fail_unless(testconfig("parameter=${MYVAR}", "testing")); fail_unless(testconfig("parameter=${MYVAR:-default}", "testing")); fail_unless(testconfig("parameter=${MYUNSETVAR}", "")); fail_unless(testconfig("parameter=${MYUNSETVAR:-default}", "default")); /* Check quoted environment variable handling */ fail_unless(testconfig("parameter=\"${MYVAR}\"", "testing")); fail_unless(testconfig("parameter=\"${MYVAR:-default}\"", "testing")); fail_unless(testconfig("parameter=\"${MYUNSETVAR}\"", "")); fail_unless(testconfig("parameter=\"${MYUNSETVAR:-default}\"", "default")); /* Check quoted environment variable handling in the middle of strings */ fail_unless(testconfig("parameter=\"text_${MYVAR}\"", "text_testing")); fail_unless(testconfig("parameter=\"${MYVAR}_text\"", "testing_text")); fail_unless(testconfig("parameter=\"start_${MYVAR}_end\"", "start_testing_end")); /* Check single quoted environment variable handling */ fail_unless(testconfig("parameter='${MYVAR}'", "${MYVAR}")); return 0; } /** * Local Variables: * indent-tabs-mode: t * c-file-style: "linux" * End: */