]> git.tdb.fi Git - libs/core.git/commitdiff
Add a function to retrieve temporary directory location
authorMikko Rasa <tdb@tdb.fi>
Sat, 16 Sep 2023 09:46:08 +0000 (12:46 +0300)
committerMikko Rasa <tdb@tdb.fi>
Sat, 16 Sep 2023 09:46:08 +0000 (12:46 +0300)
MacOS and Android versions are untested.

source/fs/android/dir_location.cpp
source/fs/dir.h
source/fs/osx/cfdir.m
source/fs/osx/dir_location.cpp
source/fs/unix/dir_location.cpp
source/fs/windows/dir_location.cpp

index 155d14782aa5e37ce503d0093d138defddb47960..24066f9ff6b15c7a33185cba775a43cc6ed0b0e8 100644 (file)
@@ -18,5 +18,11 @@ Path get_user_data_dir()
        return thread->get_internal_data_path();
 }
 
+Path get_temp_dir()
+{
+       // TODO Should use Context.getCacheDir(), but it's a Java function.
+       return get_home_dir();
+}
+
 } // namespace FS
 } // namespace Msp
index 960be2e00c0559e258c6f2edbd7e3863e3f6cb84..e9cccfcb749a11c0851076b08f20ec9d2c0c4440 100644 (file)
@@ -56,6 +56,9 @@ MSPCORE_API Path get_sys_data_dir();
 /// Returns a directory containing system-wide architecture-specific files.
 MSPCORE_API Path get_sys_lib_dir();
 
+/// Returns a directory suitable for storing temporary files.
+MSPCORE_API Path get_temp_dir();
+
 /** Looks for a file in a list of paths.  Returns the absolute path to the
 first existing location, or an empty Path if the file is not found at all. */
 MSPCORE_API Path path_lookup(const std::string &, const std::vector<Path> &);
index 4dd4b4bd8f68018767dcee4304c1bcaf874676b5..b21a0acecaf99cdc5695b4d0f6b5a5b85789f896 100644 (file)
@@ -21,3 +21,12 @@ unsigned get_application_support_dir(char *buf, unsigned size)
 
        return [path lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
 }
+
+unsigned get_temp_dir(char *buf, unsigned size)
+{
+       NSString *path = NSTemporaryDirectory();
+       if(![path getCString:buf maxLength:size encoding:NSUTF8StringEncoding])
+               return 0;
+
+       return [path lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
+}
index 13aa3d2d500fd167153f16b4811f575004e517af..51ddd4fa6df432d426a6440eaf93068d58735668 100644 (file)
@@ -7,6 +7,7 @@ using namespace std;
 
 extern "C" unsigned get_home_dir(char *, unsigned);
 extern "C" unsigned get_application_support_dir(char *, unsigned);
+extern "C" unsigned get_temp_dir(char *, unsigned);
 
 namespace Msp {
 namespace FS {
@@ -38,5 +39,19 @@ Path get_user_data_dir()
        return get_home_dir()/"Library"/"Application Support"/appname;
 }
 
+Path get_temp_dir()
+{
+       string tmp = getenv("TMPDIR");
+       if(!tmp.empty())
+               return tmp;
+
+       char buf[1024];
+       unsigned len = ::get_temp_dir(buf, sizeof(buf));
+       if(len)
+               return string(buf, len);
+
+       return "/tmp";
+}
+
 } // namespace FS
 } // namespace Msp
index 68d82a27f968c37d14c1e2c42aafe1814e679570..b66c78815f0d42b3d39bbd2658d28043931dcc40 100644 (file)
@@ -25,5 +25,13 @@ Path get_user_data_dir()
        return get_home_dir()/("."+appname);
 }
 
+Path get_temp_dir()
+{
+       string tmp = getenv("TMPDIR");
+       if(!tmp.empty())
+               return tmp;
+       return "/tmp";
+}
+
 } // namespace FS
 } // namespace Msp
index 85c5c2fa30d1f6809c359cfb7f919605d83fedfb..5f47a7cd39632ba03478ae2604b0d187cf795b11 100644 (file)
@@ -28,5 +28,13 @@ Path get_user_data_dir()
        return ".";
 }
 
+Path get_temp_dir()
+{
+       char temp[MAX_PATH+1];
+       if(GetTempPath(sizeof(temp), temp))
+               return temp;
+       return ".";
+}
+
 } // namespace FS
 } // namespace Msp