crash: prefer XDG cache dir if available

This commit is contained in:
Mitchell Hashimoto
2025-01-02 11:50:12 -08:00
parent 6fca26972b
commit 57af5f3106
2 changed files with 28 additions and 13 deletions

View File

@ -101,10 +101,23 @@ fn initThread(gpa: Allocator) !void {
sentry.c.sentry_options_set_before_send(opts, beforeSend, null);
// Determine the Sentry cache directory.
const cache_dir = if (builtin.os.tag == .macos)
try internal_os.macos.cacheDir(alloc, "sentry")
else
try internal_os.xdg.cache(alloc, .{ .subdir = "ghostty/sentry" });
const cache_dir = cache_dir: {
// On macOS, we prefer to use the NSCachesDirectory value to be
// a more idiomatic macOS application. But if XDG env vars are set
// we will respect them.
if (comptime builtin.os.tag == .macos) macos: {
if (std.posix.getenv("XDG_CACHE_HOME") != null) break :macos;
break :cache_dir try internal_os.macos.cacheDir(
alloc,
"sentry",
);
}
break :cache_dir try internal_os.xdg.cache(
alloc,
.{ .subdir = "ghostty/sentry" },
);
};
sentry.c.sentry_options_set_database_path_n(
opts,
cache_dir.ptr,

View File

@ -25,10 +25,11 @@ pub fn appSupportDir(
alloc: Allocator,
sub_path: []const u8,
) AppSupportDirError![]const u8 {
return try makeCommonPath(alloc, .NSApplicationSupportDirectory, &.{
build_config.bundle_id,
sub_path,
});
return try commonDir(
alloc,
.NSApplicationSupportDirectory,
&.{ build_config.bundle_id, sub_path },
);
}
pub const CacheDirError = Allocator.Error || error{AppleAPIFailed};
@ -39,10 +40,11 @@ pub fn cacheDir(
alloc: Allocator,
sub_path: []const u8,
) CacheDirError![]const u8 {
return try makeCommonPath(alloc, .NSCachesDirectory, &.{
build_config.bundle_id,
sub_path,
});
return try commonDir(
alloc,
.NSCachesDirectory,
&.{ build_config.bundle_id, sub_path },
);
}
pub const SetQosClassError = error{
@ -101,7 +103,7 @@ pub const NSSearchPathDomainMask = enum(c_ulong) {
NSUserDomainMask = 1,
};
fn makeCommonPath(
fn commonDir(
alloc: Allocator,
directory: NSSearchPathDirectory,
sub_paths: []const []const u8,