X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/3a05c5d3ce89c1ef4c2f12646abb1afac418641a..a1f99493b39610e2ea9deb4bb1c71ba63bce5834:/flist.c diff --git a/flist.c b/flist.c index c342539e..476e7508 100644 --- a/flist.c +++ b/flist.c @@ -546,7 +546,7 @@ static struct file_struct *receive_file_entry(struct file_list *flist, rprintf(FERROR, "overflow: flags=0x%x l1=%d l2=%d lastname=%s\n", flags, l1, l2, safe_fname(lastname)); - overflow("receive_file_entry"); + overflow_exit("receive_file_entry"); } strlcpy(thisname, lastname, l1 + 1); @@ -611,7 +611,7 @@ static struct file_struct *receive_file_entry(struct file_list *flist, if (linkname_len <= 0 || linkname_len > MAXPATHLEN) { rprintf(FERROR, "overflow: linkname_len=%d\n", linkname_len - 1); - overflow("receive_file_entry"); + overflow_exit("receive_file_entry"); } } else @@ -1122,7 +1122,7 @@ struct file_list *send_file_list(int f, int argc, char *argv[]) fname[1] = '\0'; } else { if (l + 1 >= MAXPATHLEN) - overflow("send_file_list"); + overflow_exit("send_file_list"); fname[l++] = '.'; fname[l] = '\0'; } @@ -1130,7 +1130,7 @@ struct file_list *send_file_list(int f, int argc, char *argv[]) } else if (l > 1 && fname[l-1] == '.' && fname[l-2] == '.' && (l == 2 || fname[l-3] == '/')) { if (l + 2 >= MAXPATHLEN) - overflow("send_file_list"); + overflow_exit("send_file_list"); fname[l++] = '/'; fname[l++] = '.'; fname[l] = '\0'; @@ -1471,8 +1471,12 @@ static void clean_flist(struct file_list *flist, int strip_root, int no_dups) { int i, prev_i = 0; - if (!flist || flist->count == 0) + if (!flist) + return; + if (flist->count == 0) { + flist->high = -1; return; + } sorting_flist = flist; qsort(flist->files, flist->count, @@ -1524,9 +1528,8 @@ static void clean_flist(struct file_list *flist, int strip_root, int no_dups) } /* Make sure that if we unduplicate '.', that we don't * lose track of a user-specified top directory. */ - j = flist->files[drop]->flags & (FLAG_TOP_DIR|FLAG_DEL_HERE); - if (j) - flist->files[keep]->flags |= j; + flist->files[keep]->flags |= flist->files[drop]->flags + & (FLAG_TOP_DIR|FLAG_DEL_HERE); clear_file(drop, flist);