- if (statret != 0 ||
- st.st_mode != file->mode ||
- st.st_rdev != file->u.rdev) {
- if (delete_item(fname, st.st_mode, DEL_TERSE) < 0)
+ if (statret != 0
+ || (st.st_mode & ~CHMOD_BITS) != (file->mode & ~CHMOD_BITS)
+ || st.st_rdev != file->u.rdev) {
+ if (statret == 0
+ && delete_item(fname, st.st_mode, DEL_TERSE) < 0)
+ return;
+ if (preserve_hard_links && file->link_u.links
+ && hard_link_check(file, ndx, fname, -1, &st,
+ itemizing, code, HL_SKIP))