feature. See also
. The project being documented here (as the example) is the Zig library itself.
LibCInstallation.findNativeCrtDirWindows
fn findNativeCrtDirWindows(
self: *LibCInstallation,
gpa: Allocator,
io: Io,
target: *const std.Target,
sdk: std.zig.WindowsSdk,
) FindError!void
File
Code
fn findNativeCrtDirWindows(
self: *LibCInstallation,
gpa: Allocator,
io: Io,
target: *const std.Target,
sdk: std.zig.WindowsSdk,
) FindError!void {
var install_buf: [2]std.zig.WindowsSdk.Installation = undefined;
const installs = fillInstallations(&install_buf, sdk);
var result_buf = std.array_list.Managed(u8).init(gpa);
defer result_buf.deinit();
const arch_sub_dir = switch (target.cpu.arch) {
.x86 => "x86",
.x86_64 => "x64",
.thumb => "arm",
.aarch64 => "arm64",
else => return error.UnsupportedArchitecture,
};
for (installs) |install| {
result_buf.shrinkAndFree(0);
try result_buf.print("{s}\\Lib\\{s}\\ucrt\\{s}", .{ install.path, install.version, arch_sub_dir });
var dir = Io.Dir.cwd().openDir(io, result_buf.items, .{}) catch |err| switch (err) {
error.FileNotFound,
error.NotDir,
error.NoDevice,
=> continue,
else => return error.FileSystem,
};
defer dir.close(io);
dir.access(io, "ucrt.lib", .{}) catch |err| switch (err) {
error.FileNotFound => continue,
else => return error.FileSystem,
};
self.crt_dir = try result_buf.toOwnedSlice();
return;
}
return error.LibCRuntimeNotFound;
}