diff --git a/src/vfs.rs b/src/vfs.rs index f07579c..c47b46b 100644 --- a/src/vfs.rs +++ b/src/vfs.rs @@ -166,6 +166,10 @@ pub trait Vfs: Send + Sync { Ok(()) } + fn check_reserved_lock(&self, handle: &mut Self::Handle) -> VfsResult { + Ok(false) + } + fn sync(&self, handle: &mut Self::Handle) -> VfsResult<()> { Ok(()) } @@ -298,7 +302,7 @@ fn register_inner( xFileSize: Some(x_file_size::), xLock: Some(x_lock::), xUnlock: Some(x_unlock::), - xCheckReservedLock: None, + xCheckReservedLock: Some(x_check_reserved_lock::), xFileControl: Some(x_file_control::), xSectorSize: Some(x_sector_size::), xDeviceCharacteristics: Some(x_device_characteristics::), @@ -551,6 +555,20 @@ unsafe extern "C" fn x_unlock(p_file: *mut ffi::sqlite3_file, raw_lock: }) } +unsafe extern "C" fn x_check_reserved_lock( + p_file: *mut ffi::sqlite3_file, + p_out: *mut c_int, +) -> c_int { + fallible(|| { + let file = unwrap_file!(p_file, T)?; + let vfs = unwrap_vfs!(file.vfs, T)?; + unsafe { + *p_out = vfs.check_reserved_lock(file.handle.assume_init_mut())? as c_int; + } + Ok(vars::SQLITE_OK) + }) +} + unsafe extern "C" fn x_file_control( p_file: *mut ffi::sqlite3_file, op: c_int,