Merge remote-tracking branch 'origin/master' into ieee802154

This commit is contained in:
Gregory Nutt 2017-04-06 10:04:40 -06:00
commit 520610c27f
16 changed files with 265 additions and 94 deletions

View File

@ -99,9 +99,6 @@ else
INSTALL_DIR = $(BIN_DIR)
endif
CONFIG_XYZ_PROGNAME ?= nettest$(EXEEXT)
PROGNAME = $(CONFIG_XYZ_PROGNAME)
ROOTDEPPATH = --dep-path .
# NET test built-in application info

View File

@ -137,7 +137,7 @@ void send_client(void)
myaddr.sin_family = AF_INET;
myaddr.sin_port = HTONS(PORTNO);
#ifdef CONFIG_EXAMPLES_NETTEST_LOOPBACK
#ifdef CONFIG_EXAMPLES_NETTEST_LOOPBACK && defined(NET_LOOPBACK)
myaddr.sin_addr.s_addr = HTONL(0x7f000001);
#else
myaddr.sin_addr.s_addr = HTONL(CONFIG_EXAMPLES_NETTEST_CLIENTIP);

View File

@ -110,15 +110,33 @@ void recv_server(void)
/* Bind the socket to a local address */
#ifdef CONFIG_EXAMPLES_NETTEST_IPv6
myaddr.sin6_family = AF_INET6;
myaddr.sin6_port = HTONS(PORTNO);
myaddr.sin6_family = AF_INET6;
myaddr.sin6_port = HTONS(PORTNO);
#if defined(CONFIG_EXAMPLES_NETTEST_LOOPBACK) && !defined(NET_LOOPBACK)
myaddr.sin6_addr.s6_addr16[0] = HTONS(CONFIG_EXAMPLES_NETTEST_CLIENTIPv6ADDR_1);
myaddr.sin6_addr.s6_addr16[1] = HTONS(CONFIG_EXAMPLES_NETTEST_CLIENTIPv6ADDR_2);
myaddr.sin6_addr.s6_addr16[2] = HTONS(CONFIG_EXAMPLES_NETTEST_CLIENTIPv6ADDR_3);
myaddr.sin6_addr.s6_addr16[3] = HTONS(CONFIG_EXAMPLES_NETTEST_CLIENTIPv6ADDR_4);
myaddr.sin6_addr.s6_addr16[4] = HTONS(CONFIG_EXAMPLES_NETTEST_CLIENTIPv6ADDR_5);
myaddr.sin6_addr.s6_addr16[5] = HTONS(CONFIG_EXAMPLES_NETTEST_CLIENTIPv6ADDR_6);
myaddr.sin6_addr.s6_addr16[6] = HTONS(CONFIG_EXAMPLES_NETTEST_CLIENTIPv6ADDR_7);
myaddr.sin6_addr.s6_addr16[7] = HTONS(CONFIG_EXAMPLES_NETTEST_CLIENTIPv6ADDR_8);
#else
memset(&myaddr.sin6_addr, 0, sizeof(struct in6_addr));
#endif
addrlen = sizeof(struct sockaddr_in6);
#else
myaddr.sin_family = AF_INET;
myaddr.sin_port = HTONS(PORTNO);
myaddr.sin_addr.s_addr = INADDR_ANY;
myaddr.sin_family = AF_INET;
myaddr.sin_port = HTONS(PORTNO);
#if defined(CONFIG_EXAMPLES_NETTEST_LOOPBACK) && !defined(NET_LOOPBACK)
myaddr.sin_addr.s_addr = HTONL(CONFIG_EXAMPLES_NETTEST_CLIENTIP);
#else
myaddr.sin_addr.s_addr = INADDR_ANY;
#endif
addrlen = sizeof(struct sockaddr_in);
#endif

View File

