+ if (iflags & ITEM_BASIS_TYPE_FOLLOWS)
+ fnamecmp_type = read_byte(f_in);
+ *type_ptr = fnamecmp_type;
+
+ if (iflags & ITEM_XNAME_FOLLOWS) {
+ if ((len = read_vstring(f_in, buf, MAXPATHLEN)) < 0)
+ exit_cleanup(RERR_PROTOCOL);
+ } else {
+ *buf = '\0';
+ len = -1;
+ }
+ *len_ptr = len;
+
+ /* XXX Temporary rejection of 2.6.4pre1 & pre2 */
+ if (iflags & ITEM_DUMMY_BIT) {
+ extern int am_sender;
+ if (!am_sender || !(iflags & (ITEM_LOCAL_CHANGE|ITEM_TRANSFER))) {
+ rprintf(FERROR,
+ "Incompatible 2.6.4 pre-release on %s -- upgrade it or use --protocol=28!\n",
+ am_sender ? "receiver" : "sender");
+ exit_cleanup(RERR_PROTOCOL);
+ }
+ iflags &= ~ITEM_DUMMY_BIT;
+ } /* XXX */
+
+ if (iflags & ITEM_TRANSFER) {
+ if (!S_ISREG(the_file_list->files[ndx]->mode)) {
+ rprintf(FERROR,
+ "received request to transfer non-regular file: %d [%s]\n",
+ ndx, who_am_i());
+ exit_cleanup(RERR_PROTOCOL);
+ }
+ } else if (f_out >= 0) {
+ write_ndx_and_attrs(f_out, ndx, iflags,
+ fnamecmp_type, buf, len);