<p>Vasil Velichkov has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/10731">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Format the output into ostringstream and then write it at once.<br><br>This fixes the garbled output when multiple printers are used in a<br>flowgraph.<br><br>closes #255<br>closes #420<br><br>Change-Id: I1012ed26371b4c67163545652f0a1ce0f576af9e<br>---<br>M lib/misc_utils/bursts_printer_impl.cc<br>M lib/misc_utils/message_printer_impl.cc<br>2 files changed, 21 insertions(+), 16 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/gr-gsm refs/changes/31/10731/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/lib/misc_utils/bursts_printer_impl.cc b/lib/misc_utils/bursts_printer_impl.cc</span><br><span>index c22e60b..ab9c319 100644</span><br><span>--- a/lib/misc_utils/bursts_printer_impl.cc</span><br><span>+++ b/lib/misc_utils/bursts_printer_impl.cc</span><br><span>@@ -66,48 +66,50 @@</span><br><span> return;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- std::cout << d_prepend_string;</span><br><span style="color: hsl(120, 100%, 40%);">+ std::ostringstream out;</span><br><span style="color: hsl(120, 100%, 40%);">+ out << d_prepend_string;</span><br><span> if (d_prepend_fnr)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">- std::cout << frame_nr;</span><br><span style="color: hsl(120, 100%, 40%);">+ out << frame_nr;</span><br><span> }</span><br><span> </span><br><span> if (d_prepend_fnr && d_prepend_frame_count)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">- std::cout << " ";</span><br><span style="color: hsl(120, 100%, 40%);">+ out << " ";</span><br><span> }</span><br><span> </span><br><span> if (d_prepend_frame_count)</span><br><span> {</span><br><span> // calculate fn count using libosmogsm</span><br><span style="color: hsl(0, 100%, 40%);">- std::cout << osmo_a5_fn_count(frame_nr);</span><br><span style="color: hsl(120, 100%, 40%);">+ out << osmo_a5_fn_count(frame_nr);</span><br><span> }</span><br><span> </span><br><span> if (d_prepend_fnr || d_prepend_frame_count)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">- std::cout << ": ";</span><br><span style="color: hsl(120, 100%, 40%);">+ out << ": ";</span><br><span> }</span><br><span> </span><br><span> if (d_print_payload_only)</span><br><span> {</span><br><span> for (int ii=0; ii<57; ii++)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">- std::cout << std::setprecision(1) << static_cast<int>(burst[ii + 3]);</span><br><span style="color: hsl(120, 100%, 40%);">+ out << std::setprecision(1) << static_cast<int>(burst[ii + 3]);</span><br><span> }</span><br><span> for (int ii=0; ii<57; ii++)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">- std::cout << std::setprecision(1) << static_cast<int>(burst[ii + 88]);</span><br><span style="color: hsl(120, 100%, 40%);">+ out << std::setprecision(1) << static_cast<int>(burst[ii + 88]);</span><br><span> }</span><br><span> }</span><br><span> else</span><br><span> {</span><br><span> for(int ii=0; ii<burst_len; ii++)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">- std::cout << std::setprecision(1) << static_cast<int>(burst[ii]);</span><br><span style="color: hsl(120, 100%, 40%);">+ out << std::setprecision(1) << static_cast<int>(burst[ii]);</span><br><span> }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- std::cout << std::endl;</span><br><span style="color: hsl(120, 100%, 40%);">+ out << std::endl;</span><br><span style="color: hsl(120, 100%, 40%);">+ std::cout << out.str() << std::flush;</span><br><span> }</span><br><span> </span><br><span> bool bursts_printer_impl::is_dummy_burst(int8_t *burst, size_t burst_len)</span><br><span>diff --git a/lib/misc_utils/message_printer_impl.cc b/lib/misc_utils/message_printer_impl.cc</span><br><span>index e8aa2d3..8342946 100644</span><br><span>--- a/lib/misc_utils/message_printer_impl.cc</span><br><span>+++ b/lib/misc_utils/message_printer_impl.cc</span><br><span>@@ -46,26 +46,27 @@</span><br><span> gsmtap_hdr * header = (gsmtap_hdr *)message_plus_header;</span><br><span> uint32_t frame_nr = be32toh(header->frame_number);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- std::cout << d_prepend_string;</span><br><span style="color: hsl(120, 100%, 40%);">+ std::ostringstream out;</span><br><span style="color: hsl(120, 100%, 40%);">+ out << d_prepend_string;</span><br><span> if (d_prepend_fnr)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">- std::cout << frame_nr;</span><br><span style="color: hsl(120, 100%, 40%);">+ out << frame_nr;</span><br><span> }</span><br><span> </span><br><span> if (d_prepend_fnr && d_prepend_frame_count)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">- std::cout << " ";</span><br><span style="color: hsl(120, 100%, 40%);">+ out << " ";</span><br><span> }</span><br><span> </span><br><span> if (d_prepend_frame_count)</span><br><span> {</span><br><span> // calculate fn count using libosmogsm</span><br><span style="color: hsl(0, 100%, 40%);">- std::cout << osmo_a5_fn_count(frame_nr);</span><br><span style="color: hsl(120, 100%, 40%);">+ out << osmo_a5_fn_count(frame_nr);</span><br><span> }</span><br><span> </span><br><span> if (d_prepend_fnr || d_prepend_frame_count)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">- std::cout << ": ";</span><br><span style="color: hsl(120, 100%, 40%);">+ out << ": ";</span><br><span> }</span><br><span> </span><br><span> int start_index = sizeof(gsmtap_hdr);</span><br><span>@@ -77,9 +78,11 @@</span><br><span> </span><br><span> for(int ii=start_index; ii<message_plus_header_len; ii++)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">- printf(" %02x", message_plus_header[ii]);</span><br><span style="color: hsl(120, 100%, 40%);">+ out<<" "<<(std::hex)<<std::setw(2)<<std::setfill('0')<<(uint32_t)message_plus_header[ii];</span><br><span> }</span><br><span style="color: hsl(0, 100%, 40%);">- std::cout << std::endl;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ out << std::endl;</span><br><span style="color: hsl(120, 100%, 40%);">+ std::cout << out.str() << std::flush;</span><br><span> }</span><br><span> </span><br><span> message_printer::sptr</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/10731">change 10731</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/10731"/><meta itemprop="name" content="View Change"/></div></div>
<div style="display:none"> Gerrit-Project: gr-gsm </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: I1012ed26371b4c67163545652f0a1ce0f576af9e </div>
<div style="display:none"> Gerrit-Change-Number: 10731 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Vasil Velichkov <vvvelichkov@gmail.com> </div>