@ -12,6 +12,22 @@ config EXAMPLES_UDPBLASTER
if EXAMPLES_UDPBLASTER
config EXAMPLES_UDPBLASTER_PROGNAME
string "Program name"
default "nettest"
depends on BUILD_KERNEL
---help---
This is the name of the program that will be use when the Nettest
program is installed.
config EXAMPLES_UDPBLASTER_STACKSIZE
int "Nettest stack size"
default 2048
config EXAMPLES_UDPBLASTER_PRIORITY
int "Nettest priority"
default 100
config EXAMPLES_UDPBLASTER_HOSTRATE
int "Host send rate (bits/second)"
default 800000
@ -153,87 +169,87 @@ config EXAMPLES_UDPBLASTER_TARGETIPv6_8
specified individually. This is the last of the 8-values. The
default for all eight values is fc00::2.
comment "Router IPv6 address"
comment "Host IPv6 address"
config EXAMPLES_UDPBLASTER_HOSTIPv6_1
hex "[0]"
default 0xfc00
range 0x0 0xffff
---help---
Default router IP address (aka, Gateway). This is a 16-bit integer
value in host order. Each of the eight values forming the full IP
address must be specified individually. This is the first of the
8-values. The default for all eight values is fc00::1.
Host IP address. This is a 16-bit integer value in host order.
Each of the eight values forming the full IP address must be
specified individually. This is the first of the 8-values.
The default for all eight values is fc00::1.
config EXAMPLES_UDPBLASTER_HOSTIPv6_2
hex "[1]"
default 0x0000
range 0x0 0xffff
---help---
Default router IP address (aka, Gateway). This is a 16-bit integer
value in host order. Each of the eight values forming the full IP
address must be specified individually. This is the second of the
8-values. The default for all eight values is fc00::1.
Host IP address. This is a 16-bit integer value in host order.
Each of the eight values forming the full IP address must be
specified individually. This is the second of the 8-values.
The default for all eight values is fc00::1.
config EXAMPLES_UDPBLASTER_HOSTIPv6_3
hex "[2]"
default 0x0000
range 0x0 0xffff
---help---
Default router IP address (aka, Gateway). This is a 16-bit integer
value in host order. Each of the eight values forming the full IP
address must be specified individually. This is the third of the
8-values. The default for all eight values is fc00::1.
Host IP address. This is a 16-bit integer value in host order.
Each of the eight values forming the full IP address must be
specified individually. This is the third of the 8-values.
The default for all eight values is fc00::1.
config EXAMPLES_UDPBLASTER_HOSTIPv6_4
hex "[3]"
default 0x0000
range 0x0 0xffff
---help---
Default router IP address (aka, Gateway). This is a 16-bit integer
value in host order. Each of the eight values forming the full IP
address must be specified individually. This is the fourth of the
8-values. The default for all eight values is fc00::1.
Host IP address. This is a 16-bit integer value in host order.
Each of the eight values forming the full IP address must be
specified individually. This is the fourth of the 8-values.
The default for all eight values is fc00::1.
config EXAMPLES_UDPBLASTER_HOSTIPv6_5
hex "[4]"
default 0x0000
range 0x0 0xffff
---help---
Default router IP address (aka, Gateway). This is a 16-bit integer
value in host order. Each of the eight values forming the full IP
address must be specified individually. This is the fifth of the
8-values. The default for all eight values is fc00::1.
Host IP address. This is a 16-bit integer value in host order.
Each of the eight values forming the full IP address must be
specified individually. This is the fifth of the 8-values.
The default for all eight values is fc00::1.
config EXAMPLES_UDPBLASTER_HOSTIPv6_6
hex "[5]"
default 0x0000
range 0x0 0xffff
---help---
Default router IP address (aka, Gateway). This is a 16-bit integer
value in host order. Each of the eight values forming the full IP
address must be specified individually. This is the sixth of the
8-values. The default for all eight values is fc00::1.
Host IP address. This is a 16-bit integer value in host order.
Each of the eight values forming the full IP address must be
specified individually. This is the sixth of the 8-values.
The default for all eight values is fc00::1.
config EXAMPLES_UDPBLASTER_HOSTIPv6_7
hex "[6]"
default 0x0000
range 0x0 0xffff
---help---
Default router IP address (aka, Gateway). This is a 16-bit integer
value in host order. Each of the eight values forming the full IP
address must be specified individually. This is the seventh of the
8-values. The default for all eight values is fc00::1.
Host IP address. This is a 16-bit integer value in host order.
Each of the eight values forming the full IP address must be
specified individually. This is the seventh of the 8-values.
The default for all eight values is fc00::1.
config EXAMPLES_UDPBLASTER_HOSTIPv6_8
hex "[7]"
default 0x0001
range 0x0 0xffff
---help---
Default router IP address (aka, Gateway). This is a 16-bit integer
value in host order. Each of the eight values forming the full IP
address must be specified individually. This is the last of the
8-values. The default for all eight values is fc00::1.
Host IP address. This is a 16-bit integer value in host order.
Each of the eight values forming the full IP address must be
specified individually. This is the last of the 8-values.
The default for all eight values is fc00::1.
if EXAMPLES_UDPBLASTER_INIT

