mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-07-22 19:56:08 +03:00
windows: use cross platform consts where available
This commit is contained in:
@ -223,8 +223,6 @@ pub fn getData(self: Command, comptime DT: type) ?*DT {
|
|||||||
/// Search for "cmd" in the PATH and return the absolute path. This will
|
/// Search for "cmd" in the PATH and return the absolute path. This will
|
||||||
/// always allocate if there is a non-null result. The caller must free the
|
/// always allocate if there is a non-null result. The caller must free the
|
||||||
/// resulting value.
|
/// resulting value.
|
||||||
///
|
|
||||||
/// TODO: windows
|
|
||||||
pub fn expandPath(alloc: Allocator, cmd: []const u8) !?[]u8 {
|
pub fn expandPath(alloc: Allocator, cmd: []const u8) !?[]u8 {
|
||||||
// If the command already contains a slash, then we return it as-is
|
// If the command already contains a slash, then we return it as-is
|
||||||
// because it is assumed to be absolute or relative.
|
// because it is assumed to be absolute or relative.
|
||||||
@ -243,8 +241,7 @@ pub fn expandPath(alloc: Allocator, cmd: []const u8) !?[]u8 {
|
|||||||
defer if (builtin.os.tag == .windows) alloc.free(PATH);
|
defer if (builtin.os.tag == .windows) alloc.free(PATH);
|
||||||
|
|
||||||
var path_buf: [std.fs.MAX_PATH_BYTES]u8 = undefined;
|
var path_buf: [std.fs.MAX_PATH_BYTES]u8 = undefined;
|
||||||
const path_separator = if (builtin.os.tag == .windows) ";" else ":";
|
var it = std.mem.tokenize(u8, PATH, &[_]u8{std.fs.path.delimiter});
|
||||||
var it = std.mem.tokenize(u8, PATH, path_separator);
|
|
||||||
var seen_eacces = false;
|
var seen_eacces = false;
|
||||||
while (it.next()) |search_path| {
|
while (it.next()) |search_path| {
|
||||||
// We need enough space in our path buffer to store this
|
// We need enough space in our path buffer to store this
|
||||||
@ -253,7 +250,7 @@ pub fn expandPath(alloc: Allocator, cmd: []const u8) !?[]u8 {
|
|||||||
|
|
||||||
// Copy in the full path
|
// Copy in the full path
|
||||||
mem.copy(u8, &path_buf, search_path);
|
mem.copy(u8, &path_buf, search_path);
|
||||||
path_buf[search_path.len] = if (builtin.os.tag == .windows) '\\' else '/';
|
path_buf[search_path.len] = std.fs.path.sep;
|
||||||
mem.copy(u8, path_buf[search_path.len + 1 ..], cmd);
|
mem.copy(u8, path_buf[search_path.len + 1 ..], cmd);
|
||||||
path_buf[path_len] = 0;
|
path_buf[path_len] = 0;
|
||||||
const full_path = path_buf[0..path_len :0];
|
const full_path = path_buf[0..path_len :0];
|
||||||
|
@ -55,10 +55,14 @@ pub fn fixMaxFiles() void {
|
|||||||
pub fn tmpDir() ?[]const u8 {
|
pub fn tmpDir() ?[]const u8 {
|
||||||
if (builtin.os.tag == .windows) {
|
if (builtin.os.tag == .windows) {
|
||||||
// TODO: what is a good fallback path on windows?
|
// TODO: what is a good fallback path on windows?
|
||||||
const w_temp = std.os.getenvW(std.unicode.utf8ToUtf16LeStringLiteral("TMP")) orelse return null;
|
const v = std.os.getenvW(std.unicode.utf8ToUtf16LeStringLiteral("TMP")) orelse return null;
|
||||||
var buf = [_]u8{0} ** 256; // 256 is the maximum path length on windows
|
// MAX_PATH is very likely sufficient, but it's theoretically possible for someone to
|
||||||
const len = std.unicode.utf16leToUtf8(buf[0..], w_temp[0..w_temp.len]) catch {
|
// configure their os to allow paths as big as std.os.windows.PATH_MAX_WIDE, which is MUCH
|
||||||
log.warn("failed to convert temp dir path from windows string", .{});
|
// larger. Even if they did that, though, it's very unlikey that their Temp dir will use
|
||||||
|
// such a long path. We can switch if we see any issues, though it seems fairly unlikely.
|
||||||
|
var buf = [_]u8{0} ** std.os.windows.MAX_PATH;
|
||||||
|
const len = std.unicode.utf16leToUtf8(buf[0..], v[0..v.len]) catch |e| {
|
||||||
|
log.warn("failed to convert temp dir path from windows string: {}", .{e});
|
||||||
return null;
|
return null;
|
||||||
};
|
};
|
||||||
return buf[0..len];
|
return buf[0..len];
|
||||||
|
Reference in New Issue
Block a user