Compare commits
No commits in common. "1403636cc253c1e0ca677089aa38b4f3d3a78132" and "c41cd0708592ae332a2b54036052b7660fa7da8a" have entirely different histories.
1403636cc2
...
c41cd07085
1 changed files with 9 additions and 17 deletions
|
@ -28,28 +28,20 @@ fn find_binary_in_path_windows(allocator: std.mem.Allocator, binary_name_: []con
|
||||||
error.EnvironmentVariableNotFound, error.InvalidWtf8 => &.{},
|
error.EnvironmentVariableNotFound, error.InvalidWtf8 => &.{},
|
||||||
};
|
};
|
||||||
defer allocator.free(bin_paths);
|
defer allocator.free(bin_paths);
|
||||||
const bin_extensions = std.process.getEnvVarOwned(allocator, "PATHEXT") catch |err| switch (err) {
|
var path = std.ArrayList(u8).init(allocator);
|
||||||
error.OutOfMemory => return error.OutOfMemory,
|
try path.appendSlice(binary_name_);
|
||||||
error.EnvironmentVariableNotFound, error.InvalidWtf8 => &.{},
|
try path.appendSlice(".exe");
|
||||||
};
|
const binary_name = try path.toOwnedSlice();
|
||||||
defer allocator.free(bin_extensions);
|
defer allocator.free(binary_name);
|
||||||
var bin_path_iterator = std.mem.splitScalar(u8, bin_paths, std.fs.path.delimiter);
|
var bin_path_iterator = std.mem.splitScalar(u8, bin_paths, std.fs.path.delimiter);
|
||||||
while (bin_path_iterator.next()) |bin_path| {
|
while (bin_path_iterator.next()) |bin_path| {
|
||||||
if (!std.fs.path.isAbsolute(bin_path)) continue;
|
if (!std.fs.path.isAbsolute(bin_path)) continue;
|
||||||
var dir = std.fs.openDirAbsolute(bin_path, .{}) catch continue;
|
var dir = std.fs.openDirAbsolute(bin_path, .{}) catch continue;
|
||||||
defer dir.close();
|
defer dir.close();
|
||||||
var bin_extensions_iterator = std.mem.splitScalar(u8, bin_extensions, ';');
|
|
||||||
while (bin_extensions_iterator.next()) |bin_extension| {
|
|
||||||
var path = std.ArrayList(u8).init(allocator);
|
|
||||||
try path.appendSlice(binary_name_);
|
|
||||||
try path.appendSlice(bin_extension);
|
|
||||||
const binary_name = try path.toOwnedSlice();
|
|
||||||
defer allocator.free(binary_name);
|
|
||||||
_ = dir.statFile(binary_name) catch continue;
|
_ = dir.statFile(binary_name) catch continue;
|
||||||
const resolved_binary_path = try std.fs.path.join(allocator, &[_][]const u8{ bin_path, binary_name });
|
const resolved_binary_path = try std.fs.path.join(allocator, &[_][]const u8{ bin_path, binary_name });
|
||||||
defer allocator.free(resolved_binary_path);
|
defer allocator.free(resolved_binary_path);
|
||||||
return try allocator.dupeZ(u8, resolved_binary_path);
|
return try allocator.dupeZ(u8, resolved_binary_path);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue