diff options
Diffstat (limited to '')
| -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 | 
