Package ghidra.formats.gfilesystem

# Class LocalFileSystemSub

java.lang.Object
ghidra.formats.gfilesystem.LocalFileSystemSub

All Implemented Interfaces:
  `GFileHashProvider`, `GFileSystem`, `ExtensionPoint`, `Closeable`, `AutoCloseable`

public class LocalFileSystemSub extends Object implements GFileSystem, GFileHashProvider
A `GFileSystem` interface to a part of the user's local / native file system.

This class is a sub-view of the `LocalFileSystem`, and returns hybrid GFile objects that have fully specified FSRL paths that are valid in the Root filesystem, but relative GFile paths.

This class's name doesn't end with "FileSystem" to ensure it will not be auto-discovered by the FileSystemFactoryMgr.

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `LocalFileSystemSub(File rootDir, LocalFileSystem rootFS)`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `close()`
  `ByteProvider`
  `getByteProvider(GFile file, TaskMonitor monitor)`
  Returns a `ByteProvider` that contains the contents of the specified `GFile`.
  `String`
  `getDescription()`
  Returns a description of this file system.
  `FileAttributes`
  `getFileAttributes(GFile file, TaskMonitor monitor)`
  Returns a container of `FileAttribute` values.
  `FSRLRoot`
  `getFSRL()`
  File system's FSRL
  `InputStream`
  `getInputStream(GFile file, TaskMonitor monitor)`
  Returns an `InputStream` that contains the contents of the specified `GFile`.
  `List<GFile>`
  `getListing(GFile directory)`
  Returns a list of `files` that reside in the specified directory on this filesystem.
  `String`
  `getMD5Hash(GFile file, boolean required, TaskMonitor monitor)`
  Returns the MD5 hash of the specified file.
  `String`
  `getName()`
  File system volume name.
  `FileSystemRefManager`
  `getRefManager()`
  Returns the `ref manager` that is responsible for creating and releasing `refs` to this filesystem.
  `String`
  `getType()`
  Returns the type of this file system.
  `boolean`
  `isClosed()`
  Returns true if the filesystem has been `closed`
  `boolean`
  `isStatic()`
  Indicates if this filesystem is a static snapshot or changes.
  `GFile`
  `lookup(String path)`
  Retrieves a `GFile` from this filesystem based on its full path and filename, using this filesystem's default name comparison logic (eg.
  `String`
  `toString()`

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

  ### Methods inherited from interface ghidra.formats.gfilesystem.GFileSystem

  `getFileCount`

- ## Constructor Details

  - ### LocalFileSystemSub

    public LocalFileSystemSub(File rootDir, LocalFileSystem rootFS) throws IOException
    Throws:
      `IOException`

