commit 40bedc7b2fc8ca42cbf58b3b6decbc2ed19d877c
parent 490f2550f1c84d6c2126b13ecb03f6ec9abc0cd6
Author: Roberto Vargas <roberto.vargas@arm.com>
Date: Thu, 4 Apr 2019 15:31:41 +0100
[dlang] Accept more of one string in echo
Having the limitation of only one string in every echo command
was very limiting and in some cases is mandatory to send
more of one string in a single echo command.
Change-Id: Ie24db9703b3a66882485be77db0e389781e61f1a
Diffstat:
1 file changed, 17 insertions(+), 9 deletions(-)
diff --git a/src/romfw/dlang.c b/src/romfw/dlang.c
@@ -14,7 +14,8 @@
#include "dlang.h"
#define PREFIX "> "
-#define NR_ARGC_MAX 4
+#define NR_ARGC_MAX 5
+#define LINELEN 80
unsigned in_debug;
jmp_buf dbgrecover;
@@ -257,14 +258,21 @@ err:
static int
do_echo(const struct cmd *cmd, struct args *args)
{
- int fd, n;
- char *s;
+ int fd, i, len, offset, n;
+ char *s, buffer[LINELEN + 2];
- if ((fd = open(args->argv[2], O_WRITE)) < 0)
+ if ((fd = open(args->argv[1], O_WRITE)) < 0)
goto err;
- s = args->argv[1];
- n = write(fd, s, strlen(s));
+ offset = 0;
+ for (i = 2; i < args->argc; i++) {
+ s = args->argv[i];
+ len = strlen(s);
+ memcpy(buffer + offset, s, len);
+ offset += len;
+ buffer[offset++] = ' ';
+ }
+ n = write(fd, buffer, offset);
if (close(fd) < 0 || n < 0)
goto err;
@@ -303,7 +311,7 @@ run(struct args *args)
{
const struct cmd *cmd;
size_t len;
- char buffer[128];
+ char buffer[LINELEN];
if (kgets(buffer, sizeof(buffer)) == NULL) {
args->status = 1;
@@ -432,8 +440,8 @@ static const struct cmd cmds[] = {
.name = "echo",
.eval = do_echo,
.min = 3,
- .max = 3,
- .helpmsg = "write content to a file: echo string path",
+ .max = NR_ARGC_MAX,
+ .helpmsg = "write content to a file: echo path string ...",
},
{
.name = NULL