summaryrefslogtreecommitdiffstatshomepage
path: root/src/tools/srcclean.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools/srcclean.cpp')
-rw-r--r--src/tools/srcclean.cpp19
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)
{