diff options
| author | Federico Angelilli <code@fedang.net> | 2024-11-24 15:14:05 +0100 |
|---|---|---|
| committer | Federico Angelilli <code@fedang.net> | 2024-11-24 15:14:05 +0100 |
| commit | ab8a774df0ebc88c4b16377547366b01134b041c (patch) | |
| tree | 0d34c311276c271e16fe9d8ef842fc960bda8334 /src/action.c | |
| parent | b260d5beb9fab0c39f18be677e70b35e988d3c1d (diff) | |
Add actions
Diffstat (limited to 'src/action.c')
| -rw-r--r-- | src/action.c | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/src/action.c b/src/action.c new file mode 100644 index 0000000..c8ccee1 --- /dev/null +++ b/src/action.c @@ -0,0 +1,45 @@ +#include <stdlib.h> +#include <string.h> + +#include "action.h" +#include "block.h" + +void action_perform(action_t *action, block_t *block, config_t *config) +{ + for (size_t i = 0; i < action->length; i++) { + const char *key = action->parts[i].key; + const char *value = action->parts[i].value; + + if (strncmp(key, "block.", 6)) + abort(); + + block_t *target = NULL; + for (size_t i = 0; i < config->n_blocks; i++) { + if (!strcmp(key + 6, config->blocks[i]->label)) { + target = config->blocks[i]; + break; + } + } + + if (target == NULL) + abort(); + + block_change(target, key, value); + } +} + +int action_validate(action_t *action, config_t *config) +{ + // TODO + return 0; +} + +void action_free(action_t *action) +{ + for (size_t i = 0; i < action->length; i++) { + free(action->parts[i].key); + free(action->parts[i].value); + } + + free(action->parts); +} |
