Description
Short: Implement the FUSE API, such that FUSE-based filesystem handlers can be used.
Deliverables:
- Ability to compile and run FUSE-based filesystems with no or minimal changes to the filesystem code.
- A working port of the NTFS-3G filesystem.
Notes:
Minimal changes means things like adding AROS-specific startup code, modifications to use Exec I/O devices or AROSTCP, endian fixes, and/or replacing UNIX calls with AROS ones. The overall structure of the handler should not have to change.
The FUSE 2.6 API must be supported, as well as earlier versions if possible. It must be possible to mount a FUSE filesystem via a Mountlist or DEVS:DOSDrivers entry, preferably without any special FUSE-specific arguments. That is, an entry like this should work: NTFS: FileSystem = ntfs.handler Device = fdsk.device Unit = 0 # This however is at odds we the official way to mount FUSE filesystems by simply running them. It should be possible, but is not necessary, to implement both.
Possible implementation: The main entry point in the handlers (AROS-specific) boot code is a library entry point. AddDosNode() in expansion.library (called from C:Mount) will have arranged for a DOS device node to be created, and will then call this entry point. An AROS-specific fuse.library call could take care of all the setup details, and would be the first thing called by the handler. To support the FUSE method of simple running the filesystem, a trivial main() that simply calls AddDosNode() and exits is all thats necessary. expansion.library would start a new copy of the handler and proceed as above. The call to fuse_mount() would then call AddDosEntry in dos.library to add the volume entry. It would then create a AROS handler (either a packet process or a IOFS device). When a filesystem request comes in from DOS, it will end up in the handlers request function somewhere inside fuse.library. It will then take the request, translate its arguments and call the appropriate FUSE filesystem function to do the work.