diff options
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); +} |
