+ if (iflags & ITEM_HARD_LINKED)
+ len = read_vstring(f_in, buf, MAXPATHLEN);
+ else {
+ *buf = '\0';
+ len = -1;
+ }
+
+ /* XXX Temporary backward compatibility when talking to 2.6.4pre[12] */
+ if (protocol_version >= 29 && iflags & ITEM_TRANSFER
+ && !S_ISREG(the_file_list->files[ndx]->mode)) {
+ iflags &= ~ITEM_TRANSFER;
+ iflags |= ITEM_LOCAL_CHANGE;
+ }
+
+ if (iflags & ITEM_TRANSFER) {
+ if (!S_ISREG(the_file_list->files[ndx]->mode)) {
+ rprintf(FERROR,
+ "received index of non-regular file: %d [%s]\n",
+ ndx, who_am_i());
+ exit_cleanup(RERR_PROTOCOL);
+ }
+ } else if (f_out >= 0) {
+ write_int(f_out, ndx);
+ write_shortint(f_out, isave /*XXX iflags */);
+ if (len >= 0)
+ write_vstring(f_out, buf, len);
+ }
+
+ return iflags;
+}
+
+void send_files(struct file_list *flist, int f_out, int f_in)
+{
+ int fd = -1;