X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/3b6a05fc894d0c1a3d431045ee5a53955ba093a0..270869139db617e29a35bb9ded41087bb702f9ac:/lunaix-os/kernel/ds/buffer.c diff --git a/lunaix-os/kernel/ds/buffer.c b/lunaix-os/kernel/ds/buffer.c index 0efea6f..c40ed51 100644 --- a/lunaix-os/kernel/ds/buffer.c +++ b/lunaix-os/kernel/ds/buffer.c @@ -2,18 +2,19 @@ #include struct vecbuf* -vbuf_alloc(struct vecbuf* vec, void* buf, size_t size) +vbuf_alloc(struct vecbuf** vec, void* buf, size_t size) { struct vecbuf* vbuf = valloc(sizeof(struct vecbuf)); + struct vecbuf* _vec = *vec; - *vbuf = - (struct vecbuf){ .buf = { .buffer = buf, .size = size }, .acc_sz = 0 }; + *vbuf = (struct vecbuf){ .buf = { .buffer = buf, .size = size }, + .acc_sz = vbuf_size(_vec) + size }; - if (vec) { - vbuf->acc_sz = vbuf_size(vec) + size; - llist_append(&vec->components, &vbuf->components); + if (_vec) { + llist_append(&_vec->components, &vbuf->components); } else { - llist_init_head(&vec->components); + llist_init_head(&vbuf->components); + *vec = vbuf; } return vbuf;