Do not always zero initialize for rust resize vec

This commit is contained in:
LoveSy 2023-12-09 01:17:19 +08:00 committed by topjohnwu
parent 2ac464b186
commit 90dcc1cd30
3 changed files with 11 additions and 4 deletions

View File

@ -90,7 +90,7 @@ private:
rust::Vec<uint8_t> &_data;
size_t _pos = 0;
void ensure_size(size_t sz);
void ensure_size(size_t sz, bool zero = false);
};
class file_channel : public channel {

View File

@ -66,5 +66,10 @@ fn set_log_level_state_cxx(level: ffi::LogLevelCxx, enabled: bool) {
}
fn resize_vec(vec: &mut Vec<u8>, size: usize) {
vec.resize(size, 0);
if size > vec.len() {
vec.reserve(size - vec.len());
}
unsafe {
vec.set_len(size);
}
}

View File

@ -209,15 +209,17 @@ off_t rust_vec_channel::seek(off_t off, int whence) {
default:
return -1;
}
ensure_size(np);
ensure_size(np, true);
_pos = np;
return np;
}
void rust_vec_channel::ensure_size(size_t sz) {
void rust_vec_channel::ensure_size(size_t sz, bool zero) {
size_t old_sz = _data.size();
if (sz > old_sz) {
resize_vec(_data, sz);
if (zero)
memset(_data.data() + old_sz, 0, sz - old_sz);
}
}