diff --git a/download_action.cc b/download_action.cc
index 5b3ffeb..6871f60 100644
--- a/download_action.cc
+++ b/download_action.cc
@@ -117,15 +117,15 @@
   //  1. the p2p file didn't get properly synced to stable storage; or
   //  2. the file was deleted at bootup (it's in /var/cache after all); or
   //  3. other reasons
-  struct stat statbuf;
-  if (fstat(p2p_sharing_fd_, &statbuf) != 0) {
+  off_t p2p_size = utils::FileSize(p2p_sharing_fd_);
+  if (p2p_size < 0) {
     PLOG(ERROR) << "Error getting file status for p2p file";
     CloseP2PSharingFd(true);  // Delete p2p file.
     return;
   }
-  if (statbuf.st_size < file_offset) {
+  if (p2p_size < file_offset) {
     LOG(ERROR) << "Wanting to write to file offset " << file_offset
-               << " but existing p2p file is only " << statbuf.st_size
+               << " but existing p2p file is only " << p2p_size
                << " bytes.";
     CloseP2PSharingFd(true);  // Delete p2p file.
     return;
diff --git a/extent_writer_unittest.cc b/extent_writer_unittest.cc
index fef3343..a1b254d 100644
--- a/extent_writer_unittest.cc
+++ b/extent_writer_unittest.cc
@@ -70,9 +70,7 @@
   EXPECT_TRUE(direct_writer.Write(bytes.data(), bytes.size()));
   EXPECT_TRUE(direct_writer.End());
 
-  struct stat stbuf;
-  EXPECT_EQ(0, fstat(fd(), &stbuf));
-  EXPECT_EQ(kBlockSize + bytes.size(), stbuf.st_size);
+  EXPECT_EQ(kBlockSize + bytes.size(), utils::FileSize(fd()));
 
   vector<char> result_file;
   EXPECT_TRUE(utils::ReadFile(path(), &result_file));
@@ -139,9 +137,7 @@
   }
   EXPECT_TRUE(direct_writer.End());
 
-  struct stat stbuf;
-  EXPECT_EQ(0, fstat(fd(), &stbuf));
-  EXPECT_EQ(data.size(), stbuf.st_size);
+  EXPECT_EQ(data.size(), utils::FileSize(fd()));
 
   vector<char> result_file;
   EXPECT_TRUE(utils::ReadFile(path(), &result_file));
@@ -190,9 +186,7 @@
   ASSERT_TRUE(zero_pad_writer.Write(&data[0], bytes_to_write));
   EXPECT_TRUE(zero_pad_writer.End());
 
-  struct stat stbuf;
-  EXPECT_EQ(0, fstat(fd(), &stbuf));
-  EXPECT_EQ(data.size(), stbuf.st_size);
+  EXPECT_EQ(data.size(), utils::FileSize(fd()));
 
   vector<char> result_file;
   EXPECT_TRUE(utils::ReadFile(path(), &result_file));
diff --git a/p2p_manager.cc b/p2p_manager.cc
index 5039747..8c48601 100644
--- a/p2p_manager.cc
+++ b/p2p_manager.cc
@@ -693,13 +693,7 @@
   if (path.empty())
     return -1;
 
-  struct stat statbuf;
-  if (stat(path.value().c_str(), &statbuf) != 0) {
-    PLOG(ERROR) << "Error getting file status for " << path.value();
-    return -1;
-  }
-
-  return statbuf.st_size;
+  return utils::FileSize(path.value());
 }
 
 ssize_t P2PManagerImpl::FileGetExpectedSize(const string& file_id) {
diff --git a/p2p_manager_unittest.cc b/p2p_manager_unittest.cc
index 56ba33b..456c8ad 100644
--- a/p2p_manager_unittest.cc
+++ b/p2p_manager_unittest.cc
@@ -208,19 +208,19 @@
 static bool CheckP2PFile(const string& p2p_dir, const string& file_name,
                          ssize_t expected_size, ssize_t expected_size_xattr) {
   string path = p2p_dir + "/" + file_name;
-  struct stat statbuf;
   char ea_value[64] = { 0 };
   ssize_t ea_size;
 
-  if (stat(path.c_str(), &statbuf) != 0) {
+  off_t p2p_size = utils::FileSize(path);
+  if (p2p_size < 0) {
     LOG(ERROR) << "File " << path << " does not exist";
     return false;
   }
 
   if (expected_size != 0) {
-    if (statbuf.st_size != expected_size) {
+    if (p2p_size != expected_size) {
       LOG(ERROR) << "Expected size " << expected_size
-                 << " but size was " << statbuf.st_size;
+                 << " but size was " << p2p_size;
       return false;
     }
   }
diff --git a/payload_generator/delta_diff_generator.cc b/payload_generator/delta_diff_generator.cc
index 3b8f718..ee5a79b 100644
--- a/payload_generator/delta_diff_generator.cc
+++ b/payload_generator/delta_diff_generator.cc
@@ -208,7 +208,7 @@
     if (utils::SetContainsKey(visited_inodes, fs_iter.GetStat().st_ino))
       continue;
     visited_inodes.insert(fs_iter.GetStat().st_ino);
-    off_t dst_size = fs_iter.GetStat().st_size;
+    off_t dst_size = fs_iter.GetFileSize();
     if (dst_size == 0)
       continue;
 
@@ -702,11 +702,11 @@
   }
 
   // Do we have an original file to consider?
-  struct stat old_stbuf;
+  off_t old_size = 0;
   bool original = !old_filename.empty();
-  if (original && 0 != stat(old_filename.c_str(), &old_stbuf)) {
+  if (original && (old_size = utils::FileSize(old_filename)) < 0) {
     // If stat-ing the old file fails, it should be because it doesn't exist.
-    TEST_AND_RETURN_FALSE(errno == ENOTDIR || errno == ENOENT);
+    TEST_AND_RETURN_FALSE(!utils::FileExists(old_filename.c_str()));
     original = false;
   }
 
@@ -764,8 +764,7 @@
     } else {
       Extent* src_extent = operation.add_src_extents();
       src_extent->set_start_block(0);
-      src_extent->set_num_blocks(
-          (old_stbuf.st_size + kBlockSize - 1) / kBlockSize);
+      src_extent->set_num_blocks((old_size + kBlockSize - 1) / kBlockSize);
     }
     operation.set_src_length(old_data.size());
   }
diff --git a/payload_generator/extent_mapper.cc b/payload_generator/extent_mapper.cc
index ace463f..5e363c7 100644
--- a/payload_generator/extent_mapper.cc
+++ b/payload_generator/extent_mapper.cc
@@ -49,13 +49,12 @@
   ScopedFdCloser fd_closer(&fd);
 
   // Get file size in blocks
-  rc = fstat(fd, &stbuf);
-  if (rc < 0) {
-    perror("fstat");
+  off_t file_size = utils::FileSize(fd);
+  if (file_size < 0) {
     return false;
   }
-  CHECK_LE(chunk_offset, stbuf.st_size);
-  off_t size = stbuf.st_size - chunk_offset;
+  CHECK_LE(chunk_offset, file_size);
+  off_t size = file_size - chunk_offset;
   if (chunk_size != -1) {
     size = std::min(size, chunk_size);
   }
diff --git a/payload_generator/extent_mapper_unittest.cc b/payload_generator/extent_mapper_unittest.cc
index f56cca0..3e87cdc 100644
--- a/payload_generator/extent_mapper_unittest.cc
+++ b/payload_generator/extent_mapper_unittest.cc
@@ -54,9 +54,9 @@
     }
   }
 
-  struct stat stbuf;
-  EXPECT_EQ(0, stat(kFilename.c_str(), &stbuf));
-  EXPECT_EQ(blocks.size(), (stbuf.st_size + block_size - 1)/block_size);
+  off_t file_size = utils::FileSize(kFilename);
+  EXPECT_GT(file_size, 0);
+  EXPECT_EQ(blocks.size(), (file_size + block_size - 1)/block_size);
 
   // Map a 2-block chunk at offset |block_size|.
   vector<Extent> chunk_extents;
diff --git a/payload_generator/filesystem_iterator.cc b/payload_generator/filesystem_iterator.cc
index b7455fa..edede08 100644
--- a/payload_generator/filesystem_iterator.cc
+++ b/payload_generator/filesystem_iterator.cc
@@ -56,6 +56,11 @@
   }
 }
 
+// Returns the size of the current file
+off_t FilesystemIterator::GetFileSize() const {
+  return utils::FileSize(GetFullPath());
+}
+
 // Returns full path for current file
 std::string FilesystemIterator::GetFullPath() const {
   return root_path_ + GetPartialPath();
diff --git a/payload_generator/filesystem_iterator.h b/payload_generator/filesystem_iterator.h
index 7df250f..8248479 100644
--- a/payload_generator/filesystem_iterator.h
+++ b/payload_generator/filesystem_iterator.h
@@ -47,6 +47,9 @@
     return stbuf_;
   }
 
+  // Returns the size of the current file.
+  off_t GetFileSize() const;
+
   // Returns full path for current file.
   std::string GetFullPath() const;
 
