aboutsummaryrefslogtreecommitdiff
path: root/mirai.old/invocations/io/seal.zig
blob: d798752a39364f544190a7ea6286ced8be1e6bb1 (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
//! Seal invocation - Close attachment

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 int = @import("../../utils/types/int.zig");
const kata_limits = @import("../../common/limits/kata.zig");
const result = @import("../../utils/types/result.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 result.set_error(ctx);

    const fd = int.u32_of(ctx.rdi);

    if (fd >= kata_limits.MAX_ATTACHMENTS) return result.set_error(ctx);
    if (kata.attachments[fd] == null) return result.set_error(ctx);

    attachment.seal(kata, fd, afs_instance);
    result.set_ok(ctx);
}