Index: lib/Bitcode/Reader/BitcodeStream.cpp |
diff --git a/lib/Bitcode/Reader/BitcodeStream.cpp b/lib/Bitcode/Reader/BitcodeStream.cpp |
new file mode 100644 |
index 0000000000000000000000000000000000000000..7206dbad6abc21ac81745e91a5efda8302648ed8 |
--- /dev/null |
+++ b/lib/Bitcode/Reader/BitcodeStream.cpp |
@@ -0,0 +1,52 @@ |
+//===---- llvm/Bitcode/Reader/BitcodeStream.cpp - ----*- C++ -*-===// |
+// |
+// The LLVM Compiler Infrastructure |
+// |
+// This file is distributed under the University of Illinois Open Source |
+// License. See LICENSE.TXT for details. |
+// |
+//===----------------------------------------------------------------------===// |
+// |
+// Support for streaming (lazy reading) of bitcode files on disk |
+// |
+//===----------------------------------------------------------------------===// |
+ |
+#include "llvm/Bitcode/BitcodeStream.h" |
+#include "llvm/Support/SourceMgr.h" |
+#include <string> |
+#include <cerrno> |
+#include <cstdio> |
+ |
+namespace { |
+class FileStream { |
+ FILE *Fd; |
+ public: |
+ FileStream() : Fd(NULL) {} |
+ size_t FileGetBytes(unsigned char *buf, size_t len) { |
+ return fread(buf, 1, len, Fd); |
+ } |
+ |
+ bool OpenFileStream(const std::string &Filename) { |
+ Fd = fopen(Filename.c_str(), "r"); |
+ return Fd != NULL; |
+ } |
+}; |
+ |
+static FileStream *stream; |
+size_t FileStreamCallback(unsigned char *buf, size_t len) { |
+ return stream->FileGetBytes(buf, len); |
+} |
+} |
+ |
+namespace llvm { |
+StreamChunkCallback GetBitcodeFileStream(const std::string &Filename, |
+ SMDiagnostic &Err) { |
+ stream = new FileStream(); |
+ if (!stream->OpenFileStream(Filename)) { |
+ Err = SMDiagnostic(Filename, SourceMgr::DK_Error, |
+ "Could not open input file"); |
+ return NULL; |
+ } |
+ return FileStreamCallback; |
+} |
+} |