diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2007-07-05 18:02:13 +0200 |
---|---|---|
committer | Sascha Hauer <sha@octopus.labnet.pengutronix.de> | 2007-07-05 18:02:13 +0200 |
commit | 4b07af6730d2811363f158f5175138116038f7b9 (patch) | |
tree | 206044270884f80204a2da69e02ca3b6f5803185 /commands/echo.c | |
parent | d08c60e9d77dc0f83946cd702d383451865e66dd (diff) | |
download | barebox-4b07af6730d2811363f158f5175138116038f7b9.tar.gz barebox-4b07af6730d2811363f158f5175138116038f7b9.tar.xz |
svn_rev_643
structure cleanup
Diffstat (limited to 'commands/echo.c')
-rw-r--r-- | commands/echo.c | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/commands/echo.c b/commands/echo.c new file mode 100644 index 0000000000..1314f2d971 --- /dev/null +++ b/commands/echo.c @@ -0,0 +1,82 @@ +#include <common.h> +#include <command.h> +#include <fs.h> +#include <fcntl.h> +#include <errno.h> + +static int do_echo (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) +{ + int i, optind = 1; + int fd = stdout, opt, newline = 1; + char *file = NULL; + int oflags = O_WRONLY | O_CREAT; + + /* We can't use getopt() here because we want to + * echo all things we don't understand. + */ + while (optind < argc && *argv[optind] == '-') { + if (!*(argv[optind] + 1) || *(argv[optind] + 2)) + break; + + opt = *(argv[optind] + 1); + switch (opt) { + case 'n': + newline = 0; + break; + case 'a': + oflags |= O_APPEND; + if (optind + 1 < argc) + file = argv[optind + 1]; + else + goto no_optarg_out; + optind++; + break; + case 'o': + oflags |= O_TRUNC; + file = argv[optind + 1]; + if (optind + 1 < argc) + file = argv[optind + 1]; + else + goto no_optarg_out; + optind++; + break; + default: + goto exit_parse; + } + optind++; + } + +exit_parse: + if (file) { + fd = open(file, oflags); + if (fd < 0) { + perror("open"); + return 1; + } + } + + for (i = optind; i < argc; i++) { + if (i > optind) + fputc(fd, ' '); + fputs(fd, argv[i]); + } + + if (newline) + fputc(fd, '\n'); + + if (file) + close(fd); + + return 0; + +no_optarg_out: + printf("option requires an argument -- %c\n", opt); + return 1; +} + +U_BOOT_CMD_START(echo) + .maxargs = CONFIG_MAXARGS, + .cmd = do_echo, + .usage = "echo args to console", +U_BOOT_CMD_END + |