aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteven Rostedt <srostedt@redhat.com>2009-11-23 13:46:54 -0500
committerSteven Rostedt <rostedt@goodmis.org>2009-11-23 13:46:54 -0500
commit9bf0a9f94cbd83f339419e2784bd37eab812ea10 (patch)
tree54328ab11c8648c26bb54663c1ecd4eeb6217bed
parent11fd268cd1584f815b2dc064d51744bd0a57eee9 (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.c10
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;