trace-seq.h (1435B)
1// SPDX-License-Identifier: LGPL-2.1 2/* 3 * Copyright (C) 2009, 2010 Red Hat Inc, Steven Rostedt <srostedt@redhat.com> 4 * 5 */ 6 7#ifndef _TRACE_SEQ_H 8#define _TRACE_SEQ_H 9 10#include <stdarg.h> 11#include <stdio.h> 12 13/* ----------------------- trace_seq ----------------------- */ 14 15#ifndef TRACE_SEQ_BUF_SIZE 16#define TRACE_SEQ_BUF_SIZE 4096 17#endif 18 19enum trace_seq_fail { 20 TRACE_SEQ__GOOD, 21 TRACE_SEQ__BUFFER_POISONED, 22 TRACE_SEQ__MEM_ALLOC_FAILED, 23}; 24 25/* 26 * Trace sequences are used to allow a function to call several other functions 27 * to create a string of data to use (up to a max of PAGE_SIZE). 28 */ 29 30struct trace_seq { 31 char *buffer; 32 unsigned int buffer_size; 33 unsigned int len; 34 unsigned int readpos; 35 enum trace_seq_fail state; 36}; 37 38void trace_seq_init(struct trace_seq *s); 39void trace_seq_reset(struct trace_seq *s); 40void trace_seq_destroy(struct trace_seq *s); 41 42extern int trace_seq_printf(struct trace_seq *s, const char *fmt, ...) 43 __attribute__ ((format (printf, 2, 3))); 44extern int trace_seq_vprintf(struct trace_seq *s, const char *fmt, va_list args) 45 __attribute__ ((format (printf, 2, 0))); 46 47extern int trace_seq_puts(struct trace_seq *s, const char *str); 48extern int trace_seq_putc(struct trace_seq *s, unsigned char c); 49 50extern void trace_seq_terminate(struct trace_seq *s); 51 52extern int trace_seq_do_fprintf(struct trace_seq *s, FILE *fp); 53extern int trace_seq_do_printf(struct trace_seq *s); 54 55#endif /* _TRACE_SEQ_H */