summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLouis Burda <quent.burda@gmail.com>2023-08-03 02:41:08 +0200
committerLouis Burda <quent.burda@gmail.com>2023-08-03 02:42:18 +0200
commit918ed0f27ebeafc345f25919b893ee935070975f (patch)
treef245e5d020cce91274dd731814903d36a8dd2dbf
parentdaaedb5c876ce1a31b0510382abec68b4c81fdb4 (diff)
downloadtmpl-918ed0f27ebeafc345f25919b893ee935070975f.tar.gz
tmpl-918ed0f27ebeafc345f25919b893ee935070975f.zip
Add -e flag to enforce variables exist
-rw-r--r--tmpl.c24
1 files changed, 21 insertions, 3 deletions
diff --git a/tmpl.c b/tmpl.c
index 8e49c10..d12da8a 100644
--- 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")) {