blob: 7b90586fd7064bc683c7d069a12a20d5db6c62c9 [file] [log] [blame]
Gordon Henriksen8b94a142007-09-18 03:18:57 +00001//===-- BitWriter.cpp -----------------------------------------------------===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file was developed by the LLVM research group and is distributed under
6// the University of Illinois Open Source License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#include "llvm-c/BitWriter.h"
11#include "llvm/CHelpers.h"
12#include "llvm/Bitcode/ReaderWriter.h"
13#include <fstream>
14
15using namespace llvm;
16
17
18/*===-- Operations on modules ---------------------------------------------===*/
19
20int LLVMWriteBitcodeToFile(LLVMModuleRef M, const char *Path) {
21 std::ofstream OS(Path);
22
23 if (!OS.fail())
24 WriteBitcodeToFile(unwrap(M), OS);
25
26 if (OS.fail())
27 return -1;
28
29 return 0;
30}
31
32#ifdef __GNUC__
33#include <ext/stdio_filebuf.h>
34
35// FIXME: Control this with configure? Provide some portable abstraction in
36// libSystem? As is, the user will just get a linker error if they use this on
37// non-GCC. Some C++ stdlibs even have ofstream::ofstream(int fd).
38int LLVMWriteBitcodeToFileHandle(LLVMModuleRef M, int FileHandle) {
39 __gnu_cxx::stdio_filebuf<char> Buffer(FileHandle, std::ios_base::out);
40 std::ostream OS(&Buffer);
41
42 if (!OS.fail())
43 WriteBitcodeToFile(unwrap(M), OS);
44
45 if (OS.fail())
46 return -1;
47
48 return 0;
49}
50
51#endif