From a71e87f1328e3b40556f6b26a3966b79d86c898c Mon Sep 17 00:00:00 2001 From: Fred Bauer Date: Sat, 19 Nov 2011 14:57:56 +0000 Subject: Update some missed pointers when moving the dircache allocation git-svn-id: svn://svn.rockbox.org/rockbox/trunk@31028 a1c6a512-1295-4272-9138-f99709370657 --- firmware/common/dircache.c | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) (limited to 'firmware/common/dircache.c') 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) 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; } -- cgit v1.2.3