From 074a75bbe13fdb7faafc4f38a236385e00fe2f05 Mon Sep 17 00:00:00 2001 From: Joel Rosdahl Date: Mon, 5 Mar 2012 22:26:00 +0100 Subject: [PATCH] Introduce x_unsetenv for increased portability --- ccache.c | 5 ++--- ccache.h | 1 + configure.ac | 1 + test/test_conf.c | 2 +- util.c | 9 +++++++++ 5 files changed, 14 insertions(+), 4 deletions(-) diff --git a/ccache.c b/ccache.c index da67f2e6e..69b814c95 100644 --- a/ccache.c +++ b/ccache.c @@ -566,9 +566,8 @@ to_cache(struct args *args) * otherwise it will emit a line like * * tmp.stdout.vexed.732.o: /home/mbp/.ccache/tmp.stdout.vexed.732.i - * - * unsetenv() is on BSD and Linux but not portable. */ - putenv("DEPENDENCIES_OUTPUT"); + */ + x_unsetenv("DEPENDENCIES_OUTPUT"); if (conf->run_second_cpp) { args_add(args, input_file); diff --git a/ccache.h b/ccache.h index 6e9b8106c..53788e52f 100644 --- a/ccache.h +++ b/ccache.h @@ -123,6 +123,7 @@ char *x_strndup(const char *s, size_t n); void *x_malloc(size_t size); void *x_calloc(size_t nmemb, size_t size); void *x_realloc(void *ptr, size_t size); +int x_unsetenv(const char *name); void traverse(const char *dir, void (*fn)(const char *, struct stat *)); char *basename(const char *path); char *dirname(const char *path); diff --git a/configure.ac b/configure.ac index 64ba35ebd..35f1d9a0e 100644 --- a/configure.ac +++ b/configure.ac @@ -48,6 +48,7 @@ AC_CHECK_FUNCS(mkstemp) AC_CHECK_FUNCS(realpath) AC_CHECK_FUNCS(strndup) AC_CHECK_FUNCS(strtok_r) +AC_CHECK_FUNCS(unsetenv) AC_CHECK_FUNCS(utimes) AC_CACHE_CHECK([for compar_fn_t in stdlib.h],ccache_cv_COMPAR_FN_T, [ diff --git a/test/test_conf.c b/test/test_conf.c index 711458a3a..802974f4d 100644 --- a/test/test_conf.c +++ b/test/test_conf.c @@ -307,7 +307,7 @@ TEST(conf_update_from_environment) CHECK(conf_update_from_environment(conf, &errmsg)); CHECK(conf->compression); - putenv("CCACHE_COMPRESS"); /* unsetenv isn't portable */ + x_unsetenv("CCACHE_COMPRESS"); putenv("CCACHE_NOCOMPRESS=1"); CHECK(conf_update_from_environment(conf, &errmsg)); CHECK(!conf->compression); diff --git a/util.c b/util.c index db39a120e..1d473ac5e 100644 --- a/util.c +++ b/util.c @@ -679,6 +679,15 @@ x_realloc(void *ptr, size_t size) return p2; } +/* This is like unsetenv. */ +int x_unsetenv(const char *name) +{ +#ifdef HAVE_UNSETENV + return unsetenv(name); +#else + return putenv(x_strdup(name)); /* Leak to environment. */ +#endif +} /* * Construct a string according to the format and store it in *ptr. The -- 2.47.3