View File

@ -79,16 +79,19 @@ else
INSTALL_DIR = $(BIN_DIR)
endif
CONFIG_XYZ_PROGNAME ?= udpblaster$(EXEEXT)
PROGNAME = $(CONFIG_XYZ_PROGNAME)
CONFIG_UPBLASTER_PROGNAME ?= udpblaster$(EXEEXT)
PROGNAME = $(CONFIG_UPBLASTER_PROGNAME)
ROOTDEPPATH = --dep-path .
# NET test built-in application info
CONFIG_EXAMPLES_UDPBLASTER_STACKSIZE ?= 2048
CONFIG_EXAMPLES_UDPBLASTER_PRIORITY ?= 100
APPNAME = udpblaster
PRIORITY = SCHED_PRIORITY_DEFAULT
STACKSIZE = 2048
PRIORITY = $(CONFIG_EXAMPLES_UDPBLASTER_PRIORITY)
STACKSIZE = $(CONFIG_EXAMPLES_UDPBLASTER_STACKSIZE)
# Common build

View File

@ -88,7 +88,6 @@
# else
# define UDPBLASTER_MSS (UDPBLASTER_MTU - ETH_HDRLEN - IPv4_HDRLEN - UDP_HDRLEN)
# endif
#
#elif defined(CONFIG_NET_LOOPBACK)
# define UDPBLASTER_MTU 1518
# ifdef CONFIG_EXAMPLES_UDPBLASTER_IPv6
@ -96,6 +95,9 @@
# else
# define UDPBLASTER_MSS (UDPBLASTER_MTU - IPv4_HDRLEN - UDP_HDRLEN)
# endif
#elif defined(CONFIG_NET_6LOWPAN)
# define UDPBLASTER_MTU CONFIG_NET_6LOWPAN_MTU
# define UDPBLASTER_MSS (CONFIG_NET_6LOWPAN_MTU - IPv6_HDRLEN - UDP_HDRLEN)
#elif defined(CONFIG_NET_SLIP)
# define UDPBLASTER_MTU CONFIG_NET_SLIP_MTU
# ifdef CONFIG_EXAMPLES_UDPBLASTER_IPv6

View File

@ -48,14 +48,6 @@
#include "udpblaster.h"
/****************************************************************************
* Private Data
****************************************************************************/
/****************************************************************************
* Public Functions
****************************************************************************/
/****************************************************************************
* main
****************************************************************************/
@ -91,14 +83,14 @@ int main(int argc, char **argv, char **envp)
#else
target.sin6_family = AF_INET6;
target.sin6_port = HTONS(UDPBLASTER_PORTNO);
target.sin6_addr.s6_addr16[0] = HTONL(EXAMPLES_UDPBLASTER_TARGETIPv6_1);
target.sin6_addr.s6_addr16[1] = HTONL(EXAMPLES_UDPBLASTER_TARGETIPv6_2);
target.sin6_addr.s6_addr16[2] = HTONL(EXAMPLES_UDPBLASTER_TARGETIPv6_3);
target.sin6_addr.s6_addr16[3] = HTONL(EXAMPLES_UDPBLASTER_TARGETIPv6_4);
target.sin6_addr.s6_addr16[4] = HTONL(EXAMPLES_UDPBLASTER_TARGETIPv6_5);
target.sin6_addr.s6_addr16[5] = HTONL(EXAMPLES_UDPBLASTER_TARGETIPv6_6);
target.sin6_addr.s6_addr16[6] = HTONL(EXAMPLES_UDPBLASTER_TARGETIPv6_7);
target.sin6_addr.s6_addr16[7] = HTONL(EXAMPLES_UDPBLASTER_TARGETIPv6_8);
target.sin6_addr.s6_addr16[0] = HTONS(CONFIG_EXAMPLES_UDPBLASTER_TARGETIPv6_1);
target.sin6_addr.s6_addr16[1] = HTONS(CONFIG_EXAMPLES_UDPBLASTER_TARGETIPv6_2);
target.sin6_addr.s6_addr16[2] = HTONS(CONFIG_EXAMPLES_UDPBLASTER_TARGETIPv6_3);
target.sin6_addr.s6_addr16[3] = HTONS(CONFIG_EXAMPLES_UDPBLASTER_TARGETIPv6_4);
target.sin6_addr.s6_addr16[4] = HTONS(CONFIG_EXAMPLES_UDPBLASTER_TARGETIPv6_5);
target.sin6_addr.s6_addr16[5] = HTONS(CONFIG_EXAMPLES_UDPBLASTER_TARGETIPv6_6);
target.sin6_addr.s6_addr16[6] = HTONS(CONFIG_EXAMPLES_UDPBLASTER_TARGETIPv6_7);
target.sin6_addr.s6_addr16[7] = HTONS(CONFIG_EXAMPLES_UDPBLASTER_TARGETIPv6_8);
addrlen = sizeof(struct sockaddr_in6);
sockfd = socket(PF_INET6, SOCK_DGRAM, 0);

