+/* This is also used by receive.c with f_out = -1. */
+int read_iflags(int f_in, int f_out, int ndx, char *buf)
+{
+ int iflags = protocol_version >= 29 ? read_shortint(f_in)
+ : ITEM_UPDATING | ITEM_MISSING_DATA;
+
+ /* Handle the new keep-alive (no-op) packet. */
+ if (ndx == the_file_list->count && iflags == ITEM_IS_NEW)
+ ;
+ else if (ndx < 0 || ndx >= the_file_list->count) {
+ rprintf(FERROR, "Invalid file index %d (count=%d) [%s]\n",
+ ndx, the_file_list->count, who_am_i());
+ exit_cleanup(RERR_PROTOCOL);
+ } else if (iflags == ITEM_IS_NEW) {
+ rprintf(FERROR, "Invalid itemized flag word [%s]\n",
+ who_am_i());
+ exit_cleanup(RERR_PROTOCOL);
+ }
+
+ *buf = '\0';
+
+ if ((!(iflags & ITEM_UPDATING) || !S_ISREG(the_file_list->files[ndx]->mode)) && f_out >= 0) {
+ write_int(f_out, ndx);
+ write_shortint(f_out, iflags);
+ }
+
+ return iflags;
+}
+