authorgravatar for squeek502@hotmail.comRyan Liptak <squeek502@hotmail.com> 2023-11-22 16:29:56-08:00
committergravatar for squeek502@hotmail.comRyan Liptak <squeek502@hotmail.com> 2023-11-23 01:11:53-08:00
logd42418d6146a833f4600ca0be0b54383aac9f840
treeff9c062f155c6b977d88372485ea01edb801da9a
parentfcc071c9bd6b0c8e010957156505878ea6c0c55d

Replace shell32.SHGetKnownFolderPath usage with LOCALAPPDATA env var

Removes the dependency on shell32.dll. This is a stop gap solution until a proper SHGetKnownFolderPath Zig implementation is written

1 files changed, 5 insertions(+), 20 deletions(-)

lib/std/fs/get_app_data_dir.zig+5-20
......@@ -15,27 +15,12 @@ pub const GetAppDataDirError = error{
1515pub fn getAppDataDir(allocator: mem.Allocator, appname: []const u8) GetAppDataDirError![]u8 {
1616 switch (builtin.os.tag) {
1717 .windows => {
18 var dir_path_ptr: [*:0]u16 = undefined;
19 switch (os.windows.shell32.SHGetKnownFolderPath(
20 &os.windows.FOLDERID_LocalAppData,
21 os.windows.KF_FLAG_CREATE,
22 null,
23 &dir_path_ptr,
24 )) {
25 os.windows.S_OK => {
26 defer os.windows.ole32.CoTaskMemFree(dir_path_ptr);
27 const global_dir = unicode.utf16leToUtf8Alloc(allocator, mem.sliceTo(dir_path_ptr, 0)) catch |err| switch (err) {
28 error.UnexpectedSecondSurrogateHalf => return error.AppDataDirUnavailable,
29 error.ExpectedSecondSurrogateHalf => return error.AppDataDirUnavailable,
30 error.DanglingSurrogateHalf => return error.AppDataDirUnavailable,
31 error.OutOfMemory => return error.OutOfMemory,
32 };
33 defer allocator.free(global_dir);
34 return fs.path.join(allocator, &[_][]const u8{ global_dir, appname });
35 },
36 os.windows.E_OUTOFMEMORY => return error.OutOfMemory,
18 const local_app_data_dir = std.process.getEnvVarOwned(allocator, "LOCALAPPDATA") catch |err| switch (err) {
19 error.OutOfMemory => |e| return e,
3720 else => return error.AppDataDirUnavailable,
38 }
21 };
22 defer allocator.free(local_app_data_dir);
23 return fs.path.join(allocator, &[_][]const u8{ local_app_data_dir, appname });
3924 },
4025 .macos => {
4126 const home_dir = os.getenv("HOME") orelse {