diff --git a/SystemTools.cxx b/SystemTools.cxx
index 0564ee1d30ae948c86c4050816d500ede2770139..bef8d846db21db37f2432b8c714186c5c8479806 100644
--- a/SystemTools.cxx
+++ b/SystemTools.cxx
@@ -3085,7 +3085,7 @@ void SystemTools::AddTranslationPath(const kwsys_stl::string& a, const kwsys_stl
     }
 }
 
-void SystemTools::AddKeepPath(const char* dir)
+void SystemTools::AddKeepPath(const kwsys_stl::string& dir)
 {
   kwsys_stl::string cdir;
   Realpath(SystemTools::CollapseFullPath(dir).c_str(), cdir);
diff --git a/SystemTools.hxx.in b/SystemTools.hxx.in
index 41069a9e3b03f2b4571741bf1f58e3e3515badd2..fb558488f41908aa6178fd1f761f9c72ba050786 100644
--- a/SystemTools.hxx.in
+++ b/SystemTools.hxx.in
@@ -812,7 +812,7 @@ public:
    * If dir is different after CollapseFullPath is called,
    * Then insert it into the path translation table
    */
-  static void AddKeepPath(const char* dir);
+  static void AddKeepPath(const kwsys_stl::string& dir);
 
   /**
    * Update path by going through the Path Translation table;