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