aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/kernel.zig2
-rw-r--r--src/lib/resources.zig10
2 files changed, 6 insertions, 6 deletions
diff --git a/src/kernel.zig b/src/kernel.zig
index 820ee3e..97cc85b 100644
--- a/src/kernel.zig
+++ b/src/kernel.zig
@@ -201,7 +201,7 @@ fn pagedRun() !noreturn {
try vfs.init(allocator);
try w.print("Initialize VFS\r\n", .{});
- try resources.provideBuiltin();
+ try resources.provideBuiltin(allocator);
try w.print("Provide builtin resources\r\n", .{});
try w.print("Start init process\r\n", .{});
diff --git a/src/lib/resources.zig b/src/lib/resources.zig
index 71cd73b..25835d5 100644
--- a/src/lib/resources.zig
+++ b/src/lib/resources.zig
@@ -170,14 +170,14 @@ pub const Error = error{
NoConsole,
};
-pub fn provideBuiltin() !void {
+pub fn provideBuiltin(allocator: std.mem.Allocator) !void {
try addDir("/io");
try addDir("/userinit");
try addDir("/process");
try addDir("/process/self");
try provideConsole();
- try provideUserinit();
+ try provideUserinit(allocator);
try provideProcess();
}
@@ -195,13 +195,12 @@ fn provideConsole() !void {
});
}
-fn provideUserinit() !void {
+fn provideUserinit(allocator: std.mem.Allocator) !void {
var userinit_stream = io.fixedBufferStream(userinit.tarball);
const reader = userinit_stream.reader();
var file_name_buffer: [4086]u8 = undefined;
var link_name_buffer: [4086]u8 = undefined;
- var path_buffer: [4096]u8 = undefined;
var it = tar.iterator(reader, .{
.file_name_buffer = file_name_buffer[0..],
@@ -209,7 +208,8 @@ fn provideUserinit() !void {
});
while (try it.next()) |file| {
- const path = try std.fmt.bufPrint(path_buffer[0..], "/userinit/{s}", .{file.name});
+ const resolved = try std.fs.path.resolvePosix(allocator, &[_][]const u8{file.name});
+ const path = try std.fmt.allocPrint(allocator, "/userinit/{s}", .{resolved});
switch (file.kind) {
.file => try addFile(path, file),
.directory => try addDir(path),