diff options
author | Fred Bauer <fred.w.bauer@gmail.com> | 2011-11-19 14:57:56 +0000 |
---|---|---|
committer | Fred Bauer <fred.w.bauer@gmail.com> | 2011-11-19 14:57:56 +0000 |
commit | a71e87f1328e3b40556f6b26a3966b79d86c898c (patch) | |
tree | 03993b6ba7db89ee06a21522ab0e961c23925d82 /firmware/common/dircache.c | |
parent | 1252d0d54084a17255d2fad57a462cd15479561b (diff) | |
download | rockbox-a71e87f1328e3b40556f6b26a3966b79d86c898c.tar.gz rockbox-a71e87f1328e3b40556f6b26a3966b79d86c898c.zip |
Update some missed pointers when moving the dircache allocation
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@31028 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/common/dircache.c')
-rw-r--r-- | firmware/common/dircache.c | 26 |
1 files changed, 14 insertions, 12 deletions
diff --git a/firmware/common/dircache.c b/firmware/common/dircache.c index 8d264a3e7c..21ae71fd5d 100644 --- a/firmware/common/dircache.c +++ b/firmware/common/dircache.c | |||
@@ -150,26 +150,28 @@ static int move_callback(int handle, void* current, void* new) | |||
150 | if (dont_move) | 150 | if (dont_move) |
151 | return BUFLIB_CB_CANNOT_MOVE; | 151 | return BUFLIB_CB_CANNOT_MOVE; |
152 | 152 | ||
153 | #define UPDATE(x) if (x) { x = PTR_ADD(x, diff); } | ||
153 | /* relocate the cache */ | 154 | /* relocate the cache */ |
154 | ptrdiff_t diff = new - current; | 155 | ptrdiff_t diff = new - current; |
155 | for(unsigned i = 0; i < entry_count; i++) | 156 | for(unsigned i = 0; i < entry_count; i++) |
156 | { | 157 | { |
157 | if (dircache_root[i].d_name) | 158 | UPDATE(dircache_root[i].d_name); |
158 | dircache_root[i].d_name += diff; | 159 | UPDATE(dircache_root[i].next_char); |
159 | if (dircache_root[i].next_char) | 160 | UPDATE(dircache_root[i].up_char); |
160 | dircache_root[i].next_char += diff; | 161 | UPDATE(dircache_root[i].down_char); |
161 | if (dircache_root[i].up_char) | ||
162 | dircache_root[i].up_char += diff; | ||
163 | if (dircache_root[i].down_char) | ||
164 | dircache_root[i].down_char += diff; | ||
165 | } | 162 | } |
166 | dircache_root = new; | 163 | dircache_root = new; |
164 | UPDATE(d_names_start); | ||
165 | UPDATE(d_names_end); | ||
166 | UPDATE(dot); | ||
167 | UPDATE(dotdot); | ||
167 | 168 | ||
168 | d_names_start += diff; | 169 | for(unsigned i = 0; i < MAX_OPEN_FILES; i++) |
169 | d_names_end += diff; | 170 | UPDATE(fd_bindings[i]); |
170 | dot += diff; | ||
171 | dotdot += diff; | ||
172 | 171 | ||
172 | #ifdef HAVE_MULTIVOLUME | ||
173 | UPDATE(append_position); | ||
174 | #endif | ||
173 | return BUFLIB_CB_OK; | 175 | return BUFLIB_CB_OK; |
174 | } | 176 | } |
175 | 177 | ||