diff options
author | Steven Rostedt (Red Hat) <rostedt@goodmis.org> | 2014-10-29 13:48:37 -0400 |
---|---|---|
committer | Steven Rostedt <rostedt@goodmis.org> | 2014-11-19 22:01:10 -0500 |
commit | dd23180aacf4b27d48f40b27249f1e58c8df03be (patch) | |
tree | 18b658af8993237ed6194dc5328de7d182df6a59 /kernel/trace/seq_buf.c | |
parent | 3a161d99c43ce74c76aecff309be4c3ba455e823 (diff) |
tracing: Convert seq_buf_path() to be like seq_path()
Rewrite seq_buf_path() like it is done in seq_path() and allow
it to accept any escape character instead of just "\n".
Making seq_buf_path() like seq_path() will help prevent problems
when converting seq_file to use the seq_buf logic.
Link: http://lkml.kernel.org/r/20141104160222.048795666@goodmis.org
Link: http://lkml.kernel.org/r/20141114011412.338523371@goodmis.org
Tested-by: Jiri Kosina <jkosina@suse.cz>
Acked-by: Jiri Kosina <jkosina@suse.cz>
Reviewed-by: Petr Mladek <pmladek@suse.cz>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
Diffstat (limited to 'kernel/trace/seq_buf.c')
-rw-r--r-- | kernel/trace/seq_buf.c | 28 |
1 files changed, 16 insertions, 12 deletions
diff --git a/kernel/trace/seq_buf.c b/kernel/trace/seq_buf.c index e9a7861595d2..7dac34d1235b 100644 --- a/kernel/trace/seq_buf.c +++ b/kernel/trace/seq_buf.c | |||
@@ -272,28 +272,32 @@ int seq_buf_putmem_hex(struct seq_buf *s, const void *mem, | |||
272 | * seq_buf_path - copy a path into the sequence buffer | 272 | * seq_buf_path - copy a path into the sequence buffer |
273 | * @s: seq_buf descriptor | 273 | * @s: seq_buf descriptor |
274 | * @path: path to write into the sequence buffer. | 274 | * @path: path to write into the sequence buffer. |
275 | * @esc: set of characters to escape in the output | ||
275 | * | 276 | * |
276 | * Write a path name into the sequence buffer. | 277 | * Write a path name into the sequence buffer. |
277 | * | 278 | * |
278 | * Returns zero on success, -1 on overflow | 279 | * Returns the number of written bytes on success, -1 on overflow |
279 | */ | 280 | */ |
280 | int seq_buf_path(struct seq_buf *s, const struct path *path) | 281 | int seq_buf_path(struct seq_buf *s, const struct path *path, const char *esc) |
281 | { | 282 | { |
282 | unsigned int len = seq_buf_buffer_left(s); | 283 | char *buf = s->buffer + s->len; |
283 | unsigned char *p; | 284 | size_t size = seq_buf_buffer_left(s); |
285 | int res = -1; | ||
284 | 286 | ||
285 | WARN_ON(s->size == 0); | 287 | WARN_ON(s->size == 0); |
286 | 288 | ||
287 | p = d_path(path, s->buffer + s->len, len); | 289 | if (size) { |
288 | if (!IS_ERR(p)) { | 290 | char *p = d_path(path, buf, size); |
289 | p = mangle_path(s->buffer + s->len, p, "\n"); | 291 | if (!IS_ERR(p)) { |
290 | if (p) { | 292 | char *end = mangle_path(buf, p, esc); |
291 | s->len = p - s->buffer; | 293 | if (end) |
292 | return 0; | 294 | res = end - buf; |
293 | } | 295 | } |
294 | } | 296 | } |
295 | seq_buf_set_overflow(s); | 297 | if (res > 0) |
296 | return -1; | 298 | s->len += res; |
299 | |||
300 | return res; | ||
297 | } | 301 | } |
298 | 302 | ||
299 | /** | 303 | /** |