diff --git a/lib/std/Io/Threaded.zig b/lib/std/Io/Threaded.zig index 10be5734527fe1e59fbf939031fec35b051644be..0e67fd1a9d3f762adbebf67d1f1937f5ddfa8b73 100644 --- a/lib/std/Io/Threaded.zig +++ b/lib/std/Io/Threaded.zig @@ -7194,15 +7194,14 @@ fn processExecutablePath(userdata: ?*anyopaque, out_buffer: []u8) std.process.Ex if (std.mem.indexOf(u8, argv0, "/") != null) { // argv[0] is a path (relative or absolute): use realpath(3) directly var real_path_buf: [posix.PATH_MAX]u8 = undefined; - const real_path = Io.Dir.realPathFileAbsolute(ioBasic(t), std.os.argv[0], &real_path_buf) catch |err| switch (err) { + const real_path_len = Io.Dir.realPathFileAbsolute(ioBasic(t), argv0, &real_path_buf) catch |err| switch (err) { error.NetworkNotFound => unreachable, // Windows-only else => |e| return e, }; - if (real_path.len > out_buffer.len) + if (real_path_len > out_buffer.len) return error.NameTooLong; - const result = out_buffer[0..real_path.len]; - @memcpy(result, real_path); - return result.len; + @memcpy(out_buffer[0..real_path_len], real_path_buf[0..real_path_len]); + return real_path_len; } else if (argv0.len != 0) { // argv[0] is not empty (and not a path): search it inside PATH const PATH = posix.getenvZ("PATH") orelse return error.FileNotFound; @@ -7214,13 +7213,12 @@ fn processExecutablePath(userdata: ?*anyopaque, out_buffer: []u8) std.process.Ex }, 0) catch continue; var real_path_buf: [posix.PATH_MAX]u8 = undefined; - if (Io.Dir.realPathFileAbsolute(ioBasic(t), resolved_path, &real_path_buf)) |real_path| { + if (Io.Dir.realPathFileAbsolute(ioBasic(t), resolved_path, &real_path_buf)) |real_path_len| { // found a file, and hope it is the right file - if (real_path.len > out_buffer.len) + if (real_path_len > out_buffer.len) return error.NameTooLong; - const result = out_buffer[0..real_path.len]; - @memcpy(result, real_path); - return result.len; + @memcpy(out_buffer[0..real_path_len], real_path_buf[0..real_path_len]); + return real_path_len; } else |_| continue; } }