From 5ea417b2bd9d79f1ff767e6f376ba100844a26e1 Mon Sep 17 00:00:00 2001 From: Mark Vejvoda Date: Fri, 9 Aug 2013 18:03:29 +0000 Subject: [PATCH] added a fallback to use glib API if we cannot find the users home folder --- source/shared_lib/sources/util/properties.cpp | 35 ++++++++++++++++--- 1 file changed, 30 insertions(+), 5 deletions(-) diff --git a/source/shared_lib/sources/util/properties.cpp b/source/shared_lib/sources/util/properties.cpp index e067892dc..2d212cb04 100644 --- a/source/shared_lib/sources/util/properties.cpp +++ b/source/shared_lib/sources/util/properties.cpp @@ -22,13 +22,20 @@ #include "randomgen.h" #ifdef WIN32 + #include #include + +#endif + +#if _BSD_SOURCE || _SVID_SOURCE || _XOPEN_SOURCE >= 500 || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED +#include +#include +#include #endif #include "utf8.h" #include "font.h" - #include "string_utils.h" #include "leak_dumper.h" @@ -170,6 +177,22 @@ void Properties::load(const string &path, bool clearCurrentProperties) { #endif } +string getUserHomeFromGLIBC() { + string home_folder = ""; + char dateiname[512]; + const char *homedir = getenv("HOME"); + if (!homedir) { +#if _BSD_SOURCE || _SVID_SOURCE || _XOPEN_SOURCE >= 500 || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED + struct passwd *pw = getpwuid(getuid()); + homedir = pw->pw_dir; +#else + homedir = ""; +#endif + } + home_folder = homedir; + return home_folder; +} + std::map Properties::getTagReplacementValues(std::map *mapExtraTagReplacementValues) { std::map mapTagReplacementValues; @@ -178,9 +201,10 @@ std::map Properties::getTagReplacementValues(std::map * } else { #ifdef WIN32 - char *homeDir = getenv("USERPROFILE"); + const char *homeDir = getenv("USERPROFILE"); #else - char *homeDir = getenv("HOME"); + string home = getUserHomeFromGLIBC(); + const char *homeDir = home.c_str(); #endif replaceAll(value, "~/", (homeDir != NULL ? homeDir : ""));