/************************************************* * DataSink Source File * * (C) 1999-2007 Jack Lloyd * * 2005 Matthew Gregan * *************************************************/ #include #include namespace Botan { /************************************************* * Write to a stream * *************************************************/ void DataSink_Stream::write(const byte out[], u32bit length) { sink->write(reinterpret_cast(out), length); if(!sink->good()) throw Stream_IO_Error("DataSink_Stream: Failure writing to " + identifier); } /************************************************* * DataSink_Stream Constructor * *************************************************/ DataSink_Stream::DataSink_Stream(std::ostream& out, const std::string& name) : identifier(name != "" ? name : ""), owner(false) { sink = &out; } /************************************************* * DataSink_Stream Constructor * *************************************************/ DataSink_Stream::DataSink_Stream(const std::string& path, bool use_binary) : identifier(path), owner(true) { if(use_binary) sink = new std::ofstream(path.c_str(), std::ios::binary); else sink = new std::ofstream(path.c_str()); if(!sink->good()) throw Stream_IO_Error("DataSink_Stream: Failure opening " + path); } /************************************************* * DataSink_Stream Destructor * *************************************************/ DataSink_Stream::~DataSink_Stream() { if(owner) delete sink; sink = 0; } }