aboutsummaryrefslogtreecommitdiff
path: root/mirai.old/invocations/kata/exit.zig
diff options
context:
space:
mode:
Diffstat (limited to 'mirai.old/invocations/kata/exit.zig')
-rw-r--r--mirai.old/invocations/kata/exit.zig33
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();
+}