Commit f2616c77 authored by Steven Rostedt (VMware)'s avatar Steven Rostedt (VMware)
Browse files

seq_buf: Add seq_buf_terminate() API



In the case that the seq_buf buffer needs to be printed directly, add a way
to make sure that the buffer is safe to read by forcing a nul terminating
character at the end of the string, or the last byte of the buffer if the
string has overflowed.

Signed-off-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
parent 5013f454
Loading
Loading
Loading
Loading
+25 −0
Original line number Diff line number Diff line
@@ -71,6 +71,31 @@ static inline unsigned int seq_buf_used(struct seq_buf *s)
	return min(s->len, s->size);
}

/**
 * seq_buf_terminate - Make sure buffer is nul terminated
 * @s: the seq_buf descriptor to terminate.
 *
 * This makes sure that the buffer in @s is nul terminated and
 * safe to read as a string.
 *
 * Note, if this is called when the buffer has overflowed, then
 * the last byte of the buffer is zeroed, and the len will still
 * point passed it.
 *
 * After this function is called, s->buffer is safe to use
 * in string operations.
 */
static inline void seq_buf_terminate(struct seq_buf *s)
{
	if (WARN_ON(s->size == 0))
		return;

	if (seq_buf_buffer_left(s))
		s->buffer[s->len] = 0;
	else
		s->buffer[s->size - 1] = 0;
}

/**
 * seq_buf_get_buf - get buffer to write arbitrary data to
 * @s: the seq_buf handle