summaryrefslogtreecommitdiff
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
parent1252d0d54084a17255d2fad57a462cd15479561b (diff)
downloadrockbox-a71e87f1328e3b40556f6b26a3966b79d86c898c.zip
rockbox-a71e87f1328e3b40556f6b26a3966b79d86c898c.tar.gz
rockbox-a71e87f1328e3b40556f6b26a3966b79d86c898c.tar.bz2
rockbox-a71e87f1328e3b40556f6b26a3966b79d86c898c.tar.xz
Update some missed pointers when moving the dircache allocation
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@31028 a1c6a512-1295-4272-9138-f99709370657
-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 8d264a3..21ae71f 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)
if (dont_move)
return BUFLIB_CB_CANNOT_MOVE;
+#define UPDATE(x) if (x) { x = PTR_ADD(x, diff); }
/* relocate the cache */
ptrdiff_t diff = new - current;
for(unsigned i = 0; i < entry_count; i++)
{
- if (dircache_root[i].d_name)
- dircache_root[i].d_name += diff;
- if (dircache_root[i].next_char)
- dircache_root[i].next_char += diff;
- if (dircache_root[i].up_char)
- dircache_root[i].up_char += diff;
- if (dircache_root[i].down_char)
- dircache_root[i].down_char += diff;
+ UPDATE(dircache_root[i].d_name);
+ UPDATE(dircache_root[i].next_char);
+ UPDATE(dircache_root[i].up_char);
+ UPDATE(dircache_root[i].down_char);
}
dircache_root = new;
+ UPDATE(d_names_start);
+ UPDATE(d_names_end);
+ UPDATE(dot);
+ UPDATE(dotdot);
- d_names_start += diff;
- d_names_end += diff;
- dot += diff;
- dotdot += diff;
+ for(unsigned i = 0; i < MAX_OPEN_FILES; i++)
+ UPDATE(fd_bindings[i]);
+#ifdef HAVE_MULTIVOLUME
+ UPDATE(append_position);
+#endif
return BUFLIB_CB_OK;
}