| 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;
|
| +}
|
| +}
|
|
|