diff options
author | Miika Pekkarinen <miipekk@ihme.org> | 2006-03-28 11:51:12 +0000 |
---|---|---|
committer | Miika Pekkarinen <miipekk@ihme.org> | 2006-03-28 11:51:12 +0000 |
commit | 2d93495df2dd0c7c61fa73e07bb8fcae3d1ea5fd (patch) | |
tree | 38d90cb0894b238b84cfa88b3e4cc3658b8a7ced /firmware/common/dircache.c | |
parent | 6784e0333f3d8ee806a7eacbf2b709f45ffea0f5 (diff) | |
download | rockbox-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.c | 20 |
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 | ||
801 | void dircache_update_filesize(int fd, long newsize) | 801 | void 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 | ||
809 | void dircache_mkdir(const char *path) | 817 | void 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 | ||
918 | void dircache_add_file(const char *path) | 926 | void 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 | ||
927 | DIRCACHED* opendir_cached(const char* name) | 941 | DIRCACHED* opendir_cached(const char* name) |