1 /* SPDX-License-Identifier: (GPL-2.0-only OR LGPL-2.1-only)
3 * ringbuffer/iterator.h
5 * Ring buffer and channel iterators.
7 * Copyright (C) 2010-2012 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
10 #ifndef _LIB_RING_BUFFER_ITERATOR_H
11 #define _LIB_RING_BUFFER_ITERATOR_H
13 #include <ringbuffer/backend.h>
14 #include <ringbuffer/frontend.h>
15 #include <ringbuffer/vfs.h>
18 * lib_ring_buffer_get_next_record advances the buffer read position to the next
19 * record. It returns either the size of the next record, -EAGAIN if there is
20 * currently no data available, or -ENODATA if no data is available and buffer
23 extern ssize_t
lib_ring_buffer_get_next_record(struct channel
*chan
,
24 struct lib_ring_buffer
*buf
);
27 * channel_get_next_record advances the buffer read position to the next record.
28 * It returns either the size of the next record, -EAGAIN if there is currently
29 * no data available, or -ENODATA if no data is available and buffer is
31 * Returns the current buffer in ret_buf.
33 extern ssize_t
channel_get_next_record(struct channel
*chan
,
34 struct lib_ring_buffer
**ret_buf
);
37 * read_current_record - copy the buffer current record into dest.
39 * @dest: destination where the record should be copied
41 * dest should be large enough to contain the record. Returns the number of
44 static inline size_t read_current_record(struct lib_ring_buffer
*buf
, void *dest
)
46 return lib_ring_buffer_read(&buf
->backend
, buf
->iter
.read_offset
,
47 dest
, buf
->iter
.payload_len
);
50 extern int lib_ring_buffer_iterator_open(struct lib_ring_buffer
*buf
);
51 extern void lib_ring_buffer_iterator_release(struct lib_ring_buffer
*buf
);
52 extern int channel_iterator_open(struct channel
*chan
);
53 extern void channel_iterator_release(struct channel
*chan
);
55 extern const struct file_operations channel_payload_file_operations
;
56 extern const struct file_operations lib_ring_buffer_payload_file_operations
;
61 int channel_iterator_init(struct channel
*chan
);
62 void channel_iterator_unregister_notifiers(struct channel
*chan
);
63 void channel_iterator_free(struct channel
*chan
);
64 void channel_iterator_reset(struct channel
*chan
);
65 void lib_ring_buffer_iterator_reset(struct lib_ring_buffer
*buf
);
67 #endif /* _LIB_RING_BUFFER_ITERATOR_H */