aboutsummaryrefslogtreecommitdiff
path: root/mirai.old/invocations/kata/exit.zig
blob: fd9ec9d88a86d444dfc319cfbe0c230e15f8bc72 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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();
}