Botan 3.4.0
Crypto and TLS for C&
data_snk.cpp
Go to the documentation of this file.
1/*
2* DataSink
3* (C) 1999-2007 Jack Lloyd
4* 2005 Matthew Gregan
5* 2017 Philippe Lieser
6*
7* Botan is released under the Simplified BSD License (see license.txt)
8*/
9
10#include <botan/data_snk.h>
11
12#include <botan/exceptn.h>
13#include <botan/mem_ops.h>
14#include <botan/internal/fmt.h>
15#include <ostream>
16
17#if defined(BOTAN_TARGET_OS_HAS_FILESYSTEM)
18 #include <fstream>
19#endif
20
21namespace Botan {
22
23/*
24* Write to a stream
25*/
26void DataSink_Stream::write(const uint8_t out[], size_t length) {
27 m_sink.write(cast_uint8_ptr_to_char(out), length);
28 if(!m_sink.good()) {
29 throw Stream_IO_Error("DataSink_Stream: Failure writing to " + m_identifier);
30 }
31}
32
33/*
34* Flush the stream
35*/
37 m_sink.flush();
38}
39
40/*
41* DataSink_Stream Constructor
42*/
43DataSink_Stream::DataSink_Stream(std::ostream& out, std::string_view name) : m_identifier(name), m_sink(out) {}
44
45#if defined(BOTAN_TARGET_OS_HAS_FILESYSTEM)
46
47/*
48* DataSink_Stream Constructor
49*/
50DataSink_Stream::DataSink_Stream(std::string_view path, bool use_binary) :
51 m_identifier(path),
52 m_sink_memory(std::make_unique<std::ofstream>(std::string(path), use_binary ? std::ios::binary : std::ios::out)),
53 m_sink(*m_sink_memory) {
54 if(!m_sink.good()) {
55 throw Stream_IO_Error(fmt("DataSink_Stream: Failure opening path '{}'", path));
56 }
57}
58#endif
59
61
62} // namespace Botan
void write(const uint8_t[], size_t) override
Definition data_snk.cpp:26
void end_msg() override
Definition data_snk.cpp:36
DataSink_Stream(std::ostream &stream, std::string_view name="<std::ostream>")
Definition data_snk.cpp:43
~DataSink_Stream() override
std::string name
std::string fmt(std::string_view format, const T &... args)
Definition fmt.h:53
const char * cast_uint8_ptr_to_char(const uint8_t *b)
Definition mem_ops.h:279