From 7ae336d4991b9ab61f741261e8774309f30d56c3 Mon Sep 17 00:00:00 2001 From: Imbus <> Date: Sun, 23 Jun 2024 16:27:51 +0200 Subject: [PATCH] Driver code, currently segfaulting --- Makefile | 6 ++++++ driver | Bin 0 -> 16688 bytes driver.c | 19 +++++++++++++++++++ ringbuf.c | 14 ++++++++------ ringbuf.h | 24 +++++++++++++++--------- 5 files changed, 48 insertions(+), 15 deletions(-) create mode 100755 driver create mode 100644 driver.c diff --git a/Makefile b/Makefile index e117a77..8bc2486 100644 --- a/Makefile +++ b/Makefile @@ -25,6 +25,12 @@ all: $(OBJECTS) @$(CC) $(CFLAGS) -S -masm=intel $< wc -l $@ +driver: $(OBJECTS) + @$(CC) $(CFLAGS) $^ -o $@ + +run: driver + @./driver + clean: rm -f $(OBJECTS) $(ASMS) diff --git a/driver b/driver new file mode 100755 index 0000000000000000000000000000000000000000..bf016f18dbc8da22e7e8b609a680fb9529a52bae GIT binary patch literal 16688 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 Nwn(@Ly8tdx{1^6uZZ7}; literal 0 HcmV?d00001 diff --git a/driver.c b/driver.c new file mode 100644 index 0000000..2bfd934 --- /dev/null +++ b/driver.c @@ -0,0 +1,19 @@ +/* SPDX-License-Identifier: MIT */ + +#include +#include + +#define rb_size_t size_t +#include "ringbuf.h" + +int main(void) { + struct RingBuf rb; + rb_init(&rb, 10, malloc, sizeof(int)); + + int data[] = {1, 2, 3, 4, 5}; + rb_push(&rb, (void **)data, 5, memcpy); + + // rb_destroy(&rb, free); + + return 0; +} \ No newline at end of file diff --git a/ringbuf.c b/ringbuf.c index 375b5d5..bf9b85b 100644 --- a/ringbuf.c +++ b/ringbuf.c @@ -2,8 +2,8 @@ #include "ringbuf.h" -void rb_init(struct RingBuf *rb, int capacity, void *(*alloc)(int), - int struct_size) { +void rb_init(struct RingBuf *rb, rb_size_t capacity, void *(*alloc)(rb_size_t), + rb_size_t struct_size) { rb->struct_size = struct_size; rb->capacity = capacity; rb->write_idx = 0; @@ -11,15 +11,17 @@ void rb_init(struct RingBuf *rb, int capacity, void *(*alloc)(int), rb->buffer = alloc(capacity * struct_size); /* Calloc? */ } -void rb_destroy(struct RingBuf *rb, int(free)(void *)) { free(rb->buffer); } +void rb_destroy(struct RingBuf *rb, rb_size_t(free)(void *)) { + free(rb->buffer); +} -enum WriteResult rb_push(struct RingBuf *rb, void *data[], int amount, - int (*memcpy)(void *, const void *, int)) { +enum WriteResult rb_push(struct RingBuf *rb, void *data[], rb_size_t amount, + void *(*memcpy)(void *, const void *, rb_size_t)) { if (rb->write_idx + amount >= rb->capacity) { return CollisionError; } - for (int i = 0; i < amount; i++) { + for (rb_size_t i = 0; i < amount; i++) { memcpy(rb->buffer + rb->write_idx * rb->struct_size, data[i], rb->struct_size); rb->write_idx = (rb->write_idx + 1) % rb->capacity; diff --git a/ringbuf.h b/ringbuf.h index 94c5795..9c28559 100644 --- a/ringbuf.h +++ b/ringbuf.h @@ -1,25 +1,31 @@ /* SPDX-License-Identifier: MIT */ +#pragma once + +#ifndef rb_size_t +#define rb_size_t int +#endif + /** * Ring buffer, also known as circular buffer. */ struct RingBuf { - int struct_size; /* Size of the struct */ - int capacity; /* The physical capacity of the entire ringbuf */ - int write_idx; /* The write head */ - int read_idx; /* THe read head */ - void **buffer; /* The actual data */ + rb_size_t struct_size; /* Size of the struct */ + rb_size_t capacity; /* The physical capacity of the entire ringbuf */ + rb_size_t write_idx; /* The write head */ + rb_size_t read_idx; /* THe read head */ + void **buffer; /* The actual data */ }; enum WriteResult { CollisionError, Ok }; /** Initialize the ring buffer */ -void rb_init(struct RingBuf *rb, int capacity, void *(*alloc)(int), - int struct_size); +void rb_init(struct RingBuf *rb, rb_size_t capacity, void *(*alloc)(rb_size_t), + rb_size_t struct_size); /** Insert data to the ring buffer */ -enum WriteResult rb_push(struct RingBuf *rb, void *data[], int amount, - int (*memcpy)(void *, const void *, int)); +enum WriteResult rb_push(struct RingBuf *rb, void *data[], rb_size_t amount, + void *(*memcpy)(void *, const void *, rb_size_t)); /** Read data from the ring buffer */ // void *rb_read(struct RingBuf *rb, int amount); \ No newline at end of file