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