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)) {