iso9660/test: add rock ridge parsing

This commit is contained in:
Zack Buhman 2025-02-06 08:25:30 -06:00
parent 058d1d658c
commit 192792e30a

View File

@ -2,6 +2,7 @@
#include <string>
#include <iostream>
#include <bit>
#include <cassert>
#include "primary_volume_descriptor.hpp"
#include "directory_record.hpp"
@ -49,10 +50,41 @@ int main()
write_field(dr->file_identifier, dr->length_of_file_identifier);
std::cout << std::hex << "file_flags: " << (int)dr->file_flags << '\n';
uint32_t system_use_offset = 33 + dr->length_of_file_identifier + ((dr->length_of_file_identifier & 1) == 0);
const char * system_use = &str[offset + system_use_offset];
std::cout << "system use:\n";
for (int i = 0; i < dr->length_of_directory_record - system_use_offset;) {
std::cout << " entry: ";
std::cout << system_use[i + 0] << system_use[i + 1] << '\n';
int length = (uint8_t)system_use[i + 2];
std::cout << " length: ";
std::cout << length << '\n';
if (system_use[i + 0] == 'N' && system_use[i + 1] == 'M') {
int version = (uint8_t)system_use[i + 3];
assert(version == 1);
int flags = (uint8_t)system_use[i + 4];
if (flags == 0) {
std::cout << "name: ";
for (int j = 5; j < length; j++) {
std::cout << system_use[i + j];
}
std::cout << '\n';
}
}
if (length == 0) length = 1;
i += length;
}
std::cout << '\n';
if (dr->file_flags == 0) {
std::cout << "location_of_extent: " << dr->location_of_extent.get() << '\n';
std::cout << "data_length: " << std::dec << dr->data_length.get() << '\n';
/*
if (dr->file_identifier[0] != '1') {
const uint32_t extent = dr->location_of_extent.get() * 2048;
auto file = reinterpret_cast<const uint8_t *>(&str[extent]);
@ -60,6 +92,7 @@ int main()
write_field(file, dr->data_length.get());
std::cout << "---end file content---\n";
}
*/
}
offset += dr->length_of_directory_record;