Support to multi-threading and pthread interface (POSIX.1-2008) (#23)
[lunaix-os.git] / lunaix-os / kernel / ds / buffer.c
index 0efea6fe054d7b67e3f699f95e74b90417fea722..c40ed5156d319d2da33d10d86db2f79123f739c6 100644 (file)
@@ -2,18 +2,19 @@
 #include <lunaix/mm/valloc.h>
 
 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;