diff options
author | Joseph Hunkeler <jhunkeler@gmail.com> | 2024-03-22 22:12:11 -0400 |
---|---|---|
committer | Joseph Hunkeler <jhunkeler@gmail.com> | 2024-03-22 22:20:31 -0400 |
commit | 22e4934dc0184a2e50eb80d5890c1a16613ff821 (patch) | |
tree | 86c1cf024201a8ccee1c0fcc2be7a3361bff596f | |
parent | 45656a484df853d71670eb4bd1576cfc21fcc8a3 (diff) | |
download | stasis-22e4934dc0184a2e50eb80d5890c1a16613ff821.tar.gz |
Use array notation instead of pure pointers
* The compiler was convinced pos could be NULL but I found no such issue in the code.
* Accessing by index satisfies whatever GCC thinks was happening here.
-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 |