llvm-general-3.5.0.0: src/LLVM/General/Internal/FFI/RawOStreamC.cpp
#define __STDC_LIMIT_MACROS
#include "llvm/Support/raw_ostream.h"
#include "llvm/Support/FileSystem.h"
#include "llvm-c/Core.h"
using namespace llvm;
using sys::fs::F_None;
using sys::fs::F_Excl;
using sys::fs::F_Text;
extern "C" {
LLVMBool LLVM_General_WithFileRawOStream(
const char *filename,
LLVMBool excl,
LLVMBool text,
const char *&error,
void (&callback)(raw_ostream &ostream)
) {
std::string e;
raw_fd_ostream os(filename, e, (excl ? F_Excl : F_None) | (text ? F_Text : F_None));
if (!e.empty()) {
error = strdup(e.c_str());
return false;
}
callback(os);
return true;
}
void LLVM_General_WithBufferRawOStream(
void (&outputCallback)(const char *start, size_t length),
void (&streamCallback)(raw_ostream &ostream)
) {
std::string s;
{
raw_string_ostream os(s);
streamCallback(os);
}
outputCallback(s.data(), s.size());
}
}