Print error when HOME is not set (#7376)
authorMidgard <M1dgard@users.noreply.github.com>
Mon, 28 May 2018 16:00:42 +0000 (16:00 +0000)
committerLoïc Blot <nerzhul@users.noreply.github.com>
Mon, 28 May 2018 16:00:42 +0000 (18:00 +0200)
In some configurations, such as when using the runit supervisor and its
tool chpst, the HOME variable might be unset. This resulted in an
unclear error message that was hard to pin down.

src/porting.cpp

index 1e3d610bce6609c1e7fea150fac3fd9800efb11e..240ee0af0ceff4d545d4f35cc9fc51055f2db720 100644 (file)
@@ -351,6 +351,21 @@ bool getCurrentExecPath(char *buf, size_t len)
 #endif
 
 
+//// Non-Windows
+#if !defined(_WIN32)
+
+const char *getHomeOrFail()
+{
+       const char *home = getenv("HOME");
+       // In rare cases the HOME environment variable may be unset
+       FATAL_ERROR_IF(!home,
+               "Required environment variable HOME is not set");
+       return home;
+}
+
+#endif
+
+
 //// Windows
 #if defined(_WIN32)
 
@@ -430,7 +445,7 @@ bool setSystemPaths()
        }
 
 #ifndef __ANDROID__
-       path_user = std::string(getenv("HOME")) + DIR_DELIM "."
+       path_user = std::string(getHomeOrFail()) + DIR_DELIM "."
                + PROJECT_NAME;
 #endif
 
@@ -454,7 +469,7 @@ bool setSystemPaths()
        }
        CFRelease(resources_url);
 
-       path_user = std::string(getenv("HOME"))
+       path_user = std::string(getHomeOrFail())
                + "/Library/Application Support/"
                + PROJECT_NAME;
        return true;
@@ -466,7 +481,7 @@ bool setSystemPaths()
 bool setSystemPaths()
 {
        path_share = STATIC_SHAREDIR;
-       path_user  = std::string(getenv("HOME")) + DIR_DELIM "."
+       path_user  = std::string(getHomeOrFail()) + DIR_DELIM "."
                + lowercase(PROJECT_NAME);
        return true;
 }