pub struct InodeTable { /* private fields */ }Expand description
Bidirectional mapping between FUSE inodes and MTP objects, with cached metadata.
Implementations§
Source§impl InodeTable
impl InodeTable
Sourcepub fn bump_generation(&mut self)
pub fn bump_generation(&mut self)
Marks every cached object handle as stale, without touching inode numbers, names, or the tree shape. Called after a reconnect: the kernel and any open file descriptor keep referring to the same inodes, while the handles behind them get re-resolved by path on next use.
Sourcepub fn is_fresh(&self, inode: u64) -> bool
pub fn is_fresh(&self, inode: u64) -> bool
Whether this inode’s handle was resolved against the current session. Storage and root entries carry no session-scoped handle, so they’re always fresh (their storage IDs are re-mapped eagerly on reconnect).
Sourcepub fn set_handle(&mut self, inode: u64, handle: ObjectHandle)
pub fn set_handle(&mut self, inode: u64, handle: ObjectHandle)
Points an inode at a freshly resolved handle, keeping its inode number.
Sourcepub fn set_storage_id(&mut self, inode: u64, storage_id: StorageId)
pub fn set_storage_id(&mut self, inode: u64, storage_id: StorageId)
Re-points a storage inode at a storage ID from the current session.
Sourcepub fn add_storage(&mut self, storage_id: StorageId, name: String) -> u64
pub fn add_storage(&mut self, storage_id: StorageId, name: String) -> u64
Adds a storage as a child of root. Returns the new inode number.
Sourcepub fn add_object(
&mut self,
parent_inode: u64,
handle: ObjectHandle,
name: String,
is_dir: bool,
size: u64,
mtime: SystemTime,
) -> u64
pub fn add_object( &mut self, parent_inode: u64, handle: ObjectHandle, name: String, is_dir: bool, size: u64, mtime: SystemTime, ) -> u64
Adds a file or directory under the given parent. Returns the new inode number.
Sourcepub fn sync_children(&mut self, parent_inode: u64, children: &[ChildInfo])
pub fn sync_children(&mut self, parent_inode: u64, children: &[ChildInfo])
Replaces a directory’s children with what the device just reported, reusing the inode number of every child that’s still there under the same name and kind.
Inode numbers must survive a re-listing: the kernel caches them and open file descriptors refer to them, so handing out a fresh number for a file that didn’t go anywhere breaks reads on an already-open fd. Only the handle, size, and mtime are refreshed in place. Children the device no longer reports are removed.
Sourcepub fn get(&self, inode: u64) -> Option<&InodeEntry>
pub fn get(&self, inode: u64) -> Option<&InodeEntry>
Looks up an entry by inode number.
Sourcepub fn get_mut(&mut self, inode: u64) -> Option<&mut InodeEntry>
pub fn get_mut(&mut self, inode: u64) -> Option<&mut InodeEntry>
Mutable lookup by inode number.
Sourcepub fn lookup(&self, parent_inode: u64, name: &str) -> Option<u64>
pub fn lookup(&self, parent_inode: u64, name: &str) -> Option<u64>
Finds a child inode by parent inode and name.
Sourcepub fn children(&self, parent_inode: u64) -> Vec<u64>
pub fn children(&self, parent_inode: u64) -> Vec<u64>
Returns the inodes of all children of the given parent.
Sourcepub fn remove(&mut self, inode: u64) -> Option<InodeEntry>
pub fn remove(&mut self, inode: u64) -> Option<InodeEntry>
Removes an entry and its index entries. Does not remove descendants.
Sourcepub fn rename(&mut self, inode: u64, new_parent: u64, new_name: String)
pub fn rename(&mut self, inode: u64, new_parent: u64, new_name: String)
Updates an entry’s parent and name (for rename/move operations).
Sourcepub fn find_parent_by_handle(&self, handle: ObjectHandle) -> Option<u64>
pub fn find_parent_by_handle(&self, handle: ObjectHandle) -> Option<u64>
Finds the parent inode of an entry identified by its MTP object handle.
Returns None if the handle is not in the table.