diff --git a/SystemTools.cxx b/SystemTools.cxx
index 8e1c96c19d3b8fb092a8325d9032d5dd25839cf8..7fea79ef46cfe693faad1bb0d27c615d6c0b5490 100644
--- a/SystemTools.cxx
+++ b/SystemTools.cxx
@@ -388,10 +388,13 @@ class SystemToolsTranslationMap :
 {
 };
 
+/* Type of character storing the environment.  */
+typedef char envchar;
+
 /* Order by environment key only (VAR from VAR=VALUE).  */
 struct kwsysEnvCompare
 {
-  bool operator() (const char* l, const char* r) const
+  bool operator() (const envchar* l, const envchar* r) const
     {
     const char* leq = strchr(l, '=');
     const char* req = strchr(r, '=');
@@ -408,20 +411,20 @@ struct kwsysEnvCompare
     }
 };
 
-class kwsysEnvSet: public std::set<const char*, kwsysEnvCompare>
+class kwsysEnvSet: public std::set<const envchar*, kwsysEnvCompare>
 {
 public:
   class Free
   {
-    const char* Env;
+    const envchar* Env;
   public:
-    Free(const char* env): Env(env) {}
-    ~Free() { free(const_cast<char*>(this->Env)); }
+    Free(const envchar* env): Env(env) {}
+    ~Free() { free(const_cast<envchar*>(this->Env)); }
   };
 
-  const char* Release(const char* env)
+  const envchar* Release(const envchar* env)
     {
-    const char* old = 0;
+    const envchar* old = 0;
     iterator i = this->find(env);
     if(i != this->end())
       {
@@ -680,7 +683,7 @@ public:
     for(iterator i = this->begin(); i != this->end(); ++i)
       {
       kwsysUnPutEnv(*i);
-      free(const_cast<char*>(*i));
+      free(const_cast<envchar*>(*i));
       }
     }
   bool Put(const char* env)