}
if (!(flist = flist_for_ndx(ndx))) {
+ int start, used;
invalid_ndx:
+ start = first_flist ? first_flist->ndx_start : 0;
+ used = first_flist ? first_flist->used : 0;
rprintf(FERROR,
"Invalid file index: %d (%d - %d) with iflags %x [%s]\n",
- ndx, first_flist ? first_flist->ndx_start - 1 : -1,
- first_flist ? first_flist->prev->ndx_end : -1,
- iflags, who_am_i());
+ ndx, start - 1, start + used -1, iflags, who_am_i());
exit_cleanup(RERR_PROTOCOL);
}
cur_flist = flist;
#endif
#ifdef SUPPORT_XATTRS
- if (preserve_xattrs && fnamecmp)
- set_xattr(fname, file, fnamecmp, sxp);
if (am_root < 0)
set_stat_xattr(fname, file, new_mode);
+ if (preserve_xattrs && fnamecmp)
+ set_xattr(fname, file, fnamecmp, sxp);
#endif
if (!preserve_times || (S_ISDIR(sxp->st.st_mode) && preserve_times == 1))
return NULL;
flist = flist->prev;
}
- while (ndx > flist->ndx_end) {
+ while (ndx >= flist->ndx_start + flist->used) {
if (!(flist = flist->next))
return NULL;
}