sfvcnt = 2;
vec[0].sfv_fd = SFV_FD_SELF;
vec[0].sfv_flag = 0;
- vec[0].sfv_off = block;
+ /* 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;
switch (errno) {
case EINTR:
case EAGAIN:
-#if defined(SOLARIS) || defined(FREEBSD)
+ len = 0;
#ifdef HAVE_SENDFILEV
len = (size_t)nwritten;
#else
+#if defined(SOLARIS) || defined(FREEBSD)
if (pos > offset) {
/* we actually have sent sth., adjust counters and keep trying */
len = pos - offset;
- written += len;
offset = pos;
}
-#endif /* HAVE_SENDFILEV */
#endif /* defined(SOLARIS) || defined(FREEBSD) */
- if (dsi_peek(dsi)) {
+#endif /* HAVE_SENDFILEV */
+
+ if (dsi_peek(dsi) != 0) {
ret = -1;
goto exit;
}
vec[0].sfv_len -= len;
}
#endif /* HAVE_SENDFILEV */
-
+ LOG(log_maxdebug, logtype_dsi, "dsi_stream_read_file: wrote: %zd", len);
written += len;
}
#ifdef HAVE_SENDFILEV
break;
else if (len < 0) { /* error */
if (errno == EAGAIN || errno == EWOULDBLOCK) {
- if (!dsi_peek(dsi)) {
+ if (dsi_peek(dsi) == 0) {
continue;
}
}
dsi->clientID = ntohs(dsi->header.dsi_requestID);
/* make sure we don't over-write our buffers. */
- dsi->cmdlen = MIN(ntohl(dsi->header.dsi_len), DSI_CMDSIZ);
+ dsi->cmdlen = MIN(ntohl(dsi->header.dsi_len), dsi->server_quantum);
if (dsi_stream_read(dsi, dsi->commands, dsi->cmdlen) != dsi->cmdlen)
return 0;