diff --git a/src/main.zig b/src/main.zig index f2c4873..393c752 100644 --- a/src/main.zig +++ b/src/main.zig @@ -354,10 +354,16 @@ fn get_app_config_dir(appname: []const u8) ![]const u8 { dir else if (std.posix.getenv("XDG_CONFIG_HOME")) |xdg| try std.fmt.bufPrint(&local.config_dir_buffer, "{s}/{s}", .{ xdg, appname }) - else if (std.posix.getenv("HOME")) |home| - try std.fmt.bufPrint(&local.config_dir_buffer, "{s}/.config/{s}", .{ home, appname }) - else + else if (std.posix.getenv("HOME")) |home| ret: { + const dir = try std.fmt.bufPrint(&local.config_dir_buffer, "{s}/.config", .{home}); + std.fs.makeDirAbsolute(dir) catch |e| switch (e) { + error.PathAlreadyExists => {}, + else => return e, + }; + break :ret try std.fmt.bufPrint(&local.config_dir_buffer, "{s}/.config/{s}", .{ home, appname }); + } else { return error.AppConfigDirUnavailable; + }; local.config_dir = config_dir; std.fs.makeDirAbsolute(config_dir) catch |e| switch (e) { error.PathAlreadyExists => {}, @@ -379,10 +385,16 @@ fn get_app_cache_dir(appname: []const u8) ![]const u8 { dir else if (std.posix.getenv("XDG_CACHE_HOME")) |xdg| try std.fmt.bufPrint(&local.cache_dir_buffer, "{s}/{s}", .{ xdg, appname }) - else if (std.posix.getenv("HOME")) |home| - try std.fmt.bufPrint(&local.cache_dir_buffer, "{s}/.cache/{s}", .{ home, appname }) - else + else if (std.posix.getenv("HOME")) |home| ret: { + const dir = try std.fmt.bufPrint(&local.cache_dir_buffer, "{s}/.cache", .{home}); + std.fs.makeDirAbsolute(dir) catch |e| switch (e) { + error.PathAlreadyExists => {}, + else => return e, + }; + break :ret try std.fmt.bufPrint(&local.cache_dir_buffer, "{s}/.cache/{s}", .{ home, appname }); + } else { return error.AppCacheDirUnavailable; + }; local.cache_dir = cache_dir; std.fs.makeDirAbsolute(cache_dir) catch |e| switch (e) { error.PathAlreadyExists => {},