1
0
Fork 0
forked from len0rd/rockbox

fat: make fat_open more flexible by accepting the file==&dir->file and make fat_opendir also more flexible by accepting dir==parent_dir

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@25202 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Amaury Pouly 2010-03-15 12:31:24 +00:00
parent 97c1497b8d
commit 46565f594a

View file

@ -1632,6 +1632,15 @@ int fat_open(IF_MV2(int volume,)
struct fat_file *file, struct fat_file *file,
const struct fat_dir* dir) const struct fat_dir* dir)
{ {
/* Remember where the file's dir entry is located
* Do it befoe assigning other fields so that fat_open
* can be called with file == &dir->file (see fat_opendir) */
if ( dir ) {
file->direntry = dir->entry - 1;
file->direntries = dir->entrycount;
file->dircluster = dir->file.firstcluster;
}
file->firstcluster = startcluster; file->firstcluster = startcluster;
file->lastcluster = startcluster; file->lastcluster = startcluster;
file->lastsector = 0; file->lastsector = 0;
@ -1648,12 +1657,6 @@ int fat_open(IF_MV2(int volume,)
} }
#endif #endif
/* remember where the file's dir entry is located */
if ( dir ) {
file->direntry = dir->entry - 1;
file->direntries = dir->entrycount;
file->dircluster = dir->file.firstcluster;
}
LDEBUGF("fat_open(%lx), entry %d\n",startcluster,file->direntry); LDEBUGF("fat_open(%lx), entry %d\n",startcluster,file->direntry);
return 0; return 0;
} }
@ -2301,9 +2304,6 @@ int fat_opendir(IF_MV2(int volume,)
#endif #endif
int rc; int rc;
dir->entry = 0;
dir->sector = 0;
if (startcluster == 0) if (startcluster == 0)
startcluster = fat_bpb->bpb_rootclus; startcluster = fat_bpb->bpb_rootclus;
@ -2314,6 +2314,11 @@ int fat_opendir(IF_MV2(int volume,)
" (error code %d)\n", rc); " (error code %d)\n", rc);
return rc * 10 - 1; return rc * 10 - 1;
} }
/* assign them after fat_open call so that fat_opendir can be called with the same
* fat_dir as parent and result */
dir->entry = 0;
dir->sector = 0;
return 0; return 0;
} }