fs: fat: first dentry of long name in FAT iterator

A long name is split over multiple directory entries. When deleting a file
with a long name we need the first directory entry to be able to delete the
whole chain.

Add the necessary fields to the FAT iterator:

* cluster of first directory entry
* address of first directory entry
* remaining entries in cluster

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
This commit is contained in:
Heinrich Schuchardt 2020-11-19 07:44:08 +01:00
parent 4a593dd0c5
commit 89735b44c4

View File

@ -700,6 +700,18 @@ struct fat_itr {
* @dent: current directory entry
*/
dir_entry *dent;
/**
* @dent_rem: remaining entries after long name start
*/
int dent_rem;
/**
* @dent_clust: cluster of long name start
*/
unsigned int dent_clust;
/**
* @dent_start: first directory entry for long name
*/
dir_entry *dent_start;
/**
* @l_name: long name of current directory entry
*/
@ -966,9 +978,13 @@ static int fat_itr_next(fat_itr *itr)
while (1) {
dent = next_dent(itr);
if (!dent)
if (!dent) {
itr->dent_start = NULL;
return 0;
}
itr->dent_rem = itr->remaining;
itr->dent_start = itr->dent;
itr->dent_clust = itr->clust;
if (dent->name[0] == DELETED_FLAG)
continue;