ajhahn.de
← Flash
Flash 43 lines
// `packed struct` / `extern struct`: layout modifiers on a struct definition.
// `packed` packs the fields bit-exactly — an on-disk FAT directory entry whose
// byte offsets are pinned by comptime asserts; `extern` lays the fields out by
// the C ABI — a type copied across the user/kernel boundary, fixed on both
// sides. The backing-integer form `packed struct(uN)` is not part of the
// grammar: the field widths define the layout.
//
// Lives in examples/register/ (post-v0.5 grammar — the frozen stage0
// bootstrap compiler cannot parse it; gated by `zig build fixpoint`).

pub const DirEntry = packed struct {
    name_lo u64,
    name_hi u24,
    attr u8,
    nt_res u8,
    crt_time_tenth u8,
    crt_time u16,
    crt_date u16,
    lst_acc_date u16,
    fst_clus_hi u16,
    wrt_time u16,
    wrt_date u16,
    fst_clus_lo u16,
    file_size u32,
}

comptime {
    if #sizeOf(DirEntry) != 32 {
        #compileError("DirEntry size")
    }
    if #bitOffsetOf(DirEntry, "attr") / 8 != 0x0B {
        #compileError("DirEntry attr offset")
    }
}

pub const DT_REG u8 = 0

pub const Dirent = extern struct {
    name [32]u8 = .{0} ** 32,
    d_type u8 = DT_REG,
    _pad [7]u8 = .{0} ** 7,
}