View File

@ -223,20 +223,20 @@ int udpblaster_main(int argc, char *argv[])
#else
host.sin6_family = AF_INET6;
host.sin6_port = HTONS(UDPBLASTER_PORTNO);
host.sin6_addr.s6_addr16[0] = HTONL(EXAMPLES_UDPBLASTER_HOSTIPv6_1);
host.sin6_addr.s6_addr16[1] = HTONL(EXAMPLES_UDPBLASTER_HOSTIPv6_2);
host.sin6_addr.s6_addr16[2] = HTONL(EXAMPLES_UDPBLASTER_HOSTIPv6_3);
host.sin6_addr.s6_addr16[3] = HTONL(EXAMPLES_UDPBLASTER_HOSTIPv6_4);
host.sin6_addr.s6_addr16[4] = HTONL(EXAMPLES_UDPBLASTER_HOSTIPv6_5);
host.sin6_addr.s6_addr16[5] = HTONL(EXAMPLES_UDPBLASTER_HOSTIPv6_6);
host.sin6_addr.s6_addr16[6] = HTONL(EXAMPLES_UDPBLASTER_HOSTIPv6_7);
host.sin6_addr.s6_addr16[7] = HTONL(EXAMPLES_UDPBLASTER_HOSTIPv6_8);
host.sin6_addr.s6_addr16[0] = HTONS(CONFIG_EXAMPLES_UDPBLASTER_HOSTIPv6_1);
host.sin6_addr.s6_addr16[1] = HTONS(CONFIG_EXAMPLES_UDPBLASTER_HOSTIPv6_2);
host.sin6_addr.s6_addr16[2] = HTONS(CONFIG_EXAMPLES_UDPBLASTER_HOSTIPv6_3);
host.sin6_addr.s6_addr16[3] = HTONS(CONFIG_EXAMPLES_UDPBLASTER_HOSTIPv6_4);
host.sin6_addr.s6_addr16[4] = HTONS(CONFIG_EXAMPLES_UDPBLASTER_HOSTIPv6_5);
host.sin6_addr.s6_addr16[5] = HTONS(CONFIG_EXAMPLES_UDPBLASTER_HOSTIPv6_6);
host.sin6_addr.s6_addr16[6] = HTONS(CONFIG_EXAMPLES_UDPBLASTER_HOSTIPv6_7);
host.sin6_addr.s6_addr16[7] = HTONS(CONFIG_EXAMPLES_UDPBLASTER_HOSTIPv6_8);
addrlen = sizeof(struct sockaddr_in6);
sockfd = socket(PF_INET6, SOCK_DGRAM, 0);
if (sockfd < 0)
{
fprintf(stderr, "ERROR: socket() failed: %d\n", errno)
fprintf(stderr, "ERROR: socket() failed: %d\n", errno);
return 1;
}
#endif

View File

