aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile9
-rw-r--r--contacts.c.in12
2 files changed, 13 insertions, 8 deletions
diff --git a/Makefile b/Makefile
index f71def1..b00cb8f 100644
--- a/Makefile
+++ b/Makefile
@@ -86,9 +86,16 @@ contacts: contacts.o $(BOBJ)
contacts.c: contacts.c.in Makefile
printf '#define LIST_COMMANDS' > $@
- printf '\\\n\tX(%s)' $(BIN) | tr - _ >> $@
+ for bin in $(BIN); do\
+ printf '\\\n\tX(%s, %s)' $$bin $$(printf '%s\n' $$bin | tr - _) || exit 1;\
+ done >> $@
printf '\n\n' >> $@
cat contacts.c.in >> $@
+# (printf '\\\n\tX(%s)' $(BIN); printf '\n\n') are run together
+# because the input of sed must be a text file, and the first
+# printf(1) do not generate a text file as text files are by
+# definition LF terminated unless they are empty (also no line
+# may exceed 2048 bytes including the LF)
add-contact: add-contact.o
$(CC) -o $@ $@.o $(LDFLAGS)
diff --git a/contacts.c.in b/contacts.c.in
index b297951..024b94e 100644
--- a/contacts.c.in
+++ b/contacts.c.in
@@ -2,7 +2,7 @@
#include <stdio.h>
#include <string.h>
-#define X(NAM) int main__##NAM(int, char *[]);
+#define X(DASH, UNDERSCORE) int main__##UNDERSCORE(int, char *[]);
LIST_COMMANDS
#undef X
@@ -11,17 +11,15 @@ char *argv0 = NULL;
int
main(int argc, char *argv[])
{
- char *name, *p;
+ const char *name;
name = strrchr(*argv, '/');
if (!name++)
name = *argv;
- for (p = name; (p = strchr(p, '-'));)
- *p++ = '_';
-#define X(NAM)\
- if (!strcmp(name, #NAM))\
- return main__##NAM(argc, argv);
+#define X(DASH, UNDERSCORE)\
+ if (!strcmp(name, #DASH))\
+ return main__##UNDERSCORE(argc, argv);
LIST_COMMANDS;
#undef X