Perhaps have an sb_alloc function and a failure mode that uses printk when sb_alloc fails or sb_append is passed null?
Perhaps something like: stringbuf *sb_alloc(char* level, gfp_t priority) { stringbuf *sb = kmalloc(sizeof(*sb), priority); if (sb) sb>len = sprintf(sb->buf, "%s", level); else printk(level); return sb; } EXPORT_SYMBOL(sb_alloc); /** * sb_append - append to a stringbuf * @sb: a pointer to the stringbuf * @fmt: printf-style format */ void sb_append(struct stringbuf *sb, const char *fmt, ...) { va_list args; va_start(args, fmt); if (sb) sb->len += vscnprintf(&sb->buf[len], sizeof(sb->buf) - sb->len, fmt, args); else vprintk(fmt, args); va_end(args); } EXPORT_SYMBOL(sb_append); void sb_printk(struct stringbuf *sb) { if (sb && sb->len > 0) { printk(sb->buf); sb->len = 0; } } EXPORT_SYMBOL(sb_printk); void sb_free(stringbuf *sb) { kfree(sb); } EXPORT_SYMBOL(sb_free); - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/