diff --git a/lib/Archive/ArchiveReader.cpp b/lib/Archive/ArchiveReader.cpp
index b147cb3..35bbbb9 100644
--- a/lib/Archive/ArchiveReader.cpp
+++ b/lib/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/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)
