Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 312338
b: refs/heads/master
c: d286447
h: refs/heads/master
v: v3
  • Loading branch information
Namhyung Kim authored and Namhyung Kim committed Jul 4, 2012
1 parent 0dc0493 commit 36ce4da
Show file tree
Hide file tree
Showing 2 changed files with 61 additions and 17 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: ca63858e9eb0ce495031c4ab5291874835cb43cf
refs/heads/master: d286447f23cdb0337a5429e10b39761f6b1d5c18
76 changes: 60 additions & 16 deletions trunk/tools/lib/traceevent/event-parse.c
Original file line number Diff line number Diff line change
Expand Up @@ -1264,9 +1264,15 @@ static int event_read_fields(struct event_format *event, struct format_field **f
field->flags |= FIELD_IS_POINTER;

if (field->type) {
field->type = realloc(field->type,
strlen(field->type) +
strlen(last_token) + 2);
char *new_type;
new_type = realloc(field->type,
strlen(field->type) +
strlen(last_token) + 2);
if (!new_type) {
free(last_token);
goto fail;
}
field->type = new_type;
strcat(field->type, " ");
strcat(field->type, last_token);
free(last_token);
Expand All @@ -1291,6 +1297,7 @@ static int event_read_fields(struct event_format *event, struct format_field **f
if (strcmp(token, "[") == 0) {
enum event_type last_type = type;
char *brackets = token;
char *new_brackets;
int len;

field->flags |= FIELD_IS_ARRAY;
Expand All @@ -1310,9 +1317,14 @@ static int event_read_fields(struct event_format *event, struct format_field **f
len = 1;
last_type = type;

brackets = realloc(brackets,
strlen(brackets) +
strlen(token) + len);
new_brackets = realloc(brackets,
strlen(brackets) +
strlen(token) + len);
if (!new_brackets) {
free(brackets);
goto fail;
}
brackets = new_brackets;
if (len == 2)
strcat(brackets, " ");
strcat(brackets, token);
Expand All @@ -1328,7 +1340,12 @@ static int event_read_fields(struct event_format *event, struct format_field **f

free_token(token);

brackets = realloc(brackets, strlen(brackets) + 2);
new_brackets = realloc(brackets, strlen(brackets) + 2);
if (!new_brackets) {
free(brackets);
goto fail;
}
brackets = new_brackets;
strcat(brackets, "]");

/* add brackets to type */
Expand All @@ -1339,20 +1356,32 @@ static int event_read_fields(struct event_format *event, struct format_field **f
* the format: type [] item;
*/
if (type == EVENT_ITEM) {
field->type = realloc(field->type,
strlen(field->type) +
strlen(field->name) +
strlen(brackets) + 2);
char *new_type;
new_type = realloc(field->type,
strlen(field->type) +
strlen(field->name) +
strlen(brackets) + 2);
if (!new_type) {
free(brackets);
goto fail;
}
field->type = new_type;
strcat(field->type, " ");
strcat(field->type, field->name);
free_token(field->name);
strcat(field->type, brackets);
field->name = token;
type = read_token(&token);
} else {
field->type = realloc(field->type,
strlen(field->type) +
strlen(brackets) + 1);
char *new_type;
new_type = realloc(field->type,
strlen(field->type) +
strlen(brackets) + 1);
if (!new_type) {
free(brackets);
goto fail;
}
field->type = new_type;
strcat(field->type, brackets);
}
free(brackets);
Expand Down Expand Up @@ -1735,10 +1764,16 @@ process_op(struct event_format *event, struct print_arg *arg, char **tok)
/* could just be a type pointer */
if ((strcmp(arg->op.op, "*") == 0) &&
type == EVENT_DELIM && (strcmp(token, ")") == 0)) {
char *new_atom;

if (left->type != PRINT_ATOM)
die("bad pointer type");
left->atom.atom = realloc(left->atom.atom,
new_atom = realloc(left->atom.atom,
strlen(left->atom.atom) + 3);
if (!new_atom)
goto out_free;

left->atom.atom = new_atom;
strcat(left->atom.atom, " *");
free(arg->op.op);
*arg = *left;
Expand Down Expand Up @@ -2597,7 +2632,16 @@ process_arg_token(struct event_format *event, struct print_arg *arg,
}
/* atoms can be more than one token long */
while (type == EVENT_ITEM) {
atom = realloc(atom, strlen(atom) + strlen(token) + 2);
char *new_atom;
new_atom = realloc(atom,
strlen(atom) + strlen(token) + 2);
if (!new_atom) {
free(atom);
*tok = NULL;
free_token(token);
return EVENT_ERROR;
}
atom = new_atom;
strcat(atom, " ");
strcat(atom, token);
free_token(token);
Expand Down

0 comments on commit 36ce4da

Please sign in to comment.