2022-10-09 23:10:13 +01:00
|
|
|
const std = @import("std");
|
|
|
|
const sys = @import("./sys.zig");
|
|
|
|
|
|
|
|
///
|
|
|
|
/// An entry block of an Oar archive file.
|
|
|
|
///
|
|
|
|
/// Typically, following this block in memory is the file data it holds the meta-information for.
|
|
|
|
///
|
|
|
|
pub const Entry = extern struct {
|
2022-10-11 01:15:19 +01:00
|
|
|
signature: [3]u8 = signature_magic,
|
2022-10-11 01:03:02 +01:00
|
|
|
revision: u8,
|
2022-10-09 23:10:13 +01:00
|
|
|
name_buffer: [255]u8 = std.mem.zeroes([255]u8),
|
2022-10-13 14:37:38 +01:00
|
|
|
name_length: u8 = 0,
|
2022-10-09 23:10:13 +01:00
|
|
|
file_size: u64,
|
2022-10-13 14:37:38 +01:00
|
|
|
file_offset: u64,
|
|
|
|
padding: [232]u8 = std.mem.zeroes([232]u8),
|
2022-10-11 01:03:02 +01:00
|
|
|
|
2022-10-13 14:37:38 +01:00
|
|
|
comptime {
|
|
|
|
const entry_size = @sizeOf(Entry);
|
|
|
|
|
|
|
|
if (entry_size != 512)
|
|
|
|
@compileError("Entry is " ++ std.fmt.comptimePrint("{d}", .{entry_size}) ++ " bytes");
|
2022-10-11 01:03:02 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
///
|
|
|
|
///
|
|
|
|
///
|
2022-10-13 14:37:38 +01:00
|
|
|
pub const FindError = sys.FileAccess.Error || error {
|
|
|
|
EntryNotFound,
|
|
|
|
};
|
2022-10-11 01:03:02 +01:00
|
|
|
|
2022-10-13 14:37:38 +01:00
|
|
|
///
|
|
|
|
///
|
|
|
|
///
|
|
|
|
pub fn find(file_access: sys.FileAccess, entry_name: []const u8) FindError!Entry {
|
|
|
|
_ = file_access;
|
|
|
|
_ = entry_name;
|
2022-10-11 01:03:02 +01:00
|
|
|
|
2022-10-13 14:37:38 +01:00
|
|
|
return error.EntryNotFound;
|
2022-10-11 01:03:02 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
///
|
|
|
|
/// Magic identifier used to validate [Entry] data.
|
|
|
|
///
|
2022-10-11 01:15:19 +01:00
|
|
|
const signature_magic = [3]u8{'o', 'a', 'r'};
|
2022-10-09 23:10:13 +01:00
|
|
|
};
|