That's not quite right. At first you can setup the MaxFileSize. PicoC will allocate this as source buffer at start. The source buffer holds a simple null terminated text string (like in Notepad). This buffer can be read and written via gcs in sectors of with 32 bytes.  The mechanism behind this is to have an editor in the gcs and transfer the source in pieces to the flight control (offset = SectorID * sizeof(Sector)).
Then you can test what you have written by simple executing it. If you want to save the source in the flash, set a FileID and execute the save command.
All commands were acknowledged from the flight control simple by reseting the Command to Idle. Errors were inicated on CommandError.
If you setup a BootFileID, picoC tries to load this file from flash at boot. The settings Startup and Source determine the execute conditions.
I haven't got issues on transfer.  I used this sequence for uploading:
1. set sector content
2. set SectorID (can be merged with 1.)
3. set Command = SetSector
4. wait until Command is Idle again.
5. if something fails: CommandError != 0

For a Download:
1. set SectorID
2. Command = GetSector
3. wait until Command is Idle again
4. get the content of sector.

If you have any concerns, you can verify the buffer after transfering it.

I have used the waypoint filesystem for two reasons. It's already there. On a quanton the waypoint filesystem eats half the size of the external flash. This is 2MByte for only 5 different ways. Nobody can fly so many waypoints without a power station on the copter ;).
The second reason is heavier. Creating a new partition on the flash, would require a clear of all data on the flash, creating 3 partitions (settings,wp,picoc) and building a new bootloader for all targets (ugly).
At home, you hold your films and music in separate folders also. You don't use separate partitions on the same hdd. Waypoint ids are 1..5, picoC id are PICOC_SOURCE_FILE_TYPE + FileID. If the user want's to delete all content from the partition it's his own decision. In the gcs a requester would be adequate.