update_engine: Fix PReadAll and PWriteAll to be able to seek to 0.
Currently, we cannot Seek to 0 in a file in PReadAll/PWriteAll.
Seek returns the offset seeked if successful, so if the offset is
zero, this is cast to False in PRead/WriteAll and returns an error.
BUG=chromium:480751
TEST=`cros flash` image to itself, unit tests.
Change-Id: I1f49784256acd4e8309abf4ec3b30aae39d71ff6
Reviewed-on: https://chromium-review.googlesource.com/266983
Reviewed-by: Alex Deymo <deymo@chromium.org>
Commit-Queue: Allie Wood <alliewood@chromium.org>
Trybot-Ready: Allie Wood <alliewood@chromium.org>
Tested-by: Allie Wood <alliewood@chromium.org>
diff --git a/utils.cc b/utils.cc
index 31b25af..b1e903c 100644
--- a/utils.cc
+++ b/utils.cc
@@ -217,7 +217,8 @@
const void* buf,
size_t count,
off_t offset) {
- TEST_AND_RETURN_FALSE_ERRNO(fd->Seek(offset, SEEK_SET));
+ TEST_AND_RETURN_FALSE_ERRNO(fd->Seek(offset, SEEK_SET) !=
+ static_cast<off_t>(-1));
return WriteAll(fd, buf, count);
}
@@ -240,7 +241,8 @@
bool PReadAll(FileDescriptorPtr fd, void* buf, size_t count, off_t offset,
ssize_t* out_bytes_read) {
- TEST_AND_RETURN_FALSE_ERRNO(fd->Seek(offset, SEEK_SET));
+ TEST_AND_RETURN_FALSE_ERRNO(fd->Seek(offset, SEEK_SET) !=
+ static_cast<off_t>(-1));
char* c_buf = static_cast<char*>(buf);
ssize_t bytes_read = 0;
while (bytes_read < static_cast<ssize_t>(count)) {