• Kees Cook's avatar
    seq_buf: Introduce DECLARE_SEQ_BUF and seq_buf_str() · dcc4e572
    Kees Cook authored
    Solve two ergonomic issues with struct seq_buf;
    
    1) Too much boilerplate is required to initialize:
    
    	struct seq_buf s;
    	char buf[32];
    
    	seq_buf_init(s, buf, sizeof(buf));
    
    Instead, we can build this directly on the stack. Provide
    DECLARE_SEQ_BUF() macro to do this:
    
    	DECLARE_SEQ_BUF(s, 32);
    
    2) %NUL termination is fragile and requires 2 steps to get a valid
       C String (and is a layering violation exposing the "internals" of
       seq_buf):
    
    	seq_buf_terminate(s);
    	do_something(s->buffer);
    
    Instead, we can just return s->buffer directly after terminating it in
    the refactored seq_buf_terminate(), now known as seq_buf_str():
    
    	do_something(seq_buf_str(s));
    
    Link: https://lore.kernel.org/linux-trace-kernel/20231027155634.make.260-kees@kernel.org
    Link: https://lore.kernel.org/linux-trace-kernel/20231026194033.it.702-kees@kernel.org/
    
    Cc: Yosry Ahmed <yosryahmed@google.com>
    Cc: "Matthew Wilcox (Oracle)" <willy@infradead.org>
    Cc: Christoph Hellwig <hch@lst.de>
    Cc: Justin Stitt <justinstitt@google.com>
    Cc: Kent Overstreet <kent.overstreet@linux.dev>
    Cc: Petr Mladek <pmladek@suse.com>
    Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Cc: Rasmus Villemoes <linux@rasmusvillemoes.dk>
    Cc: Sergey Senozhatsky <senozhatsky@chromium.org>
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Cc: Arnd Bergmann <arnd@arndb.de>
    Cc: Jonathan Corbet <corbet@lwn.net>
    Cc: Yun Zhou <yun.zhou@windriver.com>
    Cc: Jacob Keller <jacob.e.keller@intel.com>
    Cc: Zhen Lei <thunder.leizhen@huawei.com>
    Signed-off-by: default avatarKees Cook <keescook@chromium.org>
    Signed-off-by: default avatarSteven Rostedt (Google) <rostedt@goodmis.org>
    dcc4e572
seq_buf.h 4.19 KB