From 9b4183e62ae5a2ca166fb7552d68a0e84467ca02 Mon Sep 17 00:00:00 2001 From: Mason Reed Date: Sun, 6 Jul 2025 17:13:27 -0400 Subject: [Rust] Add `FileMetadata::forget_undo_actions` Need this for WARP, see next commit --- rust/src/file_metadata.rs | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) (limited to 'rust') diff --git a/rust/src/file_metadata.rs b/rust/src/file_metadata.rs index 4cbbfd0a..86e28a3e 100644 --- a/rust/src/file_metadata.rs +++ b/rust/src/file_metadata.rs @@ -18,12 +18,12 @@ use crate::rc::*; use crate::string::*; use binaryninjacore_sys::{ BNBeginUndoActions, BNCloseFile, BNCommitUndoActions, BNCreateDatabase, BNCreateFileMetadata, - BNFileMetadata, BNFileMetadataGetSessionId, BNFreeFileMetadata, BNGetCurrentOffset, - BNGetCurrentView, BNGetExistingViews, BNGetFileMetadataDatabase, BNGetFileViewOfType, - BNGetFilename, BNGetProjectFile, BNIsAnalysisChanged, BNIsBackedByDatabase, BNIsFileModified, - BNMarkFileModified, BNMarkFileSaved, BNNavigate, BNNewFileReference, - BNOpenDatabaseForConfiguration, BNOpenExistingDatabase, BNRedo, BNRevertUndoActions, - BNSaveAutoSnapshot, BNSetFilename, BNUndo, + BNFileMetadata, BNFileMetadataGetSessionId, BNForgetUndoActions, BNFreeFileMetadata, + BNGetCurrentOffset, BNGetCurrentView, BNGetExistingViews, BNGetFileMetadataDatabase, + BNGetFileViewOfType, BNGetFilename, BNGetProjectFile, BNIsAnalysisChanged, + BNIsBackedByDatabase, BNIsFileModified, BNMarkFileModified, BNMarkFileSaved, BNNavigate, + BNNewFileReference, BNOpenDatabaseForConfiguration, BNOpenExistingDatabase, BNRedo, + BNRevertUndoActions, BNSaveAutoSnapshot, BNSetFilename, BNUndo, }; use binaryninjacore_sys::{BNCreateDatabaseWithProgress, BNOpenExistingDatabaseWithProgress}; use std::ffi::c_void; @@ -180,6 +180,20 @@ impl FileMetadata { } } + /// Forgets the undo actions committed in the undo entry. + /// + /// NOTE: This is **NOT** thread safe, if you are holding any locks that might be held by both the main thread + /// and the thread executing this function, you can deadlock. You should also never call this function + /// on multiple threads at a time. See the following issues: + /// - + /// - + pub fn forget_undo_actions(&self, id: &str) { + let id = id.to_cstr(); + unsafe { + BNForgetUndoActions(self.handle, id.as_ref().as_ptr() as *const _); + } + } + pub fn undo(&self) { unsafe { BNUndo(self.handle); -- cgit v1.3.1