tmpl

Simple key-value templator
git clone https://git.sinitax.com/sinitax/tmpl
Log | Files | Refs | README | LICENSE | sfeed.txt

commit 918ed0f27ebeafc345f25919b893ee935070975f
parent daaedb5c876ce1a31b0510382abec68b4c81fdb4
Author: Louis Burda <quent.burda@gmail.com>
Date:   Thu,  3 Aug 2023 02:41:08 +0200

Add -e flag to enforce variables exist

Diffstat:
Mtmpl.c | 24+++++++++++++++++++++---
1 file changed, 21 insertions(+), 3 deletions(-)

diff --git a/tmpl.c b/tmpl.c @@ -5,6 +5,7 @@ #include <stdio.h> #include <string.h> #include <stdarg.h> +#include <stdbool.h> #include <stdlib.h> enum { @@ -31,6 +32,8 @@ static struct block stack[32] = { 0 }; static int stack_top = 0; static size_t lineno = 0; +static bool fail_missing = false; + static void die(const char *fmt, ...) { @@ -53,6 +56,7 @@ die(const char *fmt, ...) static const char * getvar(const char *name) { + const char *env; struct var *var; for (var = vars; var; var = var->next) { @@ -60,7 +64,11 @@ getvar(const char *name) return var->value; } - return getenv(name); + env = getenv(name); + if (!env && fail_missing) + die("not set: '%s'", name); + + return env; } static void @@ -208,12 +216,22 @@ int main(int argc, char **argv) { const char *path; - char **arg; + char **arg, **dst; if (!argc) return 1; + + for (dst = arg = argv + 1; *arg; arg++) { + if (!strcmp(*arg, "-e")) { + fail_missing = true; + } else { + *dst++ = *arg; + } + } + *dst = NULL; + for (arg = argv + 1; *arg; arg++) { if (!strcmp(*arg, "-h") || !strcmp(*arg, "--help")) { - fprintf(stderr, "Usage: tmpl [-c CONFIG].. " + fprintf(stderr, "Usage: tmpl [-e] [-c CONFIG].. " "[-D NAME=VALUE].. FILE..\n"); return 1; } else if (!strcmp(*arg, "-D") || !strcmp(*arg, "--define")) {