summaryrefslogtreecommitdiff
path: root/src/resources/config.c
diff options
context:
space:
mode:
authorphysick <mynameisgennadiy@vk.com>2026-07-28 20:29:45 +0500
committerphysick <mynameisgennadiy@vk.com>2026-07-28 20:33:20 +0500
commit7237c999918e44e2e76a6d2e2ae37ea709af08f6 (patch)
treef15f39c2ba4092bd3bf7fd7b8548c51535ee3940 /src/resources/config.c
parent48faa910496b1b3811c2b52f16d5a76f38ca3e48 (diff)
Added wren limiting fork support
Diffstat (limited to 'src/resources/config.c')
-rw-r--r--src/resources/config.c100
1 files changed, 100 insertions, 0 deletions
diff --git a/src/resources/config.c b/src/resources/config.c
new file mode 100644
index 0000000..05b80cd
--- /dev/null
+++ b/src/resources/config.c
@@ -0,0 +1,100 @@
+#include "resources.h"
+#include <stdlib.h>
+#include <stddef.h>
+#include <raylib.h>
+#include <stdio.h>
+#include <string.h>
+
+Config config = {
+ .MaxOperations = DEFAULT_MAX_OPS,
+};
+
+bool startsWith(const char *str, const char *prefix) {
+ if (str == NULL || prefix == NULL) {
+ return false;
+ }
+
+ size_t prefix_len = strlen(prefix);
+
+ if (strlen(str) < prefix_len) {
+ return false;
+ }
+
+ return strncmp(str, prefix, prefix_len) == 0;
+}
+
+// Strips everything before '=' (including). Does not allocate.
+char *stripName(char *line, size_t len) {
+ if (line == NULL) {
+ return NULL;
+ }
+
+ for (size_t ptr = 0; ptr < len; ptr++) {
+ if (line[ptr] == '\0') {
+ return NULL;
+ }
+ if (line[ptr] == '=') {
+ return &line[ptr + 1];
+ }
+ }
+
+ return NULL;
+}
+
+// Reads one line and assigns the param if found
+void evaluateConfigLive(char *line) {
+ size_t len = strlen(line);
+ // Empty lines and comments
+ if (len <= 1 || line[0] == '#') return;
+ // Removing a new line
+ if (line[len-1] == '\n') {
+ line[len-1] = 0x0;
+ len -= 1;
+ }
+
+ if (startsWith(line, "MaxOperations")) {
+ char *value = stripName(line, len);
+
+ char *endptr;
+ unsigned long long parsed = strtoull(value, &endptr, 10);
+ if (value == endptr || *endptr != '\0') {
+ TraceLog(LOG_WARNING, "Failed to parse the value for MaxOperations. Provided value: '%s'", value);
+ return;
+ }
+ config.MaxOperations = parsed;
+ return;
+ }
+
+}
+
+bool ReadConfig(const char *location) {
+ FILE *file = fopen(location, "r");
+ if (file == NULL) {
+ perror("Failed to open the config file");
+ return false;
+ }
+
+ fseek(file, 0, SEEK_END);
+ long size = ftell(file);
+ rewind(file);
+
+ char* buffer = malloc(size + 1);
+ if (buffer == NULL) {
+ fclose(file);
+ perror("Failed to load the config file");
+ return false;
+ }
+
+
+ while (fgets(buffer, size, file)) {
+ evaluateConfigLive(buffer);
+ }
+
+ free(buffer);
+ fclose(file);
+ return true;
+}
+
+Config *GetConfig() {
+ return &config;
+}