diff --git a/src/cli/utils.cpp b/src/cli/utils.cpp index de17099..ee67647 100644 --- a/src/cli/utils.cpp +++ b/src/cli/utils.cpp @@ -30,7 +30,7 @@ namespace { } std::string createAndGetAppDir(std::string dir) { - std::string home; + std::string home, xdg_data_home; #ifdef _WIN32 if (dir.empty()) { if (!std::getenv("HOMEDRIVE") || !std::getenv("HOMEPATH")) @@ -44,7 +44,27 @@ std::string createAndGetAppDir(std::string dir) { if (!std::getenv("HOME")) return ""; home = std::getenv("HOME"); +#ifdef __linux__ + if (!std::getenv("XDG_DATA_HOME")) { + xdg_data_home = home + "/.local/share"; + } else { + xdg_data_home = std::getenv("XDG_DATA_HOME"); + } + dir = xdg_data_home + "/bredbandskollen"; + // Make sure xdg_data_home exists + for ( + size_t end = xdg_data_home.find('/', 1), prev = 0; + prev != std::string::npos; + prev = end, end = xdg_data_home.find('/', end+1) + ) { + if(mkdir(xdg_data_home.substr(0, end).c_str(), 0755) && errno != EEXIST) { + return ""; + } + }; +#else + // Fall back to $HOME for other platforms dir = home + "/.bredbandskollen"; +#endif } int status = mkdir(dir.c_str(), 0755); if (status && errno != EEXIST) { diff --git a/src/http/httphost.h b/src/http/httphost.h index e42da3d..336aae8 100644 --- a/src/http/httphost.h +++ b/src/http/httphost.h @@ -4,6 +4,7 @@ #pragma once #include +#include class CookieManager; diff --git a/src/http/sha1.h b/src/http/sha1.h index 96480cf..db53478 100644 --- a/src/http/sha1.h +++ b/src/http/sha1.h @@ -6,6 +6,7 @@ #include #include +#include void base64_encode(const unsigned char *src, size_t len, char *destination);