aboutsummaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/resources.zig133
1 files changed, 0 insertions, 133 deletions
diff --git a/src/lib/resources.zig b/src/lib/resources.zig
deleted file mode 100644
index 08ad7a6..0000000
--- a/src/lib/resources.zig
+++ /dev/null
@@ -1,133 +0,0 @@
-// SPDX-FileCopyrightText: 2024 Himbeer <himbeer@disroot.org>
-//
-// SPDX-License-Identifier: AGPL-3.0-or-later
-
-const std = @import("std");
-
-const Console = @import("Console.zig");
-const instructions = @import("instructions.zig");
-const mem = @import("mem.zig");
-const paging = @import("paging.zig");
-const syscall = @import("syscall.zig");
-const sysexchange = @import("sysexchange.zig");
-const userinit = @import("userinit.zig");
-const vfs = @import("vfs.zig");
-
-const Result = sysexchange.Result;
-const io = std.io;
-const tar = std.tar;
-
-const File = tar.Iterator(io.FixedBufferStream([]const u8).Reader).File;
-
-const FileContext = struct {
- buffer: []const u8,
- fbs: io.FixedBufferStream([]const u8),
-};
-
-pub const Error = error{
- NoTarFileInitializer,
- NoConsole,
-};
-
-pub fn provideBuiltin(allocator: std.mem.Allocator) !void {
- try addDir("/userinit");
-
- try provideUserinit(allocator);
-}
-
-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 it = tar.iterator(reader, .{
- .file_name_buffer = file_name_buffer[0..],
- .link_name_buffer = link_name_buffer[0..],
- });
-
- while (try it.next()) |file| {
- 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),
- .sym_link => {},
- }
- }
-}
-
-fn addFile(path: []const u8, file: File) !void {
- const allocator = vfs.treeRoot().allocator;
-
- const buffer = try allocator.alloc(u8, file.size);
- try file.reader().readNoEof(buffer);
-
- const initializer = try allocator.create(FileContext);
- initializer.* = .{
- .buffer = buffer,
- .fbs = io.fixedBufferStream(@as([]const u8, buffer)),
- };
-
- try vfs.provideResource(path, .{
- .tag = .file,
- .data = .{
- .file = .{
- .readFn = read,
- .writeFn = null,
- .closeFn = close,
- .initializer = initializer,
- },
- },
- }, 0, .{
- .reclaimable = false,
- });
-}
-
-fn addDir(path: []const u8) !void {
- const allocator = vfs.treeRoot().allocator;
- const tree = try allocator.create(vfs.Tree);
- tree.* = vfs.Tree.init(allocator);
-
- try vfs.provideResource(path, .{
- .tag = .dir,
- .data = .{ .dir = tree },
- }, 0, .{
- .reclaimable = false,
- });
-}
-
-fn open(context: *vfs.FileContext, initializer: ?*anyopaque) !void {
- const allocator = vfs.treeRoot().allocator;
-
- const init_to = initializer orelse return Error.NoTarFileInitializer;
- const init_context: *FileContext = @alignCast(@ptrCast(init_to));
-
- const new_context = try allocator.create(FileContext);
- new_context.* = init_context.*;
-
- context.inner = new_context;
-}
-
-fn read(context: *vfs.FileContext, ptr: [*]u8, len: usize) callconv(.C) Result(usize) {
- if (context.inner == null) {
- open(context, context.initializer) catch |err| {
- return Result(usize).fromAnyTypeOrError(err);
- };
- }
-
- const inner: *FileContext = @alignCast(@ptrCast(context.inner.?));
-
- const buffer = ptr[0..len];
- return Result(usize).fromAnyTypeOrError(inner.fbs.read(buffer));
-}
-
-fn close(context: *vfs.FileContext) callconv(.C) void {
- if (context.inner) |inner_opaque| {
- const allocator = vfs.treeRoot().allocator;
-
- const inner: *FileContext = @alignCast(@ptrCast(inner_opaque));
- allocator.destroy(inner);
- }
-}