commit c00075d

uint  ·  2026-08-07 18:09:53 +0000 UTC
parent 27086f6
PNG: Add creating and loading PNG binary into buffer
2 files changed,  +67, -0
+23, -0
 1@@ -0,0 +1,23 @@
 2+#ifndef ULEPNG_H
 3+#define ULEPNG_H
 4+
 5+#include <stddef.h>
 6+
 7+typedef enum {
 8+	ULEPNG_ERR_NONE,
 9+	ULEPNG_ERR_OOM, /* Out of memory */
10+
11+	ULEPNG_ERR_LAST
12+} UlePNGErr;
13+
14+typedef struct {
15+	unsigned char* data;
16+	size_t         size;
17+	UlePNGErr      err;
18+} ulepng;
19+
20+ulepng* ulepng_init(void);
21+ulepng* ulepng_load_file(const char* path);
22+
23+#endif /* ULEPNG_H */
24+
+44, -0
 1@@ -0,0 +1,44 @@
 2+#include <stdio.h>
 3+#include <stdlib.h>
 4+
 5+#include "ulepng.h"
 6+
 7+ulepng* ulepng_init(void)
 8+{
 9+	ulepng* png = malloc(sizeof(ulepng));
10+	if (png == NULL)
11+		return NULL;
12+
13+	png->data = NULL;
14+	png->size = 0;
15+
16+	return png;
17+}
18+
19+ulepng* ulepng_load_file(const char* path)
20+{
21+	ulepng* png = ulepng_init();
22+	FILE* file = NULL;
23+
24+	file = fopen(path, "rb");
25+	if (file == NULL)
26+		return NULL;
27+
28+	/* get file size */
29+	fseek(file, 0L, SEEK_END);
30+	png->size = ftell(file);
31+	rewind(file);
32+
33+	png->data = malloc(png->size);
34+	if (png->data == NULL) {
35+		png->err = ULEPNG_ERR_OOM;
36+		goto cleanup;
37+	}
38+
39+	fread(png->data, 1, png->size, file);
40+
41+cleanup:
42+	fclose(file);
43+	return png;
44+}
45+