X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fsupport%2Fenvironment.h;h=78af2e3574dffed7205c63115e88ef5738c77f02;hb=522f3517e1d7f61ed2bbcafe0632f50cb3e8ae2f;hp=6893762f90840fb1a6cf10f995529162e371f44f;hpb=099030e50aedeb3a16c256afd61ef113e031e9f6;p=lyx.git diff --git a/src/support/environment.h b/src/support/environment.h index 6893762f90..78af2e3574 100644 --- a/src/support/environment.h +++ b/src/support/environment.h @@ -18,25 +18,30 @@ namespace lyx { namespace support { -/// @returns the contents of the environment variable @c name. -std::string const getEnv(std::string const & envname); +/// @returns true if the environment variable @c name exists. +bool hasEnv(std::string const & name); + +/// @returns the contents of the environment variable @c name encoded in utf8. +std::string const getEnv(std::string const & name); /** @returns the contents of the environment variable @c name, - * split into path elements using the OS-dependent separator token. + * split into path elements using the OS-dependent separator token + * and encoded in utf8. * Each element is then passed through os::internal_path() to * guarantee that it is in the form of a unix-style path. * If the environment variable is not set, then the function returns * an empty vector. - */ + */ std::vector const getEnvPath(std::string const & name); /** Set the contents of the environment variable @c name to @c value. + * \p value is encoded in utf8. * @returns true if the variable was set successfully. */ bool setEnv(std::string const & name, std::string const & value); /** Set the contents of the environment variable @c name - * using the paths stored in the @c env vector. + * using the paths stored in the @c env vector (encoded in utf8). * Each element is passed through os::external_path(). * Multiple elements are concatenated into a single string using * os::path_separator(). @@ -45,13 +50,49 @@ void setEnvPath(std::string const & name, std::vector const & env); /** Prepend a list of paths to that returned by the environment variable. * Identical paths occurring later in the list are removed. - * @param name the name of the environment variable. - * @prefix the list of paths in OS-native syntax. + * @param name the name of the environment variable (encoded in utf8). + * @prefix the list of paths in OS-native syntax (encoded in utf8). * Eg "/foo/bar:/usr/bin:/usr/local/bin" on *nix, * "C:\foo\bar;C:\windows" on Windows. */ void prependEnvPath(std::string const & name, std::string const & prefix); +/** Remove the variable @c name from the environment. + * @returns true if the variable was unset successfully. + */ +bool unsetEnv(std::string const & name); + + +/** Utility class to change temporarily an environment variable. The + * variable is reset to its original state when the dummy EnvChanger + * variable is deleted. + */ +class EnvChanger { +public: + /// + EnvChanger(std::string const & name, std::string const & value) + : name_(name), set_(hasEnv(name)), value_(getEnv(name)) + { + setEnv(name, value); + } + /// + ~EnvChanger() + { + if (set_) + setEnv(name_, value_); + else + unsetEnv(name_); + } + +private: + /// the name of the variable + std::string name_; + /// was the variable set? + bool set_; + /// + std::string value_; +}; + } // namespace support } // namespace lyx