diff options
| author | dacctal <dacctal@symlinx.net> | 2026-05-24 10:23:38 +0000 |
|---|---|---|
| committer | dacctal <dacctal@symlinx.net> | 2026-05-24 10:23:38 +0000 |
| commit | aa0d78815004ae6b0c4a42b0e024f5c4ef555ae2 (patch) | |
| tree | 62f97b4c5acfdb98003568466f878fbd3d6b9dfb /src/set_install_directories.c | |
| parent | 83d471f2c1d1b1fa6be51f41e4f1c36ab19d7094 (diff) | |
c rewrite
Diffstat (limited to 'src/set_install_directories.c')
| -rw-r--r-- | src/set_install_directories.c | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/src/set_install_directories.c b/src/set_install_directories.c new file mode 100644 index 0000000..2df6aaf --- /dev/null +++ b/src/set_install_directories.c @@ -0,0 +1,69 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include "set_install_directories.h" +#include "lua_state.h" +#include "vars.h" + +void set_install_directories() { + init_lua_state(); + lua_State *L = get_lua_state(); + + lua_getglobal(L, "install_directories"); + + if (!lua_istable(L, -1)) { + printf("%slua variable 'install_directories' is not a table.\n", print_error); + } + + lua_pushnil(L); + + while (lua_next(L, -2) != 0) { + const char *key = lua_tostring(L, -2); + const char *value = lua_tostring(L, -1); + + if (key && value) { + map_put(&cached_install_directories, strdup(key), strdup(value)); + } + + lua_pop(L, 1); + } +} + +void map_init(Map *map) { + map->items = NULL; + map->size = 0; + map->capacity = 0; +} + +void map_put(Map *map, char *key, char *value) { + for (size_t i = 0; i < map->size; i++) { + if (strcmp(map->items[i].key, key) == 0) { + free(map->items[i].value); + map->items[i].value = value; + free(key); + return; + } + } + + if (map->size >= map->capacity) { + size_t new_capacity = map->capacity == 0 ? 8 : map->capacity * 2; + MapItem *new_items = realloc(map->items, new_capacity * sizeof(MapItem)); + if (!new_items) return; + map->items = new_items; + map->capacity = new_capacity; + } + + map->items[map->size].key = key; + map->items[map->size].value = value; + map->size++; +} + +char* map_get(Map *map, const char *key) { + for (size_t i = 0; i < map->size; i++) { + if (strcmp(map->items[i].key, key) == 0) { + return map->items[i].value; + } + } + return NULL; +}
\ No newline at end of file |
