]> git.ipfire.org Git - thirdparty/ccache.git/commitdiff
Introduce x_unsetenv for increased portability
authorJoel Rosdahl <joel@rosdahl.net>
Mon, 5 Mar 2012 21:26:00 +0000 (22:26 +0100)
committerJoel Rosdahl <joel@rosdahl.net>
Mon, 5 Mar 2012 21:26:00 +0000 (22:26 +0100)
ccache.c
ccache.h
configure.ac
test/test_conf.c
util.c

index da67f2e6e624a37d9326493cae9d9ff08eab2739..69b814c95febcd9ce0be9ef66ab8b536b3a13f61 100644 (file)
--- 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);
index 6e9b8106c26a029d70b6929723becb9e7cf95f95..53788e52fe3fa6bde599048387f0cefabd70e04f 100644 (file)
--- 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);
index 64ba35ebd15371d73a275308a7c8d4e6e0c3c4bf..35f1d9a0eb1251ff94b329288c68870251d62716 100644 (file)
@@ -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, [
index 711458a3aa34f44c969d412a98dac6af8dd25f7e..802974f4d9736005b55bb6557b6986e383280cc6 100644 (file)
@@ -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 db39a120edd5a4d2fa5473801ef3c5c311607f14..1d473ac5e51c0ecadffbd6dcb4c1facec92071ec 100644 (file)
--- 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