+
+ ctf_align_pos(pos, sizeof(uint64_t) * CHAR_BIT);
+ *(uint64_t *) ctf_get_pos_addr(pos) = pos->packet_size;
+ ctf_move_pos(pos, sizeof(uint64_t) * CHAR_BIT);
+}
+
+static
+void write_event_header(struct ctf_stream_pos *pos, char *line,
+ char **tline, size_t len, size_t *tlen,
+ uint64_t *ts)
+{
+ if (!s_timestamp)
+ return;
+
+ /* Only need to be executed on first pass (dummy) */
+ if (pos->dummy) {
+ int has_timestamp = 0;
+ unsigned long sec, usec, msec;
+ unsigned int year, mon, mday, hour, min;
+
+ /* Extract time from input line */
+ if (sscanf(line, "[%lu.%lu] ", &sec, &usec) == 2) {
+ *ts = (uint64_t) sec * USEC_PER_SEC + (uint64_t) usec;
+ /*
+ * Default CTF clock has 1GHz frequency. Convert
+ * from usec to nsec.
+ */
+ *ts *= NSEC_PER_USEC;
+ has_timestamp = 1;
+ } else if (sscanf(line, "[%u-%u-%u %u:%u:%lu.%lu] ",
+ &year, &mon, &mday, &hour, &min,
+ &sec, &msec) == 7) {
+ time_t ep_sec;
+ struct tm ti;
+
+ memset(&ti, 0, sizeof(ti));
+ ti.tm_year = year - 1900; /* from 1900 */
+ ti.tm_mon = mon - 1; /* 0 to 11 */
+ ti.tm_mday = mday;
+ ti.tm_hour = hour;
+ ti.tm_min = min;
+ ti.tm_sec = sec;
+
+ ep_sec = babeltrace_timegm(&ti);
+ if (ep_sec != (time_t) -1) {
+ *ts = (uint64_t) ep_sec * NSEC_PER_SEC
+ + (uint64_t) msec * NSEC_PER_MSEC;
+ }
+ has_timestamp = 1;
+ }
+ if (has_timestamp) {
+ *tline = strchr(line, ']');
+ assert(*tline);
+ (*tline)++;
+ if ((*tline)[0] == ' ') {
+ (*tline)++;
+ }
+ *tlen = len + line - *tline;
+ }
+ }
+ /* timestamp */
+ ctf_align_pos(pos, sizeof(uint64_t) * CHAR_BIT);
+ if (!pos->dummy)
+ *(uint64_t *) ctf_get_pos_addr(pos) = *ts;
+ ctf_move_pos(pos, sizeof(uint64_t) * CHAR_BIT);