Mercurial > hg > toybox
view toys/echo.c @ 126:7b22987a7b47
Vladimir Oleynik pointed out that va_start() twice in the same function
isn't portable (with ppc 4xx as an example of a platform it doesn't work
on). This is why va_copy exists.
author | Rob Landley <rob@landley.net> |
---|---|
date | Fri, 15 Jun 2007 15:16:46 -0400 |
parents | 116405f248cb |
children | 1e8f4b05cb65 |
line wrap: on
line source
/* vi: set sw=4 ts=4: */ /* * echo.c - echo supporting -n and -e. */ #include "toys.h" int echo_main(void) { int i = 0; char *arg, *from = "\\abfnrtv", *to = "\\\a\b\f\n\r\t\v"; for (;;) { arg = toys.optargs[i]; if (!arg) break; if (i++) xputc(' '); // Handle -e if (toys.optflags&2) { int c, j = 0; for (;;) { c = arg[j++]; if (!c) break; if (c == '\\') { char *found; int d = arg[j++]; // handle \escapes if (d) { found = strchr(from, d); if (found) c = to[found-from]; else if (d == 'c') goto done; else if (d == '0') { c = 0; while (arg[j]>='0' && arg[j]<='7') c = (c*8)+arg[j++]-'0'; } } } xputc(c); } } else xprintf("%s", arg); } // Output "\n" if no -n if (!(toys.optflags&1)) xputc('\n'); done: xflush(); return 0; }