#include "resources.h" #include #include #include #include #include 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; }