@ -1017,10 +1017,10 @@ o rmmod <module-name>
NAME INIT UNINIT ARG TEXT SIZE DATA SIZE
nsh>
o set <name> <value>
o set [{+|-}{e|x|xe|ex}] [<name> <value>]
Set the environment variable <name> to the sting <value>.
For example,
Set the environment variable <name> to the sting <value> and or set NSH
parser control options. For example,
nsh> echo $foobar
@ -1029,6 +1029,38 @@ o set <name> <value>
foovalue
nsh>
Set the 'exit on error control' and/or 'print a trace' of commands when parsing
scripts in NSH. The settinngs are in effect from the point of exection, until
they are changed again, or in the case of the init script, the settings are
returned to the default settings when it exits. Included child scripts will run
with the parents settings and changes made in the child script will effect the
parent on return.
Use 'set -e' to enable and 'set +e' to disable (ignore) the exit condition on commands.
The default is -e. Errors cause script to exit.
Use 'set -x' to enable and 'set +x' to disable (silence) printing a trace of the script
commands as they are ececuted.
The default is +x. No printing of a trace of script commands as they are executed.
Example 1 - no exit on command not found
set +e
notacommand
Example 2 - will exit on command not found
set -e
notacommand
Example 3 - will exit on command not found, and print a trace of the script commmands
set -ex
Example 4 - will exit on command not found, and print a trace of the script commmands
and set foobar to foovalue.
set -ex foobar foovalue
nsh> echo $foobar
foovalue
o sh <script-path>
Execute the sequence of NSH commands in the file referred

View File

