diff options
author | Steven Rostedt <srostedt@redhat.com> | 2009-11-23 13:46:54 -0500 |
---|---|---|
committer | Steven Rostedt <rostedt@goodmis.org> | 2009-11-23 13:46:54 -0500 |
commit | 9bf0a9f94cbd83f339419e2784bd37eab812ea10 (patch) | |
tree | 54328ab11c8648c26bb54663c1ecd4eeb6217bed | |
parent | 11fd268cd1584f815b2dc064d51744bd0a57eee9 (diff) |
Fix print output
The standard print statement would use a zero size field for the string
data. This was not handled well, and the print statement never printed
any data.
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
-rw-r--r-- | parse-events.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/parse-events.c b/parse-events.c index 5271c01..6478efc 100644 --- a/parse-events.c +++ b/parse-events.c | |||
@@ -2173,6 +2173,7 @@ static void print_str_arg(struct trace_seq *s, void *data, int size, | |||
2173 | unsigned long long val, fval; | 2173 | unsigned long long val, fval; |
2174 | char *str; | 2174 | char *str; |
2175 | int print; | 2175 | int print; |
2176 | int len; | ||
2176 | 2177 | ||
2177 | switch (arg->type) { | 2178 | switch (arg->type) { |
2178 | case PRINT_NULL: | 2179 | case PRINT_NULL: |
@@ -2187,10 +2188,11 @@ static void print_str_arg(struct trace_seq *s, void *data, int size, | |||
2187 | if (!arg->field.field) | 2188 | if (!arg->field.field) |
2188 | die("field %s not found", arg->field.name); | 2189 | die("field %s not found", arg->field.name); |
2189 | } | 2190 | } |
2190 | str = malloc_or_die(arg->field.field->size + 1); | 2191 | /* Zero sized fields, mean the rest of the data */ |
2191 | memcpy(str, data + arg->field.field->offset, | 2192 | len = arg->field.field->size ? : size; |
2192 | arg->field.field->size); | 2193 | str = malloc_or_die(size + 1); |
2193 | str[arg->field.field->size] = 0; | 2194 | memcpy(str, data + arg->field.field->offset, len); |
2195 | str[len] = 0; | ||
2194 | trace_seq_puts(s, str); | 2196 | trace_seq_puts(s, str); |
2195 | free(str); | 2197 | free(str); |
2196 | break; | 2198 | break; |