1
0
Fork 0
forked from len0rd/rockbox

Update some missed pointers when moving the dircache allocation

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@31028 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Fred Bauer 2011-11-19 14:57:56 +00:00
parent 1252d0d540
commit a71e87f132

View file

@ -150,26 +150,28 @@ static int move_callback(int handle, void* current, void* new)
if (dont_move) if (dont_move)
return BUFLIB_CB_CANNOT_MOVE; return BUFLIB_CB_CANNOT_MOVE;
#define UPDATE(x) if (x) { x = PTR_ADD(x, diff); }
/* relocate the cache */ /* relocate the cache */
ptrdiff_t diff = new - current; ptrdiff_t diff = new - current;
for(unsigned i = 0; i < entry_count; i++) for(unsigned i = 0; i < entry_count; i++)
{ {
if (dircache_root[i].d_name) UPDATE(dircache_root[i].d_name);
dircache_root[i].d_name += diff; UPDATE(dircache_root[i].next_char);
if (dircache_root[i].next_char) UPDATE(dircache_root[i].up_char);
dircache_root[i].next_char += diff; UPDATE(dircache_root[i].down_char);
if (dircache_root[i].up_char)
dircache_root[i].up_char += diff;
if (dircache_root[i].down_char)
dircache_root[i].down_char += diff;
} }
dircache_root = new; dircache_root = new;
UPDATE(d_names_start);
UPDATE(d_names_end);
UPDATE(dot);
UPDATE(dotdot);
d_names_start += diff; for(unsigned i = 0; i < MAX_OPEN_FILES; i++)
d_names_end += diff; UPDATE(fd_bindings[i]);
dot += diff;
dotdot += diff;
#ifdef HAVE_MULTIVOLUME
UPDATE(append_position);
#endif
return BUFLIB_CB_OK; return BUFLIB_CB_OK;
} }