diff options
-rw-r--r-- | src/deliverable.c | 8 | ||||
-rw-r--r-- | src/environment.c | 6 | ||||
-rw-r--r-- | src/template.c | 13 |
3 files changed, 11 insertions, 16 deletions
diff --git a/src/deliverable.c b/src/deliverable.c index f9c53ba..abef3f3 100644 --- a/src/deliverable.c +++ b/src/deliverable.c @@ -29,9 +29,8 @@ extern char **environ; if (tplop) { \ X->DEST = tplop; \ } else { \ - X->DEST = val.as_char_p; \ + X->DEST = NULL; \ } \ - guard_free(rtevnop) \ } #define conv_str_noexpand(X, DEST) if (val.as_char_p) X->DEST = strdup(val.as_char_p); @@ -48,7 +47,6 @@ extern char **environ; } else { \ rtevnop = NULL; \ } \ - guard_free(rtevnop) \ } #define conv_bool(X, DEST) X->DEST = val.as_bool; @@ -59,9 +57,8 @@ extern char **environ; if (tplop) { \ X.DEST = tplop; \ } else { \ - X.DEST = val.as_char_p; \ + X.DEST = NULL; \ } \ - guard_free(rtevnop) \ } #define conv_strlist_stackvar(X, DEST, TOK) { \ @@ -76,7 +73,6 @@ extern char **environ; } else { \ rtevnop = NULL; \ } \ - guard_free(rtevnop); \ } #define conv_bool_stackvar(X, DEST) X.DEST = val.as_bool; diff --git a/src/environment.c b/src/environment.c index 7315281..391807f 100644 --- a/src/environment.c +++ b/src/environment.c @@ -284,9 +284,10 @@ char *runtime_expand_var(RuntimeEnv *env, char *input) { return NULL; } - // If there's no environment variables to process return a copy of the input string + // If there's no environment variables to process return the input string if (strchr(input, delim) == NULL) { - return strdup(input); + //return strdup(input); + return input; } expanded = calloc(OMC_BUFSIZ, sizeof(char)); @@ -417,7 +418,6 @@ void runtime_set(RuntimeEnv *env, const char *_key, char *_value) { } guard_free(now) guard_free(key) - guard_free(value) } /** diff --git a/src/template.c b/src/template.c index c78c885..2314dbb 100644 --- a/src/template.c +++ b/src/template.c @@ -66,7 +66,6 @@ static int grow(size_t z, size_t *output_bytes, char **output) { perror("realloc failed"); return -1; } - memset(tmp + strlen(tmp), 0, new_size - strlen(tmp)); *output = tmp; *output_bytes = new_size; } @@ -77,7 +76,7 @@ char *tpl_render(char *str) { if (!str) { return NULL; } - size_t output_bytes = strlen(str) * 2; + size_t output_bytes = 1024 + strlen(str); // TODO: Is grow working correctly? char *output = NULL; char *b_close = NULL; char *pos = NULL; @@ -127,10 +126,8 @@ char *tpl_render(char *str) { // Find closing brace b_close = strstr(pos, "}}"); if (!b_close) { - grow(z + strlen(pos), &output_bytes, &output); - strcpy(output, pos); - z += strlen(pos); - continue; + fprintf(stderr, "error while templating '%s'\n\nunbalanced brace at position %zu\n", str, z); + return NULL; } // Jump past closing brace pos = b_close + 2; @@ -144,7 +141,7 @@ char *tpl_render(char *str) { value = strdup(env_val ? env_val : ""); } else { // Read replacement value - value = tpl_getval(key); + value = strdup(tpl_getval(key) ? tpl_getval(key) : ""); } } @@ -155,6 +152,8 @@ char *tpl_render(char *str) { // Append replacement value grow(z, &output_bytes, &output); strcat(output, value); + guard_free(value); + output[z] = 0; } #ifdef DEBUG |