diff options
-rw-r--r-- | src/template.c | 29 |
1 files changed, 16 insertions, 13 deletions
diff --git a/src/template.c b/src/template.c index 41962c8..e046350 100644 --- a/src/template.c +++ b/src/template.c @@ -48,6 +48,7 @@ void tpl_free() { guard_free(item->key); } free(item); + item->ptr = NULL; } guard_free(item); } @@ -113,28 +114,29 @@ char *tpl_render(char *str) { } size_t z = 0; - while (*pos != 0) { + size_t off = 0; + while (pos[off] != 0) { char key[255] = {0}; char *value = NULL; memset(key, 0, sizeof(key)); grow(z, &output_bytes, &output); // At opening brace - if (!strncmp(pos, "{{", 2)) { + if (!strncmp(&pos[off], "{{", 2)) { // Scan until key is reached - while (!isalnum(*pos)) { - pos++; + while (!isalnum(pos[off])) { + off++; } // Read key name size_t key_len = 0; - while (isalnum(*pos) || *pos != '}') { - if (isspace(*pos) || isblank(*pos)) { + while (isalnum(pos[off]) || pos[off] != '}') { + if (isspace(pos[off]) || isblank(pos[off])) { break; } - key[key_len] = *pos; + key[key_len] = pos[off]; key_len++; - pos++; + off++; } char *type_stop = NULL; @@ -151,13 +153,14 @@ char *tpl_render(char *str) { } // Find closing brace - b_close = strstr(pos, "}}"); + b_close = strstr(&pos[off], "}}"); if (!b_close) { fprintf(stderr, "error while templating '%s'\n\nunbalanced brace at position %zu\n", str, z); return NULL; + } else { + // Jump past closing brace + off += 2; } - // Jump past closing brace - pos = b_close + 2; if (do_env) { char *k = type_stop + 1; @@ -188,8 +191,8 @@ char *tpl_render(char *str) { #ifdef DEBUG fprintf(stderr, "z=%zu, output_bytes=%zu\n", z, output_bytes); #endif - output[z] = *pos; - pos++; + output[z] = pos[off]; + off++; z++; } #ifdef DEBUG |