diff options
Diffstat (limited to 'kernel/lib/buffered_write.c')
-rw-r--r-- | kernel/lib/buffered_write.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/kernel/lib/buffered_write.c b/kernel/lib/buffered_write.c new file mode 100644 index 0000000..e948e00 --- /dev/null +++ b/kernel/lib/buffered_write.c @@ -0,0 +1,32 @@ +#include <lib/buffered_write.h> +#include <kmalloc.h> + +int buffered_init(struct buffered *ctx, u16 size) { + ctx->data = kmalloc(size); + if (NULL == ctx->data) { + return 0; + } + ctx->buffer_size = size; + ctx->buffer_usage = 0; + return 1; +} + +int buffered_write(struct buffered *ctx, u8 *data, u16 length) { + if (length + ctx->buffer_usage > ctx->buffer_size) { + return 0; + } + u8 *data_ptr = ctx->data; + data_ptr += ctx->buffer_usage; + + memcpy(data_ptr, data, length); + ctx->buffer_usage += length; + return 1; +} + +void buffered_clear(struct buffered *ctx) { + ctx->buffer_usage = 0; +} + +void buffered_free(struct buffered *ctx) { + kfree(ctx->data); +} |