Package ghidra.formats.gfilesystem
Class FSUtilities
java.lang.Object
ghidra.formats.gfilesystem.FSUtilities
-
Field Summary
Modifier and TypeFieldDescriptionstatic final Comparator
<GFile> Sorts GFiles by type (directories segregated from files) and then by name, case-insensitive.static final String
static final String
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionstatic String
appendPath
(String... paths) Concats path strings together, taking care to ensure that there is a correct path separator character between each part.static long
copyByteProviderToFile
(ByteProvider provider, File destFile, TaskMonitor monitor) Copy the contents of aByteProvider
to a file.static void
displayException
(Object originator, Component parent, String title, String message, Throwable throwable) Displays a filesystem relatedexception
in the most user-friendly manner possible, even if we have to do some hacky things with helping the user with crypto problems.static String
Returns a decoded version of the input stream where "%nn" escape sequences are replaced with their actual characters, using UTF-8 decoding rules.static String
Returns a copy of the input string with FSRL problematic[1] characters escaped as "%nn" sequences, where nn are hexdigits specifying the numeric ascii value of that character.static String
Common / unified date formatting for all file system information strings.static String
formatSize
(Long length) Common / unified size formatting for all file system information strings.static String
getExtension
(String path, int extLevel) Returns the "extension" of the filename part of the path string.static String
getFileMD5
(File f, TaskMonitor monitor) Calculate the MD5 of a file.static String
getFilesystemDescriptionFromClass
(Class<?> clazz) Returns the description value of theFileSystemInfo
annotation attached to the specified class.static int
getFilesystemPriorityFromClass
(Class<?> clazz) Returns the priority value of theFileSystemInfo
annotation attached to the specified class.static String
getFilesystemTypeFromClass
(Class<?> clazz) Returns the type value of theFileSystemInfo
annotation attached to the specified class.static FileType
getFileType
(File f) getLines
(ByteProvider byteProvider) Returns the text lines in the specified ByteProvider.static String
getMD5
(ByteProvider provider, TaskMonitor monitor) Calculate the MD5 of a file.static String
getMD5
(InputStream is, String name, long expectedLength, TaskMonitor monitor) Calculate the hash of anInputStream
.static String
getSafeFilename
(String untrustedFilename) Best-effort of sanitizing an untrusted string that will be used to create a file on the user's local filesystem.static String
infoMapToString
(Map<String, String> info) Converts a string-to-string mapping into a "key: value\n" multi-line string.static boolean
Returns true if all theFSRL
s in the specified list are from the filesystem.static boolean
listFileSystem
(GFileSystem fs, GFile dir, List<GFile> result, TaskMonitor taskMonitor) Returns a list of all files in a GFileSystem.static String
normalizeNativePath
(String path) Returns a copy of the string path that has been fixed to have correct slashes and a correct leading root slash '/'.static String
readSymlink
(File f) Returns the destination of a symlink, or null if not a symlink or other errorstatic long
streamCopy
(InputStream is, OutputStream os, TaskMonitor monitor) Copy a stream while updating a TaskMonitor.static void
uncheckedClose
(Closeable c, String msg) Helper method to invoke close() on a Closeable without having to catch an IOException.
-
Field Details
-
SEPARATOR_CHARS
- See Also:
-
SEPARATOR
- See Also:
-
GFILE_NAME_TYPE_COMPARATOR
Sorts GFiles by type (directories segregated from files) and then by name, case-insensitive.
-
-
Constructor Details
-
FSUtilities
public FSUtilities()
-
-
Method Details
-
infoMapToString
Converts a string-to-string mapping into a "key: value\n" multi-line string.- Parameters:
info
- map of string key to string value.- Returns:
- Multi-line string "key: value" string.
-
getSafeFilename
Best-effort of sanitizing an untrusted string that will be used to create a file on the user's local filesystem.- Parameters:
untrustedFilename
- filename string with possibly bad / hostile characters or sequences.- Returns:
- sanitized filename
-
escapeEncode
Returns a copy of the input string with FSRL problematic[1] characters escaped as "%nn" sequences, where nn are hexdigits specifying the numeric ascii value of that character.Characters that need more than a byte to encode will result in multiple "%nn" values that encode the necessary UTF8 codepoints.
[1] - non-ascii / unprintable / FSRL portion separation characters.
- Parameters:
s
- string, or null.- Returns:
- string with problematic characters escaped as "%nn" sequences, or null if parameter was null.
-
escapeDecode
Returns a decoded version of the input stream where "%nn" escape sequences are replaced with their actual characters, using UTF-8 decoding rules.- Parameters:
s
- string with escape sequences in the form "%nn", or null.- Returns:
- string with all escape sequences replaced with native characters, or null if original parameter was null.
- Throws:
MalformedURLException
- if bad escape sequence format.
-
listFileSystem
public static List<GFile> listFileSystem(GFileSystem fs, GFile dir, List<GFile> result, TaskMonitor taskMonitor) throws IOException, CancelledException Returns a list of all files in a GFileSystem.- Parameters:
fs
-GFileSystem
to recursively query for all files.dir
- theGFile
directory to recurse intoresult
-List
of GFiles where the results are accumulated into, or null to allocate a new List, returned as the result.taskMonitor
-TaskMonitor
that will be checked for cancel.- Returns:
List
of accumulatedresult
s- Throws:
IOException
- if io error during listing of directoriesCancelledException
- if user cancels
-
getFilesystemTypeFromClass
Returns the type value of theFileSystemInfo
annotation attached to the specified class.- Parameters:
clazz
- Class to query.- Returns:
- File system type string.
-
getFilesystemDescriptionFromClass
Returns the description value of theFileSystemInfo
annotation attached to the specified class.- Parameters:
clazz
- Class to query.- Returns:
- File system description string.
-
getFilesystemPriorityFromClass
Returns the priority value of theFileSystemInfo
annotation attached to the specified class.- Parameters:
clazz
- Class to query.- Returns:
- File system priority integer.
-
isSameFS
Returns true if all theFSRL
s in the specified list are from the filesystem. -
displayException
public static void displayException(Object originator, Component parent, String title, String message, Throwable throwable) Displays a filesystem relatedexception
in the most user-friendly manner possible, even if we have to do some hacky things with helping the user with crypto problems.- Parameters:
originator
- a Logger instance, "this", or YourClass.classparent
- a parent component used to center the dialog (or null if you don't have one)title
- the title of the pop-up dialog (main subject of message)message
- the details of the messagethrowable
- the Throwable that describes the cause of the error
-
copyByteProviderToFile
public static long copyByteProviderToFile(ByteProvider provider, File destFile, TaskMonitor monitor) throws IOException, CancelledException Copy the contents of aByteProvider
to a file.- Parameters:
provider
-ByteProvider
source of bytesdestFile
-File
destination filemonitor
-TaskMonitor
to update- Returns:
- number of bytes copied
- Throws:
IOException
- if errorCancelledException
- if cancelled
-
streamCopy
public static long streamCopy(InputStream is, OutputStream os, TaskMonitor monitor) throws IOException, CancelledException Copy a stream while updating a TaskMonitor.- Parameters:
is
-InputStream
source of bytesos
-OutputStream
destination of bytesmonitor
-TaskMonitor
to update- Returns:
- number of bytes copied
- Throws:
IOException
- if errorCancelledException
- if cancelled
-
getLines
Returns the text lines in the specified ByteProvider.- Parameters:
byteProvider
-ByteProvider
to read- Returns:
- list of text lines
- Throws:
IOException
- if error
-
getFileMD5
Calculate the MD5 of a file.- Parameters:
f
-File
to read.monitor
-TaskMonitor
to watch for cancel- Returns:
- md5 as a hex encoded string, never null.
- Throws:
IOException
- if errorCancelledException
- if cancelled
-
getMD5
public static String getMD5(ByteProvider provider, TaskMonitor monitor) throws IOException, CancelledException Calculate the MD5 of a file.- Parameters:
provider
-ByteProvider
monitor
-TaskMonitor
to watch for cancel- Returns:
- md5 as a hex encoded string, never null.
- Throws:
IOException
- if errorCancelledException
- if cancelled
-
getMD5
public static String getMD5(InputStream is, String name, long expectedLength, TaskMonitor monitor) throws IOException, CancelledException Calculate the hash of anInputStream
.- Parameters:
is
-InputStream
name
- of the inputstreamexpectedLength
- the length of the inputstreammonitor
-TaskMonitor
to update- Returns:
- md5 as a hex encoded string, never null
- Throws:
IOException
- if errorCancelledException
- if cancelled
-
appendPath
Concats path strings together, taking care to ensure that there is a correct path separator character between each part.Handles forward or back slashes as path separator characters in the input, but only adds forward slashes when separating the path strings that need a separator.
- Parameters:
paths
- vararg list of path strings, empty or null elements are ok and are skipped.- Returns:
- null if all params null, "" empty string if all are empty, or "path_element[1]/path_element[2]/.../path_element[N]" otherwise.
-
getExtension
Returns the "extension" of the filename part of the path string.Ie. everything after the nth last '.' char in the filename, including that '.' character.
Using: "path/filename.ext1.ext2"
Gives:
- extLevel 1: ".ext2"
- extLevel 2: ".ext1.ext2"
- extLevel 3:
null
- Parameters:
path
- path/filename.ext stringextLevel
- number of ext levels; must be greater than 0- Returns:
- ".ext1" for "path/filename.notext.ext1" level 1, ".ext1.ext2" for "path/filename.ext1.ext2" level 2, etc. or null if there was no dot character
- Throws:
IllegalArgumentException
- if the given level is less than 1
-
normalizeNativePath
Returns a copy of the string path that has been fixed to have correct slashes and a correct leading root slash '/'.- Parameters:
path
- String forward or backslash path- Returns:
- String path with all forward slashes and a leading root slash.
-
formatFSTimestamp
Common / unified date formatting for all file system information strings.- Parameters:
d
-Date
to format, or null- Returns:
- formatted date string, or "NA" if date was null
-
formatSize
Common / unified size formatting for all file system information strings.- Parameters:
length
-Long
length, null ok- Returns:
- pretty'ish length format string, or "NA" if length was null
-
uncheckedClose
Helper method to invoke close() on a Closeable without having to catch an IOException.- Parameters:
c
-Closeable
to closemsg
- optional msg to log if exception is thrown, null is okay
-
isSymlink
-
readSymlink
Returns the destination of a symlink, or null if not a symlink or other error- Parameters:
f
-File
that is a symlink- Returns:
- destination path string of the symlink, or null if not symlink
-
getFileType
-