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