1*2b0eed27SGordon Henriksen //===-- BitReader.cpp -----------------------------------------------------===//
2*2b0eed27SGordon Henriksen //
3*2b0eed27SGordon Henriksen //                     The LLVM Compiler Infrastructure
4*2b0eed27SGordon Henriksen //
5*2b0eed27SGordon Henriksen // This file was developed by Gordon Henriksen and is distributed under the
6*2b0eed27SGordon Henriksen // University of Illinois Open Source License. See LICENSE.TXT for details.
7*2b0eed27SGordon Henriksen //
8*2b0eed27SGordon Henriksen //===----------------------------------------------------------------------===//
9*2b0eed27SGordon Henriksen 
10*2b0eed27SGordon Henriksen #include "llvm-c/BitReader.h"
11*2b0eed27SGordon Henriksen #include "llvm/Bitcode/ReaderWriter.h"
12*2b0eed27SGordon Henriksen #include "llvm/Support/MemoryBuffer.h"
13*2b0eed27SGordon Henriksen #include <string>
14*2b0eed27SGordon Henriksen 
15*2b0eed27SGordon Henriksen using namespace llvm;
16*2b0eed27SGordon Henriksen 
17*2b0eed27SGordon Henriksen 
18*2b0eed27SGordon Henriksen int LLVMReadBitcodeFromFile(const char *Path, LLVMModuleRef *OutModule,
19*2b0eed27SGordon Henriksen                             char **OutMessage) {
20*2b0eed27SGordon Henriksen   std::string Message;
21*2b0eed27SGordon Henriksen 
22*2b0eed27SGordon Henriksen   MemoryBuffer *buf = MemoryBuffer::getFile(Path, strlen(Path), &Message);
23*2b0eed27SGordon Henriksen   if (!buf) {
24*2b0eed27SGordon Henriksen     if (!OutMessage)
25*2b0eed27SGordon Henriksen       *OutMessage = strdup(Message.c_str());
26*2b0eed27SGordon Henriksen     return 1;
27*2b0eed27SGordon Henriksen   }
28*2b0eed27SGordon Henriksen 
29*2b0eed27SGordon Henriksen   *OutModule = wrap(ParseBitcodeFile(buf, &Message));
30*2b0eed27SGordon Henriksen   if (!*OutModule) {
31*2b0eed27SGordon Henriksen     if (OutMessage)
32*2b0eed27SGordon Henriksen       *OutMessage = strdup(Message.c_str());
33*2b0eed27SGordon Henriksen     return 1;
34*2b0eed27SGordon Henriksen   }
35*2b0eed27SGordon Henriksen 
36*2b0eed27SGordon Henriksen   return 0;
37*2b0eed27SGordon Henriksen }
38*2b0eed27SGordon Henriksen 
39*2b0eed27SGordon Henriksen void LLVMDisposeBitcodeReaderMessage(char *Message) {
40*2b0eed27SGordon Henriksen   if (Message)
41*2b0eed27SGordon Henriksen     free(Message);
42*2b0eed27SGordon Henriksen }
43