diff options
-rw-r--r-- | Makefile | 9 | ||||
-rw-r--r-- | contacts.c.in | 12 |
2 files changed, 13 insertions, 8 deletions
@@ -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 |