summaryrefslogtreecommitdiff
path: root/checkenv
diff options
context:
space:
mode:
Diffstat (limited to 'checkenv')
-rw-r--r--checkenv/.bop/posthook.sh1
-rw-r--r--checkenv/checkenv.c66
2 files changed, 67 insertions, 0 deletions
diff --git a/checkenv/.bop/posthook.sh b/checkenv/.bop/posthook.sh
new file mode 100644
index 0000000..67caec9
--- /dev/null
+++ b/checkenv/.bop/posthook.sh
@@ -0,0 +1 @@
+clang checkenv/*.o -o bin/checkenv
diff --git a/checkenv/checkenv.c b/checkenv/checkenv.c
new file mode 100644
index 0000000..d2d6c57
--- /dev/null
+++ b/checkenv/checkenv.c
@@ -0,0 +1,66 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+static void
+help(void)
+{
+ printf("usage: ./checkenv <ENV>:<...>:<...>\n");
+ printf("[-h] Display this help menu\n");
+}
+
+static int
+check_envs(const char *envlist)
+{
+ char *p, *tok;
+ char *env;
+
+ p = strdup(envlist);
+ if (p == NULL) {
+ printf("fatal: out of memory\n");
+ return -1;
+ }
+
+ tok = strtok(p, ":");
+ while (tok != NULL) {
+ if ((env = getenv(tok)) == NULL) {
+ printf("env '%s' not set\n", tok);
+ return -1;
+ }
+ tok = strtok(NULL, ":");
+ }
+
+ return 0;
+}
+
+int
+main(int argc, char **argv)
+{
+ int opt;
+ char *envlist;
+ int error;
+
+ if (argc < 2) {
+ printf("fatal: too few arguments\n");
+ help();
+ return -1;
+ }
+
+ while ((opt = getopt(argc, argv, "h")) != -1) {
+ switch (opt) {
+ case 'h':
+ help();
+ return -1;
+ }
+ }
+
+ while (optind < argc) {
+ envlist = argv[optind++];
+ if ((error = check_envs(envlist)) < 0) {
+ return error;
+ }
+ }
+
+ return 0;
+}