diff options
| author | physick <mynameisgennadiy@vk.com> | 2026-07-28 20:29:45 +0500 |
|---|---|---|
| committer | physick <mynameisgennadiy@vk.com> | 2026-07-28 20:33:20 +0500 |
| commit | 7237c999918e44e2e76a6d2e2ae37ea709af08f6 (patch) | |
| tree | f15f39c2ba4092bd3bf7fd7b8548c51535ee3940 /src/resources/config.c | |
| parent | 48faa910496b1b3811c2b52f16d5a76f38ca3e48 (diff) | |
Added wren limiting fork support
Diffstat (limited to 'src/resources/config.c')
| -rw-r--r-- | src/resources/config.c | 100 |
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; +} |
