mirror of
https://github.com/pocoproject/poco.git
synced 2025-10-26 18:42:41 +01:00
add Windows compliant implementation of XDG Base Directory Specification
This commit is contained in:
@@ -32,7 +32,12 @@ class Foundation_API PathImpl
|
|||||||
public:
|
public:
|
||||||
static std::string currentImpl();
|
static std::string currentImpl();
|
||||||
static std::string homeImpl();
|
static std::string homeImpl();
|
||||||
|
static std::string configHomeImpl();
|
||||||
|
static std::string dataHomeImpl();
|
||||||
|
static std::string cacheHomeImpl();
|
||||||
|
static std::string tempHomeImpl();
|
||||||
static std::string tempImpl();
|
static std::string tempImpl();
|
||||||
|
static std::string configImpl();
|
||||||
static std::string nullImpl();
|
static std::string nullImpl();
|
||||||
static std::string systemImpl();
|
static std::string systemImpl();
|
||||||
static std::string expandImpl(const std::string& path);
|
static std::string expandImpl(const std::string& path);
|
||||||
|
|||||||
@@ -32,7 +32,12 @@ class Foundation_API PathImpl
|
|||||||
public:
|
public:
|
||||||
static std::string currentImpl();
|
static std::string currentImpl();
|
||||||
static std::string homeImpl();
|
static std::string homeImpl();
|
||||||
|
static std::string configHomeImpl();
|
||||||
|
static std::string dataHomeImpl();
|
||||||
|
static std::string cacheHomeImpl();
|
||||||
|
static std::string tempHomeImpl();
|
||||||
static std::string tempImpl();
|
static std::string tempImpl();
|
||||||
|
static std::string configImpl();
|
||||||
static std::string nullImpl();
|
static std::string nullImpl();
|
||||||
static std::string systemImpl();
|
static std::string systemImpl();
|
||||||
static std::string expandImpl(const std::string& path);
|
static std::string expandImpl(const std::string& path);
|
||||||
|
|||||||
@@ -597,7 +597,7 @@ std::string Path::home()
|
|||||||
|
|
||||||
std::string Path::configHome()
|
std::string Path::configHome()
|
||||||
{
|
{
|
||||||
#if defined(POCO_OS_FAMILY_UNIX)
|
#if defined(POCO_OS_FAMILY_UNIX) || defined(POCO_OS_FAMILY_WINDOWS)
|
||||||
return PathImpl::configHomeImpl();
|
return PathImpl::configHomeImpl();
|
||||||
#else
|
#else
|
||||||
return PathImpl::homeImpl();
|
return PathImpl::homeImpl();
|
||||||
@@ -607,7 +607,7 @@ std::string Path::configHome()
|
|||||||
|
|
||||||
std::string Path::dataHome()
|
std::string Path::dataHome()
|
||||||
{
|
{
|
||||||
#if defined(POCO_OS_FAMILY_UNIX)
|
#if defined(POCO_OS_FAMILY_UNIX) || defined(POCO_OS_FAMILY_WINDOWS)
|
||||||
return PathImpl::dataHomeImpl();
|
return PathImpl::dataHomeImpl();
|
||||||
#else
|
#else
|
||||||
return PathImpl::homeImpl();
|
return PathImpl::homeImpl();
|
||||||
@@ -617,7 +617,7 @@ std::string Path::dataHome()
|
|||||||
|
|
||||||
std::string Path::tempHome()
|
std::string Path::tempHome()
|
||||||
{
|
{
|
||||||
#if defined(POCO_OS_FAMILY_UNIX)
|
#if defined(POCO_OS_FAMILY_UNIX) || defined(POCO_OS_FAMILY_WINDOWS)
|
||||||
return PathImpl::tempHomeImpl();
|
return PathImpl::tempHomeImpl();
|
||||||
#else
|
#else
|
||||||
return PathImpl::tempImpl();
|
return PathImpl::tempImpl();
|
||||||
@@ -627,7 +627,7 @@ std::string Path::tempHome()
|
|||||||
|
|
||||||
std::string Path::cacheHome()
|
std::string Path::cacheHome()
|
||||||
{
|
{
|
||||||
#if defined(POCO_OS_FAMILY_UNIX)
|
#if defined(POCO_OS_FAMILY_UNIX) || defined(POCO_OS_FAMILY_WINDOWS)
|
||||||
return PathImpl::cacheHomeImpl();
|
return PathImpl::cacheHomeImpl();
|
||||||
#else
|
#else
|
||||||
return PathImpl::homeImpl();
|
return PathImpl::homeImpl();
|
||||||
@@ -643,7 +643,7 @@ std::string Path::temp()
|
|||||||
|
|
||||||
std::string Path::config()
|
std::string Path::config()
|
||||||
{
|
{
|
||||||
#if defined(POCO_OS_FAMILY_UNIX)
|
#if defined(POCO_OS_FAMILY_UNIX) || defined(POCO_OS_FAMILY_WINDOWS)
|
||||||
return PathImpl::configImpl();
|
return PathImpl::configImpl();
|
||||||
#else
|
#else
|
||||||
return PathImpl::currentImpl();
|
return PathImpl::currentImpl();
|
||||||
|
|||||||
@@ -74,6 +74,59 @@ std::string PathImpl::homeImpl()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
std::string PathImpl::configHomeImpl()
|
||||||
|
{
|
||||||
|
std::string result;
|
||||||
|
|
||||||
|
// if APPDATA environment variable not exist, return home directory instead
|
||||||
|
try
|
||||||
|
{
|
||||||
|
result = EnvironmentImpl::getImpl("APPDATA");
|
||||||
|
}
|
||||||
|
catch (NotFoundException&)
|
||||||
|
{
|
||||||
|
result = homeImpl();
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string::size_type n = result.size();
|
||||||
|
if (n > 0 && result[n - 1] != '\\')
|
||||||
|
result.append("\\");
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
std::string PathImpl::dataHomeImpl()
|
||||||
|
{
|
||||||
|
std::string result;
|
||||||
|
|
||||||
|
// if LOCALAPPDATA environment variable not exist, return config home instead
|
||||||
|
try
|
||||||
|
{
|
||||||
|
result = EnvironmentImpl::getImpl("LOCALAPPDATA");
|
||||||
|
}
|
||||||
|
catch (NotFoundException&)
|
||||||
|
{
|
||||||
|
result = configHomeImpl();
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string::size_type n = result.size();
|
||||||
|
if (n > 0 && result[n - 1] != '\\')
|
||||||
|
result.append("\\");
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
std::string PathImpl::cacheHomeImpl()
|
||||||
|
{
|
||||||
|
return tempImpl();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
std::string PathImpl::tempHomeImpl()
|
||||||
|
{
|
||||||
|
return tempImpl();
|
||||||
|
}
|
||||||
|
|
||||||
std::string PathImpl::tempImpl()
|
std::string PathImpl::tempImpl()
|
||||||
{
|
{
|
||||||
char buffer[MAX_PATH];
|
char buffer[MAX_PATH];
|
||||||
@@ -91,6 +144,26 @@ std::string PathImpl::tempImpl()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
std::string PathImpl::configImpl()
|
||||||
|
{
|
||||||
|
std::string result;
|
||||||
|
|
||||||
|
// if PROGRAMDATA environment variable not exist, return system directory instead
|
||||||
|
try
|
||||||
|
{
|
||||||
|
result = EnvironmentImpl::getImpl("PROGRAMDATA");
|
||||||
|
}
|
||||||
|
catch (NotFoundException&)
|
||||||
|
{
|
||||||
|
result = systemImpl();
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string::size_type n = result.size();
|
||||||
|
if (n > 0 && result[n - 1] != '\\')
|
||||||
|
result.append("\\");
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
std::string PathImpl::nullImpl()
|
std::string PathImpl::nullImpl()
|
||||||
{
|
{
|
||||||
return "NUL:";
|
return "NUL:";
|
||||||
|
|||||||
@@ -84,6 +84,59 @@ std::string PathImpl::homeImpl()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
std::string PathImpl::configHomeImpl()
|
||||||
|
{
|
||||||
|
std::string result;
|
||||||
|
|
||||||
|
// if APPDATA environment variable no exist, return home directory instead
|
||||||
|
try
|
||||||
|
{
|
||||||
|
result = EnvironmentImpl::getImpl("APPDATA");
|
||||||
|
}
|
||||||
|
catch (NotFoundException&)
|
||||||
|
{
|
||||||
|
result = homeImpl();
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string::size_type n = result.size();
|
||||||
|
if (n > 0 && result[n - 1] != '\\')
|
||||||
|
result.append("\\");
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
std::string PathImpl::dataHomeImpl()
|
||||||
|
{
|
||||||
|
std::string result;
|
||||||
|
|
||||||
|
// if LOCALAPPDATA environment variable no exist, return config home instead
|
||||||
|
try
|
||||||
|
{
|
||||||
|
result = EnvironmentImpl::getImpl("LOCALAPPDATA");
|
||||||
|
}
|
||||||
|
catch (NotFoundException&)
|
||||||
|
{
|
||||||
|
result = configHomeImpl();
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string::size_type n = result.size();
|
||||||
|
if (n > 0 && result[n - 1] != '\\')
|
||||||
|
result.append("\\");
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
std::string PathImpl::cacheHomeImpl()
|
||||||
|
{
|
||||||
|
return tempImpl();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
std::string PathImpl::tempHomeImpl()
|
||||||
|
{
|
||||||
|
return tempImpl();
|
||||||
|
}
|
||||||
|
|
||||||
std::string PathImpl::tempImpl()
|
std::string PathImpl::tempImpl()
|
||||||
{
|
{
|
||||||
Buffer<wchar_t> buffer(MAX_PATH_LEN);
|
Buffer<wchar_t> buffer(MAX_PATH_LEN);
|
||||||
@@ -102,6 +155,26 @@ std::string PathImpl::tempImpl()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
std::string PathImpl::configImpl()
|
||||||
|
{
|
||||||
|
std::string result;
|
||||||
|
|
||||||
|
// if PROGRAMDATA environment variable not exist, return system directory instead
|
||||||
|
try
|
||||||
|
{
|
||||||
|
result = EnvironmentImpl::getImpl("PROGRAMDATA");
|
||||||
|
}
|
||||||
|
catch (NotFoundException&)
|
||||||
|
{
|
||||||
|
result = systemImpl();
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string::size_type n = result.size();
|
||||||
|
if (n > 0 && result[n - 1] != '\\')
|
||||||
|
result.append("\\");
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
std::string PathImpl::nullImpl()
|
std::string PathImpl::nullImpl()
|
||||||
{
|
{
|
||||||
return "NUL:";
|
return "NUL:";
|
||||||
|
|||||||
Reference in New Issue
Block a user