Commit 487cb526 authored by Wayne Davison's avatar Wayne Davison

Fixed the discovery of a prior finished hard-link when the entry

is old enough that it is no longer in the flist data.
parent 9793bbb3
......@@ -249,17 +249,13 @@ static char *check_prior(struct file_struct *file, int gnum,
int *prev_ndx_p, struct file_list **flist_p)
{
struct file_struct *fp;
struct file_list *flist;
struct ht_int32_node *node;
int prev_ndx = F_HL_PREV(file);
while (1) {
if (prev_ndx < 0) {
*prev_ndx_p = prev_ndx;
*flist_p = NULL;
return NULL;
}
if ((flist = flist_for_ndx(prev_ndx)) == NULL)
struct file_list *flist;
if (prev_ndx < 0
|| (flist = flist_for_ndx(prev_ndx)) == NULL)
break;
fp = flist->files[prev_ndx - flist->ndx_start];
if (!(fp->flags & FLAG_SKIP_HLINK)) {
......@@ -270,20 +266,20 @@ static char *check_prior(struct file_struct *file, int gnum,
F_HL_PREV(file) = prev_ndx = F_HL_PREV(fp);
}
node = hashtable_find(prior_hlinks, gnum, 0);
assert(node != NULL && node->data);
if (CVAL(node->data, 0) == 0) {
if ((node = hashtable_find(prior_hlinks, gnum, 0)) != NULL) {
assert(node->data != NULL);
if (CVAL(node->data, 0) != 0) {
*prev_ndx_p = -1;
*flist_p = NULL;
return node->data;
}
/* The prior file must have been skipped. */
F_HL_PREV(file) = prev_ndx = -1;
*prev_ndx_p = prev_ndx;
*flist_p = NULL;
return NULL;
F_HL_PREV(file) = -1;
}
*prev_ndx_p = prev_ndx;
*flist_p = flist;
return node->data;
*prev_ndx_p = -1;
*flist_p = NULL;
return NULL;
}
/* Only called if FLAG_HLINKED is set and FLAG_HLINK_FIRST is not. Returns:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment