Commit 0b923606e75f1ab672e25b14ac039a1cdcfa382f
Committed by
Linus Torvalds
1 parent
b99b87f70c
Exists in
master
and in
20 other branches
seq_file: add function to write binary data
seq_write() can be used to construct seq_files containing arbitrary data. Required by the gcov-profiling interface to synthesize binary profiling data files. Signed-off-by: Peter Oberparleiter <oberpar@linux.vnet.ibm.com> Cc: Andi Kleen <andi@firstfloor.org> Cc: Huang Ying <ying.huang@intel.com> Cc: Li Wei <W.Li@Sun.COM> Cc: Michael Ellerman <michaele@au1.ibm.com> Cc: Ingo Molnar <mingo@elte.hu> Cc: Heiko Carstens <heicars2@linux.vnet.ibm.com> Cc: Martin Schwidefsky <mschwid2@linux.vnet.ibm.com> Cc: Rusty Russell <rusty@rustcorp.com.au> Cc: WANG Cong <xiyou.wangcong@gmail.com> Cc: Sam Ravnborg <sam@ravnborg.org> Cc: Jeff Dike <jdike@addtoit.com> Cc: Al Viro <viro@zeniv.linux.org.uk> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Showing 2 changed files with 21 additions and 0 deletions Side-by-side Diff
fs/seq_file.c
... | ... | @@ -640,6 +640,26 @@ |
640 | 640 | } |
641 | 641 | EXPORT_SYMBOL(seq_puts); |
642 | 642 | |
643 | +/** | |
644 | + * seq_write - write arbitrary data to buffer | |
645 | + * @seq: seq_file identifying the buffer to which data should be written | |
646 | + * @data: data address | |
647 | + * @len: number of bytes | |
648 | + * | |
649 | + * Return 0 on success, non-zero otherwise. | |
650 | + */ | |
651 | +int seq_write(struct seq_file *seq, const void *data, size_t len) | |
652 | +{ | |
653 | + if (seq->count + len < seq->size) { | |
654 | + memcpy(seq->buf + seq->count, data, len); | |
655 | + seq->count += len; | |
656 | + return 0; | |
657 | + } | |
658 | + seq->count = seq->size; | |
659 | + return -1; | |
660 | +} | |
661 | +EXPORT_SYMBOL(seq_write); | |
662 | + | |
643 | 663 | struct list_head *seq_list_start(struct list_head *head, loff_t pos) |
644 | 664 | { |
645 | 665 | struct list_head *lh; |
include/linux/seq_file.h
... | ... | @@ -43,6 +43,7 @@ |
43 | 43 | int seq_escape(struct seq_file *, const char *, const char *); |
44 | 44 | int seq_putc(struct seq_file *m, char c); |
45 | 45 | int seq_puts(struct seq_file *m, const char *s); |
46 | +int seq_write(struct seq_file *seq, const void *data, size_t len); | |
46 | 47 | |
47 | 48 | int seq_printf(struct seq_file *, const char *, ...) |
48 | 49 | __attribute__ ((format (printf,2,3))); |