X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=blobdiff_plain;f=converter%2Fbabeltrace-log.c;h=214871192b2e3034d90a16c5b99c0d8a1babea55;hp=9d87776a8f361ade58a7557215d99fe8a56916fd;hb=c462e188f3e7819c7bc74f671038cdbf36e8c3c0;hpb=f824ae0446c7a1ef3acd5d8e30c039c4ed7381ce diff --git a/converter/babeltrace-log.c b/converter/babeltrace-log.c index 9d87776a..21487119 100644 --- a/converter/babeltrace-log.c +++ b/converter/babeltrace-log.c @@ -17,6 +17,14 @@ * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * * Depends on glibc 2.10 for getline(). */ @@ -164,13 +172,14 @@ void write_event_header(struct ctf_stream_pos *pos, char *line, uint64_t *ts) { unsigned long sec, usec; - int ret; if (!s_timestamp) return; /* Only need to be executed on first pass (dummy) */ if (pos->dummy) { + int ret; + /* Extract time from input line */ ret = sscanf(line, "[%lu.%lu] ", &sec, &usec); if (ret == 2) { @@ -201,21 +210,25 @@ void trace_string(char *line, struct ctf_stream_pos *pos, size_t len) uint64_t ts = 0; printf_debug("read: %s\n", line); -retry: - ctf_dummy_pos(pos, &dummy); - write_event_header(&dummy, line, &tline, len, &tlen, &ts); - ctf_align_pos(&dummy, sizeof(uint8_t) * CHAR_BIT); - ctf_move_pos(&dummy, tlen * CHAR_BIT); - if (ctf_pos_packet(&dummy)) { - ctf_pos_pad_packet(pos); - write_packet_header(pos, s_uuid); - write_packet_context(pos); - if (attempt++ == 1) { - fprintf(stderr, "[Error] Line too large for packet size (%" PRIu64 "kB) (discarded)\n", - pos->packet_size / CHAR_BIT / 1024); - return; + + for (;;) { + ctf_dummy_pos(pos, &dummy); + write_event_header(&dummy, line, &tline, len, &tlen, &ts); + ctf_align_pos(&dummy, sizeof(uint8_t) * CHAR_BIT); + ctf_move_pos(&dummy, tlen * CHAR_BIT); + if (ctf_pos_packet(&dummy)) { + ctf_pos_pad_packet(pos); + write_packet_header(pos, s_uuid); + write_packet_context(pos); + if (attempt++ == 1) { + fprintf(stderr, "[Error] Line too large for packet size (%" PRIu64 "kB) (discarded)\n", + pos->packet_size / CHAR_BIT / 1024); + return; + } + continue; + } else { + break; } - goto retry; } write_event_header(pos, line, &tline, len, &tlen, &ts);