• Home
  • Raw
  • Download

Lines Matching +full:len +full:- +full:or +full:- +full:define

1 // SPDX-License-Identifier: LGPL-2.1
6 #include "trace-seq.h"
14 #include "event-parse.h"
15 #include "event-utils.h"
21 #define TRACE_SEQ_POISON ((void *)0xdeadbeef)
22 #define TRACE_SEQ_CHECK(s) \
24 if (WARN_ONCE((s)->buffer == TRACE_SEQ_POISON, \
26 (s)->state = TRACE_SEQ__BUFFER_POISONED; \
29 #define TRACE_SEQ_CHECK_RET_N(s, n) \
32 if ((s)->state != TRACE_SEQ__GOOD) \
36 #define TRACE_SEQ_CHECK_RET(s) TRACE_SEQ_CHECK_RET_N(s, )
37 #define TRACE_SEQ_CHECK_RET0(s) TRACE_SEQ_CHECK_RET_N(s, 0)
40 * trace_seq_init - initialize the trace_seq structure
45 s->len = 0; in trace_seq_init()
46 s->readpos = 0; in trace_seq_init()
47 s->buffer_size = TRACE_SEQ_BUF_SIZE; in trace_seq_init()
48 s->buffer = malloc(s->buffer_size); in trace_seq_init()
49 if (s->buffer != NULL) in trace_seq_init()
50 s->state = TRACE_SEQ__GOOD; in trace_seq_init()
52 s->state = TRACE_SEQ__MEM_ALLOC_FAILED; in trace_seq_init()
56 * trace_seq_reset - re-initialize the trace_seq structure
64 s->len = 0; in trace_seq_reset()
65 s->readpos = 0; in trace_seq_reset()
69 * trace_seq_destroy - free up memory of a trace_seq
79 free(s->buffer); in trace_seq_destroy()
80 s->buffer = TRACE_SEQ_POISON; in trace_seq_destroy()
87 buf = realloc(s->buffer, s->buffer_size + TRACE_SEQ_BUF_SIZE); in expand_buffer()
89 s->state = TRACE_SEQ__MEM_ALLOC_FAILED; in expand_buffer()
93 s->buffer = buf; in expand_buffer()
94 s->buffer_size += TRACE_SEQ_BUF_SIZE; in expand_buffer()
98 * trace_seq_printf - sequence printing of trace information
103 * space, the number of characters printed, or a negative
106 * The tracer may use either sequence operations or its own
110 * the sequencer or pulled into another buffer.
116 int len; in trace_seq_printf() local
122 len = (s->buffer_size - 1) - s->len; in trace_seq_printf()
125 ret = vsnprintf(s->buffer + s->len, len, fmt, ap); in trace_seq_printf()
128 if (ret >= len) { in trace_seq_printf()
134 s->len += ret; in trace_seq_printf()
140 * trace_seq_vprintf - sequence printing of trace information
145 * space, the number of characters printed, or a negative
148 * The tracer may use either sequence operations or its own
152 * the sequencer or pulled into another buffer.
157 int len; in trace_seq_vprintf() local
163 len = (s->buffer_size - 1) - s->len; in trace_seq_vprintf()
165 ret = vsnprintf(s->buffer + s->len, len, fmt, args); in trace_seq_vprintf()
167 if (ret >= len) { in trace_seq_vprintf()
173 s->len += ret; in trace_seq_vprintf()
179 * trace_seq_puts - trace sequence printing of simple string
183 * The tracer may use either the sequence operations or its own
186 * or other mechanism.
190 int len; in trace_seq_puts() local
194 len = strlen(str); in trace_seq_puts()
196 while (len > ((s->buffer_size - 1) - s->len)) in trace_seq_puts()
201 memcpy(s->buffer + s->len, str, len); in trace_seq_puts()
202 s->len += len; in trace_seq_puts()
204 return len; in trace_seq_puts()
211 while (s->len >= (s->buffer_size - 1)) in trace_seq_putc()
216 s->buffer[s->len++] = c; in trace_seq_putc()
226 s->buffer[s->len] = 0; in trace_seq_terminate()
233 switch (s->state) { in trace_seq_do_fprintf()
235 return fprintf(fp, "%.*s", s->len, s->buffer); in trace_seq_do_fprintf()
243 return -1; in trace_seq_do_fprintf()