replace all stdlib malloc/free with UCX allocator

Fri, 16 May 2025 07:54:02 +0200

author
Mike Becker <universe@uap-core.de>
date
Fri, 16 May 2025 07:54:02 +0200
changeset 122
1b118cd3e369
parent 121
ede9a9e92ff9
child 123
737a676a46a6

replace all stdlib malloc/free with UCX allocator

src/ascension/scene_node.h file | annotate | diff | comparison | revisions
src/mesh.c file | annotate | diff | comparison | revisions
src/scene_node.c file | annotate | diff | comparison | revisions
src/shader.c file | annotate | diff | comparison | revisions
src/sprite.c file | annotate | diff | comparison | revisions
src/text.c file | annotate | diff | comparison | revisions
--- a/src/ascension/scene_node.h	Wed May 14 20:14:18 2025 +0200
+++ b/src/ascension/scene_node.h	Fri May 16 07:54:02 2025 +0200
@@ -34,6 +34,9 @@
 #include "datatypes.h"
 #include "transform.h"
 
+// TODO: remove once this feature is implemented in UCX
+#define cxZallocDefault(size) cxCallocDefault(1, size)
+
 typedef struct asc_scene_node_s AscSceneNode;
 
 typedef void(*asc_scene_node_destroy_func)(AscSceneNode*);
--- a/src/mesh.c	Wed May 14 20:14:18 2025 +0200
+++ b/src/mesh.c	Fri May 16 07:54:02 2025 +0200
@@ -28,6 +28,8 @@
 #include "ascension/error.h"
 #include "ascension/mesh.h"
 
+#include <cx/allocator.h>
+
 #include <GL/glew.h>
 
 void asc_mesh_allocate_buffers(AscMesh *mesh, unsigned count) {
@@ -72,7 +74,7 @@
 
 void asc_mesh_destroy(AscMesh *mesh) {
     asc_mesh_free_buffers(mesh, 1);
-    free(mesh->vtx_data);
+    cxFreeDefault(mesh->vtx_data);
 }
 
 void asc_mesh_init_plane_2d(AscMesh *mesh, struct asc_mesh_init_plane_2d_args args) {
@@ -84,7 +86,7 @@
 
     // free any previous data
     if (mesh->vtx_data && mesh->vtx_data_size < required_memory) {
-        free(mesh->vtx_data);
+        cxFreeDefault(mesh->vtx_data);
         mesh->vtx_data = NULL;
     }
 
@@ -93,7 +95,7 @@
     if (mesh->vtx_data == NULL) {
         asc_dprintf("Create plane in VBO %u and VAO %u", mesh->vbo, mesh->vao);
         mesh->vtx_data_size = required_memory;
-        data = malloc(mesh->vtx_data_size);
+        data = cxMallocDefault(mesh->vtx_data_size);
         mesh->vtx_data = (float*) data;
     } else {
         data = (AscMeshVertex2d*) mesh->vtx_data;
--- a/src/scene_node.c	Wed May 14 20:14:18 2025 +0200
+++ b/src/scene_node.c	Fri May 16 07:54:02 2025 +0200
@@ -46,7 +46,7 @@
 }
 
 AscSceneNode *asc_scene_node_empty(void) {
-    AscSceneNode *node = calloc(1, sizeof(AscSceneNode));
+    AscSceneNode *node = cxZallocDefault(sizeof(AscSceneNode));
     node->render_group = ASC_RENDER_GROUP_NONE;
     node->scale = asc_vec3f_one;
     asc_transform_identity(node->transform);
@@ -76,12 +76,12 @@
     cx_foreach(AscSceneNode*, child, iter) {
         if (!iter.exiting) continue;
         asc_scene_node_destroy(child);
-        free(child);
+        cxFreeDefault(child);
     }
 }
 
 void asc_scene_node_name(AscSceneNode *node, const char *name) {
-    free(node->name.ptr);
+    cx_strfree(&node->name);
     if (name == NULL) {
         node->name.ptr = NULL;
         node->name.length = 0;
--- a/src/shader.c	Wed May 14 20:14:18 2025 +0200
+++ b/src/shader.c	Fri May 16 07:54:02 2025 +0200
@@ -172,7 +172,8 @@
     cxBufferInit(&buffer, NULL, 1024, NULL, CX_BUFFER_AUTO_EXTEND);
     cx_stream_copy(f, &buffer, (cx_read_func) fread, cxBufferWriteFunc);
     cxBufferPut(&buffer, '\0');
-    *code = realloc(buffer.space, buffer.size);
+    cxBufferShrink(&buffer, 0);
+    *code = buffer.space;
     return *code == NULL ? -1 : 0;
 }
 
@@ -184,6 +185,6 @@
 }
 
 void asc_shader_free_codes(AscShaderCodes codes) {
-    free(codes.vtx);
-    free(codes.frag);
+    cxFreeDefault(codes.vtx);
+    cxFreeDefault(codes.frag);
 }
--- a/src/sprite.c	Wed May 14 20:14:18 2025 +0200
+++ b/src/sprite.c	Fri May 16 07:54:02 2025 +0200
@@ -60,7 +60,7 @@
 }
 
 AscSceneNode *asc_sprite_create(struct asc_sprite_create_args args) {
-    AscSprite *sprite = calloc(1, sizeof(AscSprite));
+    AscSprite *sprite = cxZallocDefault(sizeof(AscSprite));
 
     // sprite parameters
     args.texture->refcount++;
--- a/src/text.c	Wed May 14 20:14:18 2025 +0200
+++ b/src/text.c	Fri May 16 07:54:02 2025 +0200
@@ -83,12 +83,12 @@
     asc_mesh_destroy(&sprite->mesh);
     asc_texture_destroy(sprite->texture, 1);
     assert(sprite->texture->refcount == 0);
-    free(sprite->texture);
+    cxFreeDefault(sprite->texture);
     cx_strfree(&text->text);
 }
 
 AscSceneNode *asc_text_create(struct asc_text_create_args args) {
-    AscText *text = calloc(1, sizeof(AscText));
+    AscText *text = cxZallocDefault(sizeof(AscText));
     AscSceneNode *node = &text->base.data;
 
     // node properties
@@ -112,7 +112,7 @@
 
     // initialize texture
     // mesh will be created in the update func
-    text->base.texture = malloc(sizeof(AscTexture));
+    text->base.texture = cxMallocDefault(sizeof(AscTexture));
     asc_texture_init_rectangle(text->base.texture, 1);
     asc_text_update(node);
 

mercurial