diff src/filesystem.cpp @ 1:1ae666fdf9e2

*: initial commit
author Paper <mrpapersonic@gmail.com>
date Tue, 08 Aug 2023 19:49:15 -0400
parents
children 23d0d9319a00
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/filesystem.cpp	Tue Aug 08 19:49:15 2023 -0400
@@ -0,0 +1,25 @@
+#ifdef _WIN32
+#include <shlobj.h>
+#elif defined(APPLE)
+#include <NSSearchPathForDirectoriesInDomains.h>
+#endif
+#include <filesystem>
+#include <limits.h>
+#include "config.h"
+#include "filesystem.h"
+
+std::filesystem::path get_config_path(void) {
+	std::filesystem::path cfg_path;
+#ifdef _WIN32
+	char buf[PATH_MAX+1];
+	if (SHGetFolderPathAndSubDir(NULL, CSIDL_APPDATA | CSIDL_FLAG_CREATE, NULL, 0, CONFIG_DIR, buf) == S_OK)
+		cfg_path = std::filesystem::path(buf) / CONFIG_NAME;
+#elif defined(MACOSX)
+	/* hope and pray that std::filesystem can handle tildes... */
+	CFString string = (CFString)NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, true);
+	cfg_path = std::filesystem::path(StringUtils::Utf8ToWstr(std::string(CFStringGetCStringPtr(string, UTF8))));
+#else // just assume POSIX
+	cfg_path = std::filesystem::path(getenv("HOME")) / ".config" / CONFIG_DIR / CONFIG_NAME;
+#endif
+	return cfg_path;
+}