Fix some confusions in no-dirty-detection mode

This caused some awful crashes, but doesn't affect any real release builds of waterboxhost
This commit is contained in:
nattthebear 2020-10-12 11:34:18 -04:00
parent e07944b0f1
commit 27e600c1ac
2 changed files with 17 additions and 9 deletions

View File

@ -34,6 +34,9 @@ namespace BizHawk.Common
private readonly Stream _stream;
public unsafe int Read(Span<byte> buffer)
{
if (buffer.Length == 0)
return 0;
if (buffer.Length > _buffer.Length)
{
_buffer = new byte[buffer.Length];
@ -48,6 +51,9 @@ namespace BizHawk.Common
public unsafe void Write(ReadOnlySpan<byte> buffer)
{
if (buffer.Length == 0)
return;
if (buffer.Length > _buffer.Length)
{
_buffer = new byte[buffer.Length];

View File

@ -817,13 +817,14 @@ impl MemoryBlock {
self.refresh_all_protections();
self.sealed = true;
#[cfg(not(feature = "no-dirty-detection"))]
{
use sha2::{Sha256, Digest};
self.hash = {
let mut hasher = Sha256::new();
bin::write(&mut hasher, &self.addr).unwrap();
use sha2::{Sha256, Digest};
self.hash = {
let mut hasher = Sha256::new();
bin::write(&mut hasher, &self.addr).unwrap();
#[cfg(not(feature = "no-dirty-detection"))]
{
for p in self.pages.iter() {
match &p.snapshot {
Snapshot::None => bin::writeval(&mut hasher, 1).unwrap(),
@ -831,9 +832,10 @@ impl MemoryBlock {
Snapshot::Data(d) => { hasher.write(d.slice()).unwrap(); },
}
}
hasher.finalize()[..].to_owned()
};
}
}
hasher.finalize()[..].to_owned()
};
Ok(())
}