]> git.lyx.org Git - lyx.git/blobdiff - src/support/environment.h
Handle properly exception that can be thrown by to_local8bit
[lyx.git] / src / support / environment.h
index d312bffe632afe26d3565c824d738cbe05642fb5..78af2e3574dffed7205c63115e88ef5738c77f02 100644 (file)
 namespace lyx {
 namespace support {
 
+/// @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 & envname);
+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
@@ -28,7 +31,7 @@ std::string const getEnv(std::string const & envname);
  *  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<std::string> const getEnvPath(std::string const & name);
 
 /** Set the contents of the environment variable @c name to @c value.
@@ -54,6 +57,42 @@ void setEnvPath(std::string const & name, std::vector<std::string> const & env);
  */
 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