Commit 35bd14d9 authored by Danilo Krummrich's avatar Danilo Krummrich
Browse files

rust: debugfs: support binary large objects for ScopedDir



Add support for creating binary debugfs files via ScopedDir. This
mirrors the existing functionality for Dir, but without producing an
owning handle -- files are automatically removed when the associated
Scope is dropped.

Reviewed-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Reviewed-by: default avatarMatthew Maurer <mmaurer@google.com>
Reviewed-by: default avatarAlice Ryhl <aliceryhl@google.com>
Signed-off-by: default avatarDanilo Krummrich <dakr@kernel.org>
parent 52af0c37
Loading
Loading
Loading
Loading
+44 −0
Original line number Diff line number Diff line
@@ -530,6 +530,20 @@ pub fn read_only_file<T: Writer + Send + Sync + 'static>(&self, name: &CStr, dat
        self.create_file(name, data, &T::FILE_OPS)
    }

    /// Creates a read-only binary file in this directory.
    ///
    /// The file's contents are produced by invoking [`BinaryWriter::write_to_slice`].
    ///
    /// This function does not produce an owning handle to the file. The created file is removed
    /// when the [`Scope`] that this directory belongs to is dropped.
    pub fn read_binary_file<T: BinaryWriter + Send + Sync + 'static>(
        &self,
        name: &CStr,
        data: &'data T,
    ) {
        self.create_file(name, data, &T::FILE_OPS)
    }

    /// Creates a read-only file in this directory, with contents from a callback.
    ///
    /// The file contents are generated by calling `f` with `data`.
@@ -567,6 +581,22 @@ pub fn read_write_file<T: Writer + Reader + Send + Sync + 'static>(
        self.create_file(name, data, vtable)
    }

    /// Creates a read-write binary file in this directory.
    ///
    /// Reading the file uses the [`BinaryWriter`] implementation on `data`. Writing to the file
    /// uses the [`BinaryReader`] implementation on `data`.
    ///
    /// This function does not produce an owning handle to the file. The created file is removed
    /// when the [`Scope`] that this directory belongs to is dropped.
    pub fn read_write_binary_file<T: BinaryWriter + BinaryReader + Send + Sync + 'static>(
        &self,
        name: &CStr,
        data: &'data T,
    ) {
        let vtable = &<T as BinaryReadWriteFile<_>>::FILE_OPS;
        self.create_file(name, data, vtable)
    }

    /// Creates a read-write file in this directory, with logic from callbacks.
    ///
    /// Reading from the file is handled by `f`. Writing to the file is handled by `w`.
@@ -606,6 +636,20 @@ pub fn write_only_file<T: Reader + Send + Sync + 'static>(&self, name: &CStr, da
        self.create_file(name, data, vtable)
    }

    /// Creates a write-only binary file in this directory.
    ///
    /// Writing to the file uses the [`BinaryReader`] implementation on `data`.
    ///
    /// This function does not produce an owning handle to the file. The created file is removed
    /// when the [`Scope`] that this directory belongs to is dropped.
    pub fn write_binary_file<T: BinaryReader + Send + Sync + 'static>(
        &self,
        name: &CStr,
        data: &'data T,
    ) {
        self.create_file(name, data, &T::FILE_OPS)
    }

    /// Creates a write-only file in this directory, with write logic from a callback.
    ///
    /// Writing to the file is handled by `w`.