I was trying to extract the romfs directory of Pokemon Omega Ruby using ctrtool --romfsdir=romfs filename.3ds and I found that there's a file (specifically "a\0\8\7") with the specified length of 0x00 bytes and data offset the same as for the next file.
ctrtool saves all files correctly until it encounters that empty file. It then returns [tc::io::VirtualFileSystem::openFile() ERROR] File does not exist. and stops parsing the rest causing only files up to the "a\0\8\7" being extracted. The --listromfs parameter works correctly and lists all of the files.
I also tried extracting it with Citra and it did everything correctly, including the empty file, so I'm pretty sure it's a bug.
Here's a WinMerge comparison of the directory extracted by ctrtool vs the proper one (red = files not saved by ctrtool)

I was trying to extract the romfs directory of Pokemon Omega Ruby using
ctrtool --romfsdir=romfs filename.3dsand I found that there's a file (specifically "a\0\8\7") with the specified length of 0x00 bytes and data offset the same as for the next file.ctrtool saves all files correctly until it encounters that empty file. It then returns
[tc::io::VirtualFileSystem::openFile() ERROR] File does not exist.and stops parsing the rest causing only files up to the "a\0\8\7" being extracted. The--listromfsparameter works correctly and lists all of the files.I also tried extracting it with Citra and it did everything correctly, including the empty file, so I'm pretty sure it's a bug.
Here's a WinMerge comparison of the directory extracted by ctrtool vs the proper one (red = files not saved by ctrtool)