From 1b8329ec260631ae6e8708271ab4b795888338e4 Mon Sep 17 00:00:00 2001
From: Talha Qamar <qamartalha@proton.me>
Date: Sun, 2 Feb 2025 04:48:33 +0500
Subject: [PATCH] Liblily initial commit

---
 src/liblily/.gitignore |  1 +
 src/liblily/Makefile   |  8 ++++++++
 src/liblily/lily.c     | 35 +++++++++++++++++++++++++++++++++++
 src/liblily/lily.h     | 14 ++++++++++++++
 4 files changed, 58 insertions(+)
 create mode 100644 src/liblily/.gitignore
 create mode 100644 src/liblily/Makefile
 create mode 100644 src/liblily/lily.c
 create mode 100644 src/liblily/lily.h

diff --git a/src/liblily/.gitignore b/src/liblily/.gitignore
new file mode 100644
index 0000000..a007fea
--- /dev/null
+++ b/src/liblily/.gitignore
@@ -0,0 +1 @@
+build/*
diff --git a/src/liblily/Makefile b/src/liblily/Makefile
new file mode 100644
index 0000000..c42d082
--- /dev/null
+++ b/src/liblily/Makefile
@@ -0,0 +1,8 @@
+build/liblily.a: build build/lily.o
+	ar rcs build/liblily.a build/lily.o
+
+build/lily.o: build lily.c lily.h
+	gcc -I. -lc -c lily.c -o ./build/lily.o
+
+build:
+	mkdir build
diff --git a/src/liblily/lily.c b/src/liblily/lily.c
new file mode 100644
index 0000000..4d80869
--- /dev/null
+++ b/src/liblily/lily.c
@@ -0,0 +1,35 @@
+#define _GNU_SOURCE 1
+#include <sys/mman.h>
+#include <string.h>
+#include "lily.h"
+
+void* lily_alloc(uint size){
+ 	return mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_ANONYMOUS, -1, 0);
+}
+void* lily_alloc_zeroed(uint size){
+	return lily_alloc(size);
+}
+void  lily_dealloc(void* ptr, uint size){
+	munmap(ptr, size);
+}
+void* lily_realloc(void* ptr, uint size, uint size_new){
+	return mremap(ptr, size, size_new, MREMAP_MAYMOVE);
+}
+void lily_memset(void* dest, void* src, uint count, uint size){
+    uint total_size = count * size;
+    memcpy(dest, src, size);
+
+    uint copied = size;
+
+    while (copied < total_size) {
+        uint copy_size;
+		if(copied > total_size - copied)
+			copy_size = total_size - copied; 
+		else 
+			copy_size = copied;
+		memcpy(dest, (dest + copied), copy_size);
+        copied += copy_size;
+    }
+
+}
+
diff --git a/src/liblily/lily.h b/src/liblily/lily.h
new file mode 100644
index 0000000..858a8d8
--- /dev/null
+++ b/src/liblily/lily.h
@@ -0,0 +1,14 @@
+#ifndef __LILY_H_DEFINED
+#define __LILY_H_DEFINED
+
+#define uint unsigned long long int
+
+void* lily_alloc(uint size);
+void* lily_alloc_zeroed(uint size);
+void  lily_dealloc(void* ptr, uint size);
+void* lily_realloc(void* ptr, uint size, uint size_new);
+void  lily_memset(void* dest, void* src, uint count, uint size);
+void  lily_getrandom(void* dest, uint size);
+
+
+#endif // __LILY_H_DEFINED