aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/engine.c12
-rw-r--r--src/lexer.c8
2 files changed, 13 insertions, 7 deletions
diff --git a/src/engine.c b/src/engine.c
index 8bc62e7..f4b2f63 100644
--- a/src/engine.c
+++ b/src/engine.c
@@ -92,12 +92,12 @@ handle_eachdo(char **buffer, key_match_t *match, directive_t *directive)
char *path;
- asprintf(&path, "%s/%s", msg->base_directory, operands->key);
+ asprintf(&path, "%s/%s", msg->base_directory, trim(operands->key));
list_t *files = enumfilesindir(path);
free(path);
if (files == NULL) {
- printf("Could not find key %s\n", operands->key);
+ printf("Could not find key %s\n", trim(operands->key));
free(operands);
return;
}
@@ -110,7 +110,7 @@ handle_eachdo(char **buffer, key_match_t *match, directive_t *directive)
asprintf(&path,
"%s/%s/%s",
msg->base_directory,
- operands->key,
+ trim(operands->key),
(char *) file_wrp->ptr);
FILE *f = fopen(path, "r");
@@ -189,8 +189,9 @@ handle_eachdo(char **buffer, key_match_t *match, directive_t *directive)
list_delete(atoms);
free(content);
free(temp_buffer);
- free(operands);
+ free(operands->key);
free(original_content);
+ free(operands);
}
list_t *
@@ -243,6 +244,9 @@ engine_ingest(char **buffer)
break;
case PUT:
+ free(directive->operands);
+ skip++;
+ break;
case ENDEACHDO:
case BODY:
case CONTENT:
diff --git a/src/lexer.c b/src/lexer.c
index 9e38960..829942a 100644
--- a/src/lexer.c
+++ b/src/lexer.c
@@ -188,8 +188,8 @@ lexer_handle_eachdo(directive_t *directive,
directive->type = EACHDO;
eachdo_operands_t *operands = malloc(sizeof(eachdo_operands_t));
- operands->key = trim(strndup(buffer + n + strlen("eachdo"),
- match->length - n - strlen("eachdo") - 2));
+ operands->key = strndup(buffer + n + strlen("eachdo"),
+ match->length - n - strlen("eachdo") - 2);
buffer += match->length;
key_match_t *new_match;
@@ -210,7 +210,6 @@ lexer_handle_eachdo(directive_t *directive,
printf("Cannot find directive: %.*s\n",
new_match->length,
buffer + new_match->offset);
- free(new_directive);
free(new_match);
free(directive);
return;
@@ -219,6 +218,9 @@ lexer_handle_eachdo(directive_t *directive,
if (new_directive->type == ENDEACHDO) {
free(new_directive);
break;
+ } else {
+ /* TODO: delete_directive */
+ free(new_directive->operands);
}
free(new_directive);