feature. See also
. The project being documented here (as the example) is the Zig library itself.
LibCInstallation.findNativeKernel32LibDir
fn findNativeKernel32LibDir(
self: *LibCInstallation,
gpa: Allocator,
io: Io,
args: FindNativeOptions,
sdk: std.zig.WindowsSdk,
) FindError!void
File
Code
fn findNativeKernel32LibDir(
self: *LibCInstallation,
gpa: Allocator,
io: Io,
args: FindNativeOptions,
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 (args.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}\\um\\{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, "kernel32.lib", .{}) catch |err| switch (err) {
error.FileNotFound => continue,
else => return error.FileSystem,
};
self.kernel32_lib_dir = try result_buf.toOwnedSlice();
return;
}
return error.LibCKernel32LibNotFound;
}