@ -690,6 +690,15 @@
# undef NSH_HAVE_TRIMSPACES
#endif
#ifndef CONFIG_NSH_DISABLESCRIPT
# define NSH_NP_SET_OPTIONS "ex" /* Maintain order see nsh_npflags_e */
# define NSH_NP_SET_OPTIONS_INIT (NSH_PFLAG_SILENT)
#endif
#if defined(CONFIG_DISABLE_ENVIRON) && defined(CONFIG_NSH_DISABLESCRIPT)
# define CONFIG_NSH_DISABLE_SET
#endif
/****************************************************************************
* Public Types
****************************************************************************/
@ -741,6 +750,22 @@ struct nsh_loop_s
};
#endif
#ifndef CONFIG_NSH_DISABLESCRIPT
/* Define the bits that correspond to the option defined in
* NSH_NP_SET_OPTIONS. The bit value is 1 shifted left the offset
* of the char in NSH_NP_SET_OPTIONS string.
*/
enum nsh_npflags_e
{
NSH_PFLAG_IGNORE = 1, /* set for +e no exit on errors,
* cleared -e exit on error */
NSH_PFLAG_SILENT = 2, /* cleared -x print a trace of commands
* when parsing.
* set +x no print a trace of commands */
};
#endif
/* These structure provides the overall state of the parser */
struct nsh_parser_s
@ -752,6 +777,9 @@ struct nsh_parser_s
bool np_redirect; /* true: Output from the last command was re-directed */
#endif
bool np_fail; /* true: The last command failed */
#ifndef CONFIG_NSH_DISABLESCRIPT
uint8_t np_flags; /* See nsh_npflags_e above */
#endif
#ifndef CONFIG_NSH_DISABLEBG
int np_nice; /* "nice" value applied to last background cmd */
#endif
@ -1175,10 +1203,10 @@ int cmd_lsmod(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
int cmd_uname(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
#endif
#ifndef CONFIG_DISABLE_ENVIRON
# ifndef CONFIG_NSH_DISABLE_SET
#ifndef CONFIG_NSH_DISABLE_SET
int cmd_set(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
# endif
#endif
#ifndef CONFIG_DISABLE_ENVIRON
# ifndef CONFIG_NSH_DISABLE_UNSET
int cmd_unset(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
# endif

View File

@ -436,10 +436,14 @@ static const struct cmdmap_s g_cmdmap[] =
{ "rmmod", cmd_rmmod, 2, 2, "<module-name>" },
#endif
#ifndef CONFIG_DISABLE_ENVIRON
# ifndef CONFIG_NSH_DISABLE_SET
#ifndef CONFIG_NSH_DISABLE_SET
# if !defined(CONFIG_DISABLE_ENVIRON) && !defined(CONFIG_NSH_DISABLESCRIPT)
{ "set", cmd_set, 2, 4, "[{+|-}{e|x|xe|ex}] [<name> <value>]" },
# elif !defined(CONFIG_DISABLE_ENVIRON) && defined(CONFIG_NSH_DISABLESCRIPT)
{ "set", cmd_set, 3, 3, "<name> <value>" },
# endif
# elif defined(CONFIG_DISABLE_ENVIRON) && !defined(CONFIG_NSH_DISABLESCRIPT)
{ "set", cmd_set, 2, 2, "{+|-}{e|x|xe|ex}" },
# endif
#endif
#if CONFIG_NFILE_DESCRIPTORS > 0 && CONFIG_NFILE_STREAMS > 0 && !defined(CONFIG_NSH_DISABLESCRIPT)

View File

@ -480,5 +480,11 @@ FAR struct console_stdio_s *nsh_newconsole(void)
#endif
}
#ifndef CONFIG_NSH_DISABLESCRIPT
/* Set the initial option flags */
pstate->cn_vtbl.np.np_flags = NSH_NP_SET_OPTIONS_INIT;
#endif
return pstate;
}

View File

@ -85,6 +85,12 @@ int nsh_consolemain(int argc, char *argv[])
/* Execute the start-up script */
(void)nsh_initscript(&pstate->cn_vtbl);
#ifndef CONFIG_NSH_DISABLESCRIPT
/* Reset the option flags */
pstate->cn_vtbl.np.np_flags = NSH_NP_SET_OPTIONS_INIT;
#endif
#endif
#ifdef CONFIG_NSH_USBDEV_TRACE

View File

@ -311,29 +311,86 @@ int cmd_pwd(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
* Name: cmd_set
****************************************************************************/
#ifndef CONFIG_DISABLE_ENVIRON
#ifndef CONFIG_NSH_DISABLE_SET
int cmd_set(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
{
FAR char *value;
int ret;
int ret = OK;
int ndx = 1;
#ifndef CONFIG_NSH_DISABLESCRIPT
FAR char *popt;
const char opts[] = NSH_NP_SET_OPTIONS;
int op;
/* Trim whitespace from the value */
/* Support set [{+|-}{e|x|xe|ex}] [<name> <value>] */
value = nsh_trimspaces(argv[2]);
/* Set the environment variable */
ret = setenv(argv[1], value, TRUE);
if (ret < 0)
if (argc == 2 || argc == 4)
{
nsh_output(vtbl, g_fmtcmdfailed, argv[0], "setenv", NSH_ERRNO);
}
if (strlen(argv[1]) < 2)
{
ret = -EINVAL;
nsh_output(vtbl, g_fmtargrequired, argv[0], "set", NSH_ERRNO);
}
else
{
op = argv[1][0];
if (op != '-' && op != '+')
{
ret = -EINVAL;
nsh_output(vtbl, g_fmtarginvalid, argv[0], "set", NSH_ERRNO);
}
else
{
value = &argv[1][1];
while(*value && *value != ' ')
{
popt = strchr(opts, *value++);
if (popt == NULL)
{
nsh_output(vtbl, g_fmtarginvalid, argv[0], "set", NSH_ERRNO);
ret = -EINVAL;
break;
}
if (op == '+')
{
vtbl->np.np_flags |= 1 << (popt-opts);
}
else
{
vtbl->np.np_flags &= ~(1 << (popt-opts));
}
}
if (ret == OK)
{
ndx = 2;
}
}
}
}
# ifndef CONFIG_DISABLE_ENVIRON
if (ret == OK && (argc == 3 || argc == 4))
# endif
#endif
#ifndef CONFIG_DISABLE_ENVIRON
{
/* Trim whitespace from the value */
value = nsh_trimspaces(argv[ndx+1]);
/* Set the environment variable */
ret = setenv(argv[ndx], value, TRUE);
if (ret < 0)
{
nsh_output(vtbl, g_fmtcmdfailed, argv[0], "setenv", NSH_ERRNO);
}
}
#endif
return ret;
}
#endif
#endif
/****************************************************************************
* Name: cmd_unset

View File

@ -1169,6 +1169,11 @@ static FAR char *nsh_argexpand(FAR struct nsh_vtbl_s *vtbl, FAR char *cmdline,
envstr = nsh_envexpand(vtbl, ptr);
if ((vtbl->np.np_flags & NSH_PFLAG_SILENT) == 0)
{
nsh_output(vtbl," %s=%s\n", ptr, envstr ? envstr :"(null)");
}
/* Concatenate the result of the operation with the accumulated
* string. On failures to allocation memory, nsh_strcat will
* just return value value of argument

View File

@ -136,10 +136,15 @@ int nsh_script(FAR struct nsh_vtbl_s *vtbl, FAR const char *cmd,
* considerable amount of stack may be used.
*/
if ((vtbl->np.np_flags & NSH_PFLAG_SILENT) == 0)
{
nsh_output(vtbl,"%s", buffer);
}
ret = nsh_parse(vtbl, buffer);
}
}
while (pret && ret == OK);
while (pret && (ret == OK || (vtbl->np.np_flags & NSH_PFLAG_IGNORE)));
/* Close the script file */