Mercurial > minori
comparison src/sys/osx/filesystem.cc @ 202:71832ffe425a
animia: re-add kvm fd source
this is all being merged from my wildly out-of-date laptop. SORRY!
in other news, I edited the CI file to install the wayland client
as well, so the linux CI build might finally get wayland stuff.
author | Paper <paper@paper.us.eu.org> |
---|---|
date | Tue, 02 Jan 2024 06:05:06 -0500 |
parents | c4ca035c565d |
children |
comparison
equal
deleted
inserted
replaced
201:8f6f8dd2eb23 | 202:71832ffe425a |
---|---|
1 #include "sys/osx/filesystem.h" | |
2 | |
3 #include <CoreFoundation/CoreFoundation.h> | |
4 #include <objc/runtime.h> | |
5 | |
6 #include <string> | |
7 | |
8 /* These constants are defined in Foundation but not | |
9 * exposed to CoreFoundation users. | |
10 */ | |
11 static constexpr unsigned long NSApplicationSupportDirectory = 14; | |
12 static constexpr unsigned long NSUserDomainMask = 1; | |
13 | |
14 extern "C" { | |
15 CFArrayRef NSSearchPathForDirectoriesInDomains(unsigned long directory, unsigned long domainMask, BOOL expandTilde); | |
16 } | |
17 | |
18 namespace osx { | |
19 | |
20 bool GetApplicationSupportDirectory(std::string& result) { | |
21 // NSArray* strings = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, ON); | |
22 const CFArrayRef strings = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, true); | |
23 if (!strings) | |
24 return false; | |
25 | |
26 // NSIndex index = [strings count]; | |
27 const CFIndex count = CFArrayGetCount(strings); | |
28 if (count < 1) { | |
29 CFRelease(strings); | |
30 return false; | |
31 } | |
32 | |
33 // NSString* string = [strings objectAtIndex: 0]; | |
34 const CFStringRef string = reinterpret_cast<CFStringRef>(CFArrayGetValueAtIndex(strings, 0)); | |
35 if (!string) { | |
36 CFRelease(strings); | |
37 return false; | |
38 } | |
39 | |
40 // result = [string UTF8String]; | |
41 result.resize(CFStringGetMaximumSizeForEncoding(CFStringGetLength(string), kCFStringEncodingUTF8) + 1); | |
42 if (!CFStringGetCString(string, &result.front(), result.length(), kCFStringEncodingUTF8)) { | |
43 CFRelease(strings); | |
44 return false; | |
45 } | |
46 result.resize(result.find_first_of('\0')); | |
47 | |
48 return true; | |
49 } | |
50 | |
51 } // namespace osx |