}
if (!r->header_only) {
- /* XXX: APR_HAS_LARGE_FILES issue; need to split into mutiple send_fd
- * chunks, no greater than MAX(apr_size_t).
- */
- ap_send_fd(f, r, 0, r->finfo.size, &nbytes);
+ apr_off_t start = 0;
+ apr_off_t fsize = r->finfo.size;
+#ifdef APR_HAS_LARGE_FILES
+ /* must split into mutiple send_fd chunks */
+ while (fsize > AP_MAX_SENDFILE) {
+ ap_send_fd(f, r, start, AP_MAX_SENDFILE, &nbytes);
+ start += AP_MAX_SENDFILE;
+ fsize -= AP_MAX_SENDFILE;
+ }
+#endif
+ ap_send_fd(f, r, start, (apr_size_t)fsize, &nbytes);
}
apr_file_close(f);