summaryrefslogtreecommitdiff
path: root/firmware/common/dircache.c
diff options
context:
space:
mode:
authorMiika Pekkarinen <miipekk@ihme.org>2006-03-28 11:51:12 +0000
committerMiika Pekkarinen <miipekk@ihme.org>2006-03-28 11:51:12 +0000
commit2d93495df2dd0c7c61fa73e07bb8fcae3d1ea5fd (patch)
tree38d90cb0894b238b84cfa88b3e4cc3658b8a7ced /firmware/common/dircache.c
parent6784e0333f3d8ee806a7eacbf2b709f45ffea0f5 (diff)
downloadrockbox-2d93495df2dd0c7c61fa73e07bb8fcae3d1ea5fd.tar.gz
rockbox-2d93495df2dd0c7c61fa73e07bb8fcae3d1ea5fd.zip
Boost open() performance on platforms with dircache. Tagcache initial
scanning now over 50% faster than before. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@9306 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/common/dircache.c')
-rw-r--r--firmware/common/dircache.c20
1 files changed, 17 insertions, 3 deletions
diff --git a/firmware/common/dircache.c b/firmware/common/dircache.c
index f9fd63b8e4..873e0f9cf4 100644
--- a/firmware/common/dircache.c
+++ b/firmware/common/dircache.c
@@ -798,12 +798,20 @@ void dircache_bind(int fd, const char *path)
798 fd_bindings[fd] = entry; 798 fd_bindings[fd] = entry;
799} 799}
800 800
801void dircache_update_filesize(int fd, long newsize) 801void dircache_update_filesize(int fd, long newsize, long startcluster)
802{ 802{
803 if (!dircache_initialized || fd < 0) 803 if (!dircache_initialized || fd < 0)
804 return ; 804 return ;
805 805
806 if (fd_bindings[fd] == NULL)
807 {
808 logf("dircache fd access error");
809 dircache_initialized = false;
810 return ;
811 }
812
806 fd_bindings[fd]->size = newsize; 813 fd_bindings[fd]->size = newsize;
814 fd_bindings[fd]->startcluster = startcluster;
807} 815}
808 816
809void dircache_mkdir(const char *path) 817void dircache_mkdir(const char *path)
@@ -915,13 +923,19 @@ void dircache_rename(const char *oldpath, const char *newpath)
915 newentry->wrtdate = oldentry.wrtdate; 923 newentry->wrtdate = oldentry.wrtdate;
916} 924}
917 925
918void dircache_add_file(const char *path) 926void dircache_add_file(const char *path, long startcluster)
919{ 927{
928 struct dircache_entry *entry;
929
920 if (!dircache_initialized) 930 if (!dircache_initialized)
921 return ; 931 return ;
922 932
923 logf("add file: %s", path); 933 logf("add file: %s", path);
924 dircache_new_entry(path, 0); 934 entry = dircache_new_entry(path, 0);
935 if (entry == NULL)
936 return ;
937
938 entry->startcluster = startcluster;
925} 939}
926 940
927DIRCACHED* opendir_cached(const char* name) 941DIRCACHED* opendir_cached(const char* name)