diff options
| author | Miklos Szeredi <mszeredi@suse.cz> | 2009-09-21 14:48:36 +0200 | 
|---|---|---|
| committer | Al Viro <viro@zeniv.linux.org.uk> | 2009-09-24 07:47:35 -0400 | 
| commit | f84398068d9c2babe41500504ef247ae07081857 (patch) | |
| tree | 7306df97a7ee62f314f4db152fb2afceff156988 /include/linux/seq_file.h | |
| parent | f9098980ffea9c749622ff8ddf3b6d5831902a46 (diff) | |
vfs: seq_file: add helpers for data filling
Add two helpers that allow access to the seq_file's own buffer, but
hide the internal details of seq_files.
This allows easier implementation of special purpose filling
functions.  It also cleans up some existing functions which duplicated
the seq_file logic.
Make these inline functions in seq_file.h, as suggested by Al.
Signed-off-by: Miklos Szeredi <mszeredi@suse.cz>
Acked-by: Hugh Dickins <hugh.dickins@tiscali.co.uk>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'include/linux/seq_file.h')
| -rw-r--r-- | include/linux/seq_file.h | 38 | 
1 files changed, 38 insertions, 0 deletions
| diff --git a/include/linux/seq_file.h b/include/linux/seq_file.h index 0c6a86b79596..8366d8f12e53 100644 --- a/include/linux/seq_file.h +++ b/include/linux/seq_file.h @@ -35,6 +35,44 @@ struct seq_operations {  #define SEQ_SKIP 1 +/** + * seq_get_buf - get buffer to write arbitrary data to + * @m: the seq_file handle + * @bufp: the beginning of the buffer is stored here + * + * Return the number of bytes available in the buffer, or zero if + * there's no space. + */ +static inline size_t seq_get_buf(struct seq_file *m, char **bufp) +{ +	BUG_ON(m->count > m->size); +	if (m->count < m->size) +		*bufp = m->buf + m->count; +	else +		*bufp = NULL; + +	return m->size - m->count; +} + +/** + * seq_commit - commit data to the buffer + * @m: the seq_file handle + * @num: the number of bytes to commit + * + * Commit @num bytes of data written to a buffer previously acquired + * by seq_buf_get.  To signal an error condition, or that the data + * didn't fit in the available space, pass a negative @num value. + */ +static inline void seq_commit(struct seq_file *m, int num) +{ +	if (num < 0) { +		m->count = m->size; +	} else { +		BUG_ON(m->count + num > m->size); +		m->count += num; +	} +} +  char *mangle_path(char *s, char *p, char *esc);  int seq_open(struct file *, const struct seq_operations *);  ssize_t seq_read(struct file *, char __user *, size_t, loff_t *); | 
