1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
diff --git a/firmware/common/dircache.c b/firmware/common/dircache.c
index d5b9af6..101b410 100644
--- a/firmware/common/dircache.c
+++ b/firmware/common/dircache.c
@@ -844,8 +844,7 @@ int dircache_build(int last_size)
         allocated_size = last_size + DIRCACHE_RESERVE;
         dircache_root = buffer_alloc(allocated_size);
         ALIGN_BUFFER(dircache_root, allocated_size, sizeof(struct dircache_entry));
-        d_names_start =
-        d_names_end = ((char*)dircache_root)+allocated_size-1;
+        d_names_start = d_names_end = ((char*)dircache_root)+allocated_size-1;
         dircache_size = 0;
         thread_enabled = true;
         generate_dot_d_names();
@@ -878,7 +877,7 @@ int dircache_build(int last_size)
         return -1;
 
     /* memmove d_names down, there's a possibility of overlap */
-    size_to_move = dircache_size - entry_count*sizeof(struct dircache_entry);
+    size_to_move = d_names_end - d_names_start;
     memmove(dst, d_names_start, size_to_move);
     
     /* fix up pointers to the d_names */
@@ -887,6 +886,8 @@ int dircache_build(int last_size)
 
     d_names_start -= offset;
     d_names_end -= offset;
+    dot -= offset;
+    dotdot -= offset;
     
     /* equivalent to dircache_size + DIRCACHE_RESERVE */
     allocated_size = (d_names_end - (char*)dircache_root);