projects
/
babeltrace.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Update libpopt dependency to 1.13
[babeltrace.git]
/
formats
/
ctf
/
metadata
/
ctf-visitor-generate-io-struct.c
diff --git
a/formats/ctf/metadata/ctf-visitor-generate-io-struct.c
b/formats/ctf/metadata/ctf-visitor-generate-io-struct.c
index bdb5c68d6cfaa45ec3395fc7ad408eb23ff9792a..82af10a10f259be1fd05a6467bc210aa13c0ae83 100644
(file)
--- a/
formats/ctf/metadata/ctf-visitor-generate-io-struct.c
+++ b/
formats/ctf/metadata/ctf-visitor-generate-io-struct.c
@@
-25,7
+25,7
@@
#include <inttypes.h>
#include <endian.h>
#include <errno.h>
#include <inttypes.h>
#include <endian.h>
#include <errno.h>
-#include <babeltrace/babeltrace.h>
+#include <babeltrace/babeltrace
-internal
.h>
#include <babeltrace/list.h>
#include <babeltrace/types.h>
#include <babeltrace/ctf/metadata.h>
#include <babeltrace/list.h>
#include <babeltrace/types.h>
#include <babeltrace/ctf/metadata.h>
@@
-119,7
+119,7
@@
int get_unary_uuid(struct cds_list_head *head, uuid_t *uuid)
assert(node->u.unary_expression.link == UNARY_LINK_UNKNOWN);
assert(i == 0);
src_string = node->u.unary_expression.u.string;
assert(node->u.unary_expression.link == UNARY_LINK_UNKNOWN);
assert(i == 0);
src_string = node->u.unary_expression.u.string;
- ret = uuid_parse(
node->u.unary_expression.u.
string, *uuid);
+ ret = uuid_parse(
src_
string, *uuid);
}
return ret;
}
}
return ret;
}
@@
-584,7
+584,9
@@
int ctf_typealias_visit(FILE *fd, int depth, struct declaration_scope *scope,
return 0;
error:
return 0;
error:
- type_declaration->declaration_free(type_declaration);
+ if (type_declaration) {
+ type_declaration->declaration_free(type_declaration);
+ }
return err;
}
return err;
}
@@
-724,7
+726,7
@@
struct declaration *ctf_declaration_struct_visit(FILE *fd,
ret = ctf_struct_declaration_list_visit(fd, depth + 1, iter,
struct_declaration, trace);
if (ret)
ret = ctf_struct_declaration_list_visit(fd, depth + 1, iter,
struct_declaration, trace);
if (ret)
- goto error;
+ goto error
_free_declaration
;
}
if (name) {
ret = register_struct_declaration(g_quark_from_string(name),
}
if (name) {
ret = register_struct_declaration(g_quark_from_string(name),
@@
-734,8
+736,9
@@
struct declaration *ctf_declaration_struct_visit(FILE *fd,
}
return &struct_declaration->p;
}
}
return &struct_declaration->p;
}
-error:
+error
_free_declaration
:
struct_declaration->p.declaration_free(&struct_declaration->p);
struct_declaration->p.declaration_free(&struct_declaration->p);
+error:
return NULL;
}
return NULL;
}
@@
-1090,7
+1093,7
@@
struct declaration *ctf_declaration_integer_visit(FILE *fd, int depth,
struct ctf_trace *trace)
{
struct ctf_node *expression;
struct ctf_trace *trace)
{
struct ctf_node *expression;
- uint64_t alignment
, size
;
+ uint64_t alignment
= 1, size = 0
;
int byte_order = trace->byte_order;
int signedness = 0;
int has_alignment = 0, has_size = 0;
int byte_order = trace->byte_order;
int signedness = 0;
int has_alignment = 0, has_size = 0;
@@
-1245,7
+1248,8
@@
struct declaration *ctf_declaration_floating_point_visit(FILE *fd, int depth,
struct ctf_trace *trace)
{
struct ctf_node *expression;
struct ctf_trace *trace)
{
struct ctf_node *expression;
- uint64_t alignment, exp_dig, mant_dig, byte_order = trace->byte_order;
+ uint64_t alignment = 1, exp_dig = 0, mant_dig = 0,
+ byte_order = trace->byte_order;
int has_alignment = 0, has_exp_dig = 0, has_mant_dig = 0;
struct declaration_float *float_declaration;
int has_alignment = 0, has_exp_dig = 0, has_mant_dig = 0;
struct declaration_float *float_declaration;
@@
-1789,6
+1793,7
@@
int ctf_stream_visit(FILE *fd, int depth, struct ctf_node *node,
if (trace->streams->len <= stream->stream_id)
g_ptr_array_set_size(trace->streams, stream->stream_id + 1);
g_ptr_array_index(trace->streams, stream->stream_id) = stream;
if (trace->streams->len <= stream->stream_id)
g_ptr_array_set_size(trace->streams, stream->stream_id + 1);
g_ptr_array_index(trace->streams, stream->stream_id) = stream;
+ stream->trace = trace;
return 0;
return 0;
@@
-1894,7
+1899,18
@@
int ctf_trace_declaration_visit(FILE *fd, int depth, struct ctf_node *node, stru
ret = -EPERM;
goto error;
} else {
ret = -EPERM;
goto error;
} else {
- trace->byte_order = byte_order;
+ if (byte_order != trace->byte_order) {
+ trace->byte_order = byte_order;
+ /*
+ * We need to restart
+ * construction of the
+ * intermediate representation.
+ */
+ trace->field_mask = 0;
+ CTF_TRACE_SET_FIELD(trace, byte_order);
+ ret = -EINTR;
+ goto error;
+ }
}
CTF_TRACE_SET_FIELD(trace, byte_order);
} else if (!strcmp(left, "packet.header")) {
}
CTF_TRACE_SET_FIELD(trace, byte_order);
} else if (!strcmp(left, "packet.header")) {
@@
-1984,10
+2000,13
@@
int ctf_trace_visit(FILE *fd, int depth, struct ctf_node *node, struct ctf_trace
return 0;
error:
return 0;
error:
- if (trace->packet_header_decl)
+ if (trace->packet_header_decl)
{
declaration_unref(&trace->packet_header_decl->p);
declaration_unref(&trace->packet_header_decl->p);
+ trace->packet_header_decl = NULL;
+ }
g_ptr_array_free(trace->streams, TRUE);
free_declaration_scope(trace->declaration_scope);
g_ptr_array_free(trace->streams, TRUE);
free_declaration_scope(trace->declaration_scope);
+ trace->declaration_scope = NULL;
return ret;
}
return ret;
}
@@
-2043,9
+2062,11
@@
int ctf_visitor_construct_metadata(FILE *fd, int depth, struct ctf_node *node,
struct ctf_node *iter;
printf_verbose("CTF visitor: metadata construction... ");
struct ctf_node *iter;
printf_verbose("CTF visitor: metadata construction... ");
- trace->root_declaration_scope = new_declaration_scope(NULL);
trace->byte_order = byte_order;
trace->byte_order = byte_order;
+retry:
+ trace->root_declaration_scope = new_declaration_scope(NULL);
+
switch (node->type) {
case NODE_ROOT:
cds_list_for_each_entry(iter, &node->u.root.declaration_list,
switch (node->type) {
case NODE_ROOT:
cds_list_for_each_entry(iter, &node->u.root.declaration_list,
@@
-2058,6
+2079,15
@@
int ctf_visitor_construct_metadata(FILE *fd, int depth, struct ctf_node *node,
}
cds_list_for_each_entry(iter, &node->u.root.trace, siblings) {
ret = ctf_trace_visit(fd, depth + 1, iter, trace);
}
cds_list_for_each_entry(iter, &node->u.root.trace, siblings) {
ret = ctf_trace_visit(fd, depth + 1, iter, trace);
+ if (ret == -EINTR) {
+ free_declaration_scope(trace->root_declaration_scope);
+ /*
+ * Need to restart creation of type
+ * definitions, aliases and
+ * trace header declarations.
+ */
+ goto retry;
+ }
if (ret) {
fprintf(fd, "[error] %s: trace declaration error\n", __func__);
goto error;
if (ret) {
fprintf(fd, "[error] %s: trace declaration error\n", __func__);
goto error;
This page took
0.024985 seconds
and
4
git commands to generate.