Write DirectoryRecord
This commit is contained in:
parent
5b1192fac3
commit
b5b25a85d7
|
@ -45,8 +45,8 @@ pub fn calculate_psx_lbas(cd_desc: &mut CDDesc) {
|
|||
},
|
||||
|
||||
Layout::Directory(dir) => {
|
||||
let sector_count = sector_count_mode2_form1(dir.borrow().properties.borrow().get_extended_size());
|
||||
let mut dir = dir.borrow_mut();
|
||||
let sector_count = sector_count_mode2_form1(dir.borrow().properties.borrow().get_extended_size());
|
||||
let dir = dir.borrow_mut();
|
||||
|
||||
cd_desc.vol_sector_count += 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(())
|
||||
}
|
||||
|
||||
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 dir_length = dir_record.len();
|
||||
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 bytes_written = {
|
||||
0
|
||||
};
|
||||
let bytes_written = write_dir_record(raw_data, &member, true)?;
|
||||
|
||||
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(())
|
||||
}
|
||||
|
||||
|
@ -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 create_file_system_use() -> CDXASystemUse {
|
||||
let mut system_use = CDXASystemUse::default();
|
||||
|
||||
system_use.file_attribute.set_mode2();
|
||||
system_use
|
||||
}
|
||||
|
||||
match dir_member {
|
||||
DirectoryRecordMember::Directory{name, track_rel_lba, real_size} => {
|
||||
let system_use = {
|
||||
|
|
Loading…
Reference in New Issue