diff --git a/lib/Bytecode/Archive/ArchiveReader.cpp b/lib/Bytecode/Archive/ArchiveReader.cpp
index b147cb3..35bbbb9 100644
--- a/lib/Bytecode/Archive/ArchiveReader.cpp
+++ b/lib/Bytecode/Archive/ArchiveReader.cpp
@@ -18,7 +18,7 @@
 
 #include "llvm/Bytecode/Reader.h"
 #include "llvm/Module.h"
-#include "Config/sys/stat.h"
+#include "Support/FileUtilities.h"
 #include "Config/sys/mman.h"
 #include "Config/fcntl.h"
 #include <cstdlib>
@@ -164,17 +164,15 @@
 //
 bool ReadArchiveFile(const std::string &Filename, std::vector<Module*> &Objects,
                      std::string *ErrorStr) {
+  int Length = getFileSize(Filename);
+  if (Length == -1)
+    return Error(ErrorStr, "Error getting file length!");
+
   int FD = open(Filename.c_str(), O_RDONLY);
   if (FD == -1)
     return Error(ErrorStr, "Error opening file!");
   
-  // Stat the file to get its length...
-  struct stat StatBuf;
-  if (fstat(FD, &StatBuf) == -1 || StatBuf.st_size == 0)
-    return Error(ErrorStr, "Error stat'ing file!");
-  
     // mmap in the file all at once...
-  int Length = StatBuf.st_size;
   unsigned char *Buffer = (unsigned char*)mmap(0, Length, PROT_READ, 
                                                MAP_PRIVATE, FD, 0);
   if (Buffer == (unsigned char*)MAP_FAILED)
diff --git a/lib/Bytecode/Reader/ArchiveReader.cpp b/lib/Bytecode/Reader/ArchiveReader.cpp
index b147cb3..35bbbb9 100644
--- a/lib/Bytecode/Reader/ArchiveReader.cpp
+++ b/lib/Bytecode/Reader/ArchiveReader.cpp
@@ -18,7 +18,7 @@
 
 #include "llvm/Bytecode/Reader.h"
 #include "llvm/Module.h"
-#include "Config/sys/stat.h"
+#include "Support/FileUtilities.h"
 #include "Config/sys/mman.h"
 #include "Config/fcntl.h"
 #include <cstdlib>
@@ -164,17 +164,15 @@
 //
 bool ReadArchiveFile(const std::string &Filename, std::vector<Module*> &Objects,
                      std::string *ErrorStr) {
+  int Length = getFileSize(Filename);
+  if (Length == -1)
+    return Error(ErrorStr, "Error getting file length!");
+
   int FD = open(Filename.c_str(), O_RDONLY);
   if (FD == -1)
     return Error(ErrorStr, "Error opening file!");
   
-  // Stat the file to get its length...
-  struct stat StatBuf;
-  if (fstat(FD, &StatBuf) == -1 || StatBuf.st_size == 0)
-    return Error(ErrorStr, "Error stat'ing file!");
-  
     // mmap in the file all at once...
-  int Length = StatBuf.st_size;
   unsigned char *Buffer = (unsigned char*)mmap(0, Length, PROT_READ, 
                                                MAP_PRIVATE, FD, 0);
   if (Buffer == (unsigned char*)MAP_FAILED)
diff --git a/lib/Bytecode/Reader/ReaderWrappers.cpp b/lib/Bytecode/Reader/ReaderWrappers.cpp
index bc3cbbd..ef5e70d 100644
--- a/lib/Bytecode/Reader/ReaderWrappers.cpp
+++ b/lib/Bytecode/Reader/ReaderWrappers.cpp
@@ -21,7 +21,6 @@
 #include "Config/fcntl.h"
 #include "Config/unistd.h"
 #include "Config/sys/mman.h"
-#include <sys/stat.h>
 #include <cerrno>
 using namespace llvm;
 
@@ -51,17 +50,15 @@
 }
 
 BytecodeFileReader::BytecodeFileReader(const std::string &Filename) {
+  Length = getFileSize(Filename);
+  if (Length == -1)
+    throw ErrnoMessage(errno, "stat '" + Filename + "'");
+
   FDHandle FD(open(Filename.c_str(), O_RDONLY));
   if (FD == -1)
     throw ErrnoMessage(errno, "open '" + Filename + "'");
 
-  // Stat the file to get its length...
-  struct stat StatBuf;
-  if (fstat(FD, &StatBuf) == -1 || StatBuf.st_size == 0)
-    throw ErrnoMessage(errno, "stat '" + Filename + "'");
-
   // mmap in the file all at once...
-  Length = StatBuf.st_size;
   Buffer = (unsigned char*)mmap(0, Length, PROT_READ, MAP_PRIVATE, FD, 0);
 
   if (Buffer == (unsigned char*)MAP_FAILED)
