aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMattias Andrée <maandree@kth.se>2023-07-05 20:28:23 +0200
committerMattias Andrée <maandree@kth.se>2023-07-05 20:28:23 +0200
commitbf1ccb7ce4f13deb52013b9cbddfe2ad7cceba00 (patch)
treec0213fdb769a77f3aac3c1a0e91794bdaa4812d9
parentImprove make config file portability and remove -g from CFLAGS and -s from LDFLAGS (diff)
downloadcontacts-bf1ccb7ce4f13deb52013b9cbddfe2ad7cceba00.tar.gz
contacts-bf1ccb7ce4f13deb52013b9cbddfe2ad7cceba00.tar.bz2
contacts-bf1ccb7ce4f13deb52013b9cbddfe2ad7cceba00.tar.xz
Improve multicall-binary: keep dashs as are when printing that a command was not found
Signed-off-by: Mattias Andrée <maandree@kth.se>
-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