xref: /aosp_15_r20/external/kmod/shared/scratchbuf.h (revision cc4ad7da8cefe208cb129ac2aa9a357c7c72deb2)
1*cc4ad7daSAndroid Build Coastguard Worker #pragma once
2*cc4ad7daSAndroid Build Coastguard Worker 
3*cc4ad7daSAndroid Build Coastguard Worker #include <stdbool.h>
4*cc4ad7daSAndroid Build Coastguard Worker #include <stdlib.h>
5*cc4ad7daSAndroid Build Coastguard Worker 
6*cc4ad7daSAndroid Build Coastguard Worker #include <shared/macro.h>
7*cc4ad7daSAndroid Build Coastguard Worker 
8*cc4ad7daSAndroid Build Coastguard Worker /*
9*cc4ad7daSAndroid Build Coastguard Worker  * Buffer abstract data type
10*cc4ad7daSAndroid Build Coastguard Worker  */
11*cc4ad7daSAndroid Build Coastguard Worker struct scratchbuf {
12*cc4ad7daSAndroid Build Coastguard Worker 	char *bytes;
13*cc4ad7daSAndroid Build Coastguard Worker 	size_t size;
14*cc4ad7daSAndroid Build Coastguard Worker 	bool need_free;
15*cc4ad7daSAndroid Build Coastguard Worker };
16*cc4ad7daSAndroid Build Coastguard Worker 
17*cc4ad7daSAndroid Build Coastguard Worker void scratchbuf_init(struct scratchbuf *buf, char *stackbuf, size_t size);
18*cc4ad7daSAndroid Build Coastguard Worker int scratchbuf_alloc(struct scratchbuf *buf, size_t sz);
19*cc4ad7daSAndroid Build Coastguard Worker void scratchbuf_release(struct scratchbuf *buf);
20*cc4ad7daSAndroid Build Coastguard Worker 
21*cc4ad7daSAndroid Build Coastguard Worker /* Return a C string */
scratchbuf_str(struct scratchbuf * buf)22*cc4ad7daSAndroid Build Coastguard Worker static inline char *scratchbuf_str(struct scratchbuf *buf)
23*cc4ad7daSAndroid Build Coastguard Worker {
24*cc4ad7daSAndroid Build Coastguard Worker 	return buf->bytes;
25*cc4ad7daSAndroid Build Coastguard Worker }
26*cc4ad7daSAndroid Build Coastguard Worker 
27*cc4ad7daSAndroid Build Coastguard Worker #define SCRATCHBUF_INITIALIZER(buf_) {			\
28*cc4ad7daSAndroid Build Coastguard Worker 	.bytes = buf_,					\
29*cc4ad7daSAndroid Build Coastguard Worker 	.size = sizeof(buf_) + _array_size_chk(buf_),	\
30*cc4ad7daSAndroid Build Coastguard Worker 	.need_free = false,				\
31*cc4ad7daSAndroid Build Coastguard Worker }
32