176a0374bSGordon Henriksen //===-- BitWriter.cpp -----------------------------------------------------===//
276a0374bSGordon Henriksen //
376a0374bSGordon Henriksen //                     The LLVM Compiler Infrastructure
476a0374bSGordon Henriksen //
5f3ebc3f3SChris Lattner // This file is distributed under the University of Illinois Open Source
6f3ebc3f3SChris Lattner // License. See LICENSE.TXT for details.
776a0374bSGordon Henriksen //
876a0374bSGordon Henriksen //===----------------------------------------------------------------------===//
976a0374bSGordon Henriksen 
1076a0374bSGordon Henriksen #include "llvm-c/BitWriter.h"
1176a0374bSGordon Henriksen #include "llvm/Bitcode/ReaderWriter.h"
12*6973395cSChris Lattner #include "llvm/Support/raw_ostream.h"
1376a0374bSGordon Henriksen using namespace llvm;
1476a0374bSGordon Henriksen 
1576a0374bSGordon Henriksen 
1676a0374bSGordon Henriksen /*===-- Operations on modules ---------------------------------------------===*/
1776a0374bSGordon Henriksen 
1876a0374bSGordon Henriksen int LLVMWriteBitcodeToFile(LLVMModuleRef M, const char *Path) {
19*6973395cSChris Lattner   std::string ErrorInfo;
20*6973395cSChris Lattner   raw_fd_ostream OS(Path, ErrorInfo,
21*6973395cSChris Lattner                     raw_fd_ostream::F_Force|raw_fd_ostream::F_Binary);
2276a0374bSGordon Henriksen 
23*6973395cSChris Lattner   if (!ErrorInfo.empty())
2476a0374bSGordon Henriksen     return -1;
2576a0374bSGordon Henriksen 
26*6973395cSChris Lattner   WriteBitcodeToFile(unwrap(M), OS);
2776a0374bSGordon Henriksen   return 0;
2876a0374bSGordon Henriksen }
2976a0374bSGordon Henriksen 
30a2fef0c1SGordon Henriksen #if defined(__GNUC__) && (__GNUC__ > 3 || __GNUC__ == 3 && __GNUC_MINOR >= 4)
3176a0374bSGordon Henriksen #include <ext/stdio_filebuf.h>
3276a0374bSGordon Henriksen 
3376a0374bSGordon Henriksen int LLVMWriteBitcodeToFileHandle(LLVMModuleRef M, int FileHandle) {
34*6973395cSChris Lattner   raw_fd_ostream OS(FileHandle, false);
3576a0374bSGordon Henriksen 
3676a0374bSGordon Henriksen   WriteBitcodeToFile(unwrap(M), OS);
3776a0374bSGordon Henriksen   return 0;
3876a0374bSGordon Henriksen }
3976a0374bSGordon Henriksen 
40a2fef0c1SGordon Henriksen #else
41a2fef0c1SGordon Henriksen 
42a2fef0c1SGordon Henriksen int LLVMWriteBitcodeToFileHandle(LLVMModuleRef M, int FileHandle) {
43a2fef0c1SGordon Henriksen   return -1; // Not supported.
44a2fef0c1SGordon Henriksen }
45a2fef0c1SGordon Henriksen 
4676a0374bSGordon Henriksen #endif
47