diff options
Diffstat (limited to 'src/tools/srcclean.cpp')
-rw-r--r-- | src/tools/srcclean.cpp | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/src/tools/srcclean.cpp b/src/tools/srcclean.cpp index d5429ae4823..63809b57f1e 100644 --- a/src/tools/srcclean.cpp +++ b/src/tools/srcclean.cpp @@ -2305,11 +2305,22 @@ int main(int argc, char *argv[]) ++failures; continue; } - std::size_t block; - while (remaining && !infile->read(original, (std::min)(std::uint64_t(sizeof(original)), remaining), block) && block) + while (remaining) { - remaining -= block; - cleaner->process(original, original + block); + std::size_t block((std::min)(std::uint64_t(sizeof(original)), remaining)); + std::size_t actual; + std::error_condition const readerr(infile->read_some(original, block, actual)); + if (readerr) + { + if (std::errc::interrupted != readerr) + break; + } + else if (!actual) + { + break; + } + remaining -= actual; + cleaner->process(original, original + actual); } if (remaining) { |