Enum printing fix, enum / variant header handling
[babeltrace.git] / formats / ctf-text / ctf-text.c
index 70e0e92ab6604a7535724b520808247b7dc43489..82578dca139afb4aeae48e35edebdb48d6942dc8 100644 (file)
@@ -63,23 +63,32 @@ int ctf_text_write_event(struct stream_pos *ppos,
        int field_nr_saved;
        struct ctf_event *event_class;
        uint64_t id = 0;
-       int len_index;
        int ret;
 
        /* print event header */
        if (stream_class->event_header) {
+               struct definition_integer *integer_definition;
+               struct definition *variant;
+
                /* lookup event id */
-               len_index = struct_declaration_lookup_field_index(stream_class->event_header_decl,
-                               g_quark_from_static_string("id"));
-               if (len_index >= 0) {
-                       struct definition_integer *defint;
-                       struct definition *field;
-
-                       field = struct_definition_get_field_from_index(stream_class->event_header, len_index);
-                       assert(field->declaration->id == CTF_TYPE_INTEGER);
-                       defint = container_of(field, struct definition_integer, p);
-                       assert(defint->declaration->signedness == FALSE);
-                       id = defint->value._unsigned;   /* set id */
+               integer_definition = lookup_integer(&stream_class->event_header->p, "id", FALSE);
+               if (integer_definition) {
+                       id = integer_definition->value._unsigned;
+               } else {
+                       struct definition_enum *enum_definition;
+
+                       enum_definition = lookup_enum(&stream_class->event_header->p, "id", FALSE);
+                       if (enum_definition) {
+                               id = enum_definition->integer->value._unsigned;
+                       }
+               }
+
+               variant = lookup_variant(&stream_class->event_header->p, "v");
+               if (variant) {
+                       integer_definition = lookup_integer(variant, "id", FALSE);
+                       if (integer_definition) {
+                               id = integer_definition->value._unsigned;
+                       }
                }
        }
 
@@ -93,18 +102,20 @@ int ctf_text_write_event(struct stream_pos *ppos,
                return -EINVAL;
        }
 
-       if (pos->print_names)
-               fprintf(pos->fp, "timestamp = ");
-       else
-               fprintf(pos->fp, "[");
-       fprintf(pos->fp, "%12" PRIu64, stream->timestamp);
-       if (!pos->print_names)
-               fprintf(pos->fp, "]");
+       if (stream->timestamp) {
+               if (pos->print_names)
+                       fprintf(pos->fp, "timestamp = ");
+               else
+                       fprintf(pos->fp, "[");
+               fprintf(pos->fp, "%12" PRIu64, stream->timestamp);
+               if (!pos->print_names)
+                       fprintf(pos->fp, "]");
 
-       if (pos->print_names)
-               fprintf(pos->fp, ", ");
-       else
-               fprintf(pos->fp, " ");
+               if (pos->print_names)
+                       fprintf(pos->fp, ", ");
+               else
+                       fprintf(pos->fp, " ");
+       }
        if (pos->print_names)
                fprintf(pos->fp, "name = ");
        fprintf(pos->fp, "%s", g_quark_to_string(event_class->name));
This page took 0.02444 seconds and 4 git commands to generate.