Write DirectoryRecord
This commit is contained in:
parent
5b1192fac3
commit
b5b25a85d7
|
@ -46,7 +46,7 @@ pub fn calculate_psx_lbas(cd_desc: &mut CDDesc) {
|
||||||
|
|
||||||
Layout::Directory(dir) => {
|
Layout::Directory(dir) => {
|
||||||
let sector_count = sector_count_mode2_form1(dir.borrow().properties.borrow().get_extended_size());
|
let sector_count = sector_count_mode2_form1(dir.borrow().properties.borrow().get_extended_size());
|
||||||
let mut dir = dir.borrow_mut();
|
let dir = dir.borrow_mut();
|
||||||
|
|
||||||
cd_desc.vol_sector_count += sector_count;
|
cd_desc.vol_sector_count += sector_count;
|
||||||
cur_lba = update_lba(&mut dir.properties.borrow_mut(), cur_lba, sector_count);
|
cur_lba = update_lba(&mut dir.properties.borrow_mut(), cur_lba, sector_count);
|
||||||
|
@ -176,20 +176,32 @@ fn process_path_table(path_table: &PathTable, root_dir: SharedPtr<Directory>, se
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn process_directory_record(dir: &Directory, _sec_writer: &mut dyn SectorWriter) -> Result<(), Error> {
|
fn process_directory_record(dir: &Directory, sec_writer: &mut dyn SectorWriter) -> Result<(), Error> {
|
||||||
let mut dir_record = vec![0u8; dir.properties.borrow().get_real_size()];
|
let mut dir_record = vec![0u8; dir.properties.borrow().get_real_size()];
|
||||||
let dir_length = dir_record.len();
|
let dir_length = dir_record.len();
|
||||||
let mut raw_data = &mut dir_record[0..dir_length];
|
let mut raw_data = &mut dir_record[0..dir_length];
|
||||||
|
|
||||||
for _member in dir.collect_member() {
|
for member in dir.collect_member() {
|
||||||
let raw_data_len = raw_data.len();
|
let raw_data_len = raw_data.len();
|
||||||
let bytes_written = {
|
let bytes_written = write_dir_record(raw_data, &member, true)?;
|
||||||
0
|
|
||||||
};
|
|
||||||
|
|
||||||
raw_data = &mut raw_data[bytes_written..raw_data_len];
|
raw_data = &mut raw_data[bytes_written..raw_data_len];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let dir_record_sector_count = sector_count_mode2_form1(raw_data.len());
|
||||||
|
if dir_record_sector_count > 1 {
|
||||||
|
return Err(Error::from_text(format!("Directory Record for {} spans {} sectors but PSX doesn't support more then one sector", dir.name.as_str().unwrap_or("<No name>"), dir_record_sector_count)));
|
||||||
|
}
|
||||||
|
|
||||||
|
for sector in builder::create_xa_data_for_vec(None, dir_record) {
|
||||||
|
sec_writer.write_cd_xa_data(sector)?;
|
||||||
|
}
|
||||||
|
|
||||||
|
let extended_sector_count = sector_count_mode2_form1(dir.properties.borrow().get_extended_size()) - dir_record_sector_count;
|
||||||
|
for _ in 0..extended_sector_count {
|
||||||
|
sec_writer.write_cd_xa_data(builder::create_xa_data_zero())?;
|
||||||
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -257,13 +269,6 @@ fn create_dir_record_raw<'a>(dst: &'a mut [u8], name: &str, track_rel_lba: u32,
|
||||||
}
|
}
|
||||||
|
|
||||||
fn write_dir_record(dir_record: &mut [u8], dir_member: &DirectoryRecordMember, has_system_use: bool) -> Result<usize, Error> {
|
fn write_dir_record(dir_record: &mut [u8], dir_member: &DirectoryRecordMember, has_system_use: bool) -> Result<usize, Error> {
|
||||||
fn create_file_system_use() -> CDXASystemUse {
|
|
||||||
let mut system_use = CDXASystemUse::default();
|
|
||||||
|
|
||||||
system_use.file_attribute.set_mode2();
|
|
||||||
system_use
|
|
||||||
}
|
|
||||||
|
|
||||||
match dir_member {
|
match dir_member {
|
||||||
DirectoryRecordMember::Directory{name, track_rel_lba, real_size} => {
|
DirectoryRecordMember::Directory{name, track_rel_lba, real_size} => {
|
||||||
let system_use = {
|
let system_use = {
|
||||||
|
|
Loading…
Reference in New Issue