aboutsummaryrefslogtreecommitdiff
path: root/src-self-hosted/libc_installation.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2020-04-01 13:44:19 -0400
committerAndrew Kelley <andrew@ziglang.org>2020-04-01 13:44:19 -0400
commitc2e8788259efd33995e151ace355cb5896cc8a85 (patch)
tree7962a47dd9df3976a7aa8c8c5ad754d27dd55ba4 /src-self-hosted/libc_installation.zig
parente8a1e2a1d8f2903d5951339f7d3e0dbdfc85704c (diff)
parent2e806682f451efd26bef0486ddd980ab60de0fa1 (diff)
downloadzig-c2e8788259efd33995e151ace355cb5896cc8a85.tar.gz
zig-c2e8788259efd33995e151ace355cb5896cc8a85.zip
Merge branch 'daurnimator-less-buffer'
closes #4665
Diffstat (limited to 'src-self-hosted/libc_installation.zig')
-rw-r--r--src-self-hosted/libc_installation.zig32
1 files changed, 14 insertions, 18 deletions
diff --git a/src-self-hosted/libc_installation.zig b/src-self-hosted/libc_installation.zig
index 9aa7b39c9b..11708e2a31 100644
--- a/src-self-hosted/libc_installation.zig
+++ b/src-self-hosted/libc_installation.zig
@@ -14,11 +14,11 @@ usingnamespace @import("windows_sdk.zig");
/// See the render function implementation for documentation of the fields.
pub const LibCInstallation = struct {
- include_dir: ?[:0]const u8 = null,
- sys_include_dir: ?[:0]const u8 = null,
- crt_dir: ?[:0]const u8 = null,
- msvc_lib_dir: ?[:0]const u8 = null,
- kernel32_lib_dir: ?[:0]const u8 = null,
+ include_dir: ?[]const u8 = null,
+ sys_include_dir: ?[]const u8 = null,
+ crt_dir: ?[]const u8 = null,
+ msvc_lib_dir: ?[]const u8 = null,
+ kernel32_lib_dir: ?[]const u8 = null,
pub const FindError = error{
OutOfMemory,
@@ -327,13 +327,12 @@ pub const LibCInstallation = struct {
var search_buf: [2]Search = undefined;
const searches = fillSearch(&search_buf, sdk);
- var result_buf = try std.Buffer.initSize(allocator, 0);
+ var result_buf = std.ArrayList([]const u8).init(allocator);
defer result_buf.deinit();
for (searches) |search| {
result_buf.shrink(0);
- const stream = result_buf.outStream();
- try stream.print("{}\\Include\\{}\\ucrt", .{ search.path, search.version });
+ try result_buf.outStream().print("{}\\Include\\{}\\ucrt", .{ search.path, search.version });
var dir = fs.cwd().openDir(result_buf.span(), .{}) catch |err| switch (err) {
error.FileNotFound,
@@ -367,7 +366,7 @@ pub const LibCInstallation = struct {
var search_buf: [2]Search = undefined;
const searches = fillSearch(&search_buf, sdk);
- var result_buf = try std.Buffer.initSize(allocator, 0);
+ var result_buf = try std.ArrayList([]const u8).init(allocator);
defer result_buf.deinit();
const arch_sub_dir = switch (builtin.arch) {
@@ -379,8 +378,7 @@ pub const LibCInstallation = struct {
for (searches) |search| {
result_buf.shrink(0);
- const stream = result_buf.outStream();
- try stream.print("{}\\Lib\\{}\\ucrt\\{}", .{ search.path, search.version, arch_sub_dir });
+ try result_buf.outStream().print("{}\\Lib\\{}\\ucrt\\{}", .{ search.path, search.version, arch_sub_dir });
var dir = fs.cwd().openDir(result_buf.span(), .{}) catch |err| switch (err) {
error.FileNotFound,
@@ -422,7 +420,7 @@ pub const LibCInstallation = struct {
var search_buf: [2]Search = undefined;
const searches = fillSearch(&search_buf, sdk);
- var result_buf = try std.Buffer.initSize(allocator, 0);
+ var result_buf = try std.ArrayList([]const u8).init(allocator);
defer result_buf.deinit();
const arch_sub_dir = switch (builtin.arch) {
@@ -470,12 +468,10 @@ pub const LibCInstallation = struct {
const up1 = fs.path.dirname(msvc_lib_dir) orelse return error.LibCStdLibHeaderNotFound;
const up2 = fs.path.dirname(up1) orelse return error.LibCStdLibHeaderNotFound;
- var result_buf = try std.Buffer.init(allocator, up2);
- defer result_buf.deinit();
-
- try result_buf.append("\\include");
+ const dir_path = try fs.path.join(allocator, &[_][]const u8{ up2, "include" });
+ errdefer allocator.free(dir_path);
- var dir = fs.cwd().openDir(result_buf.span(), .{}) catch |err| switch (err) {
+ var dir = fs.cwd().openDir(dir_path, .{}) catch |err| switch (err) {
error.FileNotFound,
error.NotDir,
error.NoDevice,
@@ -490,7 +486,7 @@ pub const LibCInstallation = struct {
else => return error.FileSystem,
};
- self.sys_include_dir = result_buf.toOwnedSlice();
+ self.sys_include_dir = dir_path;
}
fn findNativeMsvcLibDir(