diff options
Diffstat (limited to 'mirai.old/invocations/kata/exit.zig')
| -rw-r--r-- | mirai.old/invocations/kata/exit.zig | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/mirai.old/invocations/kata/exit.zig b/mirai.old/invocations/kata/exit.zig new file mode 100644 index 0000000..fd9ec9d --- /dev/null +++ b/mirai.old/invocations/kata/exit.zig @@ -0,0 +1,33 @@ +//! Exit invocation - Dissolve Kata + +const afs = @import("../../fs/afs/afs.zig"); +const ahci = @import("../../drivers/ahci/ahci.zig"); +const attachment = @import("../../utils/kata/attachment.zig"); +const handler = @import("../handler.zig"); +const kata_limits = @import("../../common/limits/kata.zig"); +const kata_mod = @import("../../kata/kata.zig"); +const sensei = @import("../../kata/sensei/sensei.zig"); + +var afs_instance: ?*afs.AFS(ahci.BlockDevice) = null; + +pub fn set_afs_instance(fs: *afs.AFS(ahci.BlockDevice)) void { + afs_instance = fs; +} + +pub fn invoke(ctx: *handler.InvocationContext) void { + const kata = sensei.get_current_kata() orelse return; + const exit_code = ctx.rdi; + + var i: u32 = 0; + while (i < kata_limits.MAX_ATTACHMENTS) : (i += 1) { + if (kata.attachments[i]) |entry| { + if (entry.attachment_type == .Unit) { + attachment.seal(kata, i, afs_instance); + } + } + } + + kata.exit_code = exit_code; + kata_mod.dissolve_kata(kata.id); + sensei.schedule(); +} |
