- LOG(log_maxdebug, logtype_dsi, "dsi_stream_read_file: sending %u bytes", length);
+ LOG(log_maxdebug, logtype_dsi, "dsi_stream_read_file(off: %jd, len: %zu)", (intmax_t)offset, length);
+
+ if (dsi->flags & DSI_DISCONNECTED)
+ return -1;
+
+ dsi->in_write++;
+
+ dsi->flags |= DSI_NOREPLY;
+ dsi->header.dsi_flags = DSIFL_REPLY;
+ dsi->header.dsi_len = htonl(length);
+ dsi->header.dsi_code = htonl(err);
+ dsi_header_pack_reply(dsi, block);
+
+#ifdef HAVE_SENDFILEV
+ total += DSI_BLOCKSIZ;
+ sfvcnt = 2;
+ vec[0].sfv_fd = SFV_FD_SELF;
+ vec[0].sfv_flag = 0;
+ /* Cast to unsigned long to prevent sign extension of the
+ * pointer value for the LFS case; see Apache PR 39463. */
+ vec[0].sfv_off = (unsigned long)block;
+ vec[0].sfv_len = DSI_BLOCKSIZ;
+ vec[1].sfv_fd = fromfd;
+ vec[1].sfv_flag = 0;
+ vec[1].sfv_off = offset;
+ vec[1].sfv_len = length;
+#else
+ dsi_stream_write(dsi, block, sizeof(block), DSI_MSG_MORE);
+#endif