diff options
| author | Aleksa Vuckovic <aleksav013@gmail.com> | 2022-09-01 23:45:47 +0200 |
|---|---|---|
| committer | Aleksa Vuckovic <aleksav013@gmail.com> | 2022-09-01 23:45:47 +0200 |
| commit | 11ced165e0df11cc3c889eb0cc402467361c421b (patch) | |
| tree | ba6456fdae72e0deff0130612f226cd5d94aea17 /kernel/src/misc | |
| parent | 9a54c41ad07ec00316bb8fcdeba51c215446d454 (diff) | |
timer & stdbuff
Diffstat (limited to 'kernel/src/misc')
| -rw-r--r-- | kernel/src/misc/stdbuff.c | 30 |
1 files changed, 30 insertions, 0 deletions
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 <libk/string.h> +#include <heap.h> +#include <stdbuff.h> + +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; +} |
