- for ( ; ep != NULL; ep = ep->e_sibling)
- if (strcmp(ep->e_name, buf) == 0)
- break;
+
+ oldep = ep;
+
+ if (strcmp(ep->e_name, buf) != 0 &&
+ ep->e_entries != NULL) {
+
+ ep = ep->e_entries[dir_hash(buf)];
+ for ( ; ep != NULL; ep = ep->e_sibling)
+ if (strcmp(ep->e_name, buf) == 0)
+ break;
+
+ /* search all hash lists for renamed inodes */
+ if (ep == NULL) {
+ int j;
+ for (j = 0; j < DIRHASH_SIZE; j++) {
+ ep = oldep->e_entries[j];
+ for ( ; ep != NULL; ep = ep->e_sibling)
+ if (strcmp(ep->e_name, buf) == 0)
+ break;
+ if (ep != NULL)
+ break;
+ }
+ }
+ }
+