diff options
author | Thomas Martitz <kugel@rockbox.org> | 2011-08-15 15:13:17 +0000 |
---|---|---|
committer | Thomas Martitz <kugel@rockbox.org> | 2011-08-15 15:13:17 +0000 |
commit | 4087875f1cf2677cc8542d7dd19cc3b4a8d26c2b (patch) | |
tree | f2417ea686fa668817ae1a14ea182cf1172917df /firmware | |
parent | bf34cdfacb4546cdc2634dda402f010f2dc34f1c (diff) | |
download | rockbox-4087875f1cf2677cc8542d7dd19cc3b4a8d26c2b.tar.gz rockbox-4087875f1cf2677cc8542d7dd19cc3b4a8d26c2b.zip |
Dircache: Fix bug introduced in r30308.
dircache_root wasn't initialized at all and the giving allocated_size
passed to buffer_release_buffer() didn't account for alignment padding.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@30318 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware')
-rw-r--r-- | firmware/common/dircache.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/firmware/common/dircache.c b/firmware/common/dircache.c index d114a6ac62..f42c79d169 100644 --- a/firmware/common/dircache.c +++ b/firmware/common/dircache.c | |||
@@ -864,8 +864,9 @@ int dircache_build(int last_size) | |||
864 | * free bytes inbetween */ | 864 | * free bytes inbetween */ |
865 | size_t got_size; | 865 | size_t got_size; |
866 | char* buf = buffer_get_buffer(&got_size); | 866 | char* buf = buffer_get_buffer(&got_size); |
867 | ALIGN_BUFFER(buf, got_size, sizeof(struct dircache_entry)); | 867 | dircache_root = (struct dircache_entry*)ALIGN_UP(buf, |
868 | d_names_start = d_names_end = (char*)dircache_root + got_size - 1; | 868 | sizeof(struct dircache_entry)); |
869 | d_names_start = d_names_end = buf + got_size - 1; | ||
869 | dircache_size = 0; | 870 | dircache_size = 0; |
870 | generate_dot_d_names(); | 871 | generate_dot_d_names(); |
871 | 872 | ||
@@ -897,8 +898,8 @@ int dircache_build(int last_size) | |||
897 | dot -= offset; | 898 | dot -= offset; |
898 | dotdot -= offset; | 899 | dotdot -= offset; |
899 | 900 | ||
900 | /* equivalent to dircache_size + DIRCACHE_RESERVE */ | 901 | /* equivalent to dircache_size + DIRCACHE_RESERVE + align */ |
901 | allocated_size = (d_names_end - (char*)dircache_root); | 902 | allocated_size = (d_names_end - buf); |
902 | reserve_used = 0; | 903 | reserve_used = 0; |
903 | 904 | ||
904 | buffer_release_buffer(allocated_size); | 905 | buffer_release_buffer(allocated_size); |