diff options
Diffstat (limited to 'lib/seq_buf.c')
| -rw-r--r-- | lib/seq_buf.c | 28 | 
1 files changed, 13 insertions, 15 deletions
diff --git a/lib/seq_buf.c b/lib/seq_buf.c index 45c450f423fa..010c730ca7fc 100644 --- a/lib/seq_buf.c +++ b/lib/seq_buf.c @@ -109,9 +109,7 @@ void seq_buf_do_printk(struct seq_buf *s, const char *lvl)  	if (s->size == 0 || s->len == 0)  		return; -	seq_buf_terminate(s); - -	start = s->buffer; +	start = seq_buf_str(s);  	while ((lf = strchr(start, '\n'))) {  		int len = lf - start + 1; @@ -189,6 +187,7 @@ int seq_buf_puts(struct seq_buf *s, const char *str)  	seq_buf_set_overflow(s);  	return -1;  } +EXPORT_SYMBOL_GPL(seq_buf_puts);  /**   * seq_buf_putc - sequence printing of simple character @@ -210,6 +209,7 @@ int seq_buf_putc(struct seq_buf *s, unsigned char c)  	seq_buf_set_overflow(s);  	return -1;  } +EXPORT_SYMBOL_GPL(seq_buf_putc);  /**   * seq_buf_putmem - write raw data into the sequenc buffer @@ -324,23 +324,24 @@ int seq_buf_path(struct seq_buf *s, const struct path *path, const char *esc)   * seq_buf_to_user - copy the sequence buffer to user space   * @s: seq_buf descriptor   * @ubuf: The userspace memory location to copy to + * @start: The first byte in the buffer to copy   * @cnt: The amount to copy   *   * Copies the sequence buffer into the userspace memory pointed to - * by @ubuf. It starts from the last read position (@s->readpos) - * and writes up to @cnt characters or till it reaches the end of - * the content in the buffer (@s->len), which ever comes first. + * by @ubuf. It starts from @start and writes up to @cnt characters + * or until it reaches the end of the content in the buffer (@s->len), + * whichever comes first.   *   * On success, it returns a positive number of the number of bytes   * it copied.   *   * On failure it returns -EBUSY if all of the content in the   * sequence has been already read, which includes nothing in the - * sequence (@s->len == @s->readpos). + * sequence (@s->len == @start).   *   * Returns -EFAULT if the copy to userspace fails.   */ -int seq_buf_to_user(struct seq_buf *s, char __user *ubuf, int cnt) +int seq_buf_to_user(struct seq_buf *s, char __user *ubuf, size_t start, int cnt)  {  	int len;  	int ret; @@ -350,20 +351,17 @@ int seq_buf_to_user(struct seq_buf *s, char __user *ubuf, int cnt)  	len = seq_buf_used(s); -	if (len <= s->readpos) +	if (len <= start)  		return -EBUSY; -	len -= s->readpos; +	len -= start;  	if (cnt > len)  		cnt = len; -	ret = copy_to_user(ubuf, s->buffer + s->readpos, cnt); +	ret = copy_to_user(ubuf, s->buffer + start, cnt);  	if (ret == cnt)  		return -EFAULT; -	cnt -= ret; - -	s->readpos += cnt; -	return cnt; +	return cnt - ret;  }  /**  | 
