summaryrefslogtreecommitdiff
path: root/firmware/common/dircache.c
diff options
context:
space:
mode:
authorFred Bauer <fred.w.bauer@gmail.com>2011-11-19 14:57:56 +0000
committerFred Bauer <fred.w.bauer@gmail.com>2011-11-19 14:57:56 +0000
commita71e87f1328e3b40556f6b26a3966b79d86c898c (patch)
tree03993b6ba7db89ee06a21522ab0e961c23925d82 /firmware/common/dircache.c
parent1252d0d54084a17255d2fad57a462cd15479561b (diff)
downloadrockbox-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.c26
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