]> 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 6893762f90840fb1a6cf10f995529162e371f44f..78af2e3574dffed7205c63115e88ef5738c77f02 100644 (file)
 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<std::string> 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<std::string> 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