• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

randombit / botan / 5123321399

30 May 2023 04:06PM UTC coverage: 92.213% (+0.004%) from 92.209%
5123321399

Pull #3558

github

web-flow
Merge dd72f7389 into 057bcbc35
Pull Request #3558: Add braces around all if/else statements

75602 of 81986 relevant lines covered (92.21%)

11859779.3 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

97.14
/src/lib/filters/out_buf.cpp
1
/*
2
* Pipe Output Buffer
3
* (C) 1999-2007,2011 Jack Lloyd
4
*     2012 Markus Wanner
5
*
6
* Botan is released under the Simplified BSD License (see license.txt)
7
*/
8

9
#include <botan/internal/out_buf.h>
10

11
#include <botan/internal/secqueue.h>
12

13
namespace Botan {
14

15
/*
16
* Read data from a message
17
*/
18
size_t Output_Buffers::read(uint8_t output[], size_t length, Pipe::message_id msg) {
116✔
19
   SecureQueue* q = get(msg);
116✔
20
   if(q) {
116✔
21
      return q->read(output, length);
116✔
22
   }
23
   return 0;
24
}
25

26
/*
27
* Peek at data in a message
28
*/
29
size_t Output_Buffers::peek(uint8_t output[], size_t length, size_t stream_offset, Pipe::message_id msg) const {
1✔
30
   SecureQueue* q = get(msg);
1✔
31
   if(q) {
1✔
32
      return q->peek(output, length, stream_offset);
1✔
33
   }
34
   return 0;
35
}
36

37
/*
38
* Check available bytes in a message
39
*/
40
size_t Output_Buffers::remaining(Pipe::message_id msg) const {
76✔
41
   SecureQueue* q = get(msg);
76✔
42
   if(q) {
76✔
43
      return q->size();
76✔
44
   }
45
   return 0;
46
}
47

48
/*
49
* Return the total bytes of a message that have already been read.
50
*/
51
size_t Output_Buffers::get_bytes_read(Pipe::message_id msg) const {
8✔
52
   SecureQueue* q = get(msg);
8✔
53
   if(q) {
8✔
54
      return q->get_bytes_read();
8✔
55
   }
56
   return 0;
57
}
58

59
/*
60
* Add a new output queue
61
*/
62
void Output_Buffers::add(SecureQueue* queue) {
72✔
63
   BOTAN_ASSERT(queue, "queue was provided");
72✔
64

65
   BOTAN_ASSERT(m_buffers.size() < m_buffers.max_size(), "Room was available in container");
72✔
66

67
   m_buffers.push_back(std::unique_ptr<SecureQueue>(queue));
72✔
68
}
72✔
69

70
/*
71
* Retire old output queues
72
*/
73
void Output_Buffers::retire() {
65✔
74
   for(auto& buf : m_buffers) {
405✔
75
      if(buf && buf->empty()) {
275✔
76
         buf.reset();
298✔
77
      }
78
   }
79

80
   while(!m_buffers.empty() && !m_buffers[0]) {
88✔
81
      m_buffers.pop_front();
23✔
82
      m_offset = m_offset + Pipe::message_id(1);
23✔
83
   }
84
}
65✔
85

86
/*
87
* Get a particular output queue
88
*/
89
SecureQueue* Output_Buffers::get(Pipe::message_id msg) const {
201✔
90
   if(msg < m_offset) {
201✔
91
      return nullptr;
92
   }
93

94
   BOTAN_ASSERT(msg < message_count(), "Message number is in range");
×
95

96
   return m_buffers[msg - m_offset].get();
201✔
97
}
98

99
/*
100
* Return the total number of messages
101
*/
102
Pipe::message_id Output_Buffers::message_count() const { return (m_offset + m_buffers.size()); }
201✔
103

104
/*
105
* Output_Buffers Constructor
106
*/
107
Output_Buffers::Output_Buffers() { m_offset = 0; }
18✔
108

109
}  // namespace Botan
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc