From 00a1b0aff0700353a4464a64722d8334b580ad9e Mon Sep 17 00:00:00 2001 From: Jakob Kaivo Date: Fri, 15 Mar 2019 15:45:09 -0400 Subject: multi-call alias to echo --- printf.c | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/printf.c b/printf.c index ec0b351..7b6ef76 100644 --- a/printf.c +++ b/printf.c @@ -1,6 +1,7 @@ #define _XOPEN_SOURCE 700 #include #include +#include #include #include #include @@ -9,11 +10,12 @@ #include static int errors = 0; +static const char *progname = "printf"; static void diagnose(const char *fmt, ...) { char ofmt[strlen(fmt) + 10]; - sprintf(ofmt, "printf: %s\n", fmt); + sprintf(ofmt, "%s: %s\n", progname, fmt); va_list ap; va_start(ap, fmt); @@ -93,7 +95,7 @@ static const char *echo(const char *s) } if (*s == '0' || !isdigit(*s)) { - s = escape(s); + s = escape(s + 1); } else { diagnose("unknown escape \"\\%c\"", *s); s++; @@ -222,7 +224,7 @@ static const char *convert(const char *conv, const char *operand) return conv + 1; } -int main(int argc, char *argv[]) +int printf_main(int argc, char *argv[]) { setlocale(LC_ALL, ""); @@ -273,3 +275,22 @@ int main(int argc, char *argv[]) return errors; } + +int echo_main(int argc, char *argv[]) +{ + for (int i = 1; i < argc; i++) { + echo(argv[i]); + putchar(i == argc - 1 ? '\n' : ' '); + } + return errors; +} + +int main(int argc, char *argv[]) +{ + if (!strcmp(basename(argv[0]), "echo")) { + progname = "echo"; + return echo_main(argc, argv); + } + + return printf_main(argc, argv); +} -- cgit v1.2.1