diff --git a/env.cpp b/env.cpp index 51b503a1a..ed558f193 100644 --- a/env.cpp +++ b/env.cpp @@ -1151,7 +1151,7 @@ env_var_t env_get_string( const wcstring &key ) { if( res->val == ENV_NULL ) { - return wcstring(L""); + return env_var_t::missing_var(); } else { diff --git a/env.h b/env.h index b78015b1e..d3fbf44b8 100644 --- a/env.h +++ b/env.h @@ -100,6 +100,7 @@ class env_var_t : public wcstring { bool is_missing; public: static env_var_t missing_var(void); + env_var_t(const env_var_t &x) : wcstring(x), is_missing(x.is_missing) { } env_var_t(const wcstring & x) : wcstring(x), is_missing(false) { } env_var_t(const wchar_t *x) : wcstring(x), is_missing(false) { } env_var_t() : wcstring(L""), is_missing(false) { } @@ -111,6 +112,15 @@ class env_var_t : public wcstring { wcstring::operator=(s); return *this; } + + bool operator==(const env_var_t &s) const { + if (is_missing && s.is_missing) + return true; + else if (s.is_missing || s.is_missing) + return false; + else + return *static_cast(this) == *static_cast(&s); + } }; /**