+ return 1;
+}
+
+static void send_file_entry(int f, struct file_struct *file, int ndx)
+{
+ static time_t modtime;
+ static mode_t mode;
+ static int64 dev;
+ static dev_t rdev;
+ static uint32 rdev_major;
+ static uid_t uid;
+ static gid_t gid;
+ static char *user_name, *group_name;
+ static char lastname[MAXPATHLEN];
+ char fname[MAXPATHLEN];
+ int first_hlink_ndx = -1;
+ int l1, l2;
+ int flags;
+
+ f_name(file, fname);
+
+ flags = file->flags & FLAG_TOP_DIR; /* FLAG_TOP_DIR == XMIT_TOP_DIR */
+
+ if (file->mode == mode)
+ flags |= XMIT_SAME_MODE;
+ else
+ mode = file->mode;
+ if ((preserve_devices && IS_DEVICE(mode))
+ || (preserve_specials && IS_SPECIAL(mode))) {
+ if (protocol_version < 28) {
+ if (tmp_rdev == rdev)
+ flags |= XMIT_SAME_RDEV_pre28;
+ else
+ rdev = tmp_rdev;
+ } else {
+ rdev = tmp_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;
+ }
+ } else if (protocol_version < 28)
+ rdev = MAKEDEV(0, 0);
+ if (preserve_uid) {
+ if (F_UID(file) == uid && *lastname)
+ flags |= XMIT_SAME_UID;
+ else {
+ uid = F_UID(file);
+ if (preserve_uid && !numeric_ids) {
+ user_name = add_uid(uid);
+ if (inc_recurse && user_name)
+ flags |= XMIT_USER_NAME_FOLLOWS;
+ }
+ }
+ }
+ if (preserve_gid) {
+ if (F_GID(file) == gid && *lastname)
+ flags |= XMIT_SAME_GID;
+ else {
+ gid = F_GID(file);
+ if (preserve_gid && !numeric_ids) {
+ group_name = add_gid(gid);
+ if (inc_recurse && group_name)
+ flags |= XMIT_GROUP_NAME_FOLLOWS;
+ }
+ }
+ }
+ if (file->modtime == modtime)
+ flags |= XMIT_SAME_TIME;
+ else
+ modtime = file->modtime;
+
+#ifdef SUPPORT_HARD_LINKS
+ if (tmp_dev != 0) {
+ if (protocol_version >= 30) {
+ struct idev_node *np = idev_node(tmp_dev, tmp_ino);
+ first_hlink_ndx = (int32)(long)np->data - 1;
+ if (first_hlink_ndx < 0) {
+ np->data = (void*)(long)(ndx + 1);
+ flags |= XMIT_HLINK_FIRST;
+ }
+ flags |= XMIT_HLINKED;
+ } else {
+ if (tmp_dev == dev) {
+ if (protocol_version >= 28)
+ flags |= XMIT_SAME_DEV_pre30;
+ } else
+ dev = tmp_dev;
+ flags |= XMIT_HLINKED;
+ }
+ }
+#endif