- /* Read packet context */
- stream->packet_context->p.declaration->copy(NULL, NULL,
- pos, &ctf_format, &stream->packet_context->p);
-
- /* read content size from header */
- len_index = struct_declaration_lookup_field_index(stream->packet_context->declaration, g_quark_from_static_string("content_size"));
- if (len_index >= 0) {
- struct definition_integer *defint;
- struct field *field;
-
- field = struct_definition_get_field_from_index(stream->packet_context, len_index);
- assert(field->definition->declaration->id == CTF_TYPE_INTEGER);
- defint = container_of(field->definition, struct definition_integer, p);
- assert(defint->declaration->signedness == FALSE);
- pos->content_size = defint->value._unsigned;
+ if (stream->packet_context) {
+ /* Read packet context */
+ stream->packet_context->p.declaration->copy(NULL, NULL,
+ pos, &ctf_format, &stream->packet_context->p);
+
+ /* read content size from header */
+ len_index = struct_declaration_lookup_field_index(stream->packet_context->declaration, g_quark_from_static_string("content_size"));
+ if (len_index >= 0) {
+ struct definition_integer *defint;
+ struct field *field;
+
+ field = struct_definition_get_field_from_index(stream->packet_context, len_index);
+ assert(field->definition->declaration->id == CTF_TYPE_INTEGER);
+ defint = container_of(field->definition, struct definition_integer, p);
+ assert(defint->declaration->signedness == FALSE);
+ pos->content_size = defint->value._unsigned;
+ } else {
+ /* Use file size for packet size */
+ pos->content_size = filestats.st_size * CHAR_BIT;
+ }
+
+ /* read packet size from header */
+ len_index = struct_declaration_lookup_field_index(stream->packet_context->declaration, g_quark_from_static_string("packet_size"));
+ if (len_index >= 0) {
+ struct definition_integer *defint;
+ struct field *field;
+
+ field = struct_definition_get_field_from_index(stream->packet_context, len_index);
+ assert(field->definition->declaration->id == CTF_TYPE_INTEGER);
+ defint = container_of(field->definition, struct definition_integer, p);
+ assert(defint->declaration->signedness == FALSE);
+ pos->packet_size = defint->value._unsigned;
+ } else {
+ /* Use content size if non-zero, else file size */
+ pos->packet_size = pos->content_size ? : filestats.st_size * CHAR_BIT;
+ }