Set modes

This commit is contained in:
Andrzej Janik 2025-09-23 17:43:26 +00:00
commit 44823a2d75

View file

@ -33,8 +33,7 @@ impl Manifest {
fn serialize(&self) -> std::io::Result<(Header, Vec<u8>)> { fn serialize(&self) -> std::io::Result<(Header, Vec<u8>)> {
let vec = serde_json::to_vec(self)?; let vec = serde_json::to_vec(self)?;
let mut header = Header::new_gnu(); let header = tar_header(vec.len());
header.set_size(vec.len() as u64);
Ok((header, vec)) Ok((header, vec))
} }
} }
@ -76,25 +75,21 @@ pub fn save(
} }
.serialize()?; .serialize()?;
builder.append_data(&mut header, Manifest::PATH, &*manifest)?; builder.append_data(&mut header, Manifest::PATH, &*manifest)?;
let mut header = Header::new_gnu(); let mut header = tar_header(source.len());
header.set_size(source.len() as u64);
builder.append_data(&mut header, "source.ptx", source.as_bytes())?; builder.append_data(&mut header, "source.ptx", source.as_bytes())?;
for (i, param) in kernel_params.into_iter().enumerate() { for (i, param) in kernel_params.into_iter().enumerate() {
let path = format!("param_{i}.bin"); let path = format!("param_{i}.bin");
let mut header = Header::new_gnu(); let mut header = tar_header(param.data.len());
header.set_size(param.data.len() as u64);
builder.append_data(&mut header, &*path, &*param.data)?; builder.append_data(&mut header, &*path, &*param.data)?;
for (offset_in_param, _, data_before, data_after) in param.device_ptrs { for (offset_in_param, _, data_before, data_after) in param.device_ptrs {
let path = format!("param_{i}_ptr_{offset_in_param}_pre.bin"); let path = format!("param_{i}_ptr_{offset_in_param}_pre.bin");
let mut header = Header::new_gnu(); let mut header = tar_header(data_before.len());
header.set_size(data_before.len() as u64);
builder.append_data(&mut header, &*path, &*data_before)?; builder.append_data(&mut header, &*path, &*data_before)?;
if !has_outputs { if !has_outputs {
continue; continue;
} }
let path = format!("param_{i}_ptr_{offset_in_param}_post.bin"); let path = format!("param_{i}_ptr_{offset_in_param}_post.bin");
let mut header = Header::new_gnu(); let mut header = tar_header(data_after.len());
header.set_size(data_after.len() as u64);
builder.append_data(&mut header, &*path, &*data_after)?; builder.append_data(&mut header, &*path, &*data_after)?;
} }
} }
@ -103,6 +98,13 @@ pub fn save(
Ok(()) Ok(())
} }
fn tar_header(size: usize) -> Header {
let mut header = Header::new_gnu();
header.set_mode(0o644);
header.set_size(size as u64);
header
}
pub fn load(reader: impl Read) -> (Manifest, String, FxHashMap<String, Vec<u8>>) { pub fn load(reader: impl Read) -> (Manifest, String, FxHashMap<String, Vec<u8>>) {
let archive = zstd::Decoder::new(reader).unwrap(); let archive = zstd::Decoder::new(reader).unwrap();
let mut archive = tar::Archive::new(archive); let mut archive = tar::Archive::new(archive);