diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2007-07-05 18:02:14 +0200 |
---|---|---|
committer | Sascha Hauer <sha@octopus.labnet.pengutronix.de> | 2007-07-05 18:02:14 +0200 |
commit | b2c5310d4da56237571bb8ea8d24b030c941030f (patch) | |
tree | c2c39f8c1ebdad8c3e69af86cb3c105434212edd /commands/cat.c | |
parent | fda840672d0eb662ddf4c7080532fe2dfeb0b0b1 (diff) | |
download | barebox-b2c5310d4da56237571bb8ea8d24b030c941030f.tar.gz barebox-b2c5310d4da56237571bb8ea8d24b030c941030f.tar.xz |
svn_rev_653
restructure tree, add reginfo command
Diffstat (limited to 'commands/cat.c')
-rw-r--r-- | commands/cat.c | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/commands/cat.c b/commands/cat.c new file mode 100644 index 0000000000..72baae2e5e --- /dev/null +++ b/commands/cat.c @@ -0,0 +1,64 @@ +#include <common.h> +#include <command.h> +#include <fs.h> +#include <linux/ctype.h> +#include <errno.h> +#include <xfuncs.h> +#include <malloc.h> + +static int do_cat(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) +{ + int ret; + int fd, i; + char *buf; + int err = 0; + int args = 1; + + if (argc < 2) { + perror("cat"); + return 1; + } + + buf = xmalloc(1024); + + while (args < argc) { + fd = open(argv[args], 0); + if (fd < 0) { + printf("could not open %s: %s\n", argv[args], errno_str()); + goto out; + } + + while((ret = read(fd, buf, 1024)) > 0) { + for(i = 0; i < ret; i++) { + if (isprint(buf[i]) || buf[i] == '\n' || buf[i] == '\t') + putc(buf[i]); + else + putc('.'); + } + if(ctrlc()) { + err = 1; + close(fd); + goto out; + } + } + close(fd); + args++; + } + +out: + free(buf); + + return err; +} + +static __maybe_unused char cmd_cat_help[] = +"Usage: cat [FILES]\n" +"Concatenate files on stdout. Currently only printable characters\n" +"and \\n and \\t are printed, but this should be optional\n"; + +U_BOOT_CMD_START(cat) + .maxargs = CONFIG_MAXARGS, + .cmd = do_cat, + .usage = "concatenate file(s)", + U_BOOT_CMD_HELP(cmd_cat_help) +U_BOOT_CMD_END |