From 196de029044f4dbac5f74f68e08a89f778c3a236 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Sun, 23 Dec 2018 21:38:44 +0000 Subject: Be a bit more careful with fwrite. --- src/lib/util.cc | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'src/lib/util.cc') diff --git a/src/lib/util.cc b/src/lib/util.cc index 5eba8d73a..595c7e76e 100644 --- a/src/lib/util.cc +++ b/src/lib/util.cc @@ -783,14 +783,31 @@ increment_eyes (Eyes e) return EYES_LEFT; } +void +checked_fwrite (void const * ptr, size_t size, FILE* stream, boost::filesystem::path path) +{ + size_t N = fwrite (ptr, 1, size, stream); + if (N != size) { + if (ferror(stream)) { + fclose (stream); + throw FileError (String::compose("fwrite error %1", errno), path); + } else { + fclose (stream); + throw FileError ("Unexpected short write", path); + } + } +} + void checked_fread (void* ptr, size_t size, FILE* stream, boost::filesystem::path path) { size_t N = fread (ptr, 1, size, stream); if (N != size) { if (ferror(stream)) { + fclose (stream); throw FileError (String::compose("fread error %1", errno), path); } else { + fclose (stream); throw FileError ("Unexpected short read", path); } } -- cgit v1.2.3