From f42a480cbe487fc5fb9b3772990e80926201f6e4 Mon Sep 17 00:00:00 2001 From: Alejandro Sior Date: Tue, 21 Jun 2022 15:38:48 +0200 Subject: gptman: reorganize commands in a cmd module --- cmd/info/info.ha | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 cmd/info/info.ha (limited to 'cmd/info') diff --git a/cmd/info/info.ha b/cmd/info/info.ha new file mode 100644 index 0000000..75ab499 --- /dev/null +++ b/cmd/info/info.ha @@ -0,0 +1,36 @@ +use fmt; +use io; + +use gpt; +use cmd; + +fn booltonum(a: bool) str = if (a) { return "1"; } else { return "0"; }; + +export fn info(vol: str, args: []str) void = { + const name = vol; + const vol = cmd::opengpt(vol); + defer gpt::finish(vol); + + const header = vol.primary.header; + + fmt::printfln("# GPT header info {}", name)!; + fmt::printfln("revision({})", header.revision)!; + fmt::printfln("header_size({})", header.header_size)!; + fmt::printfln("header_crc32({})", header.header_crc32)!; + fmt::printfln("header_lba({})", header.header_lba)!; + fmt::printfln("backup_header_lba({})", header.backup_header_lba)!; + fmt::printfln("first_lba({})", header.first_lba)!; + fmt::printfln("last_lba({})", header.last_lba)!; + // XXX Add a comment output for the GUID written in normal form + fmt::printfln("disk_guid([{},{}])", header.disk_guid[0], header.disk_guid[1])!; + fmt::printfln("entries_lba({})", header.entries_lba)!; + fmt::printfln("entries_len({})", header.entries_len)!; + fmt::printfln("entry_size({})", header.entry_size)!; + fmt::printfln("entries_crc32({})", header.entries_crc32)!; + + const primary_sane = gpt::header_crc32(header) == header.header_crc32 && gpt::entries_crc32(vol.primary.entries) == header.entries_crc32; + const backup_sane = gpt::header_crc32(vol.backup.header) == vol.backup.header.header_crc32 && gpt::entries_crc32(vol.backup.entries) == vol.backup.header.entries_crc32; + + fmt::printfln("primary_sane({})", booltonum(primary_sane))!; + fmt::printfln("backup_sane({})", booltonum(backup_sane))!; +}; -- cgit v1.2.3