Ищу алгоритм удаления
1. выкидываешь - size - всегда распределяешь стандартными блоками 512, 1024, 8096
2. выкидываешь - freeblockref - цепочка свободных блоков, если нужна, ведется отдельно
3. выкидываешь - leftnode - скан всегда рута
4. заменяешь - rightnode - на - nextblock - это где лежит продолжение, если не уместился
делаешь другую структуру (имя/ключ(8.3?), firstblock, size, removed)
работает так
- начальная разметка - пустой список ключей и зануленная таблица блоков
- добавил- сделал запись ключа, заполнил занятые блоки, последний пометил мах(н) FFF?
- удалил -- пометил ключ как удаленный
- очистка - зануляешь цепочку nextblock и удаляешь ключ
Таблицу структур имя/ключ пишешь в обычный блок и расширяешь по мере необходимости.
Таблицу nextblok'ов - размещаешь целиком на максимальный размер набора.
Это грубая эмуляция FAT. Код есть на сайтах эмбедеров.