- ## Method Details

  - ### getType

    public String getType()
    Description copied from interface: `GFileSystem`
    Returns the type of this file system.

    This default implementation returns the type value in `FileSystemInfo` annotation.

    Specified by:
      `getType` in interface `GFileSystem`
    Returns:
      type string

  - ### getDescription

    public String getDescription()
    Description copied from interface: `GFileSystem`
    Returns a description of this file system.

    This default implementation returns the description value in `FileSystemInfo` annotation.

    Specified by:
      `getDescription` in interface `GFileSystem`
    Returns:
      description string

  - ### close

    public void close()
    Specified by:
      `close` in interface `AutoCloseable`
    Specified by:
      `close` in interface `Closeable`

  - ### isClosed

    public boolean isClosed()
    Description copied from interface: `GFileSystem`
    Returns true if the filesystem has been `closed`
    Specified by:
      `isClosed` in interface `GFileSystem`
    Returns:
      boolean true if the filesystem has been closed.

  - ### isStatic

    public boolean isStatic()
    Description copied from interface: `GFileSystem`
    Indicates if this filesystem is a static snapshot or changes.
    Specified by:
      `isStatic` in interface `GFileSystem`
    Returns:
      boolean true if the filesystem is static or false if dynamic content.

  - ### getListing

    public List<GFile> getListing(GFile directory) throws IOException
    Description copied from interface: `GFileSystem`
    Returns a list of `files` that reside in the specified directory on this filesystem.

    Specified by:
      `getListing` in interface `GFileSystem`
    Parameters:
      `directory` - NULL means root of filesystem.
    Returns:
      `List` of `GFile` instances of file in the requested directory.
    Throws:
      `IOException` - if IO problem.

  - ### getFileAttributes

    public FileAttributes getFileAttributes(GFile file, TaskMonitor monitor)
    Description copied from interface: `GFileSystem`
    Returns a container of `FileAttribute` values.

    Implementors of this method are not required to add FSRL, NAME, or PATH values unless the values are non-standard.

    Specified by:
      `getFileAttributes` in interface `GFileSystem`
    Parameters:
      `file` - `GFile` to get the attributes for
      `monitor` - `TaskMonitor`
    Returns:
      `FileAttributes` instance (possibly read-only), maybe empty but never null

  - ### getName

    public String getName()
    Description copied from interface: `GFileSystem`
    File system volume name.

    Typically the name of the container file, or a internally stored 'volume' name.

    Specified by:
      `getName` in interface `GFileSystem`
    Returns:
      string filesystem volume name.

  - ### getFSRL

    public FSRLRoot getFSRL()
    Description copied from interface: `GFileSystem`
    File system's FSRL
    Specified by:
      `getFSRL` in interface `GFileSystem`
    Returns:
      `FSRLRoot` of this filesystem.

  - ### lookup

    public GFile lookup(String path) throws IOException
    Description copied from interface: `GFileSystem`
    Retrieves a `GFile` from this filesystem based on its full path and filename, using this filesystem's default name comparison logic (eg. case sensitive vs insensitive).

    Specified by:
      `lookup` in interface `GFileSystem`
    Parameters:
      `path` - string path and filename of a file located in this filesystem. Use `null` or "/" to retrieve the root directory
    Returns:
      `GFile` instance of requested file, null if not found.
    Throws:
      `IOException` - if IO error when looking up file.

  - ### getInputStream

    public InputStream getInputStream(GFile file, TaskMonitor monitor) throws IOException, CancelledException
    Description copied from interface: `GFileSystem`
    Returns an `InputStream` that contains the contents of the specified `GFile`.

    The caller is responsible for closing the stream.

    Specified by:
      `getInputStream` in interface `GFileSystem`
    Parameters:
      `file` - `GFile` to get an InputStream for
      `monitor` - `TaskMonitor` to watch and update progress
    Returns:
      new `InputStream` contains the contents of the file or NULL if the file doesn't have data.
    Throws:
      `IOException` - if IO problem
      `CancelledException` - if user cancels.

  - ### getRefManager

    public FileSystemRefManager getRefManager()
    Description copied from interface: `GFileSystem`
    Returns the `ref manager` that is responsible for creating and releasing `refs` to this filesystem.

    Specified by:
      `getRefManager` in interface `GFileSystem`
    Returns:
      `FileSystemRefManager` that manages references to this filesystem.

  - ### toString

    public String toString()
    Overrides:
      `toString` in class `Object`

  - ### getByteProvider

    public ByteProvider getByteProvider(GFile file, TaskMonitor monitor) throws IOException, CancelledException
    Description copied from interface: `GFileSystem`
    Returns a `ByteProvider` that contains the contents of the specified `GFile`.

    The caller is responsible for closing the provider.

    Specified by:
      `getByteProvider` in interface `GFileSystem`
    Parameters:
      `file` - `GFile` to get bytes for
      `monitor` - `TaskMonitor` to watch and update progress
    Returns:
      new `ByteProvider` that contains the contents of the file, or NULL if file doesn't have data
    Throws:
      `IOException` - if error
      `CancelledException` - if user cancels

  - ### getMD5Hash

    public String getMD5Hash(GFile file, boolean required, TaskMonitor monitor) throws CancelledException, IOException
    Description copied from interface: `GFileHashProvider`
    Returns the MD5 hash of the specified file.
    Specified by:
      `getMD5Hash` in interface `GFileHashProvider`
    Parameters:
      `file` - the `GFile`
      `required` - boolean flag, if true the hash will always be returned, even if it has to be calculated. If false, the hash will be returned if easily available
      `monitor` - `TaskMonitor`
    Returns:
      MD5 hash as a string
    Throws:
      `CancelledException` - if cancelled
      `IOException` - if error