aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/false.c6
-rw-r--r--src/main.c49
-rw-r--r--src/true.c5
3 files changed, 60 insertions, 0 deletions
diff --git a/src/false.c b/src/false.c
new file mode 100644
index 0000000..2601ae2
--- /dev/null
+++ b/src/false.c
@@ -0,0 +1,6 @@
+int false_main(int argc, char *argv[]) {
+ (void) argc;
+ (void) argv;
+
+ return 1;
+}
diff --git a/src/main.c b/src/main.c
new file mode 100644
index 0000000..1c2ae2e
--- /dev/null
+++ b/src/main.c
@@ -0,0 +1,49 @@
+#include <libgen.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+typedef int util_main(int, char **);
+
+extern util_main true_main;
+extern util_main false_main;
+
+typedef struct futiles_util futiles_util_t;
+struct futiles_util {
+ const char *name;
+ util_main *main;
+};
+
+int display_utils(int, char **);
+const futiles_util_t utils[] = {
+ { .name = "futiles", .main = display_utils },
+ { .name = "true", .main = true_main },
+ { .name = "false", .main = false_main }
+};
+#define UTILS_NB (sizeof(utils) / sizeof(futiles_util_t))
+
+int display_utils(int argc, char *argv[]) {
+ (void) argc;
+ (void) argv;
+
+ printf("Available utils: ");
+ for (size_t i = 1; i < UTILS_NB; i++) {
+ printf("%s ", utils[i].name);
+ }
+ printf("\n");
+
+ return EXIT_SUCCESS;
+}
+
+int main(int argc, char *argv[]) {
+ (void) argc;
+
+ char *called_basename = basename(argv[0]);
+
+ for (size_t i = 0; i < UTILS_NB; i++) {
+ if (strcmp(called_basename, utils[i].name) == 0) {
+ return utils[i].main(argc, argv);
+ }
+ }
+ return EXIT_FAILURE;
+}
diff --git a/src/true.c b/src/true.c
new file mode 100644
index 0000000..d7d4dfb
--- /dev/null
+++ b/src/true.c
@@ -0,0 +1,5 @@
+int true_main(int argc, char *argv[]) {
+ (void) argc;
+ (void) argv;
+ return 0;
+}