Class GFileSystemBase
- java.lang.Object
-
- ghidra.formats.gfilesystem.GFileSystemBase
-
- All Implemented Interfaces:
GFileSystem
,ExtensionPoint
,java.io.Closeable
,java.lang.AutoCloseable
public abstract class GFileSystemBase extends java.lang.Object implements GFileSystem
This is the original GFileSystem implementation abstract base class, with most of the initially implemented filesystem types extending this class.The new GFileSystem interface is being retro-fitted into this equation to support better probing and factory syntax, and new implementations should be based on the interface instead of extending this abstract class.
NOTE: ALL GFileSystem sub-CLASSES MUST END IN "FileSystem". If not, the ClassSearcher will not find them. Yes, it is an implementation detail.
GFileSystemBase instances are constructed when probing a container file and are queried with
isValid(TaskMonitor)
to determine if the container file is handled by the GFileSystemBase subclass.The
ByteProvider
given to the constructor is not considered 'owned' by the GFileSystemBase instance until after it passes theisValid
check and isopened
.
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface ghidra.util.classfinder.ExtensionPoint
ExtensionPoint.Exclude, ExtensionPoint.Util
-
-
Field Summary
Fields Modifier and Type Field Description protected java.lang.String
fileSystemName
protected FileSystemService
fsService
protected ByteProvider
provider
protected GFileImpl
root
-
Constructor Summary
Constructors Modifier Constructor Description protected
GFileSystemBase(java.lang.String fileSystemName, ByteProvider provider)
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description void
close()
Closes the file system.protected void
debug(byte[] bytes, java.lang.String fileName)
Writes the given bytes to a tempfile in the temp directory.protected abstract java.io.InputStream
getData(GFile file, TaskMonitor monitor)
Legacy implementation ofgetInputStream(GFile, TaskMonitor)
.FSRLRoot
getFSRL()
File system's FSRLjava.io.InputStream
getInputStream(GFile file, TaskMonitor monitor)
Returns anInputStream
that contains the contents of the specifiedGFile
.abstract java.util.List<GFile>
getListing(GFile directory)
Returns a list offiles
that reside in the specified directory on this filesystem.java.lang.String
getName()
Returns the name of this file system.FileSystemRefManager
getRefManager()
Returns theref manager
that is responsible for creating and releasingrefs
to this filesystem.boolean
isClosed()
Returns true if the filesystem has beenclosed
abstract boolean
isValid(TaskMonitor monitor)
Returns true if this file system implementation can handle the bytes provided.GFile
lookup(java.lang.String path)
Retrieves aGFile
from this filesystem based on its full path and filename.abstract void
open(TaskMonitor monitor)
Opens the file system.void
setFilesystemService(FileSystemService fsService)
void
setFSRL(FSRLRoot fsrl)
java.lang.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
getDescription, getFileCount, getInfo, getType, isStatic
-
-
-
-
Field Detail
-
fileSystemName
protected java.lang.String fileSystemName
-
root
protected GFileImpl root
-
provider
protected ByteProvider provider
-
fsService
protected FileSystemService fsService
-
-
Constructor Detail
-
GFileSystemBase
protected GFileSystemBase(java.lang.String fileSystemName, ByteProvider provider)
-
-
Method Detail
-
toString
public java.lang.String toString()
- Overrides:
toString
in classjava.lang.Object
-
getFSRL
public FSRLRoot getFSRL()
Description copied from interface:GFileSystem
File system's FSRL- Specified by:
getFSRL
in interfaceGFileSystem
- Returns:
FSRLRoot
of this filesystem.
-
setFSRL
public void setFSRL(FSRLRoot fsrl)
-
setFilesystemService
public void setFilesystemService(FileSystemService fsService)
-
isValid
public abstract boolean isValid(TaskMonitor monitor) throws java.io.IOException
Returns true if this file system implementation can handle the bytes provided. This method should perform the minimal amount of checks required to determine validity. Keep it quick and tight!- Parameters:
monitor
- a task monitor- Returns:
- true if valid for the byte provider
- Throws:
java.io.IOException
- if an I/O error occurs
-
open
public abstract void open(TaskMonitor monitor) throws java.io.IOException, CryptoException, CancelledException
Opens the file system.- Throws:
java.io.IOException
- if an I/O error occursCryptoException
- if an encryption error occursCancelledException
-
close
public void close() throws java.io.IOException
Closes the file system. All resources should be released. (programs, temporary files, etc.)- Specified by:
close
in interfacejava.lang.AutoCloseable
- Specified by:
close
in interfacejava.io.Closeable
- Throws:
java.io.IOException
- if an I/O error occurs
-
isClosed
public boolean isClosed()
Description copied from interface:GFileSystem
Returns true if the filesystem has beenclosed
- Specified by:
isClosed
in interfaceGFileSystem
- Returns:
- boolean true if the filesystem has been closed.
-
getName
public final java.lang.String getName()
Returns the name of this file system.- Specified by:
getName
in interfaceGFileSystem
- Returns:
- the name of this file system
-
getListing
public abstract java.util.List<GFile> getListing(GFile directory) throws java.io.IOException
Description copied from interface:GFileSystem
Returns a list offiles
that reside in the specified directory on this filesystem.- Specified by:
getListing
in interfaceGFileSystem
- Parameters:
directory
- NULL means root of filesystem.- Returns:
List
ofGFile
instances of file in the requested directory.- Throws:
java.io.IOException
- if IO problem.
-
getData
protected abstract java.io.InputStream getData(GFile file, TaskMonitor monitor) throws java.io.IOException, CancelledException, CryptoException
Legacy implementation ofgetInputStream(GFile, TaskMonitor)
.- Parameters:
file
-GFile
to get an InputStream formonitor
-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:
java.io.IOException
- if IO problemCancelledException
- if user cancels.CryptoException
- if crypto problem.
-
getInputStream
public java.io.InputStream getInputStream(GFile file, TaskMonitor monitor) throws CancelledException, java.io.IOException
Description copied from interface:GFileSystem
Returns anInputStream
that contains the contents of the specifiedGFile
.The caller is responsible for closing the stream.
- Specified by:
getInputStream
in interfaceGFileSystem
- Parameters:
file
-GFile
to get an InputStream formonitor
-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:
CancelledException
- if user cancels.java.io.IOException
- if IO problem
-
debug
protected void debug(byte[] bytes, java.lang.String fileName)
Writes the given bytes to a tempfile in the temp directory.- Parameters:
bytes
- the bytes to writefileName
- the prefix of the temp file name
-
lookup
public GFile lookup(java.lang.String path) throws java.io.IOException
Description copied from interface:GFileSystem
Retrieves aGFile
from this filesystem based on its full path and filename.- Specified by:
lookup
in interfaceGFileSystem
- Parameters:
path
- string path and filename of a file located in this filesystem. Usenull
or "/" to retrieve the root directory- Returns:
GFile
instance of requested file, null if not found.- Throws:
java.io.IOException
- if IO error when looking up file.
-
getRefManager
public FileSystemRefManager getRefManager()
Description copied from interface:GFileSystem
Returns theref manager
that is responsible for creating and releasingrefs
to this filesystem.- Specified by:
getRefManager
in interfaceGFileSystem
- Returns:
FileSystemRefManager
that manages references to this filesystem.
-
-