From f76994f1fb3e25c4563c9d8afce6bbc86701d1d2 Mon Sep 17 00:00:00 2001 From: "B. Stack" Date: Tue, 20 Jun 2023 07:46:53 -0400 Subject: add upstream 12.4 --- zen/serialize.h | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) (limited to 'zen/serialize.h') diff --git a/zen/serialize.h b/zen/serialize.h index 8ccecd53..02dcd2b2 100644 --- a/zen/serialize.h +++ b/zen/serialize.h @@ -261,11 +261,21 @@ BinContainer unbufferedLoad(Function tryRead /*(void* buffer, size_t bytesToRead BinContainer buf; for (;;) { - warn_static("don't need zero-initialization!") - buf.resize(buf.size() + blockSize); +#ifndef ZEN_HAVE_RESIZE_AND_OVERWRITE +#error include legacy_compiler.h! +#endif +#if ZEN_HAVE_RESIZE_AND_OVERWRITE //permature(?) perf optimization; avoid needless zero-initialization: + size_t bytesRead = 0; + buf.resize_and_overwrite(buf.size() + blockSize, [&, bufSizeOld = buf.size()](char* rawBuf, size_t /*rawBufSize: caveat: may be larger than what's requested*/) + { + bytesRead = tryRead(rawBuf + bufSizeOld, blockSize); //throw X; may return short; only 0 means EOF + return bufSizeOld + bytesRead; + }); +#else + buf.resize(buf.size() + blockSize); //needless zero-initialization! const size_t bytesRead = tryRead(buf.data() + buf.size() - blockSize, blockSize); //throw X; may return short; only 0 means EOF buf.resize(buf.size() - blockSize + bytesRead); //caveat: unsigned arithmetics - +#endif if (bytesRead == 0) //end of file { //caveat: memory consumption of returned string! -- cgit