Move arrays to heap, to reduce stack usage

I keep hitting stack issues on Windows. Let's just start by reducing the
stack by quite a bit.
This commit is contained in:
Brian McKenna 2024-11-15 11:00:00 +11:00
parent 2cb0ddfe4e
commit 4fb4afa5b0
3 changed files with 10 additions and 10 deletions

View File

@ -142,14 +142,14 @@ static void parseContents(CreateRegularFileSink & sink, Source & source)
sink.preallocateContents(size);
uint64_t left = size;
std::array<char, 65536> buf;
auto buf = std::make_unique<std::array<char, 65536>>();
while (left) {
checkInterrupt();
auto n = buf.size();
auto n = buf->size();
if ((uint64_t)n > left) n = left;
source(buf.data(), n);
sink({buf.data(), n});
source(buf->data(), n);
sink({buf->data(), n});
left -= n;
}

View File

@ -299,13 +299,13 @@ void writeFile(const Path & path, Source & source, mode_t mode, bool sync)
if (!fd)
throw SysError("opening file '%1%'", path);
std::array<char, 64 * 1024> buf;
auto buf = std::make_unique<std::array<char, 64 * 1024>>();
try {
while (true) {
try {
auto n = source.read(buf.data(), buf.size());
writeFull(fd.get(), {buf.data(), n});
auto n = source.read(buf->data(), buf->size());
writeFull(fd.get(), {buf->data(), n});
} catch (EndOfFile &) { break; }
}
} catch (Error & e) {

View File

@ -64,10 +64,10 @@ void PosixSourceAccessor::readFile(
off_t left = st.st_size;
std::array<unsigned char, 64 * 1024> buf;
auto buf = std::make_unique<std::array<unsigned char, 64 * 1024>>();
while (left) {
checkInterrupt();
ssize_t rd = read(fromDescriptorReadOnly(fd.get()), buf.data(), (size_t) std::min(left, (off_t) buf.size()));
ssize_t rd = read(fromDescriptorReadOnly(fd.get()), buf->data(), (size_t) std::min(left, (off_t) buf->size()));
if (rd == -1) {
if (errno != EINTR)
throw SysError("reading from file '%s'", showPath(path));
@ -76,7 +76,7 @@ void PosixSourceAccessor::readFile(
throw SysError("unexpected end-of-file reading '%s'", showPath(path));
else {
assert(rd <= left);
sink({(char *) buf.data(), (size_t) rd});
sink({(char *) buf->data(), (size_t) rd});
left -= rd;
}
}