private void recurseDirectories(GFile dir, TaskMonitor monitor)
			throws IOException, CancelledException {

		monitor.setMessage("Indexing " + dir.getName());
		List<GFile> files = getRawListing(dir);
		for (GFile f : files) {
			monitor.checkCancelled();
			monitor.incrementProgress(1);

			// throw away the gfileimpl from getrawlisting(), create new gfile in rafi
			GFile newF = fsIndex.storeFileWithParent(f.getName(), dir, -1, f.isDirectory(),
				f.getLength(), null);
			if (newF.isDirectory()) {
				recurseDirectories(newF, monitor);
			}
		}
	}
Creates a {@link DmgClientFileSystem} instance, using a decrypted dmg file and
the filesystem's {@link FSRLRoot}.

@param decryptedDmgFile path to a decrypted DMG file.  The DmgClientFileSystemFactory
takes care of decrypting for us
@param deleteFileWhenDone boolean flag, if true, the container file will be deleted when
the filesystem is closed
@param fsrl {@link FSRLRoot} of this filesystem
@param fsService {@link FileSystemService} reference
Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/ios/dmg/DmgClientFileSystem.java