From dc7534bdb2a784ae9d5c9089237935ff405c3525 Mon Sep 17 00:00:00 2001 From: Jörg Hohensohn Date: Fri, 28 Jan 2005 21:32:16 +0000 Subject: preparations for hotswapping MMC git-svn-id: svn://svn.rockbox.org/rockbox/trunk@5701 a1c6a512-1295-4272-9138-f99709370657 --- firmware/common/dir.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'firmware/common/dir.c') diff --git a/firmware/common/dir.c b/firmware/common/dir.c index 4b4a5fa65d..aa55aeb9e9 100644 --- a/firmware/common/dir.c +++ b/firmware/common/dir.c @@ -67,6 +67,26 @@ static int strip_volume(const char* name, char* namecopy) #endif /* #ifdef HAVE_MULTIVOLUME */ +#ifdef HAVE_HOTSWAP +// release all dir handles on a given volume "by force", to avoid leaks +int release_dirs(int volume) +{ + DIR* pdir = opendirs; + int dd; + int closed = 0; + for ( dd=0; ddfatdir.file.volume == volume) + { + pdir->busy = false; /* mark as available, no further action */ + closed++; + } + } + return closed; /* return how many we did */ +} +#endif /* #ifdef HAVE_HOTSWAP */ + + DIR* opendir(const char* name) { char namecopy[MAX_PATH]; @@ -154,6 +174,10 @@ struct dirent* readdir(DIR* dir) { struct fat_direntry entry; struct dirent* theent = &(dir->theent); + + if (!dir->busy) + return NULL; + #ifdef HAVE_MULTIVOLUME /* Volumes (secondary file systems) get inserted into the root directory of the first volume, since we have no separate top level. */ -- cgit v1.2.3