X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fsupport%2Fenvironment.cpp;h=dfdc2d4867c804d63ff1b4fa2dc65b9bc680ac18;hb=ac7d08cb327115630ee0a160d416d2ad7283046f;hp=e1bbaccc0618ed8b385dc462559d6d9cc1b804ca;hpb=9383f4c3c6f9cfab2d658701ba66e2b54cd68bea;p=lyx.git diff --git a/src/support/environment.cpp b/src/support/environment.cpp index e1bbaccc06..dfdc2d4867 100644 --- a/src/support/environment.cpp +++ b/src/support/environment.cpp @@ -4,8 +4,8 @@ * Licence details can be found in the file COPYING. * * \author Angus Leeming - * \author João Luis M. Assirati - * \author Lars Gullik Bjønnes + * \author João Luis M. Assirati + * \author Lars Gullik Bjønnes * * Full author contact details are available in file CREDITS. */ @@ -28,10 +28,17 @@ using namespace std; namespace lyx { namespace support { -string const getEnv(string const & envname) + +bool hasEnv(string const & name) +{ + return getenv(name.c_str()); +} + + +string const getEnv(string const & name) { // f.ex. what about error checking? - char const * const ch = getenv(envname.c_str()); + char const * const ch = getenv(name.c_str()); return ch ? to_utf8(from_local8bit(ch)) : string(); } @@ -47,7 +54,7 @@ vector const getEnvPath(string const & name) Tokenizer::const_iterator it = tokens.begin(); Tokenizer::const_iterator const end = tokens.end(); - std::vector vars; + vector vars; for (; it != end; ++it) vars.push_back(os::internal_path(*it)); @@ -62,9 +69,9 @@ bool setEnv(string const & name, string const & value) string const encoded = to_local8bit(from_utf8(value)); #if defined (HAVE_SETENV) - return ::setenv(name.c_str(), encoded.c_str(), true); + return ::setenv(name.c_str(), encoded.c_str(), 1) == 0; #elif defined (HAVE_PUTENV) - static std::map varmap; + static map varmap; varmap[name] = name + '=' + encoded; return ::putenv(const_cast(varmap[name].c_str())) == 0; #else @@ -77,7 +84,7 @@ bool setEnv(string const & name, string const & value) void setEnvPath(string const & name, vector const & env) { char const separator(os::path_separator()); - std::ostringstream ss; + ostringstream ss; vector::const_iterator const begin = env.begin(); vector::const_iterator const end = env.end(); vector::const_iterator it = begin; @@ -109,7 +116,7 @@ void prependEnvPath(string const & name, string const & prefix) token_iterator const end = reversed_tokens.rend(); for (; it != end; ++it) { vector::iterator remove_it = - std::remove(env_var.begin(), env_var.end(), *it); + remove(env_var.begin(), env_var.end(), *it); env_var.erase(remove_it, env_var.end()); env_var.insert(env_var.begin(), *it); } @@ -117,5 +124,20 @@ void prependEnvPath(string const & name, string const & prefix) setEnvPath(name, env_var); } + +bool unsetEnv(string const & name) +{ +#if defined(HAVE_UNSETENV) + // FIXME: does it leak? + return unsetenv(name.c_str()) == 0; +#elif defined(HAVE_PUTENV) + // This is OK with MSVC and MinGW at least. + return putenv((name + "=").c_str()) == 0; +#else +#error No environment-unsetting function has been defined. +#endif +} + + } // namespace support } // namespace lyx