- if (file->mode == last_mode)
- flags |= SAME_MODE;
- if (file->rdev == last_rdev)
- flags |= SAME_RDEV;
- if (file->uid == last_uid)
- flags |= SAME_UID;
- if (file->gid == last_gid)
- flags |= SAME_GID;
- if (file->modtime == last_time)
- flags |= SAME_TIME;
+ if (file->mode == mode)
+ flags |= XMIT_SAME_MODE;
+ else
+ mode = file->mode;
+ if (preserve_devices) {
+ if (protocol_version < 28) {
+ if (IS_DEVICE(mode)) {
+ if (file->u.rdev == rdev)
+ flags |= XMIT_SAME_RDEV_pre28;
+ else
+ rdev = file->u.rdev;
+ } else
+ rdev = makedev(0, 0);
+ } else if (IS_DEVICE(mode)) {
+ rdev = file->u.rdev;
+ if ((uint32)major(rdev) == rdev_major)
+ flags |= XMIT_SAME_RDEV_MAJOR;
+ else
+ rdev_major = major(rdev);
+ if ((uint32)minor(rdev) <= 0xFFu)
+ flags |= XMIT_RDEV_MINOR_IS_SMALL;
+ }
+ }
+ if (file->uid == uid)
+ flags |= XMIT_SAME_UID;
+ else
+ uid = file->uid;
+ if (file->gid == gid)
+ flags |= XMIT_SAME_GID;
+ else
+ gid = file->gid;
+ if (file->modtime == modtime)
+ flags |= XMIT_SAME_TIME;
+ else
+ modtime = file->modtime;
+
+#if SUPPORT_HARD_LINKS
+ if (file->link_u.idev) {
+ if (file->F_DEV == dev) {
+ if (protocol_version >= 28)
+ flags |= XMIT_SAME_DEV;
+ } else
+ dev = file->F_DEV;
+ flags |= XMIT_HAS_IDEV_DATA;
+ }
+#endif