| 3535 | |
| 3536 | template <typename T> |
| 3537 | inline bool |
| 3538 | write_content_without_length(Stream &strm, |
| 3539 | const ContentProvider &content_provider, |
| 3540 | const T &is_shutting_down) { |
| 3541 | size_t offset = 0; |
| 3542 | auto data_available = true; |
| 3543 | auto ok = true; |
| 3544 | DataSink data_sink; |
| 3545 | |
| 3546 | data_sink.write = [&](const char *d, size_t l) -> bool { |
| 3547 | if (ok) { |
| 3548 | offset += l; |
| 3549 | if (!write_data(strm, d, l)) { ok = false; } |
| 3550 | } |
| 3551 | return ok; |
| 3552 | }; |
| 3553 | |
| 3554 | data_sink.done = [&](void) { data_available = false; }; |
| 3555 | |
| 3556 | data_sink.is_writable = [&](void) { return ok && strm.is_writable(); }; |
| 3557 | |
| 3558 | while (data_available && !is_shutting_down()) { |
| 3559 | if (!content_provider(offset, 0, data_sink)) { return false; } |
| 3560 | if (!ok) { return false; } |
| 3561 | } |
| 3562 | return true; |
| 3563 | } |
| 3564 | |
| 3565 | template <typename T, typename U> |
| 3566 | inline bool |
no test coverage detected