From 11ced165e0df11cc3c889eb0cc402467361c421b Mon Sep 17 00:00:00 2001 From: Aleksa Vuckovic Date: Thu, 1 Sep 2022 23:45:47 +0200 Subject: timer & stdbuff --- kernel/src/misc/stdbuff.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 kernel/src/misc/stdbuff.c (limited to 'kernel/src/misc') diff --git a/kernel/src/misc/stdbuff.c b/kernel/src/misc/stdbuff.c new file mode 100644 index 0000000..cca58d6 --- /dev/null +++ b/kernel/src/misc/stdbuff.c @@ -0,0 +1,30 @@ +#include +#include +#include + +stdbuff* init_buff(uint32_t buff_size) +{ + stdbuff* buffer = kalloc(sizeof(stdbuff)); + buffer->head = 0; + buffer->tail = 0; + buffer->size = buff_size; + buffer->data = kalloc(buffer->size); + return buffer; +} + +void read_buff(stdbuff* buffer, char* dest_ptr, size_t read_size) +{ + for (size_t i = 0; i < read_size; i++) { + memcpy(dest_ptr + i, buffer->data + ((buffer->tail + i) % buffer->size), 1); + } + dest_ptr[read_size] = '\0'; + buffer->tail = (buffer->tail + read_size) % buffer->size; +} + +void write_buff(stdbuff* buffer, const char* src_ptr, size_t write_size) +{ + for (size_t i = 0; i < write_size; i++) { + memcpy(buffer->data + ((buffer->head + i) % buffer->size), src_ptr + i, 1); + } + buffer->head = (buffer->head + write_size) % buffer->size; +} -- cgit v1.2.3