summaryrefslogtreecommitdiffstats
path: root/commands/cat.c
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2007-07-05 18:02:14 +0200
committerSascha Hauer <sha@octopus.labnet.pengutronix.de>2007-07-05 18:02:14 +0200
commitb2c5310d4da56237571bb8ea8d24b030c941030f (patch)
treec2c39f8c1ebdad8c3e69af86cb3c105434212edd /commands/cat.c
parentfda840672d0eb662ddf4c7080532fe2dfeb0b0b1 (diff)
downloadbarebox-b2c5310d4da56237571bb8ea8d24b030c941030f.tar.gz
svn_rev_653
restructure tree, add reginfo command
Diffstat (limited to 'commands/cat.c')
-rw-r--r--commands/cat.c64
1 files changed, 64 insertions, 0 deletions
diff --git a/commands/cat.c b/commands/cat.c
new file mode 100644
index 0000000..72baae2
--- /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