aboutsummaryrefslogtreecommitdiff
path: root/apps/nshlib
diff options
context:
space:
mode:
Diffstat (limited to 'apps/nshlib')
-rw-r--r--apps/nshlib/Kconfig667
-rw-r--r--apps/nshlib/Make.defs40
-rw-r--r--apps/nshlib/Makefile144
-rw-r--r--apps/nshlib/README.txt1218
-rw-r--r--apps/nshlib/nsh.h757
-rw-r--r--apps/nshlib/nsh_builtin.c262
-rw-r--r--apps/nshlib/nsh_codeccmd.c538
-rw-r--r--apps/nshlib/nsh_console.c437
-rw-r--r--apps/nshlib/nsh_console.h159
-rw-r--r--apps/nshlib/nsh_consolemain.c132
-rw-r--r--apps/nshlib/nsh_dbgcmds.c415
-rw-r--r--apps/nshlib/nsh_ddcmd.c643
-rw-r--r--apps/nshlib/nsh_envcmds.c338
-rw-r--r--apps/nshlib/nsh_fileapps.c314
-rw-r--r--apps/nshlib/nsh_fscmds.c1315
-rw-r--r--apps/nshlib/nsh_init.c102
-rw-r--r--apps/nshlib/nsh_mmcmds.c96
-rw-r--r--apps/nshlib/nsh_mntcmds.c467
-rw-r--r--apps/nshlib/nsh_netcmds.c1153
-rw-r--r--apps/nshlib/nsh_netinit.c179
-rw-r--r--apps/nshlib/nsh_parse.c1645
-rw-r--r--apps/nshlib/nsh_proccmds.c310
-rw-r--r--apps/nshlib/nsh_romfsetc.c124
-rw-r--r--apps/nshlib/nsh_romfsimg.h89
-rw-r--r--apps/nshlib/nsh_script.c195
-rw-r--r--apps/nshlib/nsh_session.c163
-rw-r--r--apps/nshlib/nsh_telnetd.c318
-rw-r--r--apps/nshlib/nsh_test.c438
-rw-r--r--apps/nshlib/nsh_timcmds.c331
-rw-r--r--apps/nshlib/nsh_usbdev.c391
-rw-r--r--apps/nshlib/rcS.template5
31 files changed, 0 insertions, 13385 deletions
diff --git a/apps/nshlib/Kconfig b/apps/nshlib/Kconfig
deleted file mode 100644
index d7a7b8a99..000000000
--- a/apps/nshlib/Kconfig
+++ /dev/null
@@ -1,667 +0,0 @@
-#
-# For a description of the syntax of this configuration file,
-# see misc/tools/kconfig-language.txt.
-#
-
-config NSH_LIBRARY
- bool "NSH Library"
- default n
- select SYSTEM_READLINE
- ---help---
- Build the NSH support library. This is used, for example, by examples/nsh
- in order to implement the full NuttShell (NSH).
-
-if NSH_LIBRARY
-config NSH_BUILTIN_APPS
- bool "Enable built-in applications"
- default n
- depends on BUILTIN
- ---help---
- Support external registered, "built-in" applications that can be
- executed from the NSH command line (see apps/README.txt for
- more information). This options requires support for builtin
- applications (BUILTIN).
-
-config NSH_FILE_APPS
- bool "Enable execution of program files"
- default n
- depends on LIBC_EXECFUNCS
- ---help---
- Support execution of program files residing within a file
- system. This options requires support for the posix_spawn()
- interface (LIBC_EXECFUNCS).
-
-menu "Disable Individual commands"
-
-config NSH_DISABLE_BASE64DEC
- bool "Disable base64dec"
- default n
- depends on NETUTILS_CODECS && CODECS_BASE64
-
-config NSH_DISABLE_BASE64ENC
- bool "Disable base64enc"
- default n
- depends on NETUTILS_CODECS && CODECS_BASE64
-
-config NSH_DISABLE_CAT
- bool "Disable cat"
- default n
-
-config NSH_DISABLE_CD
- bool "Disable cd"
- default n
-
-config NSH_DISABLE_CP
- bool "Disable cp"
- default n
-
-config NSH_DISABLE_CMP
- bool "Disable cmp"
- default n
-
-config NSH_DISABLE_DD
- bool "Disable dd"
- default n
-
-config NSH_DISABLE_ECHO
- bool "Disable echo"
- default n
-
-config NSH_DISABLE_EXEC
- bool "Disable exec"
- default n
-
-config NSH_DISABLE_EXIT
- bool "Disable exit"
- default n
-
-config NSH_DISABLE_FREE
- bool "Disable free"
- default n
-
-config NSH_DISABLE_GET
- bool "Disable get"
- default n
-
-config NSH_DISABLE_HELP
- bool "Disable help"
- default n
-
-config NSH_DISABLE_HEXDUMP
- bool "Disable hexdump"
- default n
-
-config NSH_DISABLE_IFCONFIG
- bool "Disable ifconfig"
- default n
-
-config NSH_DISABLE_KILL
- bool "Disable kill"
- default n
-
-config NSH_DISABLE_LOSETUP
- bool "Disable losetup"
- default n
-
-config NSH_DISABLE_LS
- bool "Disable ls"
- default n
-
-config NSH_DISABLE_MB
- bool "Disable mb"
- default n
-
-config NSH_DISABLE_MD5
- bool "Disable md5"
- default n
- depends on NETUTILS_CODECS && CODECS_HASH_MD5
-
-config NSH_DISABLE_MKDIR
- bool "Disable mkdir"
- default n
-
-config NSH_DISABLE_MKFATFS
- bool "Disable mkfatfs"
- default n
-
-config NSH_DISABLE_MKFIFO
- bool "Disable mkfifo"
- default n
-
-config NSH_DISABLE_MKRD
- bool "Disable mkrd"
- default n
-
-config NSH_DISABLE_MH
- bool "Disable mh"
- default n
-
-config NSH_DISABLE_MOUNT
- bool "Disable mount"
- default n
-
-config NSH_DISABLE_MW
- bool "Disable mw"
- default n
-
-config NSH_DISABLE_NSFMOUNT
- bool "Disable nfsmount"
- default n
-
-config NSH_DISABLE_PS
- bool "Disable ps"
- default n
-
-config NSH_DISABLE_PING
- bool "Disable ping"
- default n
-
-config NSH_DISABLE_PUT
- bool "Disable put"
- default n
-
-config NSH_DISABLE_PWD
- bool "Disable pwd"
- default n
-
-config NSH_DISABLE_RM
- bool "Disable rm"
- default n
-
-config NSH_DISABLE_RMDIR
- bool "Disable rmdir"
- default n
-
-config NSH_DISABLE_SET
- bool "Disable set"
- default n
-
-config NSH_DISABLE_SH
- bool "Disable sh"
- default n
-
-config NSH_DISABLE_SLEEP
- bool "Disable sleep"
- default n
-
-config NSH_DISABLE_TEST
- bool "Disable test"
- default n
-
-config NSH_DISABLE_UMOUNT
- bool "Disable umount"
- default n
-
-config NSH_DISABLE_UNSET
- bool "Disable unset"
- default n
-
-config NSH_DISABLE_URLDECODE
- bool "Disable urldecode"
- default n
- depends on NETUTILS_CODECS && CODECS_URLCODE
-
-config NSH_DISABLE_URLENCODE
- bool "Disable urlencode"
- default n
- depends on NETUTILS_CODECS && CODECS_URLCODE
-
-config NSH_DISABLE_USLEEP
- bool "Disable usleep"
- default n
-
-config NSH_DISABLE_WGET
- bool "Disable wget"
- default n
-
-config NSH_DISABLE_XD
- bool "Disable xd"
- default n
-
-endmenu
-
-config NSH_CODECS_BUFSIZE
- int "File buffer size used by CODEC commands"
- default 128
-
-config NSH_FILEIOSIZE
- int "NSH I/O buffer size"
- default 1024
- ---help---
- Size of a static I/O buffer used for file access (ignored if
- there is no filesystem). Default is 1024.
-
-config NSH_STRERROR
- bool "Use strerror()"
- default n
- depends on LIBC_STRERROR
- ---help---
- strerror(errno) makes more readable output but strerror() is
- very large and will not be used unless this setting is 'y'
- This setting depends upon the strerror() having been enabled
- with LIBC_STRERROR.
-
-config NSH_LINELEN
- int "Max command line length"
- default 80
- ---help---
- The maximum length of one command line and of one output line.
- Default: 80
-
-config NSH_NESTDEPTH
- int "Maximum command nesting"
- default 3
- ---help---
- The maximum number of nested if-then[-else]-fi sequences that
- are permissable. Default: 3
-
-config NSH_DISABLESCRIPT
- bool "Disable script support"
- default n
- ---help---
- This can be set to 'y' to suppress support for scripting. This
- setting disables the 'sh', 'test', and '[' commands and the
- if-then[-else]-fi construct. This would only be set on systems
- where a minimal footprint is a necessity and scripting is not.
-
-config NSH_DISABLEBG
- bool "Disable background commands"
- default n
- ---help---
- This can be set to 'y' to suppress support for background
- commands. This setting disables the 'nice' command prefix and
- the '&' command suffix. This would only be set on systems
- where a minimal footprint is a necessity and background command
- execution is not.
-
-config NSH_MMCSDMINOR
- int "MMC/SD minor device number"
- default 0
- ---help---
- If the architecture supports an MMC/SD slot and if the NSH
- architecture specific logic is present, this option will provide
- the MMC/SD minor number, i.e., the MMC/SD block driver will
- be registered as /dev/mmcsdN where N is the minor number.
- Default is zero.
-
-config NSH_ROMFSETC
- bool "Support ROMFS start-up script"
- default n
- depends on FS_ROMFS
- ---help---
- Mount a ROMFS filesystem at /etc and provide a startup script
- at /etc/init.d/rcS. The default startup script will mount
- a FAT FS RAMDISK at /tmp but the logic is easily extensible.
-
-endif
-
-if NSH_ROMFSETC
-
-config NSH_ROMFSRC
- bool "Support ROMFS login script"
- default n
- ---help---
- The ROMFS start-up script will be executed excactly once. For
- simple, persistence consoles (like a serial console). But with
- other other kinds of consoles, there may be multiple, transient
- sessions (such as Telnet and USB consoles). In these cases, you
- may need another script that is executed at the beginning of each
- session. Selecting this option enables support for such a login
- script
-
-config NSH_ROMFSMOUNTPT
- string "ROMFS mount point"
- default "/etc"
- ---help---
- The default mountpoint for the ROMFS volume is /etc, but that
- can be changed with this setting. This must be a absolute path
- beginning with '/'.
-
-config NSH_INITSCRIPT
- string "Relative path to startup script"
- default "init.d/rcS"
- ---help---
- This is the relative path to the startup script within the mountpoint.
- The default is init.d/rcS. This is a relative path and must not
- start with '/'.
-
-config NSH_RCSCRIPT
- string "Relative path to login script"
- default ".nshrc"
- depends on NSH_ROMFSRC
- ---help---
- This is the relative path to the login script within the mountpoint.
- The default is .nshrc. This is a relative path and must not
- start with '/'.
-
-config NSH_ROMFSDEVNO
- int "ROMFS block device minor number"
- default 0
- ---help---
- This is the minor number of the ROMFS block device. The default is
- '0' corresponding to /dev/ram0.
-
-config NSH_ROMFSSECTSIZE
- int "ROMFS sector size"
- default 64
- ---help---
- This is the sector size to use with the ROMFS volume. Since the
- default volume is very small, this defaults to 64 but should be
- increased if the ROMFS volume were to be become large. Any value
- selected must be a power of 2.
-
-config NSH_FATDEVNO
- int "FAT block device minor number"
- default 0
- depends on FS_FAT
- ---help---
- When the default rcS file used when NSH_ROMFSETC is selected, it
- will mount a FAT FS under /tmp. This is the minor number of the FAT
- FS block device. The default is '1' corresponding to /dev/ram1.
-
-config NSH_FATSECTSIZE
- int "FAT sector size"
- default 512
- depends on FS_FAT
- ---help---
- When the default rcS file used when NSH_ROMFSETC is selected, it
- will mount a FAT FS under /tmp. This is the sector size use with the
- FAT FS. Default is 512.
-
-config NSH_FATNSECTORS
- int "FAT number of sectors"
- default 1024
- depends on FS_FAT
- ---help---
- When the default rcS file used when NSH_ROMFSETC is selected, it
- will mount a FAT FS under /tmp. This is the number of sectors to use
- with the FAT FS. Defualt is 1024. The amount of memory used by the
- FAT FS will be NSH_FATSECTSIZE * NSH_FATNSECTORS bytes.
-
-config NSH_FATMOUNTPT
- string "FAT mount point"
- default "/tmp"
- depends on FS_FAT
- ---help---
- When the default rcS file used when NSH_ROMFSETC is selected, it
- will mount a FAT FS under /tmp. This is the location where the FAT
- FS will be mounted. Default is "/tmp".
-
-endif
-
-if NSH_LIBRARY
-config NSH_CONSOLE
- bool "Use console"
- default y
- ---help---
- If NSH_CONSOLE is set to 'y', then a character driver
- console front-end is selected (/dev/console).
-
- Normally, the serial console device is a UART and RS-232
- interface. However, if USBDEV is defined, then a USB
- serial device may, instead, be used if the one of
- the following are defined:
-
- PL2303 and PL2303_CONSOLE - Set up the Prolifics PL2303
- emulation as a console device at /dev/console.
-
- CDCACM and CDCACM_CONSOLE - Set up the CDC/ACM serial
- device as a console device at dev/console.
-
- NSH_USBCONSOLE and NSH_USBCONDEV - Sets up some other USB
- serial device as the NSH console (not necessarily dev/console).
-
-config NSH_USBCONSOLE
- bool "Use a USB console"
- default n
- depends on NSH_CONSOLE && USBDEV
- ---help---
- If defined, then the an arbitrary USB device may be used
- to as the NSH console. In this case, NSH_USBCONDEV must
- be defined to indicate which USB device to use as the
- console.
-
-config NSH_USBCONDEV
- string "USB console device"
- default "/dev/ttyACM0"
- depends on NSH_USBCONSOLE
- ---help---
- If NSH_USBCONSOLE is set to 'y', then NSH_USBCONDEV must
- also be set to select the USB device used to support the
- NSH console. This should be set to the quoted name of a
- readable/write-able USB driver such as:
- NSH_USBCONDEV="/dev/ttyACM0".
-
-config USBDEV_MINOR
- int "USB console device minor number"
- default 0
- depends on NSH_USBCONSOLE
- ---help---
- If there are more than one USB devices, then a USB device
- minor number may also need to be provided. Default: 0
-
-comment "USB Trace Support"
-config NSH_USBDEV_TRACE
- bool "Enable Builtin USB Trace Support"
- default n
- depends on USBDEV && (DEBUG || USBDEV_TRACE)
- ---help---
- Enable builtin USB trace support in NSH. If selected, buffered USB
- trace data will be presented each time a command is provided to NSH.
- The USB trace data will be sent to the console unless DEBUG set or
- unless you are using a USB console. In those cases, the trace data
- will go to the SYSLOG device.
-
- If not enabled, the USB trace support can be provided by external
- logic such as apps/system/usbmonitor.
-
-if NSH_USBDEV_TRACE
-
-config NSH_USBDEV_TRACEINIT
- bool "Show initialization events"
- default n
- ---help---
- Show initialization events
-
-config NSH_USBDEV_TRACECLASS
- bool "Show class driver events"
- default n
- ---help---
- Show class driver events
-
-config NSH_USBDEV_TRACETRANSFERS
- bool "Show data transfer events"
- default n
- ---help---
- Show data transfer events
-
-config NSH_USBDEV_TRACECONTROLLER
- bool "Show controller events"
- default n
- ---help---
- Show controller events
-
-config NSH_USBDEV_TRACEINTERRUPTS
- bool "Show interrupt-related events"
- default n
- ---help---
- Show interrupt-related events
-
-endif
-
-config NSH_CONDEV
- bool "Default console device"
- default "/dev/console"
- depends on NSH_CONSOLE && !NSH_USBCONSOLE
- ---help---
- If NSH_CONSOLE is set to 'y', then NSH_CONDEV
- may also be set to select the serial device used to support
- the NSH console. This should be set to the quoted name of a
- readable/write-able character driver such as:
- NSH_CONDEV="/dev/ttyS1". This is useful, for example,
- to separate the NSH command line from the system console when
- the system console is used to provide debug output. Default:
- stdin and stdout (probably "/dev/console")
-
- NOTE: When any other device other than /dev/console is used
- for a user interface, (1) linefeeds (\n) will not be expanded to
- carriage return / linefeeds (\r\n). You will need to set
- your terminal program to account for this. And (2) input is
- not automatically echoed so you will have to turn local echo on.
-
-config NSH_ARCHINIT
- bool "Have architecture-specific initialization"
- default n
- ---help---
- Set if your board provides architecture specific initialization
- via the board-specific function nsh_archinitialize(). This
- function will be called early in NSH initialization to allow
- board logic to do such things as configure MMC/SD slots.
-
-config NSH_TELNET
- bool "Use Telnet console"
- default n
- depends on NET && NET_TCP
- ---help---
- If NSH_TELNET is set to 'y', then a TELENET
- server front-end is selected. When this option is provided,
- you may log into NuttX remotely using telnet in order to
- access NSH.
-
-endif
-
-if NSH_TELNET
-config NSH_TELNETD_PORT
- int "Telnet port number"
- default 23
- ---help---
- The telnet daemon will listen on this TCP port number for connections.
- Default: 23
-
-config NSH_TELNETD_DAEMONPRIO
- int "Telnet daemon priority"
- default 100
- ---help---
- Priority of the Telnet daemon. Default: 100
-
-config NSH_TELNETD_DAEMONSTACKSIZE
- int "Telnet daemon stack size"
- default 2048
- ---help---
- Stack size allocated for the Telnet daemon. Default: 2048
-
-config NSH_TELNETD_CLIENTPRIO
- int "Telnet client priority"
- default 100
- ---help---
- Priority of the Telnet client. Default: 100
-
-config NSH_TELNETD_CLIENTSTACKSIZE
- int "Telnet client stack size"
- default 2048
- ---help---
- Stack size allocated for the Telnet client. Default: 2048
-
-config NSH_IOBUFFER_SIZE
- int "Telnet I/O buffer size"
- default 512
- ---help---
- Determines the size of the I/O buffer to use for sending/
- receiving TELNET commands/reponses. Default: 512
-
-config NSH_TELNET_LOGIN
- bool "Telnet Login"
- default n
- ---help---
- If defined, then the Telnet user will be required to provide a
- username and password to start the NSH shell.
-
-if NSH_TELNET_LOGIN
-
-config NSH_TELNET_USERNAME
- string "Login Username"
- default "admin"
- ---help---
- Login user name. Default: "admin"
-
-config NSH_TELNET_PASSWORD
- string "Login Password"
- default "nuttx"
- ---help---
- Login password: Default: "nuttx"
-
-config NSH_TELNET_FAILCOUNT
- int "Login Retry Count"
- default 3
- ---help---
- Number of login retry attempts.
-
-endif
-endif
-
-config NSH_DHCPC
- bool "Use DHCP to get IP address"
- default n
- depends on NSH_LIBRARY && NET && NET_UDP && NET_BROADCAST
- ---help---
- Obtain the IP address via DHCP.
-
- Per RFC2131 (p. 9), the DHCP client must be prepared to receive DHCP
- messages of up to 576 bytes (excluding Ethernet, IP, or UDP headers and FCS).
-
-config NSH_IPADDR
- hex "Target IP address"
- default 0xa0000002
- depends on NSH_LIBRARY && NET && !NSH_DHCPC
- ---help---
- If NSH_DHCPC is NOT set, then the static IP address must be provided.
- This is a 32-bit integer value in host order. So, as an example,
- 0x10000002 would be 10.0.0.2.
-
-config NSH_DRIPADDR
- hex "Router IP address"
- default 0xa0000001
- depends on NSH_LIBRARY && NET && !NSH_DHCPC
- ---help---
- Default router IP address (aka, Gateway). This is a 32-bit integer
- value in host order. So, as an example, 0x10000001 would be 10.0.0.1.
-
-config NSH_NETMASK
- hex "Network mask"
- default 0xffffff00
- depends on NSH_LIBRARY && NET && !NSH_DHCPC
- ---help---
- Network mask. This is a 32-bit integer value in host order. So, as
- an example, 0xffffff00 would be 255.255.255.0.
-
-config NSH_DNS
- bool "Use DNS"
- default n
- depends on NSH_LIBRARY && NET && NET_UDP && NET_BROADCAST
- ---help---
- Configure to use a DNS.
-
-config NSH_DNSIPADDR
- hex "DNS IP address"
- default 0xa0000001
- depends on NSH_DNS
- ---help---
- Configure the DNS address. This is a 32-bit integer value in host
- order. So, as an example, 0xa0000001 would be 10.0.0.1.
-
-config NSH_NOMAC
- bool "Hardware has no MAC address"
- default n
- depends on NSH_LIBRARY && NET
- ---help---
- Set if your ethernet hardware has no built-in MAC address.
- If set, a bogus MAC will be assigned.
-
-config NSH_MAX_ROUNDTRIP
- int "Max Ping Round-Trip (DSEC)"
- default 20
- depends on NSH_LIBRARY && NET && !NSH_DISABLE_PING
- ---help---
- This is the maximum round trip for a response to a ICMP ECHO request.
- It is in units of deciseconds. The default is 20 (2 seconds).
-
diff --git a/apps/nshlib/Make.defs b/apps/nshlib/Make.defs
deleted file mode 100644
index 2bacb5b79..000000000
--- a/apps/nshlib/Make.defs
+++ /dev/null
@@ -1,40 +0,0 @@
-############################################################################
-# apps/nshlib/Make.defs
-# Adds selected applications to apps/ build
-#
-# Copyright (C) 2012 Gregory Nutt. All rights reserved.
-# Author: Gregory Nutt <gnutt@nuttx.org>
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# 1. Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-# 2. Redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in
-# the documentation and/or other materials provided with the
-# distribution.
-# 3. Neither the name NuttX nor the names of its contributors may be
-# used to endorse or promote products derived from this software
-# without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
-# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-# POSSIBILITY OF SUCH DAMAGE.
-#
-############################################################################
-
-ifeq ($(CONFIG_NSH_LIBRARY),y)
-CONFIGURED_APPS += nshlib
-endif
-
diff --git a/apps/nshlib/Makefile b/apps/nshlib/Makefile
deleted file mode 100644
index 4256a1091..000000000
--- a/apps/nshlib/Makefile
+++ /dev/null
@@ -1,144 +0,0 @@
-############################################################################
-# apps/nshlib/Makefile
-#
-# Copyright (C) 2011-2013 Gregory Nutt. All rights reserved.
-# Author: Gregory Nutt <gnutt@nuttx.org>
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# 1. Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-# 2. Redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in
-# the documentation and/or other materials provided with the
-# distribution.
-# 3. Neither the name NuttX nor the names of its contributors may be
-# used to endorse or promote products derived from this software
-# without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
-# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-# POSSIBILITY OF SUCH DAMAGE.
-#
-############################################################################
-
--include $(TOPDIR)/.config
--include $(TOPDIR)/Make.defs
-include $(APPDIR)/Make.defs
-
-# NSH Library
-
-ASRCS =
-CSRCS = nsh_init.c nsh_parse.c nsh_console.c nsh_script.c nsh_session.c
-CSRCS += nsh_fscmds.c nsh_ddcmd.c nsh_proccmds.c nsh_mmcmds.c nsh_envcmds.c
-CSRCS += nsh_dbgcmds.c
-
-ifeq ($(CONFIG_NSH_BUILTIN_APPS),y)
-CSRCS += nsh_builtin.c
-endif
-
-ifeq ($(CONFIG_NSH_FILE_APPS),y)
-CSRCS += nsh_fileapps.c
-endif
-
-ifeq ($(CONFIG_NSH_ROMFSETC),y)
-CSRCS += nsh_romfsetc.c
-endif
-
-ifeq ($(CONFIG_NET),y)
-CSRCS += nsh_netinit.c nsh_netcmds.c
-endif
-
-ifeq ($(CONFIG_RTC),y)
-CSRCS += nsh_timcmds.c
-endif
-
-ifneq ($(CONFIG_DISABLE_MOUNTPOINT),y)
-CSRCS += nsh_mntcmds.c
-endif
-
-ifeq ($(CONFIG_NSH_CONSOLE),y)
-CSRCS += nsh_consolemain.c
-endif
-
-ifeq ($(CONFIG_NSH_TELNET),y)
-CSRCS += nsh_telnetd.c
-endif
-
-ifneq ($(CONFIG_NSH_DISABLESCRIPT),y)
-CSRCS += nsh_test.c
-endif
-
-ifeq ($(CONFIG_USBDEV),y)
-CSRCS += nsh_usbdev.c
-endif
-
-ifeq ($(CONFIG_NETUTILS_CODECS),y)
-CSRCS += nsh_codeccmd.c
-endif
-
-AOBJS = $(ASRCS:.S=$(OBJEXT))
-COBJS = $(CSRCS:.c=$(OBJEXT))
-
-SRCS = $(ASRCS) $(CSRCS)
-OBJS = $(AOBJS) $(COBJS)
-
-ifeq ($(CONFIG_WINDOWS_NATIVE),y)
- BIN = ..\libapps$(LIBEXT)
-else
-ifeq ($(WINTOOL),y)
- BIN = ..\\libapps$(LIBEXT)
-else
- BIN = ../libapps$(LIBEXT)
-endif
-endif
-
-ROOTDEPPATH = --dep-path .
-VPATH =
-
-MAXOPTIMIZATION = -Os
-
-# Build targets
-
-all: .built
-.PHONY: context .depend depend clean distclean
-
-$(AOBJS): %$(OBJEXT): %.S
- $(call ASSEMBLE, $<, $@)
-
-$(COBJS): %$(OBJEXT): %.c
- $(call COMPILE, $<, $@)
-
-.built: $(OBJS)
- $(call ARCHIVE, $(BIN), $(OBJS))
- @touch .built
-
-context:
-
-.depend: Makefile $(SRCS)
- @$(MKDEP) $(ROOTDEPPATH) "$(CC)" -- $(CFLAGS) -- $(SRCS) >Make.dep
- @touch $@
-
-depend: .depend
-
-clean:
- $(call DELFILE, .built)
- $(call CLEAN)
-
-distclean: clean
- $(call DELFILE, Make.dep)
- $(call DELFILE, .depend)
-
--include Make.dep
-
diff --git a/apps/nshlib/README.txt b/apps/nshlib/README.txt
deleted file mode 100644
index a03f4a8ee..000000000
--- a/apps/nshlib/README.txt
+++ /dev/null
@@ -1,1218 +0,0 @@
-apps/nshlib
-^^^^^^^^^^^
-
- This directory contains the NuttShell (NSH) library. This library can be
- linked with other logic to provide a simple shell application for NuttX.
-
- - Console/NSH Front End
- - Command Overview
- - Conditional Command Execution
- - Built-In Variables
- - Current Working Directory
- Environment Variables
- - NSH Start-Up Script
- - Simple Commands
- - NSH Configuration Settings
- Command Dependencies on Configuration Settings
- NSH-Specific Configuration Settings
- - Common Problems
-
-Console/NSH Front End
-^^^^^^^^^^^^^^^^^^^^^
-
- Using settings in the configuration file, NSH may be configured to
- use either the serial stdin/out or a telnet connection as the console
- or BOTH. When NSH is started, you will see the following welcome on
- either console:
-
- NuttShell (NSH)
- nsh>
-
- 'nsh>' is the NSH prompt and indicates that you may enter a command
- from the console.
-
-Command Overview
-^^^^^^^^^^^^^^^^
-
- This directory contains the NuttShell (NSH). This is a simple
- shell-like application. At present, NSH supports the following commands
- forms:
-
- Simple command: <cmd>
- Command with re-directed output: <cmd> > <file>
- <cmd> >> <file>
- Background command: <cmd> &
- Re-directed background command: <cmd> > <file> &
- <cmd> >> <file> &
-
- Where:
-
- <cmd> is any one of the simple commands listed later.
- <file> is the full or relative path to any writable object
- in the filesystem name space (file or character driver).
- Such objects will be referred to simply as files throughout
- this README.
-
- NSH executes at the mid-priority (128). Backgrounded commands can
- be made to execute at higher or lower priorities using nice:
-
- [nice [-d <niceness>>]] <cmd> [> <file>|>> <file>] [&]
-
- Where <niceness> is any value between -20 and 19 where lower
- (more negative values) correspond to higher priorities. The
- default niceness is 10.
-
-Conditional Command Execution
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
- An if-then[-else]-fi construct is also supported in order to
- support conditional execution of commands. This works from the
- command line but is primarily intended for use within NSH scripts
- (see the sh commnd). The syntax is as follows:
-
- if <cmd>
- then
- [sequence of <cmd>]
- else
- [sequence of <cmd>]
- fi
-
-Built-In Variables
-^^^^^^^^^^^^^^^^^^
-
- $? - The result of the last simple command execution
-
-Current Working Directory
-^^^^^^^^^^^^^^^^^^^^^^^^^
-
- All path arguments to commands may be either an absolute path or a
- path relative to the current working directory. The current working
- directory is set using the 'cd' command and can be queried either
- by using the 'pwd' command or by using the 'echo $PWD' command.
-
- Environment Variables:
- ----------------------
-
- PWD - The current working directory
- OLDPWD - The previous working directory
-
-NSH Start-Up Script
-^^^^^^^^^^^^^^^^^^^
-
-NSH supports options to provide a start up script for NSH. In general
-this capability is enabled with CONFIG_NSH_ROMFSETC, but has
-several other related configuration options as described in the final
-section of this README. This capability also depends on:
-
- - CONFIG_DISABLE_MOUNTPOINT not set
- - CONFIG_NFILE_DESCRIPTORS > 4
- - CONFIG_FS_ROMFS
-
-Default Start-Up Behavior
--------------------------
-
-The implementation that is provided is intended to provide great flexibility
-for the use of Start-Up files. This paragraph will discuss the general
-behavior when all of the configuration options are set to the default
-values.
-
-In this default case, enabling CONFIG_NSH_ROMFSETC will cause
-NSH to behave as follows at NSH startup time:
-
-- NSH will create a read-only RAM disk (a ROM disk), containing a tiny
- ROMFS filesystem containing the following:
-
- |--init.d/
- `-- rcS
-
- Where rcS is the NSH start-up script
-
-- NSH will then mount the ROMFS filesystem at /etc, resulting in:
-
- |--dev/
- | `-- ram0
- `--etc/
- `--init.d/
- `-- rcS
-
-- By default, the contents of rcS script are:
-
- # Create a RAMDISK and mount it at XXXRDMOUNTPOUNTXXX
-
- mkrd -m 1 -s 512 1024
- mkfatfs /dev/ram1
- mount -t vfat /dev/ram1 /tmp
-
-- NSH will execute the script at /etc/init.d/rcS at start-up (before the
- first NSH prompt. After execution of the script, the root FS will look
- like:
-
- |--dev/
- | |-- ram0
- | `-- ram1
- |--etc/
- | `--init.d/
- | `-- rcS
- `--tmp/
-
-Modifying the ROMFS Image
--------------------------
-
-The contents of the /etc directory are retained in the file
-apps/nshlib/nsh_romfsimg.h (OR, if CONFIG_NSH_ARCHROMFS
-is defined, include/arch/board/rcs.template). In order to modify
-the start-up behavior, there are three things to study:
-
-1. Configuration Options.
- The additional CONFIG_NSH_ROMFSETC configuration options
- discussed in the final section of this README.
-
-2. tools/mkromfsimg.sh Script.
- The script tools/mkromfsimg.sh creates nsh_romfsimg.h.
- It is not automatically executed. If you want to change the
- configuration settings associated with creating and mounting
- the /tmp directory, then it will be necessary to re-generate
- this header file using the mkromfsimg.sh script.
-
- The behavior of this script depends upon three things:
-
- - The configuration settings of the installed NuttX configuration.
- - The genromfs tool (available from http://romfs.sourceforge.net).
- - The file apps/nshlib/rcS.template (OR, if
- CONFIG_NSH_ARCHROMFS is defined, include/arch/board/rcs.template)
-
-3. rcS.template.
- The file apps/nshlib/rcS.template contains the general form
- of the rcS file; configured values are plugged into this
- template file to produce the final rcS file.
-
-NOTE:
-
- apps/nshlib/rcS.template generates the standard, default
- nsh_romfsimg.h file. If CONFIG_NSH_ARCHROMFS is defined
- in the NuttX configuration file, then a custom, board-specific
- nsh_romfsimg.h file residing in configs/<board>/include will be
- used. NOTE when the OS is configured, include/arch/board will
- be linked to configs/<board>/include.
-
-All of the startup-behavior is contained in rcS.template. The
-role of mkromfsimg.sh is to (1) apply the specific configuration
-settings to rcS.template to create the final rcS, and (2) to
-generate the header file nsh_romfsimg.h containg the ROMFS
-file system image.
-
-Simple Commands
-^^^^^^^^^^^^^^^
-
-o [ <expression> ]
-o test <expression>
-
- These are two alternative forms of the same command. They support
- evaluation of a boolean expression which sets $?. This command
- is used most frequently as the conditional command following the
- 'if' in the if-then[-else]-fi construct.
-
- Expression Syntax:
- ------------------
-
- expression = simple-expression | !expression |
- expression -o expression | expression -a expression
-
- simple-expression = unary-expression | binary-expression
-
- unary-expression = string-unary | file-unary
-
- string-unary = -n string | -z string
-
- file-unary = -b file | -c file | -d file | -e file | -f file |
- -r file | -s file | -w file
-
- binary-expression = string-binary | numeric-binary
-
- string-binary = string = string | string == string | string != string
-
- numeric-binary = integer -eq integer | integer -ge integer |
- integer -gt integer | integer -le integer |
- integer -lt integer | integer -ne integer
-
-o base64dec [-w] [-f] <string or filepath>
-
-o base64dec [-w] [-f] <string or filepath>
-
-o cat <path> [<path> [<path> ...]]
-
- This command copies and concatentates all of the files at <path>
- to the console (or to another file if the output is redirected).
-
-o cd [<dir-path>|-|~|..]
-
- Changes the current working directory (PWD). Also sets the
- previous working directory environment variable (OLDPWD).
-
- FORMS:
- ------
-
- 'cd <dir-path>' sets the current working directory to <dir-path>.
- 'cd -' sets the current working directory to the previous
- working directory ($OLDPWD). Equivalent to 'cd $OLDPWD'.
- 'cd' or 'cd ~' set the current working directory to the 'home'
- directory. The 'home' directory can be configured by setting
- CONFIG_LIB_HOMEDIR in the configuration file. The default
- 'home' directory is '/'.
- 'cd ..' sets the current working directory to the parent directory.
-
-o cp <source-path> <dest-path>
-
- Copy of the contents of the file at <source-path> to the location
- in the filesystem indicated by <path-path>
-
-o date [-s "MMM DD HH:MM:SS YYYY"]
-
- Show or set the current date and time. This command is only supported
- if the platform supported RTC hardware (CONFIG_RTC=y).
-
- Only one format is used both on display and when setting the date/time:
- MMM DD HH:MM:SS YYYY. For example,
-
- data -s "Sep 1 11:30:00 2011"
-
- 24-hour time format is assumed.
-
-o dd if=<infile> of=<outfile> [bs=<sectsize>] [count=<sectors>] [skip=<sectors>]
-
- Copy blocks from <infile> to <outfile>. <nfile> or <outfile> may
- be the path to a standard file, a character device, or a block device.
-
- Examples:
-
- 1. Read from character device, write to regular file. This will
- create a new file of the specified size filled with zero.
-
- nsh> dd if=/dev/zero of=/tmp/zeros bs=64 count=16
- nsh> ls -l /tmp
- /tmp:
- -rw-rw-rw- 1024 ZEROS
-
- 2. Read from character device, write to block device. This will
- fill the entire block device with zeros.
-
- nsh> ls -l /dev
- /dev:
- brw-rw-rw- 0 ram0
- crw-rw-rw- 0 zero
- nsh> dd if=/dev/zero of=/dev/ram0
-
- 3. Read from a block devic, write to a character device. This
- will read the entire block device and dump the contents in
- the bit bucket.
-
- nsh> ls -l /dev
- /dev:
- crw-rw-rw- 0 null
- brw-rw-rw- 0 ram0
- nsh> dd if=/dev/ram0 of=/dev/null
-
-o df
-
- Show the state of each mounted volume.
-
- Example:
-
- nsh> mount
- /etc type romfs
- /tmp type vfat
- nsh> df
- Block Number
- Size Blocks Used Available Mounted on
- 64 6 6 0 /etc
- 512 985 2 983 /tmp
- nsh>
-
-o echo [<string|$name> [<string|$name>...]]
-
- Copy the sequence of strings and expanded environment variables to
- console out (or to a file if the output is re-directed).
-
-o exec <hex-address>
-
- Execute the user logic at address <hex-address>. NSH will pause
- until the execution unless the user logic is executed in background
- via 'exec <hex-address> &'
-
-o exit
-
- Exit NSH. Only useful if you have started some other tasks (perhaps
- using the 'exec' command') and you would like to have NSH out of the
- way.
-
-o free
-
- Show the current state of the memory allocator. For example,
-
- nsh> free
- free
- total used free largest
- Mem: 4194288 1591552 2602736 2601584
-
- Where:
- total - This is the total size of memory allocated for use
- by malloc in bytes.
- used - This is the total size of memory occupied by
- chunks handed out by malloc.
- free - This is the total size of memory occupied by
- free (not in use) chunks.
- largest - Size of the largest free (not in use) chunk
-
-o get [-b|-n] [-f <local-path>] -h <ip-address> <remote-path>
-
- Use TFTP to copy the file at <remote-address> from the host whose IP
- address is identified by <ip-address>. Other options:
-
- -f <local-path>
- The file will be saved relative to the current working directory
- unless <local-path> is provided.
- -b|-n
- Selects either binary ("octect") or test ("netascii") transfer
- mode. Default: text.
-
-o help [-v] [<cmd>]
-
- Presents summary information about NSH commands to console. Options:
-
- -v
- Show verbose output will full command usage
-
- <cmd>
- Show full command usage only for this command
-
-o hexdump <file or device>
-
- Dump data in hexadecimal format from a file or character device.
-
-o ifconfig [nic_name [<ip-address>|dhcp]] [dr|gw|gateway <dr-address>] [netmask <net-mask>] [dns <dns-address>] [hw <hw-mac>]
-
- Show the current configuration of the network, for example:
-
- nsh> ifconfig
- eth0 HWaddr 00:18:11:80:10:06
- IPaddr:10.0.0.2 DRaddr:10.0.0.1 Mask:255.255.255.0
-
- if uIP statistics are enabled (CONFIG_NET_STATISTICS), then
- this command will also show the detailed state of uIP.
-
-o ifdown <nic-name>
-
- Take down the interface identified by the name <nic-name>.
-
- Example:
-
- ifdown eth0
-
-o ifup <nic-name>
-
- Bring up down the interface identified by the name <nic-name>.
-
- Example:
-
- ifup eth0
-
-o kill -<signal> <pid>
-
- Send the <signal> to the task identified by <pid>.
-
-o losetup [-d <dev-path>] | [[-o <offset>] [-r] <ldev-path> <file-path>]
-
- Setup or teardown the loop device:
-
- 1. Teardown the setup for the loop device at <dev-path>:
-
- losetup d <dev-path>
-
- 2. Setup the loop device at <dev-path> to access the file at <file-path>
- as a block device:
-
- losetup [-o <offset>] [-r] <dev-path> <file-path>
-
- Example:
-
- nsh> dd if=/dev/zero of=/tmp/image bs=512 count=512
- nsh> ls -l /tmp
- /tmp:
- -rw-rw-rw- 262144 IMAGE
- nsh> losetup /dev/loop0 /tmp/image
- nsh> ls -l /dev
- /dev:
- brw-rw-rw- 0 loop0
- nsh> mkfatfs /dev/loop0
- nsh> mount -t vfat /dev/loop0 /mnt/example
- nsh> ls -l /mnt
- ls -l /mnt
- /mnt:
- drw-rw-rw- 0 example/
- nsh> echo "This is a test" >/mnt/example/atest.txt
- nsh> ls -l /mnt/example
- /mnt/example:
- -rw-rw-rw- 16 ATEST.TXT
- nsh> cat /mnt/example/atest.txt
- This is a test
- nsh>
-
-o ls [-lRs] <dir-path>
-
- Show the contents of the directory at <dir-path>. NOTE:
- <dir-path> must refer to a directory and no other filesystem
- object.
-
- Options:
- --------
-
- -R Show the constents of specified directory and all of its
- sub-directories.
- -s Show the size of the files along with the filenames in the
- listing
- -l Show size and mode information along with the filenames
- in the listing.
-
-o md5 [-f] <string or filepath>
-
-o mb <hex-address>[=<hex-value>][ <hex-byte-count>]
-o mh <hex-address>[=<hex-value>][ <hex-byte-count>]
-o mw <hex-address>[=<hex-value>][ <hex-byte-count>]
-
- Access memory using byte size access (mb), 16-bit accesses (mh),
- or 32-bit access (mw). In each case,
-
- <hex-address>. Specifies the address to be accessed. The current
- value at that address will always be read and displayed.
- <hex-address>=<hex-value>. Read the value, then write <hex-value>
- to the location.
- <hex-byte-count>. Perform the mb, mh, or mw operation on a total
- of <hex-byte-count> bytes, increment the <hex-address> appropriately
- after each access
-
- Example
-
- nsh> mh 0 16
- 0 = 0x0c1e
- 2 = 0x0100
- 4 = 0x0c1e
- 6 = 0x0110
- 8 = 0x0c1e
- a = 0x0120
- c = 0x0c1e
- e = 0x0130
- 10 = 0x0c1e
- 12 = 0x0140
- 14 = 0x0c1e
- nsh>
-
-o mkdir <path>
-
- Create the directory at <path>. All components of of <path>
- except the final directory name must exist on a mounted file
- system; the final directory must not.
-
- Recall that NuttX uses a pseudo filesystem for its root file system.
- The mkdir command can only be used to create directories in volumes
- set up with the mount command; it cannot be used to create directories
- in the pseudo filesystem.
-
- Example:
- ^^^^^^^^
-
- nsh> mkdir /mnt/fs/tmp
- nsh> ls -l /mnt/fs
- /mnt/fs:
- drw-rw-rw- 0 TESTDIR/
- drw-rw-rw- 0 TMP/
- nsh>
-
-o mkfatfs <path>
-
- Format a fat file system on the block device specified by path.
- NSH provides this command to access the mkfatfs() NuttX API.
- This block device must reside in the NuttX pseudo filesystem and
- must have been created by some call to register_blockdriver() (see
- include/nuttx/fs/fs.h).
-
-o mkfifo <path>
-
- Creates a FIFO character device anywhere in the pseudo file system,
- creating whatever pseudo directories that may be needed to complete
- the full path. By convention, however, device drivers are place in
- the standard /dev directory. After it is created, the FIFO device
- may be used as any other device driver. NSH provides this command
- to access the mkfifo() NuttX API.
-
- Example:
- ^^^^^^^^
-
- nsh> ls -l /dev
- /dev:
- crw-rw-rw- 0 console
- crw-rw-rw- 0 null
- brw-rw-rw- 0 ram0
- nsh> mkfifo /dev/fifo
- nsh> ls -l /dev
- ls -l /dev
- /dev:
- crw-rw-rw- 0 console
- crw-rw-rw- 0 fifo
- crw-rw-rw- 0 null
- brw-rw-rw- 0 ram0
- nsh>
-
-o mkrd [-m <minor>] [-s <sector-size>] <nsectors>
-
- Create a ramdisk consisting of <nsectors>, each of size
- <sector-size> (or 512 bytes if <sector-size> is not specified.
- The ramdisk will be registered as /dev/ram<n> (if <n> is not
- specified, mkrd will attempt to register the ramdisk as
- /dev/ram0.
-
- Example:
- ^^^^^^^^
-
- nsh> ls /dev
- /dev:
- console
- null
- ttyS0
- ttyS1
- nsh> mkrd 1024
- nsh> ls /dev
- /dev:
- console
- null
- ram0
- ttyS0
- ttyS1
- nsh>
-
- Once the ramdisk has been created, it may be formatted using
- the mkfatfs command and mounted using the mount command.
-
- Example:
- ^^^^^^^^
- nsh> mkrd 1024
- nsh> mkfatfs /dev/ram0
- nsh> mount -t vfat /dev/ram0 /tmp
- nsh> ls /tmp
- /tmp:
- nsh>
-
-o mount [-t <fstype> <block-device> <dir-path>]
-
- The mount command performs one of two different operations. If no
- paramters are provided on the command line after the mount command,
- then the 'mount' command will enumerate all of the current
- mountpoints on the console.
-
- If the mount parameters are provied on the command after the 'mount'
- command, then the 'mount' command will mount a file system in the
- NuttX pseudo-file system. 'mount' performs a three way association,
- binding:
-
- File system. The '-t <fstype>' option identifies the type of
- file system that has been formatted on the <block-device>. As
- of this writing, vfat is the only supported value for <fstype>
-
- Block Device. The <block-device> argument is the full or relative
- path to a block driver inode in the pseudo filesystem. By convention,
- this is a name under the /dev sub-directory. This <block-device>
- must have been previously formatted with the same file system
- type as specified by <fstype>
-
- Mount Point. The mount point is the location in the pseudo file
- system where the mounted volume will appear. This mount point
- can only reside in the NuttX pseudo filesystem. By convention, this
- mount point is a subdirectory under /mnt. The mount command will
- create whatever pseudo directories that may be needed to complete
- the full path but the full path must not already exist.
-
- After the volume has been mounted in the NuttX pseudo file
- system, it may be access in the same way as other objects in the
- file system.
-
- Examples:
- ^^^^^^^^^
-
- nsh> ls -l /dev
- /dev:
- crw-rw-rw- 0 console
- crw-rw-rw- 0 null
- brw-rw-rw- 0 ram0
- nsh> ls /mnt
- nsh: ls: no such directory: /mnt
- nsh> mount -t vfat /dev/ram0 /mnt/fs
- nsh> ls -l /mnt/fs/testdir
- /mnt/fs/testdir:
- -rw-rw-rw- 15 TESTFILE.TXT
- nsh> echo "This is a test" >/mnt/fs/testdir/example.txt
- nsh> ls -l /mnt/fs/testdir
- /mnt/fs/testdir:
- -rw-rw-rw- 15 TESTFILE.TXT
- -rw-rw-rw- 16 EXAMPLE.TXT
- nsh> cat /mnt/fs/testdir/example.txt
- This is a test
- nsh>
-
- nsh> mount
- /etc type romfs
- /tmp type vfat
- /mnt/fs type vfat
-
-o mv <old-path> <new-path>
-
- Rename the file object at <old-path> to <new-path>. Both paths must
- reside in the same mounted filesystem.
-
-o nfsmount <server-address> <mount-point> <remote-path>
-
- Mount the remote NFS server directory <remote-path> at <mount-point> on the target machine.
- <server-address> is the IP address of the remote server.
-
-o ps
-
- Show the currently active threads and tasks. For example,
-
- nsh> ps
- PID PRI SCHD TYPE NP STATE NAME
- 0 0 FIFO TASK READY Idle Task()
- 1 128 RR TASK RUNNING init()
- 2 128 FIFO TASK WAITSEM nsh_telnetmain()
- 3 100 RR PTHREAD WAITSEM <pthread>(21)
- nsh>
-
-o ping [-c <count>] [-i <interval>] <ip-address>
-
- Test the network communication with a remote peer. Example,
-
- nsh> 10.0.0.1
- PING 10.0.0.1 56 bytes of data
- 56 bytes from 10.0.0.1: icmp_seq=1 time=0 ms
- 56 bytes from 10.0.0.1: icmp_seq=2 time=0 ms
- 56 bytes from 10.0.0.1: icmp_seq=3 time=0 ms
- 56 bytes from 10.0.0.1: icmp_seq=4 time=0 ms
- 56 bytes from 10.0.0.1: icmp_seq=5 time=0 ms
- 56 bytes from 10.0.0.1: icmp_seq=6 time=0 ms
- 56 bytes from 10.0.0.1: icmp_seq=7 time=0 ms
- 56 bytes from 10.0.0.1: icmp_seq=8 time=0 ms
- 56 bytes from 10.0.0.1: icmp_seq=9 time=0 ms
- 56 bytes from 10.0.0.1: icmp_seq=10 time=0 ms
- 10 packets transmitted, 10 received, 0% packet loss, time 10190 ms
- nsh>
-
-o put [-b|-n] [-f <remote-path>] -h <ip-address> <local-path>
-
- Copy the file at <local-address> to the host whose IP address is
- identified by <ip-address>. Other options:
-
- -f <remote-path>
- The file will be saved with the same name on the host unless
- unless <local-path> is provided.
- -b|-n
- Selects either binary ("octect") or test ("netascii") transfer
- mode. Default: text.
-
-o pwd
-
- Show the current working directory.
-
- nsh> cd /dev
- nsh> pwd
- /dev
- nsh>
-
- Same as 'echo $PWD'
-
- nsh> echo $PWD
- /dev
- nsh>
-
-o rm <file-path>
-
- Remove the specified <file-path> name from the mounted file system.
- Recall that NuttX uses a pseudo filesystem for its root file system.
- The rm command can only be used to remove (unlink) files in volumes
- set up with the mount command; it cannot be used to remove names from
- the pseudo filesystem.
-
- Example:
- ^^^^^^^^
-
- nsh> ls /mnt/fs/testdir
- /mnt/fs/testdir:
- TESTFILE.TXT
- EXAMPLE.TXT
- nsh> rm /mnt/fs/testdir/example.txt
- nsh> ls /mnt/fs/testdir
- /mnt/fs/testdir:
- TESTFILE.TXT
- nsh>
-
-o rmdir <dir-path>
-
- Remove the specified <dir-path> directory from the mounted file system.
- Recall that NuttX uses a pseudo filesystem for its root file system. The
- rmdir command can only be used to remove directories from volumes set up
- with the mount command; it cannot be used to remove directories from the
- pseudo filesystem.
-
- Example:
- ^^^^^^^^
-
- nsh> mkdir /mnt/fs/tmp
- nsh> ls -l /mnt/fs
- /mnt/fs:
- drw-rw-rw- 0 TESTDIR/
- drw-rw-rw- 0 TMP/
- nsh> rmdir /mnt/fs/tmp
- nsh> ls -l /mnt/fs
- ls -l /mnt/fs
- /mnt/fs:
- drw-rw-rw- 0 TESTDIR/
- nsh>
-
-o set <name> <value>
-
- Set the environment variable <name> to the sting <value>.
- For example,
-
- nsh> echo $foobar
-
- nsh> set foobar foovalue
- nsh> echo $foobar
- foovalue
- nsh>
-
-o sh <script-path>
-
- Execute the sequence of NSH commands in the file referred
- to by <script-path>.
-
-o sleep <sec>
-
- Pause execution (sleep) of <sec> seconds.
-
-o unset <name>
-
- Remove the value associated with the environment variable
- <name>. Example:
-
- nsh> echo $foobar
- foovalue
- nsh> unset foobar
- nsh> echo $foobar
-
- nsh>
-
- o urldecode [-f] <string or filepath>
-
- o urlencode [-f] <string or filepath>
-
-o usleep <usec>
-
- Pause execution (sleep) of <usec> microseconds.
-
-o wget [-o <local-path>] <url>
-
- Use HTTP to copy the file at <url> to the current directory.
- Options:
-
- -o <local-path>
- The file will be saved relative to the current working directory
- and with the same name as on the HTTP server unless <local-path>
- is provided.
-
-o xd <hex-address> <byte-count>
-
- Dump <byte-count> bytes of data from address <hex-address>
-
- Example:
- ^^^^^^^^
-
- nsh> xd 410e0 512
- Hex dump:
- 0000: 00 00 00 00 9c 9d 03 00 00 00 00 01 11 01 10 06 ................
- 0010: 12 01 11 01 25 08 13 0b 03 08 1b 08 00 00 02 24 ....%..........$
- ...
- 01f0: 08 3a 0b 3b 0b 49 13 00 00 04 13 01 01 13 03 08 .:.;.I..........
- nsh>
-
-NSH Configuration Settings
-^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The availability of the above commands depends upon features that
-may or may not be enabled in the NuttX configuration file. The
-following table indicates the dependency of each command on NuttX
-configuration settings. General configuration settings are discussed
-in the NuttX Porting Guide. Configuration settings specific to NSH
-as discussed at the bottom of this README file.
-
-Command Dependencies on Configuration Settings
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
- Command Depends on Configuration
- ---------- --------------------------
- [ !CONFIG_NSH_DISABLESCRIPT
- base64dec CONFIG_NETUTILS_CODECS && CONFIG_CODECS_BASE64
- base64enc CONFIG_NETUTILS_CODECS && CONFIG_CODECS_BASE64
- cat CONFIG_NFILE_DESCRIPTORS > 0
- cd !CONFIG_DISABLE_ENVIRON && CONFIG_NFILE_DESCRIPTORS > 0
- cp CONFIG_NFILE_DESCRIPTORS > 0
- dd CONFIG_NFILE_DESCRIPTORS > 0
- df !CONFIG_DISABLE_MOUNTPOINT && CONFIG_NFILE_DESCRIPTORS > 0 && CONFIG_FS_READABLE (see note 3)
- echo --
- exec --
- exit --
- free --
- get CONFIG_NET && CONFIG_NET_UDP && CONFIG_NFILE_DESCRIPTORS > 0 && CONFIG_NET_BUFSIZE >= 558 (see note 1)
- help --
- hexdump CONFIG_NFILE_DESCRIPTORS > 0
- ifconfig CONFIG_NET
- ifdown CONFIG_NET
- ifup CONFIG_NET
- kill !CONFIG_DISABLE_SIGNALS
- losetup !CONFIG_DISABLE_MOUNTPOINT && CONFIG_NFILE_DESCRIPTORS > 0
- ls CONFIG_NFILE_DESCRIPTORS > 0
- md5 CONFIG_NETUTILS_CODECS && CONFIG_CODECS_HASH_MD5
- mb,mh,mw ---
- mkdir !CONFIG_DISABLE_MOUNTPOINT && CONFIG_NFILE_DESCRIPTORS > 0 && CONFIG_FS_WRITABLE (see note 4)
- mkfatfs !CONFIG_DISABLE_MOUNTPOINT && CONFIG_NFILE_DESCRIPTORS > 0 && CONFIG_FS_FAT
- mkfifo CONFIG_NFILE_DESCRIPTORS > 0
- mkrd !CONFIG_DISABLE_MOUNTPOINT && CONFIG_NFILE_DESCRIPTORS > 0 && CONFIG_FS_WRITABLE (see note 4)
- mount !CONFIG_DISABLE_MOUNTPOINT && CONFIG_NFILE_DESCRIPTORS > 0 && CONFIG_FS_READABLE (see note 3)
- mv !CONFIG_DISABLE_MOUNTPOINT && CONFIG_NFILE_DESCRIPTORS > 0 && CONFIG_FS_WRITABLE (see note 4)
- nfsmount !CONFIG_DISABLE_MOUNTPOINT && CONFIG_NFILE_DESCRIPTORS > 0 && CONFIG_NET && CONFIG_NFS
- ping CONFIG_NET && CONFIG_NET_ICMP && CONFIG_NET_ICMP_PING && !CONFIG_DISABLE_CLOCK && !CONFIG_DISABLE_SIGNALS
- ps --
- put CONFIG_NET && CONFIG_NET_UDP && CONFIG_NFILE_DESCRIPTORS > 0 && CONFIG_NET_BUFSIZE >= 558 (see note 1,2)
- pwd !CONFIG_DISABLE_ENVIRON && CONFIG_NFILE_DESCRIPTORS > 0
- rm !CONFIG_DISABLE_MOUNTPOINT && CONFIG_NFILE_DESCRIPTORS > 0 && CONFIG_FS_WRITABLE (see note 4)
- rmdir !CONFIG_DISABLE_MOUNTPOINT && CONFIG_NFILE_DESCRIPTORS > 0 && CONFIG_FS_WRITABLE (see note 4)
- set !CONFIG_DISABLE_ENVIRON
- sh CONFIG_NFILE_DESCRIPTORS > 0 && CONFIG_NFILE_STREAMS > 0 && !CONFIG_NSH_DISABLESCRIPT
- sleep !CONFIG_DISABLE_SIGNALS
- test !CONFIG_NSH_DISABLESCRIPT
- umount !CONFIG_DISABLE_MOUNTPOINT && CONFIG_NFILE_DESCRIPTORS > 0 && CONFIG_FS_READABLE
- unset !CONFIG_DISABLE_ENVIRON
- urldecode CONFIG_NETUTILS_CODECS && CONFIG_CODECS_URLCODE
- urlencode CONFIG_NETUTILS_CODECS && CONFIG_CODECS_URLCODE
- usleep !CONFIG_DISABLE_SIGNALS
- get CONFIG_NET && CONFIG_NET_TCP && CONFIG_NFILE_DESCRIPTORS > 0
- xd ---
-
-* NOTES:
- 1. Because of hardware padding, the actual buffersize required for put and get
- operations size may be larger.
- 2. Special TFTP server start-up optionss will probably be required to permit
- creation of file for the correct operation of the put command.
- 3. CONFIG_FS_READABLE is not a user configuration but is set automatically
- if any readable filesystem is selected. At present, this is either CONFIG_FS_FAT
- and CONFIG_FS_ROMFS.
- 4. CONFIG_FS_WRITABLE is not a user configuration but is set automatically
- if any writable filesystem is selected. At present, this is only CONFIG_FS_FAT.
-
-In addition, each NSH command can be individually disabled via one of the following
-settings. All of these settings make the configuration of NSH potentially complex but
-also allow it to squeeze into very small memory footprints.
-
- CONFIG_NSH_DISABLE_BASE64DEC, CONFIG_NSH_DISABLE_BASE64ENC, CONFIG_NSH_DISABLE_CAT,
- CONFIG_NSH_DISABLE_CD, CONFIG_NSH_DISABLE_CP, CONFIG_NSH_DISABLE_DD,
- CONFIG_NSH_DISABLE_DF, CONFIG_NSH_DISABLE_ECHO, CONFIG_NSH_DISABLE_EXEC,
- CONFIG_NSH_DISABLE_EXIT, CONFIG_NSH_DISABLE_FREE, CONFIG_NSH_DISABLE_GET,
- CONFIG_NSH_DISABLE_HELP, CONFIG_NSH_DISABLE_HEXDUMP, CONFIG_NSH_DISABLE_IFCONFIG,
- CONFIG_NSH_DISABLE_IFUPDOWN, CONFIG_NSH_DISABLE_KILL, CONFIG_NSH_DISABLE_LOSETUP,
- CONFIG_NSH_DISABLE_LS, CONFIG_NSH_DISABLE_MD5 CONFIG_NSH_DISABLE_MB,
- CONFIG_NSH_DISABLE_MKDIR, CONFIG_NSH_DISABLE_MKFATFS, CONFIG_NSH_DISABLE_MKFIFO,
- CONFIG_NSH_DISABLE_MKRD, CONFIG_NSH_DISABLE_MH, CONFIG_NSH_DISABLE_MOUNT,
- CONFIG_NSH_DISABLE_MW, CONFIG_NSH_DISABLE_MV, CONFIG_NSH_DISABLE_NFSMOUNT,
- CONFIG_NSH_DISABLE_PS, CONFIG_NSH_DISABLE_PING, CONFIG_NSH_DISABLE_PUT,
- CONFIG_NSH_DISABLE_PWD, CONFIG_NSH_DISABLE_RM, CONFIG_NSH_DISABLE_RMDIR,
- CONFIG_NSH_DISABLE_SET, CONFIG_NSH_DISABLE_SH, CONFIG_NSH_DISABLE_SLEEP,
- CONFIG_NSH_DISABLE_TEST, CONFIG_NSH_DISABLE_UMOUNT, CONFIG_NSH_DISABLE_UNSET,
- CONFIG_NSH_DISABLE_URLDECODE, CONFIG_NSH_DISABLE_URLENCODE, CONFIG_NSH_DISABLE_USLEEP,
- CONFIG_NSH_DISABLE_WGET, CONFIG_NSH_DISABLE_XD
-
-Verbose help output can be suppressed by defining CONFIG_NSH_HELP_TERSE. In that
-case, the help command is still available but will be slightly smaller.
-
-NSH-Specific Configuration Settings
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
- The behavior of NSH can be modified with the following settings in
- the configs/<board-name>/defconfig file:
-
- * CONFIG_NSH_BUILTIN_APPS
- Support external registered, "builtin" applications that can be
- executed from the NSH command line (see apps/README.txt for
- more information).
-
- * CONFIG_NSH_FILEIOSIZE
- Size of a static I/O buffer used for file access (ignored if
- there is no filesystem). Default is 1024.
-
- * CONFIG_NSH_STRERROR
- strerror(errno) makes more readable output but strerror() is
- very large and will not be used unless this setting is 'y'.
- This setting depends upon the strerror() having been enabled
- with CONFIG_LIBC_STRERROR.
-
- * CONFIG_NSH_LINELEN
- The maximum length of one command line and of one output line.
- Default: 80
-
- * CONFIG_NSH_NESTDEPTH
- The maximum number of nested if-then[-else]-fi sequences that
- are permissable. Default: 3
-
- * CONFIG_NSH_DISABLESCRIPT
- This can be set to 'y' to suppress support for scripting. This
- setting disables the 'sh', 'test', and '[' commands and the
- if-then[-else]-fi construct. This would only be set on systems
- where a minimal footprint is a necessity and scripting is not.
-
- * CONFIG_NSH_DISABLEBG
- This can be set to 'y' to suppress support for background
- commands. This setting disables the 'nice' command prefix and
- the '&' command suffix. This would only be set on systems
- where a minimal footprint is a necessity and background command
- execution is not.
-
- * CONFIG_NSH_MMCSDMINOR
- If the architecture supports an MMC/SD slot and if the NSH
- architecture specific logic is present, this option will provide
- the MMC/SD minor number, i.e., the MMC/SD block driver will
- be registered as /dev/mmcsdN where N is the minor number.
- Default is zero.
-
- * CONFIG_NSH_ROMFSETC
- Mount a ROMFS filesystem at /etc and provide a startup script
- at /etc/init.d/rcS. The default startup script will mount
- a FAT FS RAMDISK at /tmp but the logic is easily extensible.
-
- * CONFIG_NSH_CONSOLE
- If CONFIG_NSH_CONSOLE is set to 'y', then a serial
- console front-end is selected.
-
- Normally, the serial console device is a UART and RS-232
- interface. However, if CONFIG_USBDEV is defined, then a USB
- serial device may, instead, be used if the one of
- the following are defined:
-
- CONFIG_PL2303 and CONFIG_PL2303_CONSOLE - Sets up the
- Prolifics PL2303 emulation as a console device
- at /dev/console.
-
- CONFIG_CDCACM and CONFIG_CDCACM_CONSOLE - Sets up the
- CDC/ACM serial device as a console device at
- dev/console.
-
- CONFIG_NSH_USBCONSOLE
- If defined, then the an arbitrary USB device may be used
- to as the NSH console. In this case, CONFIG_NSH_USBCONDEV
- must be defined to indicate which USB device to use as
- the console.
-
- CONFIG_NSH_USBCONDEV
- If CONFIG_NSH_USBCONSOLE is set to 'y', then CONFIG_NSH_USBCONDEV
- must also be set to select the USB device used to support
- the NSH console. This should be set to the quoted name of a
- readable/write-able USB driver such as:
- CONFIG_NSH_USBCONDEV="/dev/ttyACM0".
-
- If there are more than one USB devices, then a USB device
- minor number may also need to be provided:
-
- CONFIG_NSH_USBDEV_MINOR
- The minor device number of the USB device. Default: 0
-
- CONFIG_NSH_USBDEV_TRACE
- If USB tracing is enabled (CONFIG_USBDEV_TRACE), then NSH can
- be configured to show the buffered USB trace data afer each
- NSH command:
-
- If CONFIG_NSH_USBDEV_TRACE is selected, then USB trace data
- can be filtered as follows. Default: Only USB errors are traced.
-
- CONFIG_NSH_USBDEV_TRACEINIT
- Show initialization events
- CONFIG_NSH_USBDEV_TRACECLASS
- Show class driver events
- CONFIG_NSH_USBDEV_TRACETRANSFERS
- Show data transfer events
- CONFIG_NSH_USBDEV_TRACECONTROLLER
- Show controller events
- CONFIG_NSH_USBDEV_TRACEINTERRUPTS
- Show interrupt-related events.
-
- * CONFIG_NSH_CONDEV
- If CONFIG_NSH_CONSOLE is set to 'y', then CONFIG_NSH_CONDEV
- may also be set to select the serial device used to support
- the NSH console. This should be set to the quoted name of a
- readable/write-able character driver such as:
- CONFIG_NSH_CONDEV="/dev/ttyS1". This is useful, for example,
- to separate the NSH command line from the system console when
- the system console is used to provide debug output. Default:
- stdin and stdout (probably "/dev/console")
-
- NOTE: When any other device other than /dev/console is used
- for a user interface, (1) linefeeds (\n) will not be expanded to
- carriage return / linefeeds (\r\n). You will need to set
- your terminal program to account for this. And (2) input is
- not automatically echoed so you will have to turn local echo on.
-
- * CONFIG_NSH_TELNET
- If CONFIG_NSH_TELNET is set to 'y', then a TELENET
- server front-end is selected. When this option is provided,
- you may log into NuttX remotely using telnet in order to
- access NSH.
-
- * CONFIG_NSH_ARCHINIT
- Set if your board provides architecture specific initialization
- via the board-specific function nsh_archinitialize(). This
- function will be called early in NSH initialization to allow
- board logic to do such things as configure MMC/SD slots.
-
- If Telnet is selected for the NSH console, then we must configure
- the resources used by the Telnet daemon and by the Telnet clients.
-
- * CONFIG_NSH_TELNETD_PORT - The telnet daemon will listen on this
- TCP port number for connections. Default: 23
-
- * CONFIG_NSH_TELNETD_DAEMONPRIO - Priority of the Telnet daemon.
- Default: SCHED_PRIORITY_DEFAULT
-
- * CONFIG_NSH_TELNETD_DAEMONSTACKSIZE - Stack size allocated for the
- Telnet daemon. Default: 2048
-
- * CONFIG_NSH_TELNETD_CLIENTPRIO- Priority of the Telnet client.
- Default: SCHED_PRIORITY_DEFAULT
-
- * CONFIG_NSH_TELNETD_CLIENTSTACKSIZE - Stack size allocated for the
- Telnet client. Default: 2048
-
- One or both of CONFIG_NSH_CONSOLE and CONFIG_NSH_TELNET
- must be defined. If CONFIG_NSH_TELNET is selected, then there some
- other configuration settings that apply:
-
- * CONFIG_NET=y
- Of course, networking must be enabled
-
- * CONFIG_NSOCKET_DESCRIPTORS
- And, of course, you must allocate some socket descriptors.
-
- * CONFIG_NET_TCP=y
- TCP/IP support is required for telnet (as well as various other TCP-related
- configuration settings).
-
- * CONFIG_NSH_IOBUFFER_SIZE
- Determines the size of the I/O buffer to use for sending/
- receiving TELNET commands/reponses
-
- * CONFIG_NSH_DHCPC
- Obtain the IP address via DHCP.
-
- * CONFIG_NSH_IPADDR
- If CONFIG_NSH_DHCPC is NOT set, then the static IP
- address must be provided.
-
- * CONFIG_NSH_DRIPADDR
- Default router IP address
-
- * CONFIG_NSH_NETMASK
- Network mask
-
- * CONFIG_NSH_NOMAC
- Set if your ethernet hardware has no built-in MAC address.
- If set, a bogus MAC will be assigned.
-
- * CONFIG_NSH_MAX_ROUNDTRIP
- This is the maximum round trip for a response to a ICMP ECHO request.
- It is in units of deciseconds. The default is 20 (2 seconds).
-
- If you use DHCPC, then some special configuration network options are
- required. These include:
-
- * CONFIG_NET=y
- Of course, networking must be enabled
-
- * CONFIG_NSOCKET_DESCRIPTORS
- And, of course, you must allocate some socket descriptors.
-
- * CONFIG_NET_UDP=y
- UDP support is required for DHCP (as well as various other UDP-related
- configuration settings)
-
- * CONFIG_NET_BROADCAST=y
- UDP broadcast support is needed.
-
- * CONFIG_NET_BUFSIZE=650 (or larger)
- Per RFC2131 (p. 9), the DHCP client must be prepared to receive DHCP
- messages of up to 576 bytes (excluding Ethernet, IP, or UDP headers and FCS).
-
- If CONFIG_NSH_ROMFSETC is selected, then the following additional
- configuration setting apply:
-
- * CONFIG_NSH_ROMFSMOUNTPT
- The default mountpoint for the ROMFS volume is /etc, but that
- can be changed with this setting. This must be a absolute path
- beginning with '/'.
-
- * CONFIG_NSH_INITSCRIPT
- This is the relative path to the startup script within the mountpoint.
- The default is init.d/rcS. This is a relative path and must not
- start with '/'.
-
- * CONFIG_NSH_ROMFSDEVNO
- This is the minor number of the ROMFS block device. The default is
- '0' corresponding to /dev/ram0.
-
- * CONFIG_NSH_ROMFSSECTSIZE
- This is the sector size to use with the ROMFS volume. Since the
- default volume is very small, this defaults to 64 but should be
- increased if the ROMFS volume were to be become large. Any value
- selected must be a power of 2.
-
- When the default rcS file used when CONFIG_NSH_ROMFSETC is
- selected, it will mount a FAT FS under /tmp. The following selections
- describe that FAT FS.
-
- * CONFIG_NSH_FATDEVNO
- This is the minor number of the FAT FS block device. The default is
- '1' corresponding to /dev/ram1.
-
- * CONFIG_NSH_FATSECTSIZE
- This is the sector size use with the FAT FS. Default is 512.
-
- * CONFIG_NSH_FATNSECTORS
- This is the number of sectors to use with the FAT FS. Defalt is
- 1024. The amount of memory used by the FAT FS will be
- CONFIG_NSH_FATSECTSIZE * CONFIG_NSH_FATNSECTORS
- bytes.
-
- * CONFIG_NSH_FATMOUNTPT
- This is the location where the FAT FS will be mounted. Default
- is /tmp.
-
-Common Problems
-^^^^^^^^^^^^^^^
-
- Problem:
- Using NSH over serial, the "nsh>" prompt repeats over and over again
- with no serial input.
- Usual Cause:
- NSH over serial needs to use the interrupt driven serial driver
- (drivers/serial/serial.c) not the polled serial driver (drivers/serial/lowconsole.c).
- Make sure that the polled console is disabled in the OS configuration
- file, .config. That file should have CONFIG_DEV_LOWCONSOLE=n for
- NSH over serial.
-
- Problem:
- The function 'readline' is undefined.
- Usual Cause:
- The following is missing from your appconfig file:
-
- CONFIGURED_APPS += system/readline
-
diff --git a/apps/nshlib/nsh.h b/apps/nshlib/nsh.h
deleted file mode 100644
index 83cf25aa7..000000000
--- a/apps/nshlib/nsh.h
+++ /dev/null
@@ -1,757 +0,0 @@
-/****************************************************************************
- * apps/nshlib/nsh.h
- *
- * Copyright (C) 2007-2013 Gregory Nutt. All rights reserved.
- * Author: Gregory Nutt <gnutt@nuttx.org>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * 3. Neither the name NuttX nor the names of its contributors may be
- * used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- ****************************************************************************/
-
-#ifndef __APPS_NSHLIB_NSH_H
-#define __APPS_NSHLIB_NSH_H
-
-/****************************************************************************
- * Included Files
- ****************************************************************************/
-
-#include <nuttx/config.h>
-
-#include <sys/types.h>
-
-#include <stdio.h>
-#include <stdint.h>
-#include <stdbool.h>
-#include <unistd.h>
-#include <errno.h>
-
-#include <nuttx/usb/usbdev_trace.h>
-
-/****************************************************************************
- * Definitions
- ****************************************************************************/
-/* Configuration ************************************************************/
-/* The background commands require pthread support */
-
-#ifdef CONFIG_DISABLE_PTHREAD
-# ifndef CONFIG_NSH_DISABLEBG
-# define CONFIG_NSH_DISABLEBG 1
-# endif
-#endif
-
-/* Telnetd requires networking support */
-
-#ifndef CONFIG_NET
-# undef CONFIG_NSH_TELNET
-#endif
-
-/* One front end must be defined */
-
-#if !defined(CONFIG_NSH_CONSOLE) && !defined(CONFIG_NSH_TELNET)
-# error "No NSH front end defined"
-#endif
-
-/* If a USB device is selected for the NSH console then we need to handle some
- * special start-up conditions.
- */
-
-#undef HAVE_USB_CONSOLE
-#if defined(CONFIG_USBDEV)
-
-/* Check for a PL2303 serial console. Use console device "/dev/console". */
-
-# if defined(CONFIG_PL2303) && defined(CONFIG_PL2303_CONSOLE)
-# define HAVE_USB_CONSOLE 1
-
-/* Check for a CDC/ACM serial console. Use console device "/dev/console". */
-
-# elif defined(CONFIG_CDCACM) && defined(CONFIG_CDCACM_CONSOLE)
-# define HAVE_USB_CONSOLE 1
-
-/* Check for a generic USB console. In this case, the USB console device
- * must be provided in CONFIG_NSH_CONDEV.
- */
-
-# elif defined(CONFIG_NSH_USBCONSOLE)
-# define HAVE_USB_CONSOLE 1
-# endif
-#endif
-
-/* Defaults for the USB console */
-
-#ifdef HAVE_USB_CONSOLE
-
-/* The default USB console device minor number is 0*/
-
-# ifndef CONFIG_NSH_USBDEV_MINOR
-# define CONFIG_NSH_USBDEV_MINOR 0
-# endif
-
-/* The default console device is always /dev/console */
-
-# ifndef CONFIG_NSH_USBCONDEV
-# define CONFIG_NSH_USBCONDEV "/dev/console"
-# endif
-
-/* USB trace settings */
-
-# ifndef CONFIG_USBDEV_TRACE
-# undef CONFIG_NSH_USBDEV_TRACE
-# endif
-
-# ifdef CONFIG_NSH_USBDEV_TRACE
-# ifdef CONFIG_NSH_USBDEV_TRACEINIT
-# define TRACE_INIT_BITS (TRACE_INIT_BIT)
-# else
-# define TRACE_INIT_BITS (0)
-# endif
-
-# define TRACE_ERROR_BITS (TRACE_DEVERROR_BIT|TRACE_CLSERROR_BIT)
-
-# ifdef CONFIG_NSH_USBDEV_TRACECLASS
-# define TRACE_CLASS_BITS (TRACE_CLASS_BIT|TRACE_CLASSAPI_BIT|\
- TRACE_CLASSSTATE_BIT)
-# else
-# define TRACE_CLASS_BITS (0)
-# endif
-
-# ifdef CONFIG_NSH_USBDEV_TRACETRANSFERS
-# define TRACE_TRANSFER_BITS (TRACE_OUTREQQUEUED_BIT|TRACE_INREQQUEUED_BIT|\
- TRACE_READ_BIT|TRACE_WRITE_BIT|\
- TRACE_COMPLETE_BIT)
-# else
-# define TRACE_TRANSFER_BITS (0)
-# endif
-
-# ifdef CONFIG_NSH_USBDEV_TRACECONTROLLER
-# define TRACE_CONTROLLER_BITS (TRACE_EP_BIT|TRACE_DEV_BIT)
-# else
-# define TRACE_CONTROLLER_BITS (0)
-# endif
-
-# ifdef CONFIG_NSH_USBDEV_TRACEINTERRUPTS
-# define TRACE_INTERRUPT_BITS (TRACE_INTENTRY_BIT|TRACE_INTDECODE_BIT|\
- TRACE_INTEXIT_BIT)
-# else
-# define TRACE_INTERRUPT_BITS (0)
-# endif
-
-# define TRACE_BITSET (TRACE_INIT_BITS|TRACE_ERROR_BITS|\
- TRACE_CLASS_BITS|TRACE_TRANSFER_BITS|\
- TRACE_CONTROLLER_BITS|TRACE_INTERRUPT_BITS)
-
-# endif /* CONFIG_NSH_USBDEV_TRACE */
-#endif /* HAVE_USB_CONSOLE */
-
-/* If Telnet is selected for the NSH console, then we must configure
- * the resources used by the Telnet daemon and by the Telnet clients.
- *
- * CONFIG_NSH_TELNETD_PORT - The telnet daemon will listen on this.
- * port. Default: 23
- * CONFIG_NSH_TELNETD_DAEMONPRIO - Priority of the Telnet daemon.
- * Default: SCHED_PRIORITY_DEFAULT
- * CONFIG_NSH_TELNETD_DAEMONSTACKSIZE - Stack size allocated for the
- * Telnet daemon. Default: 2048
- * CONFIG_NSH_TELNETD_CLIENTPRIO - Priority of the Telnet client.
- * Default: SCHED_PRIORITY_DEFAULT
- * CONFIG_NSH_TELNETD_CLIENTSTACKSIZE - Stack size allocated for the
- * Telnet client. Default: 2048
- * CONFIG_NSH_TELNET_LOGIN - Support a simple Telnet login.
- *
- * If CONFIG_NSH_TELNET_LOGIN is defined, then these additional
- * options may be specified:
- *
- * CONFIG_NSH_TELNET_USERNAME - Login user name. Default: "admin"
- * CONFIG_NSH_TELNET_PASSWORD - Login password: Default: "nuttx"
- * CONFIG_NSH_TELNET_FAILCOUNT - Number of login retry attempts.
- * Default 3.
- */
-
-#ifndef CONFIG_NSH_TELNETD_PORT
-# define CONFIG_NSH_TELNETD_PORT 23
-#endif
-
-#ifndef CONFIG_NSH_TELNETD_DAEMONPRIO
-# define CONFIG_NSH_TELNETD_DAEMONPRIO SCHED_PRIORITY_DEFAULT
-#endif
-
-#ifndef CONFIG_NSH_TELNETD_DAEMONSTACKSIZE
-# define CONFIG_NSH_TELNETD_DAEMONSTACKSIZE 2048
-#endif
-
-#ifndef CONFIG_NSH_TELNETD_CLIENTPRIO
-# define CONFIG_NSH_TELNETD_CLIENTPRIO SCHED_PRIORITY_DEFAULT
-#endif
-
-#ifndef CONFIG_NSH_TELNETD_CLIENTSTACKSIZE
-# define CONFIG_NSH_TELNETD_CLIENTSTACKSIZE 2048
-#endif
-
-#ifdef CONFIG_NSH_TELNET_LOGIN
-
-# ifndef CONFIG_NSH_TELNET_USERNAME
-# define CONFIG_NSH_TELNET_USERNAME "admin"
-# endif
-
-# ifndef CONFIG_NSH_TELNET_PASSWORD
-# define CONFIG_NSH_TELNET_PASSWORD "nuttx"
-# endif
-
-# ifndef CONFIG_NSH_TELNET_FAILCOUNT
-# define CONFIG_NSH_TELNET_FAILCOUNT 3
-# endif
-
-#endif /* CONFIG_NSH_TELNET_LOGIN */
-
-/* CONFIG_NSH_MAX_ROUNDTRIP - This is the maximum round trip for a response to
- * a ICMP ECHO request. It is in units of deciseconds. The default is 20
- * (2 seconds).
- */
-
-#ifndef CONFIG_NSH_MAX_ROUNDTRIP
-# define CONFIG_NSH_MAX_ROUNDTRIP 20
-#endif
-
-/* Verify support for ROMFS /etc directory support options */
-
-#ifdef CONFIG_NSH_ROMFSETC
-# ifdef CONFIG_DISABLE_MOUNTPOINT
-# error "Mountpoint support is disabled"
-# undef CONFIG_NSH_ROMFSETC
-# endif
-
-# if CONFIG_NFILE_DESCRIPTORS < 4
-# error "Not enough file descriptors"
-# undef CONFIG_NSH_ROMFSETC
-# endif
-
-# ifndef CONFIG_FS_ROMFS
-# error "ROMFS support not enabled"
-# undef CONFIG_NSH_ROMFSETC
-# endif
-
-# ifndef CONFIG_NSH_ROMFSMOUNTPT
-# define CONFIG_NSH_ROMFSMOUNTPT "/etc"
-# endif
-
-# ifndef CONFIG_NSH_INITSCRIPT
-# define CONFIG_NSH_INITSCRIPT "init.d/rcS"
-# endif
-
-# undef NSH_INITPATH
-# define NSH_INITPATH CONFIG_NSH_ROMFSMOUNTPT "/" CONFIG_NSH_INITSCRIPT
-
-# ifdef CONFIG_NSH_ROMFSRC
-# ifndef CONFIG_NSH_RCSCRIPT
-# define CONFIG_NSH_RCSCRIPT ".nshrc"
-# endif
-
-# undef NSH_RCPATH
-# define NSH_RCPATH CONFIG_NSH_ROMFSMOUNTPT "/" CONFIG_NSH_RCSCRIPT
-# endif
-
-# ifndef CONFIG_NSH_ROMFSDEVNO
-# define CONFIG_NSH_ROMFSDEVNO 0
-# endif
-
-# ifndef CONFIG_NSH_ROMFSSECTSIZE
-# define CONFIG_NSH_ROMFSSECTSIZE 64
-# endif
-
-# define NSECTORS(b) (((b)+CONFIG_NSH_ROMFSSECTSIZE-1)/CONFIG_NSH_ROMFSSECTSIZE)
-# define STR_RAMDEVNO(m) #m
-# define MKMOUNT_DEVNAME(m) "/dev/ram" STR_RAMDEVNO(m)
-# define MOUNT_DEVNAME MKMOUNT_DEVNAME(CONFIG_NSH_ROMFSDEVNO)
-
-#else
-
-# undef CONFIG_NSH_ROMFSRC
-# undef CONFIG_NSH_ROMFSMOUNTPT
-# undef CONFIG_NSH_INITSCRIPT
-# undef CONFIG_NSH_RCSCRIPT
-# undef CONFIG_NSH_ROMFSDEVNO
-# undef CONFIG_NSH_ROMFSSECTSIZE
-
-#endif
-
-/* This is the maximum number of arguments that will be accepted for a
- * command. Here we attempt to select the smallest number possible depending
- * upon the of commands that are available. Most commands use six or fewer
- * arguments, but there are a few that require more.
- *
- * This value is also configurable with CONFIG_NSH_MAXARGUMENTS. This
- * configurability is necessary since there may also be external, "built-in"
- * commands that require more commands than NSH is aware of.
- */
-
-#ifndef CONFIG_NSH_MAXARGUMENTS
-# define CONFIG_NSH_MAXARGUMENTS 6
-#endif
-
-#if CONFIG_NSH_MAXARGUMENTS < 11
-# if defined(CONFIG_NET) && !defined(CONFIG_NSH_DISABLE_IFCONFIG)
-# undef CONFIG_NSH_MAXARGUMENTS
-# define CONFIG_NSH_MAXARGUMENTS 11
-# endif
-#endif
-
-#if CONFIG_NSH_MAXARGUMENTS < 7
-# if defined(CONFIG_NET_UDP) && CONFIG_NFILE_DESCRIPTORS > 0
-# if !defined(CONFIG_NSH_DISABLE_GET) || !defined(CONFIG_NSH_DISABLE_PUT)
-# undef CONFIG_NSH_MAXARGUMENTS
-# define CONFIG_NSH_MAXARGUMENTS 7
-# endif
-# endif
-#endif
-
-/* strerror() produces much nicer output but is, however, quite large and
- * will only be used if CONFIG_NSH_STRERROR is defined. Note that the strerror
- * interface must also have been enabled with CONFIG_LIBC_STRERROR.
- */
-
-#ifndef CONFIG_LIBC_STRERROR
-# undef CONFIG_NSH_STRERROR
-#endif
-
-#ifdef CONFIG_NSH_STRERROR
-# define NSH_ERRNO strerror(errno)
-# define NSH_ERRNO_OF(err) strerror(err)
-#else
-# define NSH_ERRNO (errno)
-# define NSH_ERRNO_OF(err) (err)
-#endif
-
-/* Maximum size of one command line (telnet or serial) */
-
-#ifndef CONFIG_NSH_LINELEN
-# define CONFIG_NSH_LINELEN 80
-#endif
-
-/* The following two settings are used only in the telnetd interface */
-
-#ifndef CONFIG_NSH_IOBUFFER_SIZE
-# define CONFIG_NSH_IOBUFFER_SIZE 512
-#endif
-
-/* The maximum number of nested if-then[-else]-fi sequences that
- * are permissable.
- */
-
-#ifndef CONFIG_NSH_NESTDEPTH
-# define CONFIG_NSH_NESTDEPTH 3
-#endif
-
-/* Define to enable dumping of all input/output buffers */
-
-#undef CONFIG_NSH_TELNETD_DUMPBUFFER
-#undef CONFIG_NSH_FULLPATH
-
-/* Make sure that the home directory is defined */
-
-#ifndef CONFIG_LIB_HOMEDIR
-# define CONFIG_LIB_HOMEDIR "/"
-#endif
-
-/* Stubs used when working directory is not supported */
-
-#if CONFIG_NFILE_DESCRIPTORS <= 0 || defined(CONFIG_DISABLE_ENVIRON)
-# define nsh_getfullpath(v,p) ((char*)(p))
-# define nsh_freefullpath(p)
-#endif
-
-/* The size of the I/O buffer may be specified in the
- * configs/<board-name>defconfig file -- provided that it is at least as
- * large as PATH_MAX.
- */
-
-#if CONFIG_NFILE_DESCRIPTORS > 0
-# ifdef CONFIG_NSH_FILEIOSIZE
-# if CONFIG_NSH_FILEIOSIZE > (PATH_MAX + 1)
-# define IOBUFFERSIZE CONFIG_NSH_FILEIOSIZE
-# else
-# define IOBUFFERSIZE (PATH_MAX + 1)
-# endif
-# else
-# define IOBUFFERSIZE 1024
-# endif
-# else
-# define IOBUFFERSIZE (PATH_MAX + 1)
-#endif
-
-/****************************************************************************
- * Public Types
- ****************************************************************************/
-
-enum nsh_parser_e
-{
- NSH_PARSER_NORMAL = 0,
- NSH_PARSER_IF,
- NSH_PARSER_THEN,
- NSH_PARSER_ELSE
-};
-
-struct nsh_state_s
-{
- uint8_t ns_ifcond : 1; /* Value of command in 'if' statement */
- uint8_t ns_disabled : 1; /* TRUE: Unconditionally disabled */
- uint8_t ns_unused : 4;
- uint8_t ns_state : 2; /* Parser state (see enum nsh_parser_e) */
-};
-
-struct nsh_parser_s
-{
-#ifndef CONFIG_NSH_DISABLEBG
- bool np_bg; /* true: The last command executed in background */
-#endif
- bool np_redirect; /* true: Output from the last command was re-directed */
- bool np_fail; /* true: The last command failed */
-#ifndef CONFIG_NSH_DISABLESCRIPT
- uint8_t np_ndx; /* Current index into np_st[] */
-#endif
-#ifndef CONFIG_NSH_DISABLEBG
- int np_nice; /* "nice" value applied to last background cmd */
-#endif
-
- /* This is a stack of parser state information. It supports nested
- * execution of commands that span multiple lines (like if-then-else-fi)
- */
-
-#ifndef CONFIG_NSH_DISABLESCRIPT
- struct nsh_state_s np_st[CONFIG_NSH_NESTDEPTH];
-#endif
-};
-
-struct nsh_vtbl_s; /* Defined in nsh_console.h */
-typedef int (*cmd_t)(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
-
-/****************************************************************************
- * Public Data
- ****************************************************************************/
-
-extern const char g_nshgreeting[];
-#if defined(CONFIG_NSH_TELNET_LOGIN) && defined(CONFIG_NSH_TELNET)
-extern const char g_telnetgreeting[];
-extern const char g_userprompt[];
-extern const char g_passwordprompt[];
-extern const char g_loginsuccess[];
-extern const char g_badcredentials[];
-extern const char g_loginfailure[];
-#endif
-extern const char g_nshprompt[];
-extern const char g_nshsyntax[];
-extern const char g_fmtargrequired[];
-extern const char g_fmtarginvalid[];
-extern const char g_fmtargrange[];
-extern const char g_fmtcmdnotfound[];
-extern const char g_fmtnosuch[];
-extern const char g_fmttoomanyargs[];
-extern const char g_fmtdeepnesting[];
-extern const char g_fmtcontext[];
-extern const char g_fmtcmdfailed[];
-extern const char g_fmtcmdoutofmemory[];
-extern const char g_fmtinternalerror[];
-#ifndef CONFIG_DISABLE_SIGNALS
-extern const char g_fmtsignalrecvd[];
-#endif
-
-/****************************************************************************
- * Public Function Prototypes
- ****************************************************************************/
-
-/* Initialization */
-
-#ifdef CONFIG_NSH_ROMFSETC
-int nsh_romfsetc(void);
-#else
-# define nsh_romfsetc() (-ENOSYS)
-#endif
-
-#ifdef CONFIG_NET
-int nsh_netinit(void);
-#else
-# define nsh_netinit() (-ENOSYS)
-#endif
-
-#ifdef HAVE_USB_CONSOLE
-int nsh_usbconsole(void);
-#else
-# define nsh_usbconsole() (-ENOSYS)
-#endif
-
-#if CONFIG_NFILE_DESCRIPTORS > 0 && CONFIG_NFILE_STREAMS > 0 && !defined(CONFIG_NSH_DISABLESCRIPT)
-int nsh_script(FAR struct nsh_vtbl_s *vtbl, const char *cmd, const char *path);
-#ifdef CONFIG_NSH_ROMFSETC
-int nsh_initscript(FAR struct nsh_vtbl_s *vtbl);
-#ifdef CONFIG_NSH_ROMFSRC
-int nsh_loginscript(FAR struct nsh_vtbl_s *vtbl);
-#endif
-#endif
-#endif
-
-/* Architecture-specific initialization */
-
-#ifdef CONFIG_NSH_ARCHINIT
-int nsh_archinitialize(void);
-#else
-# define nsh_archinitialize() (-ENOSYS)
-#endif
-
-/* Basic session and message handling */
-
-struct console_stdio_s;
-int nsh_session(FAR struct console_stdio_s *pstate);
-int nsh_parse(FAR struct nsh_vtbl_s *vtbl, char *cmdline);
-
-/* Application interface */
-
-#ifdef CONFIG_NSH_BUILTIN_APPS
-int nsh_builtin(FAR struct nsh_vtbl_s *vtbl, FAR const char *cmd,
- FAR char **argv, FAR const char *redirfile, int oflags);
-#endif
-
-#ifdef CONFIG_NSH_FILE_APPS
-int nsh_fileapp(FAR struct nsh_vtbl_s *vtbl, FAR const char *cmd,
- FAR char **argv, FAR const char *redirfile, int oflags);
-#endif
-
-/* Working directory support */
-
-#if CONFIG_NFILE_DESCRIPTORS > 0 && !defined(CONFIG_DISABLE_ENVIRON)
-FAR const char *nsh_getcwd(void);
-char *nsh_getfullpath(FAR struct nsh_vtbl_s *vtbl, const char *relpath);
-void nsh_freefullpath(char *relpath);
-#endif
-
-/* Debug */
-
-void nsh_dumpbuffer(FAR struct nsh_vtbl_s *vtbl, const char *msg,
- const uint8_t *buffer, ssize_t nbytes);
-
-/* USB debug support */
-
-#ifdef CONFIG_NSH_USBDEV_TRACE
-void nsh_usbtrace(void);
-#endif
-
-/* Shell command handlers */
-
-#ifndef CONFIG_NSH_DISABLE_ECHO
- int cmd_echo(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
-#endif
-#ifndef CONFIG_NSH_DISABLE_EXEC
- int cmd_exec(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
-#endif
-#ifndef CONFIG_NSH_DISABLE_MB
- int cmd_mb(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
-#endif
-#ifndef CONFIG_NSH_DISABLE_MH
- int cmd_mh(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
-#endif
-#ifndef CONFIG_NSH_DISABLE_MW
- int cmd_mw(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
-#endif
-#ifndef CONFIG_NSH_DISABLE_FREE
- int cmd_free(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
-#endif
-#ifndef CONFIG_NSH_DISABLE_PS
- int cmd_ps(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
-#endif
-#ifndef CONFIG_NSH_DISABLE_XD
- int cmd_xd(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
-#endif
-
-#if !defined(CONFIG_NSH_DISABLESCRIPT) && !defined(CONFIG_NSH_DISABLE_TEST)
- int cmd_test(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
- int cmd_lbracket(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
-#endif
-
-#ifndef CONFIG_DISABLE_CLOCK
-# if defined (CONFIG_RTC) && !defined(CONFIG_NSH_DISABLE_DATE)
- int cmd_date(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
-# endif
-#endif
-
-#if CONFIG_NFILE_DESCRIPTORS > 0
-# ifndef CONFIG_NSH_DISABLE_CAT
- int cmd_cat(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
-# endif
-# ifndef CONFIG_NSH_DISABLE_CP
- int cmd_cp(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
-# endif
-# ifndef CONFIG_NSH_DISABLE_CMP
- int cmd_cmp(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
-# endif
-# ifndef CONFIG_NSH_DISABLE_DD
- int cmd_dd(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
-# endif
-# ifndef CONFIG_NSH_DISABLE_HEXDUMP
- int cmd_hexdump(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
-# endif
-# ifndef CONFIG_NSH_DISABLE_LS
- int cmd_ls(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
-# endif
-# if defined(CONFIG_SYSLOG) && defined(CONFIG_RAMLOG_SYSLOG) && !defined(CONFIG_NSH_DISABLE_DMESG)
- int cmd_dmesg(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
-# endif
-# if CONFIG_NFILE_STREAMS > 0 && !defined(CONFIG_NSH_DISABLESCRIPT)
-# ifndef CONFIG_NSH_DISABLE_SH
- int cmd_sh(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
-# endif
-# endif /* CONFIG_NFILE_STREAMS && !CONFIG_NSH_DISABLESCRIPT */
-# ifndef CONFIG_DISABLE_MOUNTPOINT
-# ifndef CONFIG_NSH_DISABLE_LOSETUP
- int cmd_losetup(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
-# endif
-# ifndef CONFIG_NSH_DISABLE_MKFIFO
- int cmd_mkfifo(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
-# endif
-# ifdef CONFIG_FS_READABLE
-# ifndef CONFIG_NSH_DISABLE_DF
- int cmd_df(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
-# endif
-# ifndef CONFIG_NSH_DISABLE_MOUNT
- int cmd_mount(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
-# endif
-# ifndef CONFIG_NSH_DISABLE_UMOUNT
- int cmd_umount(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
-# endif
-# ifdef CONFIG_FS_WRITABLE
-# ifndef CONFIG_NSH_DISABLE_MKDIR
- int cmd_mkdir(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
-# endif
-# ifndef CONFIG_NSH_DISABLE_MKRD
- int cmd_mkrd(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
-# endif
-# ifndef CONFIG_NSH_DISABLE_MV
- int cmd_mv(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
-# endif
-# ifndef CONFIG_NSH_DISABLE_RM
- int cmd_rm(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
-# endif
-# ifndef CONFIG_NSH_DISABLE_RMDIR
- int cmd_rmdir(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
-# endif
-# endif /* CONFIG_FS_WRITABLE */
-# endif /* CONFIG_FS_READABLE */
-# ifdef CONFIG_FS_FAT
-# ifndef CONFIG_NSH_DISABLE_MKFATFS
- int cmd_mkfatfs(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
-# endif
-# endif /* CONFIG_FS_FAT */
-# endif /* !CONFIG_DISABLE_MOUNTPOINT */
-# if !defined(CONFIG_DISABLE_ENVIRON)
-# ifndef CONFIG_NSH_DISABLE_CD
- int cmd_cd(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
-# endif
-# ifndef CONFIG_NSH_DISABLE_PWD
- int cmd_pwd(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
-# endif
-# endif /* !CONFIG_DISABLE_MOUNTPOINT */
-#endif /* CONFIG_NFILE_DESCRIPTORS */
-
-#if defined(CONFIG_NET)
-# ifndef CONFIG_NSH_DISABLE_IFCONFIG
- int cmd_ifconfig(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
-# endif
-# ifndef CONFIG_NSH_DISABLE_IFUPDOWN
- int cmd_ifup(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
- int cmd_ifdown(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
-# endif
-#if defined(CONFIG_NET_UDP) && CONFIG_NFILE_DESCRIPTORS > 0
-# ifndef CONFIG_NSH_DISABLE_GET
- int cmd_get(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
-# endif
-# ifndef CONFIG_NSH_DISABLE_PUT
- int cmd_put(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
-# endif
-#endif
-#if defined(CONFIG_NET_TCP) && CONFIG_NFILE_DESCRIPTORS > 0
-# ifndef CONFIG_NSH_DISABLE_WGET
- int cmd_wget(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
-# endif
-#endif
-#if defined(CONFIG_NET_ICMP) && defined(CONFIG_NET_ICMP_PING) && \
- !defined(CONFIG_DISABLE_CLOCK) && !defined(CONFIG_DISABLE_SIGNALS)
-# ifndef CONFIG_NSH_DISABLE_PING
- int cmd_ping(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
-# endif
-#endif
-#if !defined(CONFIG_DISABLE_MOUNTPOINT) && CONFIG_NFILE_DESCRIPTORS > 0 && \
- defined(CONFIG_FS_READABLE) && defined(CONFIG_NFS)
-# ifndef CONFIG_NSH_DISABLE_NFSMOUNT
- int cmd_nfsmount(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
-# endif
-#endif
-#endif
-
-#ifndef CONFIG_DISABLE_ENVIRON
-# ifndef CONFIG_NSH_DISABLE_SET
- int cmd_set(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
-# endif
-# ifndef CONFIG_NSH_DISABLE_UNSET
- int cmd_unset(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
-# endif
-#endif /* CONFIG_DISABLE_ENVIRON */
-
-#ifndef CONFIG_DISABLE_SIGNALS
-# ifndef CONFIG_NSH_DISABLE_KILL
- int cmd_kill(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
-# endif
-# ifndef CONFIG_NSH_DISABLE_SLEEP
- int cmd_sleep(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
-# endif
-# ifndef CONFIG_NSH_DISABLE_USLEEP
- int cmd_usleep(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
-# endif
-#endif /* CONFIG_DISABLE_SIGNALS */
-
-#if defined(CONFIG_NETUTILS_CODECS) && defined(CONFIG_CODECS_BASE64)
-# ifndef CONFIG_NSH_DISABLE_BASE64DEC
- int cmd_base64decode(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
-# endif
-# ifndef CONFIG_NSH_DISABLE_BASE64ENC
- int cmd_base64encode(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
-# endif
-#endif
-
-#if defined(CONFIG_NETUTILS_CODECS) && defined(CONFIG_CODECS_HASH_MD5)
-# ifndef CONFIG_NSH_DISABLE_MD5
- int cmd_md5(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
-# endif
-#endif
-
-#if defined(CONFIG_NETUTILS_CODECS) && defined(CONFIG_CODECS_URLCODE)
-# ifndef CONFIG_NSH_DISABLE_URLDECODE
- int cmd_urlencode(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
-# endif
-# ifndef CONFIG_NSH_DISABLE_URLENCODE
- int cmd_urldecode(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
-# endif
-#endif
-
-#endif /* __APPS_NSHLIB_NSH_H */
diff --git a/apps/nshlib/nsh_builtin.c b/apps/nshlib/nsh_builtin.c
deleted file mode 100644
index 0d5a0231c..000000000
--- a/apps/nshlib/nsh_builtin.c
+++ /dev/null
@@ -1,262 +0,0 @@
-/****************************************************************************
- * apps/nshlib/nsh_builtin.c
- *
- * Originally by:
- *
- * Copyright (C) 2011 Uros Platise. All rights reserved.
- * Author: Uros Platise <uros.platise@isotel.eu>
- *
- * With subsequent updates, modifications, and general maintenance by:
- *
- * Copyright (C) 2011-2013 Gregory Nutt. All rights reserved.
- * Author: Gregory Nutt <gnutt@nuttx.org>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * 3. Neither the name NuttX nor the names of its contributors may be
- * used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- ****************************************************************************/
-
-/****************************************************************************
- * Included Files
- ****************************************************************************/
-
-#include <nuttx/config.h>
-
-#ifdef CONFIG_SCHED_WAITPID
-# include <sys/wait.h>
-#endif
-
-#include <stdbool.h>
-#include <errno.h>
-#include <string.h>
-
-#include <nuttx/binfmt/builtin.h>
-#include <apps/builtin.h>
-
-#include "nsh.h"
-#include "nsh_console.h"
-
-#ifdef CONFIG_NSH_BUILTIN_APPS
-
-/****************************************************************************
- * Definitions
- ****************************************************************************/
-
-/****************************************************************************
- * Private Types
- ****************************************************************************/
-
-/****************************************************************************
- * Private Function Prototypes
- ****************************************************************************/
-
-/****************************************************************************
- * Private Data
- ****************************************************************************/
-
-/****************************************************************************
- * Public Data
- ****************************************************************************/
-
-/****************************************************************************
- * Private Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Public Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Name: nsh_builtin
- *
- * Description:
- * Attempt to execute the application task whose name is 'cmd'
- *
- * Returned Value:
- * <0 If exec_builtin() fails, then the negated errno value
- * is returned.
- * -1 (ERROR) if the application task corresponding to 'cmd' could not
- * be started (possibly because it doesn not exist).
- * 0 (OK) if the application task corresponding to 'cmd' was
- * and successfully started. If CONFIG_SCHED_WAITPID is
- * defined, this return value also indicates that the
- * application returned successful status (EXIT_SUCCESS)
- * 1 If CONFIG_SCHED_WAITPID is defined, then this return value
- * indicates that the application task was spawned successfully
- * but returned failure exit status.
- *
- ****************************************************************************/
-
-int nsh_builtin(FAR struct nsh_vtbl_s *vtbl, FAR const char *cmd,
- FAR char **argv, FAR const char *redirfile, int oflags)
-{
- int ret = OK;
-
- /* Lock the scheduler in an attempt to prevent the application from
- * running until waitpid() has been called.
- */
-
- sched_lock();
-
- /* Try to find and execute the command within the list of builtin
- * applications.
- */
-
- ret = exec_builtin(cmd, (FAR const char **)argv, redirfile, oflags);
- if (ret >= 0)
- {
- /* The application was successfully started with pre-emption disabled.
- * In the simplest cases, the application will not have run because the
- * the scheduler is locked. But in the case where I/O was redirected, a
- * proxy task ran and broke our lock. As result, the application may
- * have aso ran if its priority was higher than than the priority of
- * this thread.
- *
- * If the application did not run to completion and if the application
- * was not backgrounded, then we need to wait here for the application
- * to exit. This only works works with the following options:
- *
- * - CONFIG_NSH_DISABLEBG - Do not run commands in background
- * - CONFIG_SCHED_WAITPID - Required to run external commands in
- * foreground
- */
-
-#ifdef CONFIG_SCHED_WAITPID
-
- /* CONFIG_SCHED_WAITPID is selected, so we may run the command in
- * foreground unless we were specifically requested to run the command
- * in background (and running commands in background is enabled).
- */
-
-# ifndef CONFIG_NSH_DISABLEBG
- if (vtbl->np.np_bg == false)
-# endif /* CONFIG_NSH_DISABLEBG */
- {
- int rc = 0;
-
- /* Wait for the application to exit. We did lock the scheduler
- * above, but that does not guarantee that the application did not
- * already run to completion in the case where I/O was redirected.
- * Here the scheduler will be unlocked while waitpid is waiting
- * and if the application has not yet run, it will now be able to
- * do so.
- *
- * Also, if CONFIG_SCHED_HAVE_PARENT is defined waitpid() might fail
- * even if task is still active: If the I/O was re-directed by a
- * proxy task, then the ask is a child of the proxy, and not this
- * task. waitpid() fails with ECHILD in either case.
- */
-
- ret = waitpid(ret, &rc, 0);
- if (ret < 0)
- {
- /* If the child thread does not exist, waitpid() will return
- * the error ECHLD. Since we know that the task was successfully
- * started, this must be one of the cases described above; we
- * have to assume that the task already exit'ed. In this case,
- * we have no idea if the application ran successfully or not
- * (because NuttX does not retain exit status of child tasks).
- * Let's assume that is did run successfully.
- */
-
- int errcode = errno;
- if (errcode == ECHILD)
- {
- ret = OK;
- }
- else
- {
- nsh_output(vtbl, g_fmtcmdfailed, cmd, "waitpid",
- NSH_ERRNO_OF(errcode));
- }
- }
-
- /* Waitpid completed the wait successfully */
-
- else
- {
- /* We can't return the exact status (nsh has nowhere to put it)
- * so just pass back zero/nonzero in a fashion that doesn't look
- * like an error.
- */
-
- ret = (rc == 0) ? OK : 1;
-
- /* TODO: Set the environment variable '?' to a string corresponding
- * to WEXITSTATUS(rc) so that $? will expand to the exit status of
- * the most recently executed task.
- */
- }
- }
-# ifndef CONFIG_NSH_DISABLEBG
- else
-# endif /* CONFIG_NSH_DISABLEBG */
-#endif /* CONFIG_SCHED_WAITPID */
-
- /* We get here if either:
- *
- * - CONFIG_SCHED_WAITPID is not selected meaning that all commands
- * have to be run in background, or
- * - CONFIG_SCHED_WAITPID and CONFIG_NSH_DISABLEBG are both selected, but the
- * user requested to run the command in background.
- *
- * NOTE that the case of a) CONFIG_SCHED_WAITPID is not selected and
- * b) CONFIG_NSH_DISABLEBG selected cannot be supported. In that event, all
- * commands will have to run in background. The waitpid() API must be
- * available to support running the command in foreground.
- */
-
-#if !defined(CONFIG_SCHED_WAITPID) || !defined(CONFIG_NSH_DISABLEBG)
- {
- struct sched_param param;
- sched_getparam(ret, &param);
- nsh_output(vtbl, "%s [%d:%d]\n", cmd, ret, param.sched_priority);
-
- /* Backgrounded commands always 'succeed' as long as we can start
- * them.
- */
-
- ret = OK;
- }
-#endif /* !CONFIG_SCHED_WAITPID || !CONFIG_NSH_DISABLEBG */
- }
-
- sched_unlock();
-
- /* If exec_builtin() or waitpid() failed, then return -1 (ERROR) with the
- * errno value set appropriately.
- */
-
- if (ret < 0)
- {
- return ERROR;
- }
-
- return ret;
-}
-
-#endif /* CONFIG_NSH_BUILTIN_APPS */
diff --git a/apps/nshlib/nsh_codeccmd.c b/apps/nshlib/nsh_codeccmd.c
deleted file mode 100644
index 779fc5ecd..000000000
--- a/apps/nshlib/nsh_codeccmd.c
+++ /dev/null
@@ -1,538 +0,0 @@
-/****************************************************************************
- * apps/nshlib/nsh_codeccmd.c
- *
- * This file is part of NuttX, contributed by Darcy Gong
- *
- * Copyright (C) 2012 Gregory Nutt. All rights reserved.
- * Author: Darcy Gong 2012-10-30
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * 3. Neither the name NuttX nor the names of its contributors may be
- * used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- ****************************************************************************/
-
-/****************************************************************************
- * Included Files
- ****************************************************************************/
-
-#include <nuttx/config.h>
-#ifdef CONFIG_NETUTILS_CODECS
-
-#include <sys/stat.h>
-#include <stdint.h>
-#include <stdbool.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-#include <sched.h>
-#include <fcntl.h>
-#include <libgen.h>
-#include <errno.h>
-#include <debug.h>
-
-#if defined(CONFIG_NSH_DISABLE_URLENCODE) && defined(CONFIG_NSH_DISABLE_URLDECODE)
-# undef CONFIG_CODECS_URLCODE
-#endif
-
-#ifdef CONFIG_CODECS_URLCODE
-#include <apps/netutils/urldecode.h>
-#endif
-
-#if defined(CONFIG_NSH_DISABLE_BASE64ENC) && defined(CONFIG_NSH_DISABLE_BASE64ENC)
-# undef CONFIG_CODECS_BASE64
-#endif
-
-#ifdef CONFIG_CODECS_BASE64
-#include <apps/netutils/base64.h>
-#endif
-
-#if defined(CONFIG_CODECS_HASH_MD5) && !defined(CONFIG_NSH_DISABLE_MD5)
-#include <apps/netutils/md5.h>
-#endif
-
-#include "nsh.h"
-#include "nsh_console.h"
-
-/****************************************************************************
- * Pre-processor Definitions
- ****************************************************************************/
-
-#ifndef CONFIG_NSH_CODECS_BUFSIZE
-# define CONFIG_NSH_CODECS_BUFSIZE 128
-#endif
-
-#define CODEC_MODE_URLENCODE 1
-#define CODEC_MODE_URLDECODE 2
-#define CODEC_MODE_BASE64ENC 3
-#define CODEC_MODE_BASE64DEC 4
-#define CODEC_MODE_HASH_MD5 5
-
-/****************************************************************************
- * Private Types
- ****************************************************************************/
-
-typedef void (*codec_callback_t)(FAR char *src_buff, int src_buff_len,
- FAR char *dst_buff, FAR int *dst_buff_len,
- int mode);
-
-/****************************************************************************
- * Private Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Name: urlencode_cb
- ****************************************************************************/
-
-#if defined(CONFIG_CODECS_URLCODE) && !defined(CONFIG_NSH_DISABLE_URLENCODE)
-static void urlencode_cb(FAR char *src_buff, int src_buff_len,
- FAR char *dst_buff, FAR int *dst_buff_len, int mode)
-{
- urlencode(src_buff,src_buff_len,dst_buff,dst_buff_len);
-}
-#endif
-
-/****************************************************************************
- * Name: urldecode_cb
- ****************************************************************************/
-
-#if defined(CONFIG_CODECS_URLCODE) && !defined(CONFIG_NSH_DISABLE_URLDECODE)
-static void urldecode_cb(FAR char *src_buff, int src_buff_len, FAR char *dst_buff,
- FAR int *dst_buff_len, int mode)
-{
- urldecode(src_buff,src_buff_len,dst_buff,dst_buff_len);
-}
-#endif
-
-/****************************************************************************
- * Name: b64enc_cb
- ****************************************************************************/
-
-#if defined(CONFIG_CODECS_BASE64) && !defined(CONFIG_NSH_DISABLE_BASE64ENC)
-static void b64enc_cb(FAR char *src_buff, int src_buff_len, FAR char *dst_buff,
- FAR int *dst_buff_len, int mode)
-{
- if (mode == 0)
- {
- //dst_buff =
- base64_encode((unsigned char *)src_buff, src_buff_len,
- (unsigned char *)dst_buff, (size_t *)dst_buff_len);
- }
- else
- {
- //dst_buff =
- base64w_encode((unsigned char *)src_buff, src_buff_len,
- (unsigned char *)dst_buff, (size_t *)dst_buff_len);
- }
-}
-#endif
-
-/****************************************************************************
- * Name: b64dec_cb
- ****************************************************************************/
-
-#if defined(CONFIG_CODECS_BASE64) && !defined(CONFIG_NSH_DISABLE_BASE64DEC)
-static void b64dec_cb(FAR char *src_buff, int src_buff_len, FAR char *dst_buff,
- FAR int *dst_buff_len, int mode)
-{
- if (mode == 0)
- {
- //dst_buff =
- base64_decode((unsigned char *)src_buff, src_buff_len,
- (unsigned char *)dst_buff, (size_t *)dst_buff_len);
- }
- else
- {
- //dst_buff =
- base64w_decode((unsigned char *)src_buff, src_buff_len,
- (unsigned char *)dst_buff,(size_t *)dst_buff_len);
- }
-}
-#endif
-
-/****************************************************************************
- * Name: md5_cb
- ****************************************************************************/
-
-#if defined(CONFIG_CODECS_HASH_MD5) && !defined(CONFIG_NSH_DISABLE_MD5)
-static void md5_cb(FAR char *src_buff, int src_buff_len, FAR char *dst_buff,
- FAR int *dst_buff_len, int mode)
-{
- MD5Update((MD5_CTX *)dst_buff, (unsigned char *)src_buff, src_buff_len);
-}
-#endif
-
-/****************************************************************************
- * Name: calc_codec_buffsize
- ****************************************************************************/
-
-static int calc_codec_buffsize(int src_buffsize, uint8_t mode)
-{
- switch (mode)
- {
- case CODEC_MODE_URLENCODE:
- return src_buffsize*3+1;
- case CODEC_MODE_URLDECODE:
- return src_buffsize+1;
- case CODEC_MODE_BASE64ENC:
- return ((src_buffsize + 2)/ 3 * 4)+1;
- case CODEC_MODE_BASE64DEC:
- return (src_buffsize / 4 * 3 + 2)+1;
- case CODEC_MODE_HASH_MD5:
- return 32+1;
- default:
- return src_buffsize+1;
- }
-}
-
-/****************************************************************************
- * Name: cmd_codecs_proc
- ****************************************************************************/
-
-static int cmd_codecs_proc(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv,
- uint8_t mode, codec_callback_t func)
-{
-#if defined(CONFIG_CODECS_HASH_MD5) && !defined(CONFIG_NSH_DISABLE_MD5)
- static const unsigned char hex_chars[] = "0123456789abcdef";
- MD5_CTX ctx;
- unsigned char mac[16];
- char *pSrc;
- char *pDest;
-#endif
-
- char *localfile = NULL;
- char *src_buffer = NULL;
- char *buffer = NULL;
- char *fullpath = NULL;
- const char *fmt;
- char *s_data;
- bool badarg = false;
- bool is_file = false;
- bool is_websafe=false;
- int option;
- int fd = -1;
- int buff_len = 0;
- int src_buff_len = 0;
- int i = 0;
- int ret = OK;
-
- /* Get the command options */
-
- while ((option = getopt(argc, argv, ":fw")) != ERROR)
- {
- switch (option)
- {
- case 'f':
- is_file = true;
- break;
-
-#ifdef CONFIG_CODECS_BASE64
- case 'w':
- is_websafe = true;
-
- if (!(mode == CODEC_MODE_BASE64ENC || mode == CODEC_MODE_BASE64DEC))
- {
- badarg = true;
- }
- break;
-#endif
- case ':':
- nsh_output(vtbl, g_fmtargrequired, argv[0]);
- badarg = true;
- break;
-
- case '?':
- default:
- nsh_output(vtbl, g_fmtarginvalid, argv[0]);
- badarg = true;
- break;
- }
- }
-
- /* If a bad argument was encountered, then return without processing the command */
-
- if (badarg)
- {
- return ERROR;
- }
-
- /* There should be exactly on parameter left on the command-line */
-
- if (optind == argc-1)
- {
- s_data = argv[optind];
- }
- else if (optind >= argc)
- {
- fmt = g_fmttoomanyargs;
- goto errout;
- }
- else
- {
- fmt = g_fmtargrequired;
- goto errout;
- }
-
-#if defined(CONFIG_CODECS_HASH_MD5) && !defined(CONFIG_NSH_DISABLE_MD5)
- if (mode == CODEC_MODE_HASH_MD5)
- {
- MD5Init(&ctx);
- }
-#endif
-
- if (is_file)
- {
- /* Get the local file name */
-
- localfile = s_data;
-
- /* Get the full path to the local file */
-
- fullpath = nsh_getfullpath(vtbl, localfile);
-
- /* Open the local file for writing */
-
- fd = open(fullpath, O_RDONLY|O_TRUNC, 0644);
- if (fd < 0)
- {
- nsh_output(vtbl, g_fmtcmdfailed, argv[0], "open", NSH_ERRNO);
- ret = ERROR;
- goto exit;
- }
-
- src_buffer = malloc(CONFIG_NSH_CODECS_BUFSIZE+2);
-#if defined(CONFIG_CODECS_BASE64) && !defined(CONFIG_NSH_DISABLE_BASE64ENC)
- if (mode == CODEC_MODE_BASE64ENC)
- {
- src_buff_len = CONFIG_NSH_CODECS_BUFSIZE / 3 * 3;
- }
- else
-#endif
- {
- src_buff_len = CONFIG_NSH_CODECS_BUFSIZE;
- }
-
- buff_len = calc_codec_buffsize(src_buff_len+2, mode);
- buffer = malloc(buff_len);
- while(true)
- {
- memset(src_buffer, 0, src_buff_len+2);
- ret=read(fd, src_buffer, src_buff_len);
- if (ret < 0)
- {
- nsh_output(vtbl, g_fmtcmdfailed, argv[0], "read", NSH_ERRNO);
- ret = ERROR;
- goto exit;
- }
- else if(ret==0)
- {
- break;
- }
-
-#if defined(CONFIG_CODECS_URLCODE) && !defined(CONFIG_NSH_DISABLE_URLDECODE)
- if (mode == CODEC_MODE_URLDECODE)
- {
- if (src_buffer[src_buff_len-1]=='%')
- {
- ret += read(fd,&src_buffer[src_buff_len],2);
- }
- else if (src_buffer[src_buff_len-2]=='%')
- {
- ret += read(fd,&src_buffer[src_buff_len],1);
- }
- }
-#endif
- memset(buffer, 0, buff_len);
- if (func)
- {
-#if defined(CONFIG_CODECS_HASH_MD5) && !defined(CONFIG_NSH_DISABLE_MD5)
- if (mode == CODEC_MODE_HASH_MD5)
- {
- func(src_buffer, ret, (char *)&ctx, &buff_len,0);
- }
- else
-#endif
- {
- func(src_buffer, ret, buffer, &buff_len,(is_websafe)?1:0);
- nsh_output(vtbl, "%s", buffer);
- }
- }
-
- buff_len = calc_codec_buffsize(src_buff_len+2, mode);
- }
-
-#if defined(CONFIG_CODECS_HASH_MD5) && !defined(CONFIG_NSH_DISABLE_MD5)
- if (mode == CODEC_MODE_HASH_MD5)
- {
- MD5Final(mac, &ctx);
- pSrc = (char *)&mac;
- pDest = buffer;
- for(i=0;i<16;i++,pSrc++)
- {
- *pDest++ = hex_chars[(*pSrc) >> 4];
- *pDest++ = hex_chars[(*pSrc) & 0x0f];
- }
-
- *pDest='\0';
- nsh_output(vtbl, "%s\n", buffer);
- }
-#endif
- ret = OK;
- goto exit;
- }
- else
- {
- src_buffer = s_data;
- src_buff_len = strlen(s_data);
- buff_len = calc_codec_buffsize(src_buff_len, mode);
- buffer = malloc(buff_len);
- buffer[0]=0;
- if (!buffer)
- {
- fmt = g_fmtcmdoutofmemory;
- goto errout;
- }
-
- memset(buffer, 0, buff_len);
- if (func)
- {
-#if defined(CONFIG_CODECS_HASH_MD5) && !defined(CONFIG_NSH_DISABLE_MD5)
- if (mode == CODEC_MODE_HASH_MD5)
- {
- func(src_buffer, src_buff_len, (char *)&ctx, &buff_len, 0);
- MD5Final(mac, &ctx);
- pSrc = (char *)&mac;
- pDest = buffer;
- for(i=0;i<16;i++,pSrc++)
- {
- *pDest++ = hex_chars[(*pSrc) >> 4];
- *pDest++ = hex_chars[(*pSrc) & 0x0f];
- }
-
- *pDest='\0';
- }
- else
-#endif
- {
- func(src_buffer, src_buff_len, buffer, &buff_len,(is_websafe)?1:0);
- }
- }
-
- nsh_output(vtbl, "%s\n",buffer);
- src_buffer = NULL;
- goto exit;
- }
-
-exit:
- if (fd >= 0)
- {
- close(fd);
- }
-
- if (fullpath)
- {
- free(fullpath);
- }
-
- if (src_buffer)
- {
- free(src_buffer);
- }
-
- if (buffer)
- {
- free(buffer);
- }
-
- return ret;
-
-errout:
- nsh_output(vtbl, fmt, argv[0]);
- ret = ERROR;
- goto exit;
-}
-
-/****************************************************************************
- * Public Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Name: cmd_urlencode
- ****************************************************************************/
-
-#if defined(CONFIG_CODECS_URLCODE) && !defined(CONFIG_NSH_DISABLE_URLENCODE)
-int cmd_urlencode(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
-{
- return cmd_codecs_proc(vtbl, argc, argv, CODEC_MODE_URLENCODE, urlencode_cb);
-}
-#endif
-
-/****************************************************************************
- * Name: cmd_urldecode
- ****************************************************************************/
-
-#if defined(CONFIG_CODECS_URLCODE) && !defined(CONFIG_NSH_DISABLE_URLDECODE)
-int cmd_urldecode(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
-{
- return cmd_codecs_proc(vtbl, argc, argv, CODEC_MODE_URLDECODE, urldecode_cb);
-}
-#endif
-
-/****************************************************************************
- * Name: cmd_base64encode
- ****************************************************************************/
-
-#if defined(CONFIG_CODECS_BASE64) && !defined(CONFIG_NSH_DISABLE_BASE64ENC)
-int cmd_base64encode(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
-{
- return cmd_codecs_proc(vtbl, argc, argv, CODEC_MODE_BASE64ENC, b64enc_cb);
-}
-#endif
-
-/****************************************************************************
- * Name: cmd_base64decode
- ****************************************************************************/
-
-#if defined(CONFIG_CODECS_BASE64) && !defined(CONFIG_NSH_DISABLE_BASE64DEC)
-int cmd_base64decode(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
-{
- return cmd_codecs_proc(vtbl, argc, argv, CODEC_MODE_BASE64DEC, b64dec_cb);
-}
-#endif
-
-/****************************************************************************
- * Name: cmd_md5
- ****************************************************************************/
-
-#if defined(CONFIG_CODECS_HASH_MD5) && !defined(CONFIG_NSH_DISABLE_MD5)
-int cmd_md5(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
-{
- return cmd_codecs_proc(vtbl,argc,argv,CODEC_MODE_HASH_MD5,md5_cb);
-}
-#endif
-
-#endif /* CONFIG_NETUTILS_CODECS */
diff --git a/apps/nshlib/nsh_console.c b/apps/nshlib/nsh_console.c
deleted file mode 100644
index 1b8f5f6ac..000000000
--- a/apps/nshlib/nsh_console.c
+++ /dev/null
@@ -1,437 +0,0 @@
-/****************************************************************************
- * apps/nshlib/nsh_serial.c
- *
- * Copyright (C) 2007-2009, 2011-2012 Gregory Nutt. All rights reserved.
- * Author: Gregory Nutt <gnutt@nuttx.org>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * 3. Neither the name Gregory Nutt nor the names of its contributors may be
- * used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- ****************************************************************************/
-
-/****************************************************************************
- * Included Files
- ****************************************************************************/
-
-#include <nuttx/config.h>
-
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <string.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <errno.h>
-#include <debug.h>
-
-#include "nsh.h"
-#include "nsh_console.h"
-
-/****************************************************************************
- * Pre-processor Definitions
- ****************************************************************************/
-
-/****************************************************************************
- * Private Types
- ****************************************************************************/
-
-struct serialsave_s
-{
- int cn_outfd; /* Re-directed output file descriptor */
- FILE *cn_outstream; /* Re-directed output stream */
-};
-
-/****************************************************************************
- * Private Function Prototypes
- ****************************************************************************/
-
-#ifndef CONFIG_NSH_DISABLEBG
-static FAR struct nsh_vtbl_s *nsh_consoleclone(FAR struct nsh_vtbl_s *vtbl);
-#endif
-static void nsh_consolerelease(FAR struct nsh_vtbl_s *vtbl);
-static ssize_t nsh_consolewrite(FAR struct nsh_vtbl_s *vtbl,
- FAR const void *buffer, size_t nbytes);
-static int nsh_consoleoutput(FAR struct nsh_vtbl_s *vtbl,
- FAR const char *fmt, ...);
-static FAR char *nsh_consolelinebuffer(FAR struct nsh_vtbl_s *vtbl);
-static void nsh_consoleredirect(FAR struct nsh_vtbl_s *vtbl, int fd,
- FAR uint8_t *save);
-static void nsh_consoleundirect(FAR struct nsh_vtbl_s *vtbl,
- FAR uint8_t *save);
-static void nsh_consoleexit(FAR struct nsh_vtbl_s *vtbl, int exitstatus)
- noreturn_function;
-
-/****************************************************************************
- * Private Data
- ****************************************************************************/
-
-/****************************************************************************
- * Public Data
- ****************************************************************************/
-
-/****************************************************************************
- * Private Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Name: nsh_openifnotopen
- ****************************************************************************/
-
-static int nsh_openifnotopen(struct console_stdio_s *pstate)
-{
- /* The stream is open in a lazy fashion. This is done because the file
- * descriptor may be opened on a different task than the stream.
- */
-
- if (!pstate->cn_outstream)
- {
- pstate->cn_outstream = fdopen(pstate->cn_outfd, "w");
- if (!pstate->cn_outstream)
- {
- return ERROR;
- }
- }
- return 0;
-}
-
-/****************************************************************************
- * Name: nsh_closeifnotclosed
- *
- * Description:
- * Close the output stream if it is not the standard output stream.
- *
- ****************************************************************************/
-
-static void nsh_closeifnotclosed(struct console_stdio_s *pstate)
-{
- if (pstate->cn_outstream == OUTSTREAM(pstate))
- {
- fflush(OUTSTREAM(pstate));
- pstate->cn_outfd = OUTFD(pstate);
- }
- else
- {
- if (pstate->cn_outstream)
- {
- fflush(pstate->cn_outstream);
- fclose(pstate->cn_outstream);
- }
- else if (pstate->cn_outfd >= 0 && pstate->cn_outfd != OUTFD(pstate))
- {
- close(pstate->cn_outfd);
- }
-
- pstate->cn_outfd = -1;
- pstate->cn_outstream = NULL;
- }
-}
-
-/****************************************************************************
- * Name: nsh_consolewrite
- *
- * Description:
- * write a buffer to the remote shell window.
- *
- * Currently only used by cat.
- *
- ****************************************************************************/
-
-static ssize_t nsh_consolewrite(FAR struct nsh_vtbl_s *vtbl, FAR const void *buffer, size_t nbytes)
-{
- FAR struct console_stdio_s *pstate = (FAR struct console_stdio_s *)vtbl;
- ssize_t ret;
-
- /* The stream is open in a lazy fashion. This is done because the file
- * descriptor may be opened on a different task than the stream. The
- * actual open will then occur with the first output from the new task.
- */
-
- if (nsh_openifnotopen(pstate) != 0)
- {
- return (ssize_t)ERROR;
- }
-
- /* Write the data to the output stream */
-
- ret = fwrite(buffer, 1, nbytes, pstate->cn_outstream);
- if (ret < 0)
- {
- dbg("[%d] Failed to send buffer: %d\n", pstate->cn_outfd, errno);
- }
- return ret;
-}
-
-/****************************************************************************
- * Name: nsh_consoleoutput
- *
- * Description:
- * Print a string to the currently selected stream.
- *
- ****************************************************************************/
-
-static int nsh_consoleoutput(FAR struct nsh_vtbl_s *vtbl, const char *fmt, ...)
-{
- FAR struct console_stdio_s *pstate = (FAR struct console_stdio_s *)vtbl;
- va_list ap;
- int ret;
-
- /* The stream is open in a lazy fashion. This is done because the file
- * descriptor may be opened on a different task than the stream. The
- * actual open will then occur with the first output from the new task.
- */
-
- if (nsh_openifnotopen(pstate) != 0)
- {
- return ERROR;
- }
-
- va_start(ap, fmt);
- ret = vfprintf(pstate->cn_outstream, fmt, ap);
- va_end(ap);
-
- return ret;
-}
-
-/****************************************************************************
- * Name: nsh_consolelinebuffer
- *
- * Description:
- * Return a reference to the current line buffer
- *
- ****************************************************************************/
-
-static FAR char *nsh_consolelinebuffer(FAR struct nsh_vtbl_s *vtbl)
-{
- FAR struct console_stdio_s *pstate = (FAR struct console_stdio_s *)vtbl;
- return pstate->cn_line;
-}
-
-/****************************************************************************
- * Name: nsh_consoleclone
- *
- * Description:
- * Make an independent copy of the vtbl
- *
- ****************************************************************************/
-
-#ifndef CONFIG_NSH_DISABLEBG
-static FAR struct nsh_vtbl_s *nsh_consoleclone(FAR struct nsh_vtbl_s *vtbl)
-{
- FAR struct console_stdio_s *pclone = nsh_newconsole();
- return &pclone->cn_vtbl;
-}
-#endif
-
-/****************************************************************************
- * Name: nsh_consolerelease
- *
- * Description:
- * Release the cloned instance
- *
- ****************************************************************************/
-
-static void nsh_consolerelease(FAR struct nsh_vtbl_s *vtbl)
-{
- FAR struct console_stdio_s *pstate = (FAR struct console_stdio_s *)vtbl;
-
- /* Close the output stream */
-
- nsh_closeifnotclosed(pstate);
-
- /* Close the console stream */
-
-#ifdef CONFIG_NSH_CONDEV
- (void)fclose(pstate->cn_constream);
-#endif
-
- /* Then release the vtable container */
-
- free(pstate);
-}
-
-/****************************************************************************
- * Name: nsh_consoleredirect
- *
- * Description:
- * Set up for redirected output. This function is called from nsh_parse()
- * in two different contexts:
- *
- * 1) Redirected background commands of the form: command > xyz.text &
- *
- * In this case:
- * - vtbl: A newly allocated and initialized instance created by
- * nsh_consoleclone,
- * - fd:- The file descriptor of the redirected output
- * - save: NULL
- *
- * nsh_consolerelease() will perform the clean-up when the clone is
- * destroyed.
- *
- * 2) Redirected foreground commands of the form: command > xyz.txt
- *
- * In this case:
- * - vtbl: The current state structure,
- * - fd: The file descriptor of the redirected output
- * - save: Where to save the re-directed registers.
- *
- * nsh_consoleundirect() will perform the clean-up after the redirected
- * command completes.
- *
- ****************************************************************************/
-
-static void nsh_consoleredirect(FAR struct nsh_vtbl_s *vtbl, int fd, FAR uint8_t *save)
-{
- FAR struct console_stdio_s *pstate = (FAR struct console_stdio_s *)vtbl;
- FAR struct serialsave_s *ssave = (FAR struct serialsave_s *)save;
-
- /* Case 1: Redirected foreground commands */
-
- if (ssave)
- {
- /* pstate->cn_outstream and cn_outfd refer refer to the
- * currently opened output stream. If the output stream is open, flush
- * any pending output.
- */
-
- if (pstate->cn_outstream)
- {
- fflush(pstate->cn_outstream);
- }
-
- /* Save the current fd and stream values. These will be restored
- * when nsh_consoleundirect() is called.
- */
-
- ssave->cn_outfd = pstate->cn_outfd;
- ssave->cn_outstream = pstate->cn_outstream;
- }
- else
- {
- /* nsh_consoleclone() set pstate->cn_outfd and cn_outstream to refer
- * to standard out. We just want to leave these alone and overwrite
- * them with the fd for the re-directed stream.
- */
- }
-
- /* In either case, set the fd of the new, re-directed output and nullify
- * the output stream (it will be fdopen'ed if it is used).
- */
-
- pstate->cn_outfd = fd;
- pstate->cn_outstream = NULL;
-}
-
-/****************************************************************************
- * Name: nsh_consoleundirect
- *
- * Description:
- * Set up for redirected output
- *
- ****************************************************************************/
-
-static void nsh_consoleundirect(FAR struct nsh_vtbl_s *vtbl, FAR uint8_t *save)
-{
- FAR struct console_stdio_s *pstate = (FAR struct console_stdio_s *)vtbl;
- FAR struct serialsave_s *ssave = (FAR struct serialsave_s *)save;
-
- nsh_closeifnotclosed(pstate);
- pstate->cn_outfd = ssave->cn_outfd;
- pstate->cn_outstream = ssave->cn_outstream;
-}
-
-/****************************************************************************
- * Name: nsh_consoleexit
- *
- * Description:
- * Exit the shell task
- *
- ****************************************************************************/
-
-static void nsh_consoleexit(FAR struct nsh_vtbl_s *vtbl, int exitstatus)
-{
- /* Destroy ourself then exit with the provided status */
-
- nsh_consolerelease(vtbl);
- exit(exitstatus);
-}
-
-/****************************************************************************
- * Public Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Name: nsh_newconsole
- ****************************************************************************/
-
-FAR struct console_stdio_s *nsh_newconsole(void)
-{
- struct console_stdio_s *pstate = (struct console_stdio_s *)zalloc(sizeof(struct console_stdio_s));
- if (pstate)
- {
- /* Initialize the call table */
-
-#ifndef CONFIG_NSH_DISABLEBG
- pstate->cn_vtbl.clone = nsh_consoleclone;
- pstate->cn_vtbl.release = nsh_consolerelease;
-#endif
- pstate->cn_vtbl.write = nsh_consolewrite;
- pstate->cn_vtbl.output = nsh_consoleoutput;
- pstate->cn_vtbl.linebuffer = nsh_consolelinebuffer;
- pstate->cn_vtbl.redirect = nsh_consoleredirect;
- pstate->cn_vtbl.undirect = nsh_consoleundirect;
- pstate->cn_vtbl.exit = nsh_consoleexit;
-
- /* (Re-) open the console input device */
-
-#ifdef CONFIG_NSH_CONDEV
- pstate->cn_confd = open(CONFIG_NSH_CONDEV, O_RDWR);
- if (pstate->cn_confd < 0)
- {
- free(pstate);
- return NULL;
- }
-
- /* Create a standard C stream on the console device */
-
- pstate->cn_constream = fdopen(pstate->cn_confd, "r+");
- if (!pstate->cn_constream)
- {
- close(pstate->cn_confd);
- free(pstate);
- return NULL;
- }
-#endif
-
- /* Initialize the output stream */
-
- pstate->cn_outfd = OUTFD(pstate);
- pstate->cn_outstream = OUTSTREAM(pstate);
- }
- return pstate;
-}
diff --git a/apps/nshlib/nsh_console.h b/apps/nshlib/nsh_console.h
deleted file mode 100644
index 4dc2938cb..000000000
--- a/apps/nshlib/nsh_console.h
+++ /dev/null
@@ -1,159 +0,0 @@
-/****************************************************************************
- * apps/nshlib/nsh_console.h
- *
- * Copyright (C) 2007-2012 Gregory Nutt. All rights reserved.
- * Author: Gregory Nutt <gnutt@nuttx.org>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * 3. Neither the name NuttX nor the names of its contributors may be
- * used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- ****************************************************************************/
-
-#ifndef __APPS_NSHLIB_NSH_CONSOLE_H
-#define __APPS_NSHLIB_NSH_CONSOLE_H
-
-/****************************************************************************
- * Included Files
- ****************************************************************************/
-
-#include <nuttx/config.h>
-
-#include <sys/types.h>
-
-#include <stdio.h>
-#include <stdint.h>
-#include <stdbool.h>
-#include <errno.h>
-
-/****************************************************************************
- * Definitions
- ****************************************************************************/
-/* Method access macros */
-
-#define nsh_clone(v) (v)->clone(v)
-#define nsh_release(v) (v)->release(v)
-#define nsh_write(v,b,n) (v)->write(v,b,n)
-#define nsh_linebuffer(v) (v)->linebuffer(v)
-#define nsh_redirect(v,f,s) (v)->redirect(v,f,s)
-#define nsh_undirect(v,s) (v)->undirect(v,s)
-#define nsh_exit(v,s) (v)->exit(v,s)
-
-#ifdef CONFIG_CPP_HAVE_VARARGS
-# define nsh_output(v, fmt...) (v)->output(v, ##fmt)
-#else
-# define nsh_output vtbl->output
-#endif
-
-/* Size of info to be saved in call to nsh_redirect */
-
-#define SAVE_SIZE (sizeof(int) + sizeof(FILE*) + sizeof(bool))
-
-/* Are we using the NuttX console for I/O? Or some other character device? */
-
-#ifdef CONFIG_NSH_CONDEV
-# define INFD(p) ((p)->cn_confd)
-# define INSTREAM(p) ((p)->cn_constream)
-# define OUTFD(p) ((p)->cn_confd)
-# define OUTSTREAM(p) ((p)->cn_constream)
-#else
-# define INFD(p) 0
-# define INSTREAM(p) stdin
-# define OUTFD(p) 1
-# define OUTSTREAM(p) stdout
-#endif
-
-/****************************************************************************
- * Public Types
- ****************************************************************************/
-/* This describes a generic console front-end */
-
-struct nsh_vtbl_s
-{
- /* This function pointers are "hooks" into the front end logic to
- * handle things like output of command results, redirection, etc.
- * -- all of which must be done in a way that is unique to the nature
- * of the front end.
- */
-
-#ifndef CONFIG_NSH_DISABLEBG
- FAR struct nsh_vtbl_s *(*clone)(FAR struct nsh_vtbl_s *vtbl);
- void (*addref)(FAR struct nsh_vtbl_s *vtbl);
- void (*release)(FAR struct nsh_vtbl_s *vtbl);
-#endif
- ssize_t (*write)(FAR struct nsh_vtbl_s *vtbl, FAR const void *buffer, size_t nbytes);
- int (*output)(FAR struct nsh_vtbl_s *vtbl, const char *fmt, ...);
- FAR char *(*linebuffer)(FAR struct nsh_vtbl_s *vtbl);
- void (*redirect)(FAR struct nsh_vtbl_s *vtbl, int fd, FAR uint8_t *save);
- void (*undirect)(FAR struct nsh_vtbl_s *vtbl, FAR uint8_t *save);
- void (*exit)(FAR struct nsh_vtbl_s *vtbl, int exitstatus) noreturn_function;
-
- /* Parser state data */
-
- struct nsh_parser_s np;
-};
-
-/* This structure describes a console front-end that is based on stdin and
- * stdout (which is all of the supported console types at the time being).
- */
-
-struct console_stdio_s
-{
- /* NSH front-end call table */
-
- struct nsh_vtbl_s cn_vtbl;
-
- /* NSH input/output streams */
-
-#ifdef CONFIG_NSH_CONDEV
- int cn_confd; /* Console I/O file descriptor */
-#endif
- int cn_outfd; /* Output file descriptor (possibly redirected) */
-#ifdef CONFIG_NSH_CONDEV
- FILE *cn_constream; /* Console I/O stream (possibly redirected) */
-#endif
- FILE *cn_outstream; /* Output stream */
-
- /* Line input buffer */
-
- char cn_line[CONFIG_NSH_LINELEN];
-};
-
-
-
-/****************************************************************************
- * Public Data
- ****************************************************************************/
-
-/****************************************************************************
- * Public Function Prototypes
- ****************************************************************************/
-
-/* Defined in nsh_console.c *************************************************/
-
-FAR struct console_stdio_s *nsh_newconsole(void);
-
-#endif /* __APPS_NSHLIB_NSH_CONSOLE_H */
diff --git a/apps/nshlib/nsh_consolemain.c b/apps/nshlib/nsh_consolemain.c
deleted file mode 100644
index 8be44f7aa..000000000
--- a/apps/nshlib/nsh_consolemain.c
+++ /dev/null
@@ -1,132 +0,0 @@
-/****************************************************************************
- * apps/nshlib/nsh_consolemain.c
- *
- * Copyright (C) 2007-2009, 2011-2013 Gregory Nutt. All rights reserved.
- * Author: Gregory Nutt <gnutt@nuttx.org>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * 3. Neither the name Gregory Nutt nor the names of its contributors may be
- * used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- ****************************************************************************/
-
-/****************************************************************************
- * Included Files
- ****************************************************************************/
-
-#include <nuttx/config.h>
-
-#include <stdio.h>
-#include <assert.h>
-
-#include <apps/readline.h>
-
-#include "nsh.h"
-#include "nsh_console.h"
-
-#ifndef HAVE_USB_CONSOLE
-
-/****************************************************************************
- * Pre-processor Definitions
- ****************************************************************************/
-
-/****************************************************************************
- * Private Types
- ****************************************************************************/
-
-/****************************************************************************
- * Private Function Prototypes
- ****************************************************************************/
-
-/****************************************************************************
- * Private Data
- ****************************************************************************/
-
-/****************************************************************************
- * Public Data
- ****************************************************************************/
-
-/****************************************************************************
- * Private Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Public Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Name: nsh_consolemain (Normal character device version)
- *
- * Description:
- * This interfaces maybe to called or started with task_start to start a
- * single an NSH instance that operates on stdin and stdout. This
- * function does not normally return (see below).
- *
- * This version of nsh_consolmain handles generic /dev/console character
- * devices (see nsh_usbdev.c for another version for special USB console
- * devices).
- *
- * Input Parameters:
- * Standard task start-up arguments. These are not used. argc may be
- * zero and argv may be NULL.
- *
- * Returned Values:
- * This function does not normally return. exit() is usually called to
- * terminate the NSH session. This function will return in the event of
- * an error. In that case, a nonzero value is returned (EXIT_FAILURE=1).
- *
- ****************************************************************************/
-
-int nsh_consolemain(int argc, char *argv[])
-{
- FAR struct console_stdio_s *pstate = nsh_newconsole();
- int ret;
-
- DEBUGASSERT(pstate);
-
- /* Execute the start-up script */
-
-#ifdef CONFIG_NSH_ROMFSETC
- (void)nsh_initscript(&pstate->cn_vtbl);
-#endif
-
- /* Initialize any USB tracing options that were requested */
-
-#ifdef CONFIG_NSH_USBDEV_TRACE
- usbtrace_enable(TRACE_BITSET);
-#endif
-
- /* Execute the session */
-
- ret = nsh_session(pstate);
-
- /* Exit upon return */
-
- nsh_exit(&pstate->cn_vtbl, ret);
- return ret;
-}
-
-#endif /* !HAVE_USB_CONSOLE */
diff --git a/apps/nshlib/nsh_dbgcmds.c b/apps/nshlib/nsh_dbgcmds.c
deleted file mode 100644
index 85a4ccb9c..000000000
--- a/apps/nshlib/nsh_dbgcmds.c
+++ /dev/null
@@ -1,415 +0,0 @@
-/****************************************************************************
- * apps/nshlib/dbg_dbgcmds.c
- *
- * Copyright (C) 2008-2009, 2011-2012 Gregory Nutt. All rights reserved.
- * Author: Gregory Nutt <gnutt@nuttx.org>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * 3. Neither the name NuttX nor the names of its contributors may be
- * used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- ****************************************************************************/
-
-/****************************************************************************
- * Included Files
- ****************************************************************************/
-
-#include <nuttx/config.h>
-
-#include <sys/types.h>
-#include <stdint.h>
-#include <stdbool.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-
-#if CONFIG_NFILE_DESCRIPTORS > 0
-# include <fcntl.h>
-#endif
-
-#include "nsh.h"
-#include "nsh_console.h"
-
-/****************************************************************************
- * Definitions
- ****************************************************************************/
-
-/****************************************************************************
- * Private Types
- ****************************************************************************/
-
-struct dbgmem_s
-{
- bool dm_write; /* true: perfrom write operation */
- void *dm_addr; /* Address to access */
- uint32_t dm_value; /* Value to write */
- unsigned int dm_count; /* The number of bytes to access */
-};
-
-/****************************************************************************
- * Private Function Prototypes
- ****************************************************************************/
-
-/****************************************************************************
- * Private Data
- ****************************************************************************/
-
-/****************************************************************************
- * Public Data
- ****************************************************************************/
-
-/****************************************************************************
- * Private Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Name: mem_parse
- ****************************************************************************/
-
-int mem_parse(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv,
- struct dbgmem_s *mem)
-{
- char *pcvalue = strchr(argv[1], '=');
- unsigned long lvalue = 0;
-
- /* Check if we are writing a value */
-
- if (pcvalue)
- {
- *pcvalue = '\0';
- pcvalue++;
-
- lvalue = (unsigned long)strtol(pcvalue, NULL, 16);
- if (lvalue > 0xffffffffL)
- {
- return -EINVAL;
- }
-
- mem->dm_write = true;
- mem->dm_value = (uint32_t)lvalue;
- }
- else
- {
- mem->dm_write = false;
- mem->dm_value = 0;
- }
-
- /* Get the address to be accessed */
-
- mem->dm_addr = (void*)((uintptr_t)strtol(argv[1], NULL, 16));
-
- /* Get the number of bytes to access */
-
- if (argc > 2)
- {
- mem->dm_count = (unsigned int)strtol(argv[2], NULL, 16);
- }
- else
- {
- mem->dm_count = 1;
- }
-
- return OK;
-}
-
-/****************************************************************************
- * Public Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Name: cmd_mb
- ****************************************************************************/
-
-#ifndef CONFIG_NSH_DISABLE_MB
-int cmd_mb(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
-{
- struct dbgmem_s mem;
- volatile uint8_t *ptr;
- int ret;
- int i;
-
- ret = mem_parse(vtbl, argc, argv, &mem);
- if (ret == 0)
- {
- /* Loop for the number of requested bytes */
-
- for (i = 0, ptr = (volatile uint8_t*)mem.dm_addr; i < mem.dm_count; i++, ptr++)
- {
- /* Print the value at the address */
-
- nsh_output(vtbl, " %p = 0x%02x", ptr, *ptr);
-
- /* Are we supposed to write a value to this address? */
-
- if (mem.dm_write)
- {
- /* Yes, was the supplied value within range? */
-
- if (mem.dm_value > 0x000000ff)
- {
- nsh_output(vtbl, g_fmtargrange, argv[0]);
- return ERROR;
- }
-
- /* Write the value and re-read the address so that we print its
- * current value (if the address is a process address, then the
- * value read might not necessarily be the value written).
- */
-
- *ptr = (uint8_t)mem.dm_value;
- nsh_output(vtbl, " -> 0x%02x", *ptr);
- }
-
- /* Make sure we end it with a newline */
-
- nsh_output(vtbl, "\n", *ptr);
- }
- }
- return ret;
-}
-#endif
-
-/****************************************************************************
- * Name: cmd_mh
- ****************************************************************************/
-
-#ifndef CONFIG_NSH_DISABLE_MH
-int cmd_mh(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
-{
- struct dbgmem_s mem;
- volatile uint16_t *ptr;
- int ret;
- int i;
-
- ret = mem_parse(vtbl, argc, argv, &mem);
- if (ret == 0)
- {
- /* Loop for the number of requested bytes */
-
- for (i = 0, ptr = (volatile uint16_t*)mem.dm_addr; i < mem.dm_count; i += 2, ptr++)
- {
- /* Print the value at the address */
-
- nsh_output(vtbl, " %p = 0x%04x", ptr, *ptr);
-
- /* Are we supposed to write a value to this address? */
-
- if (mem.dm_write)
- {
- /* Yes, was the supplied value within range? */
-
- if (mem.dm_value > 0x0000ffff)
- {
- nsh_output(vtbl, g_fmtargrange, argv[0]);
- return ERROR;
- }
-
- /* Write the value and re-read the address so that we print its
- * current value (if the address is a process address, then the
- * value read might not necessarily be the value written).
- */
-
- *ptr = (uint16_t)mem.dm_value;
- nsh_output(vtbl, " -> 0x%04x", *ptr);
- }
-
- /* Make sure we end it with a newline */
-
- nsh_output(vtbl, "\n", *ptr);
- }
- }
- return ret;
-}
-#endif
-
-/****************************************************************************
- * Name: cmd_mw
- ****************************************************************************/
-
-#ifndef CONFIG_NSH_DISABLE_MW
-int cmd_mw(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
-{
- struct dbgmem_s mem;
- volatile uint32_t *ptr;
- int ret;
- int i;
-
- ret = mem_parse(vtbl, argc, argv, &mem);
- if (ret == 0)
- {
- /* Loop for the number of requested bytes */
-
- for (i = 0, ptr = (volatile uint32_t*)mem.dm_addr; i < mem.dm_count; i += 4, ptr++)
- {
- /* Print the value at the address */
-
- nsh_output(vtbl, " %p = 0x%08x", ptr, *ptr);
-
- /* Are we supposed to write a value to this address? */
-
- if (mem.dm_write)
- {
- /* Write the value and re-read the address so that we print its
- * current value (if the address is a process address, then the
- * value read might not necessarily be the value written).
- */
-
- *ptr = mem.dm_value;
- nsh_output(vtbl, " -> 0x%08x", *ptr);
- }
-
- /* Make sure we end it with a newline */
-
- nsh_output(vtbl, "\n", *ptr);
- }
- }
- return ret;
-}
-#endif
-
-/****************************************************************************
- * Name: nsh_dumpbuffer
- ****************************************************************************/
-
-void nsh_dumpbuffer(FAR struct nsh_vtbl_s *vtbl, const char *msg,
- const uint8_t *buffer, ssize_t nbytes)
-{
- char line[128];
- int ch;
- int i;
- int j;
-
- nsh_output(vtbl, "%s:\n", msg);
- for (i = 0; i < nbytes; i += 16)
- {
- sprintf(line, "%04x: ", i);
-
- for ( j = 0; j < 16; j++)
- {
- if (i + j < nbytes)
- {
- sprintf(&line[strlen(line)], "%02x ", buffer[i+j] );
- }
- else
- {
- strcpy(&line[strlen(line)], " ");
- }
- }
-
- for ( j = 0; j < 16; j++)
- {
- if (i + j < nbytes)
- {
- ch = buffer[i+j];
- sprintf(&line[strlen(line)], "%c", ch >= 0x20 && ch <= 0x7e ? ch : '.');
- }
- }
- nsh_output(vtbl, "%s\n", line);
- }
-}
-
-/****************************************************************************
- * Name: cmd_xd, hex dump of memory
- ****************************************************************************/
-
-#ifndef CONFIG_NSH_DISABLE_XD
-int cmd_xd(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
-{
- FAR char *addr;
- FAR char *endptr;
- int nbytes;
-
- addr = (char*)((uintptr_t)strtol(argv[1], &endptr, 16));
- if (argv[0][0] == '\0' || *endptr != '\0')
- {
- return ERROR;
- }
-
- nbytes = (int)strtol(argv[2], &endptr, 0);
- if (argv[0][0] == '\0' || *endptr != '\0' || nbytes < 0)
- {
- return ERROR;
- }
-
- nsh_dumpbuffer(vtbl, "Hex dump", (uint8_t*)addr, nbytes);
- return OK;
-}
-#endif
-
-/****************************************************************************
- * Name: cmd_hexdump, hex dump of files
- ****************************************************************************/
-
-#if CONFIG_NFILE_DESCRIPTORS > 0
-#ifndef CONFIG_NSH_DISABLE_HEXDUMP
-int cmd_hexdump(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
-{
- uint8_t buffer[IOBUFFERSIZE];
- char msg[32];
- int position;
- int fd;
- int ret = OK;
-
- /* Open the file for reading */
-
- fd = open(argv[1], O_RDONLY);
- if (fd < 0)
- {
- nsh_output(vtbl, g_fmtcmdfailed, "hexdump", "open", NSH_ERRNO);
- return ERROR;
- }
-
- position = 0;
- for (;;)
- {
- int nbytesread = read(fd, buffer, IOBUFFERSIZE);
-
- /* Check for read errors */
-
- if (nbytesread < 0)
- {
- int errval = errno;
- nsh_output(vtbl, g_fmtcmdfailed, "hexdump", "read", NSH_ERRNO_OF(errval));
- ret = ERROR;
- break;
- }
- else if (nbytesread > 0)
- {
- snprintf(msg, sizeof(msg), "%s at %08x", argv[1], position);
- nsh_dumpbuffer(vtbl, msg, buffer, nbytesread);
- position += nbytesread;
- }
- else
- {
- break; // EOF
- }
- }
-
- (void)close(fd);
- return ret;
-}
-#endif
-#endif
diff --git a/apps/nshlib/nsh_ddcmd.c b/apps/nshlib/nsh_ddcmd.c
deleted file mode 100644
index e6ef2523c..000000000
--- a/apps/nshlib/nsh_ddcmd.c
+++ /dev/null
@@ -1,643 +0,0 @@
-/****************************************************************************
- * apps/nshlib/nsh_ddcmd.c
- *
- * Copyright (C) 2008-2009, 2012 Gregory Nutt. All rights reserved.
- * Author: Gregory Nutt <gnutt@nuttx.org>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * 3. Neither the name NuttX nor the names of its contributors may be
- * used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- ****************************************************************************/
-
-/****************************************************************************
- * Included Files
- ****************************************************************************/
-
-#include <nuttx/config.h>
-
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#include <stdint.h>
-#include <stdbool.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <string.h>
-#include <debug.h>
-#include <errno.h>
-
-#include <nuttx/fs/fs.h>
-
-#include "nsh.h"
-#include "nsh_console.h"
-
-#if CONFIG_NFILE_DESCRIPTORS > 0 && !defined(CONFIG_NSH_DISABLE_DD)
-
-/****************************************************************************
- * Definitions
- ****************************************************************************/
-
-/* If no sector size is specified wity BS=, then the following default value
- * is used.
- */
-
-#define DEFAULT_SECTSIZE 512
-
-/* At present, piping of input and output are not support, i.e., both of=
- * and if= arguments are required.
- */
-
-#undef CAN_PIPE_FROM_STD
-
-/* Function pointer calls are only need if block drivers are supported
- * (or, rather, if mount points are supported in the file system)
- */
-
-#ifndef CONFIG_DISABLE_MOUNTPOINT
-# define DD_INFD ((dd)->inf.fd)
-# define DD_INHANDLE ((dd)->inf.handle)
-# define DD_OUTFD ((dd)->outf.fd)
-# define DD_OUTHANDLE ((dd)->outf.handle)
-# define DD_READ(dd) ((dd)->infread(dd))
-# define DD_WRITE(dd) ((dd)->outfwrite(dd))
-# define DD_INCLOSE(dd) ((dd)->infclose(dd))
-# define DD_OUTCLOSE(dd) ((dd)->outfclose(dd))
-#else
-# define DD_INFD ((dd)->infd)
-# undef DD_INHANDLE
-# define DD_OUTFD ((dd)->outfd)
-# undef DD_OUTHANDLE
-# define DD_READ(dd) dd_readch(dd)
-# define DD_WRITE(dd) dd_writech(dd)
-# define DD_INCLOSE(dd) dd_infclosech(dd)
-# define DD_OUTCLOSE(dd) dd_outfclosech(dd)
-#endif
-
-/****************************************************************************
- * Private Types
- ****************************************************************************/
-
-struct dd_s
-{
- FAR struct nsh_vtbl_s *vtbl;
-
-#ifndef CONFIG_DISABLE_MOUNTPOINT
- union
- {
- FAR void *handle; /* BCH lib handle for block device*/
- int fd; /* File descriptor of the character device */
- } inf;
-#else
- int infd; /* File descriptor of the input device */
-#endif
-
-#ifndef CONFIG_DISABLE_MOUNTPOINT
- union
- {
- FAR void *handle; /* BCH lib handle for block device*/
- int fd; /* File descriptor of the character device */
- } outf;
-#else
- int outfd; /* File descriptor of the output device */
-#endif
-
- uint32_t nsectors; /* Number of sectors to transfer */
- uint32_t sector; /* The current sector number */
- uint32_t skip; /* The number of sectors skipped on input */
- bool eof; /* true: The of the input or output file has been hit */
- uint16_t sectsize; /* Size of one sector */
- uint16_t nbytes; /* Number of valid bytes in the buffer */
- uint8_t *buffer; /* Buffer of data to write to the output file */
-
- /* Function pointers to handle differences between block and character devices */
-
-#ifndef CONFIG_DISABLE_MOUNTPOINT
- int (*infread)(struct dd_s *dd);
- void (*infclose)(struct dd_s *dd);
- int (*outfwrite)(struct dd_s *dd);
- void (*outfclose)(struct dd_s *dd);
-#endif
-};
-
-/****************************************************************************
- * Private Function Prototypes
- ****************************************************************************/
-
-/****************************************************************************
- * Private Data
- ****************************************************************************/
-
-static const char g_dd[] = "dd";
-
-/****************************************************************************
- * Public Data
- ****************************************************************************/
-
-/****************************************************************************
- * Private Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Name: dd_outfcloseblk
- ****************************************************************************/
-
-#ifndef CONFIG_DISABLE_MOUNTPOINT
-static void dd_outfcloseblk(struct dd_s *dd)
-{
- (void)bchlib_teardown(DD_OUTHANDLE);
-}
-#endif
-
-
-/****************************************************************************
- * Name: dd_outfclosech
- ****************************************************************************/
-
-static void dd_outfclosech(struct dd_s *dd)
-{
- (void)close(DD_OUTFD);
-}
-
-/****************************************************************************
- * Name: dd_infcloseblk
- ****************************************************************************/
-
-#ifndef CONFIG_DISABLE_MOUNTPOINT
-static void dd_infcloseblk(struct dd_s *dd)
-{
- (void)bchlib_teardown(DD_INHANDLE);
-}
-#endif
-
-/****************************************************************************
- * Name: dd_infclosech
- ****************************************************************************/
-
-static void dd_infclosech(struct dd_s *dd)
-{
- (void)close(DD_INFD);
-}
-
-/****************************************************************************
- * Name: dd_writeblk
- ****************************************************************************/
-
-#ifndef CONFIG_DISABLE_MOUNTPOINT
-static int dd_writeblk(struct dd_s *dd)
-{
- ssize_t nbytes;
- off_t offset = (dd->sector - dd->skip) * dd->sectsize;
-
- /* Write the sector at the specified offset */
-
- nbytes = bchlib_write(DD_OUTHANDLE, (char*)dd->buffer, offset, dd->sectsize);
- if (nbytes < 0)
- {
- /* bchlib_write return -EFBIG on attempts to write past the end of
- * the device.
- */
-
- if (nbytes == -EFBIG)
- {
- dd->eof = true; /* Set end-of-file */
- }
- else
- {
- FAR struct nsh_vtbl_s *vtbl = dd->vtbl;
- nsh_output(vtbl, g_fmtcmdfailed, g_dd, "bshlib_write", NSH_ERRNO_OF(-nbytes));
- return ERROR;
- }
- }
-
- return OK;
-}
-#endif
-
-/****************************************************************************
- * Name: dd_writech
- ****************************************************************************/
-
-static int dd_writech(struct dd_s *dd)
-{
- uint8_t *buffer = dd->buffer;
- uint16_t written ;
- ssize_t nbytes;
-
- /* Is the out buffer full (or is this the last one)? */
-
- written = 0;
- do
- {
- nbytes = write(DD_OUTFD, buffer, dd->sectsize - written);
- if (nbytes < 0)
- {
- FAR struct nsh_vtbl_s *vtbl = dd->vtbl;
- nsh_output(vtbl, g_fmtcmdfailed, g_dd, "write", NSH_ERRNO_OF(-nbytes));
- return ERROR;
- }
-
- written += nbytes;
- buffer += nbytes;
- }
- while (written < dd->sectsize);
-
- return OK;
-}
-
-/****************************************************************************
- * Name: dd_readblk
- ****************************************************************************/
-
-#ifndef CONFIG_DISABLE_MOUNTPOINT
-static int dd_readblk(struct dd_s *dd)
-{
- ssize_t nbytes;
- off_t offset = dd->sector * dd->sectsize;
-
- nbytes = bchlib_read(DD_INHANDLE, (char*)dd->buffer, offset, dd->sectsize);
- if (nbytes < 0)
- {
- FAR struct nsh_vtbl_s *vtbl = dd->vtbl;
- nsh_output(vtbl, g_fmtcmdfailed, g_dd, "bshlib_read", NSH_ERRNO_OF(-nbytes));
- return ERROR;
- }
-
- /* bchlib_read return 0 on attempts to write past the end of the device. */
-
- dd->nbytes = nbytes;
- dd->eof = (nbytes == 0);
- return OK;
-}
-#endif
-
-/****************************************************************************
- * Name: dd_readch
- ****************************************************************************/
-
-static int dd_readch(struct dd_s *dd)
-{
- uint8_t *buffer = dd->buffer;
- ssize_t nbytes;
-
- dd->nbytes = 0;
- do
- {
- nbytes = read(DD_INFD, buffer, dd->sectsize - dd->nbytes);
- if (nbytes < 0)
- {
- FAR struct nsh_vtbl_s *vtbl = dd->vtbl;
- nsh_output(vtbl, g_fmtcmdfailed, g_dd, "read", NSH_ERRNO_OF(-nbytes));
- return ERROR;
- }
-
- dd->nbytes += nbytes;
- buffer += nbytes;
- }
- while (dd->nbytes < dd->sectsize && nbytes > 0);
-
- dd->eof |= (dd->nbytes == 0);
- return OK;
-}
-
-/****************************************************************************
- * Name: dd_infopen
- ****************************************************************************/
-
-#ifndef CONFIG_DISABLE_MOUNTPOINT
-static int dd_filetype(const char *filename)
-{
- struct stat sb;
- int ret;
-
- /* Get the type of the file */
-
- ret = stat(filename, &sb);
- if (ret < 0)
- {
- return ERROR; /* Return -1 on failure */
- }
-
- return S_ISBLK(sb.st_mode); /* Return true(1) if block, false(0) if char */
-}
-#endif
-
-/****************************************************************************
- * Name: dd_infopen
- ****************************************************************************/
-
-#ifndef CONFIG_DISABLE_MOUNTPOINT
-static inline int dd_infopen(const char *name, struct dd_s *dd)
-{
- FAR struct nsh_vtbl_s *vtbl = dd->vtbl;
- int ret;
- int type;
-
- /* Get the type of the input file */
-
- type = dd_filetype(name);
- if (type < 0)
- {
- nsh_output(vtbl, g_fmtcmdfailed, g_dd, "stat", NSH_ERRNO_OF(-type));
- return type;
- }
-
- /* Open the input file */
-
- if (!type)
- {
- DD_INFD = open(name, O_RDONLY);
- if (DD_INFD < 0)
- {
- nsh_output(vtbl, g_fmtcmdfailed, g_dd, "open", NSH_ERRNO);
- return ERROR;
- }
-
- dd->infread = dd_readch; /* Character oriented read */
- dd->infclose = dd_infclosech;
- }
- else
- {
- ret = bchlib_setup(name, true, &DD_INHANDLE);
- if (ret < 0)
- {
- return ERROR;
- }
-
- dd->infread = dd_readblk;
- dd->infclose = dd_infcloseblk;
- }
- return OK;
-}
-#else
-static inline int dd_infopen(const char *name, struct dd_s *dd)
-{
- DD_INFD = open(name, O_RDONLY);
- if (DD_INFD < 0)
- {
- FAR struct nsh_vtbl_s *vtbl = dd->vtbl;
- nsh_output(vtbl, g_fmtcmdfailed, g_dd, "open", NSH_ERRNO);
- return ERROR;
- }
- return OK;
-}
-#endif
-
-/****************************************************************************
- * Name: dd_outfopen
- ****************************************************************************/
-
-#ifndef CONFIG_DISABLE_MOUNTPOINT
-static inline int dd_outfopen(const char *name, struct dd_s *dd)
-{
- int type;
- int ret = OK;
-
- /* Get the type of the output file */
-
- type = dd_filetype(name);
-
- /* Open the block driver for input */
-
- if (type == true)
- {
- ret = bchlib_setup(name, true, &DD_OUTHANDLE);
- if (ret < 0)
- {
- return ERROR;
- }
-
- dd->outfwrite = dd_writeblk; /* Block oriented write */
- dd->outfclose = dd_outfcloseblk;
- }
-
- /* Otherwise, the file is character oriented or does not exist */
-
- else
- {
- DD_OUTFD = open(name, O_WRONLY|O_CREAT|O_TRUNC, 0644);
- if (DD_OUTFD < 0)
- {
- FAR struct nsh_vtbl_s *vtbl = dd->vtbl;
- nsh_output(vtbl, g_fmtcmdfailed, g_dd, "open", NSH_ERRNO);
- return ERROR;
- }
-
- dd->outfwrite = dd_writech; /* Character oriented write */
- dd->outfclose = dd_outfclosech;
- }
- return OK;
-}
-#else
-static inline int dd_outfopen(const char *name, struct dd_s *dd)
-{
- DD_OUTFD = open(name, O_WRONLY|O_CREAT|O_TRUNC, 0644);
- if (DD_OUTFD < 0)
- {
- nsh_output(dd->vtbl, g_fmtcmdfailed, g_dd, "open", NSH_ERRNO);
- return ERROR;
- }
- return OK;
-}
-#endif
-
-/****************************************************************************
- * Public Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Name: cmd_dd
- ****************************************************************************/
-
-int cmd_dd(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
-{
- struct dd_s dd;
- char *infile = NULL;
- char *outfile = NULL;
- int ret = ERROR;
- int i;
-
- /* Initialize the dd structure */
-
- memset(&dd, 0, sizeof(struct dd_s));
- dd.vtbl = vtbl; /* For nsh_output */
- dd.sectsize = DEFAULT_SECTSIZE; /* Sector size if 'bs=' not provided */
- dd.nsectors = 0xffffffff; /* MAX_UINT32 */
-
- /* If no IF= option is provided on the command line, then read
- * from stdin.
- */
-
-#ifdef CAN_PIPE_FROM_STD
- DD_INFD = 0; /* stdin */
-#ifndef CONFIG_NSH_DISABLE_DD
- dd.infread = readch; /* Character oriented read */
- dd.infclose = noclose; /* Don't close stdin */
-#endif
-#endif
- /* If no OF= option is provided on the command line, then write
- * to stdout.
- */
-
-#ifdef CAN_PIPE_FROM_STD
- DD_OUTDF = 1; /* stdout */
-#ifndef CONFIG_NSH_DISABLE_DD
- dd.outfwrite = writech; /* Character oriented write */
- dd.outfclose = noclose; /* Don't close stdout */
-#endif
-#endif
-
- /* Parse command line parameters */
-
- for (i = 1; i < argc; i++)
- {
- if (strncmp(argv[i], "if=", 3) == 0)
- {
- infile = nsh_getfullpath(vtbl, &argv[i][3]);
- }
- else if (strncmp(argv[i], "of=", 3) == 0)
- {
- outfile = nsh_getfullpath(vtbl, &argv[i][3]);
- }
- else if (strncmp(argv[i], "bs=", 3) == 0)
- {
- dd.sectsize = atoi(&argv[i][3]);
- }
- else if (strncmp(argv[i], "count=", 6) == 0)
- {
- dd.nsectors = atoi(&argv[i][6]);
- }
- else if (strncmp(argv[i], "skip=", 5) == 0)
- {
- dd.skip = atoi(&argv[i][5]);
- }
- }
-
-#ifndef CAN_PIPE_FROM_STD
- if (!infile || !outfile)
- {
- nsh_output(vtbl, g_fmtargrequired, g_dd);
- goto errout_with_paths;
- }
-#endif
-
- if (dd.skip > dd.nsectors)
- {
- nsh_output(vtbl, g_fmtarginvalid, g_dd);
- goto errout_with_paths;
- }
-
- /* Allocate the I/O buffer */
-
- dd.buffer = malloc(dd.sectsize);
- if (!dd.buffer)
- {
- nsh_output(vtbl, g_fmtcmdoutofmemory, g_dd);
- goto errout_with_paths;
- }
-
- /* Open the input file */
-
- ret = dd_infopen(infile, &dd);
- if (ret < 0)
- {
- goto errout_with_paths;
- }
-
- /* Open the output file */
-
- ret = dd_outfopen(outfile, &dd);
- if (ret < 0)
- {
- goto errout_with_inf;
- }
-
- /* Then perform the data transfer */
-
- dd.sector = 0;
- while (!dd.eof && dd.nsectors > 0)
- {
- /* Read one sector from from the input */
-
- ret = DD_READ(&dd);
- if (ret < 0)
- {
- goto errout_with_outf;
- }
-
- /* Has the incoming data stream ended? */
-
- if (!dd.eof)
- {
- /* Pad with zero if necessary (at the end of file only) */
-
- for (i = dd.nbytes; i < dd.sectsize; i++)
- {
- dd.buffer[i] = 0;
- }
-
- /* Write one sector to the output file */
-
- if (dd.sector >= dd.skip)
- {
- ret = DD_WRITE(&dd);
- if (ret < 0)
- {
- goto errout_with_outf;
- }
-
- /* Decrement to show that a sector was written */
-
- dd.nsectors--;
- }
-
- /* Increment the sector number */
-
- dd.sector++;
- }
- }
- ret = OK;
-
-errout_with_outf:
- DD_INCLOSE(&dd);
-errout_with_inf:
- DD_OUTCLOSE(&dd);
- free(dd.buffer);
-errout_with_paths:
- if (infile)
- {
- free(infile);
- }
- if (outfile)
- {
- free(outfile);
- }
- return ret;
-}
-
-#endif /* CONFIG_NFILE_DESCRIPTORS && !CONFIG_NSH_DISABLE_DD */
-
diff --git a/apps/nshlib/nsh_envcmds.c b/apps/nshlib/nsh_envcmds.c
deleted file mode 100644
index 07b775517..000000000
--- a/apps/nshlib/nsh_envcmds.c
+++ /dev/null
@@ -1,338 +0,0 @@
-/****************************************************************************
- * apps/nshlib/nsh_envcmds.c
- *
- * Copyright (C) 2007-2009, 2011-2012 Gregory Nutt. All rights reserved.
- * Author: Gregory Nutt <gnutt@nuttx.org>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * 3. Neither the name NuttX nor the names of its contributors may be
- * used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- ****************************************************************************/
-
-/****************************************************************************
- * Included Files
- ****************************************************************************/
-
-#include <nuttx/config.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-#include <libgen.h>
-#include <errno.h>
-
-#include "nsh.h"
-#include "nsh_console.h"
-
-/****************************************************************************
- * Definitions
- ****************************************************************************/
-
-/****************************************************************************
- * Private Types
- ****************************************************************************/
-
-/****************************************************************************
- * Private Function Prototypes
- ****************************************************************************/
-
-/****************************************************************************
- * Private Data
- ****************************************************************************/
-
-#if CONFIG_NFILE_DESCRIPTORS > 0 && !defined(CONFIG_DISABLE_ENVIRON)
-static const char g_pwd[] = "PWD";
-static const char g_oldpwd[] = "OLDPWD";
-static const char g_home[] = CONFIG_LIB_HOMEDIR;
-#endif
-
-/****************************************************************************
- * Public Data
- ****************************************************************************/
-
-/****************************************************************************
- * Private Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Name: nsh_getwd
- ****************************************************************************/
-
-#if CONFIG_NFILE_DESCRIPTORS > 0 && !defined(CONFIG_DISABLE_ENVIRON)
-static inline FAR const char *nsh_getwd(const char *wd)
-{
- const char *val;
-
- /* If no working directory is defined, then default to the home directory */
-
- val = getenv(wd);
- if (!val)
- {
- val = g_home;
- }
- return val;
-}
-#endif
-
-/****************************************************************************
- * Name: nsh_getdirpath
- ****************************************************************************/
-
-static inline char *nsh_getdirpath(FAR struct nsh_vtbl_s *vtbl,
- const char *dirpath, const char *relpath)
-{
- char *alloc;
- int len;
-
- /* Handle the special case where the dirpath is simply "/" */
-
- if (strcmp(dirpath, "/") == 0)
- {
- len = strlen(relpath) + 2;
- alloc = (char*)malloc(len);
- if (alloc)
- {
- sprintf(alloc, "/%s", relpath);
- }
- }
- else
- {
- len = strlen(dirpath) + strlen(relpath) + 2;
- alloc = (char*)malloc(len);
- if (alloc)
- {
- sprintf(alloc, "%s/%s", dirpath, relpath);
- }
- }
-
- if (!alloc)
- {
- nsh_output(vtbl, g_fmtcmdoutofmemory, "nsh_getdirpath");
- }
- return alloc;
-}
-
-/****************************************************************************
- * Public Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Name: nsh_getwd
- ****************************************************************************/
-
-#if CONFIG_NFILE_DESCRIPTORS > 0 && !defined(CONFIG_DISABLE_ENVIRON)
-FAR const char *nsh_getcwd(void)
-{
- return nsh_getwd(g_pwd);
-}
-#endif
-
-/****************************************************************************
- * Name: nsh_getfullpath
- ****************************************************************************/
-
-#if CONFIG_NFILE_DESCRIPTORS > 0 && !defined(CONFIG_DISABLE_ENVIRON)
-char *nsh_getfullpath(FAR struct nsh_vtbl_s *vtbl, const char *relpath)
-{
- const char *wd;
-
- /* Handle some special cases */
-
- if (!relpath || relpath[0] == '\0')
- {
- /* No relative path provided */
-
- return strdup(g_home);
- }
- else if (relpath[0] == '/')
- {
- return strdup(relpath);
- }
-
- /* Get the path to the current working directory */
-
- wd = nsh_getcwd();
-
- /* Fake the '.' directory */
-
- if (strcmp(relpath, ".") == 0)
- {
- return strdup(wd);
- }
-
- /* Return the full path */
-
- return nsh_getdirpath(vtbl, wd, relpath);
-}
-#endif
-
-/****************************************************************************
- * Name: nsh_freefullpath
- ****************************************************************************/
-
-#if CONFIG_NFILE_DESCRIPTORS > 0 && !defined(CONFIG_DISABLE_ENVIRON)
-void nsh_freefullpath(char *relpath)
-{
- if (relpath)
- {
- free(relpath);
- }
-}
-#endif
-
-/****************************************************************************
- * Name: cmd_cd
- ****************************************************************************/
-
-#if CONFIG_NFILE_DESCRIPTORS > 0 && !defined(CONFIG_DISABLE_ENVIRON)
-#ifndef CONFIG_NSH_DISABLE_CD
-int cmd_cd(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
-{
- const char *path = argv[1];
- char *alloc = NULL;
- char *fullpath = NULL;
- int ret = OK;
-
- /* Check for special arguments */
-
- if (argc < 2 || strcmp(path, "~") == 0)
- {
- path = g_home;
- }
- else if (strcmp(path, "-") == 0)
- {
- alloc = strdup(nsh_getwd(g_oldpwd));
- path = alloc;
- }
- else if (strcmp(path, "..") == 0)
- {
- alloc = strdup(nsh_getcwd());
- path = dirname(alloc);
- }
- else
- {
- fullpath = nsh_getfullpath(vtbl, path);
- path = fullpath;
- }
-
- /* Set the new workding directory */
-
- ret = chdir(path);
- if (ret != 0)
- {
- nsh_output(vtbl, g_fmtcmdfailed, argv[0], "chdir", NSH_ERRNO);
- ret = ERROR;
- }
-
- /* Free any memory that was allocated */
-
- if (alloc)
- {
- free(alloc);
- }
-
- if (fullpath)
- {
- nsh_freefullpath(fullpath);
- }
- return ret;
-}
-#endif
-#endif
-
-/****************************************************************************
- * Name: cmd_echo
- ****************************************************************************/
-
-#ifndef CONFIG_NSH_DISABLE_ECHO
-int cmd_echo(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
-{
- int i;
-
- /* echo each argument, separated by a space as it must have been on the
- * command line
- */
-
- for (i = 1; i < argc; i++)
- {
- nsh_output(vtbl, "%s ", argv[i]);
- }
- nsh_output(vtbl, "\n");
- return OK;
-}
-#endif
-
-/****************************************************************************
- * Name: cmd_pwd
- ****************************************************************************/
-
-#if CONFIG_NFILE_DESCRIPTORS > 0 && !defined(CONFIG_DISABLE_ENVIRON)
-#ifndef CONFIG_NSH_DISABLE_PWD
-int cmd_pwd(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
-{
- nsh_output(vtbl, "%s\n", nsh_getcwd());
- return OK;
-}
-#endif
-#endif
-
-/****************************************************************************
- * 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)
-{
- int ret = setenv(argv[1], argv[2], TRUE);
- if (ret < 0)
- {
- nsh_output(vtbl, g_fmtcmdfailed, argv[0], "setenv", NSH_ERRNO);
- }
- return ret;
-}
-#endif
-#endif
-
-/****************************************************************************
- * Name: cmd_unset
- ****************************************************************************/
-
-#ifndef CONFIG_DISABLE_ENVIRON
-#ifndef CONFIG_NSH_DISABLE_UNSET
-int cmd_unset(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
-{
- int ret = unsetenv(argv[1]);
- if (ret < 0)
- {
- nsh_output(vtbl, g_fmtcmdfailed, argv[0], "unsetenv", NSH_ERRNO);
- }
- return ret;
-}
-#endif
-#endif
diff --git a/apps/nshlib/nsh_fileapps.c b/apps/nshlib/nsh_fileapps.c
deleted file mode 100644
index 9ff230f1a..000000000
--- a/apps/nshlib/nsh_fileapps.c
+++ /dev/null
@@ -1,314 +0,0 @@
-/****************************************************************************
- * apps/nshlib/nsh_fileapps.c
- *
- * Copyright (C) 2013 Gregory Nutt. All rights reserved.
- * Author: Gregory Nutt <gnutt@nuttx.org>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * 3. Neither the name NuttX nor the names of its contributors may be
- * used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- ****************************************************************************/
-
-/****************************************************************************
- * Included Files
- ****************************************************************************/
-
-#include <nuttx/config.h>
-
-#ifdef CONFIG_SCHED_WAITPID
-# include <sys/wait.h>
-#endif
-
-#include <stdbool.h>
-#include <spawn.h>
-#include <errno.h>
-#include <string.h>
-
-#include "nsh.h"
-#include "nsh_console.h"
-
-#ifdef CONFIG_NSH_FILE_APPS
-
-/****************************************************************************
- * Definitions
- ****************************************************************************/
-
-/****************************************************************************
- * Private Types
- ****************************************************************************/
-
-/****************************************************************************
- * Private Function Prototypes
- ****************************************************************************/
-
-/****************************************************************************
- * Private Data
- ****************************************************************************/
-
-/****************************************************************************
- * Public Data
- ****************************************************************************/
-
-/****************************************************************************
- * Private Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Public Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Name: nsh_fileapp
- *
- * Description:
- * Attempt to execute the application task whose name is 'cmd'
- *
- * Returned Value:
- * <0 If exec_builtin() fails, then the negated errno value
- * is returned.
- * -1 (ERROR) if the application task corresponding to 'cmd' could not
- * be started (possibly because it doesn not exist).
- * 0 (OK) if the application task corresponding to 'cmd' was
- * and successfully started. If CONFIG_SCHED_WAITPID is
- * defined, this return value also indicates that the
- * application returned successful status (EXIT_SUCCESS)
- * 1 If CONFIG_SCHED_WAITPID is defined, then this return value
- * indicates that the application task was spawned successfully
- * but returned failure exit status.
- *
- ****************************************************************************/
-
-int nsh_fileapp(FAR struct nsh_vtbl_s *vtbl, FAR const char *cmd,
- FAR char **argv, FAR const char *redirfile, int oflags)
-{
- posix_spawn_file_actions_t file_actions;
- posix_spawnattr_t attr;
- pid_t pid;
- int ret;
-
- /* Initialize the attributes file actions structure */
-
- ret = posix_spawn_file_actions_init(&file_actions);
- if (ret != 0)
- {
- /* posix_spawn_file_actions_init returns a positive errno value on
- * failure.
- */
-
- nsh_output(vtbl, g_fmtcmdfailed, cmd, "posix_spawn_file_actions_init",
- NSH_ERRNO_OF(ret));
- goto errout;
- }
-
- ret = posix_spawnattr_init(&attr);
- if (ret != 0)
- {
- /* posix_spawnattr_init returns a positive errno value on failure. */
-
- nsh_output(vtbl, g_fmtcmdfailed, cmd, "posix_spawnattr_init",
- NSH_ERRNO);
- goto errout_with_actions;
- }
-
- /* Handle re-direction of output */
-
- if (redirfile)
- {
- ret = posix_spawn_file_actions_addopen(&file_actions, 1, redirfile,
- oflags, 0644);
- if (ret != 0)
- {
- /* posix_spawn_file_actions_addopen returns a positive errno
- * value on failure.
- */
-
- nsh_output(vtbl, g_fmtcmdfailed, cmd,
- "posix_spawn_file_actions_addopen",
- NSH_ERRNO);
- goto errout_with_attrs;
- }
- }
-
- /* Lock the scheduler in an attempt to prevent the application from
- * running until waitpid() has been called.
- */
-
- sched_lock();
-
- /* Execute the program. posix_spawnp returns a positive errno value on
- * failure.
- */
-
- ret = posix_spawnp(&pid, cmd, &file_actions, &attr, &argv[1], NULL);
- if (ret == OK)
- {
- /* The application was successfully started with pre-emption disabled.
- * In the simplest cases, the application will not have run because the
- * the scheduler is locked. But in the case where I/O was redirected, a
- * proxy task ran and broke our lock. As result, the application may
- * have aso ran if its priority was higher than than the priority of
- * this thread.
- *
- * If the application did not run to completion and if the application
- * was not backgrounded, then we need to wait here for the application
- * to exit. This only works works with the following options:
- *
- * - CONFIG_NSH_DISABLEBG - Do not run commands in background
- * - CONFIG_SCHED_WAITPID - Required to run external commands in
- * foreground
- */
-
-#ifdef CONFIG_SCHED_WAITPID
-
- /* CONFIG_SCHED_WAITPID is selected, so we may run the command in
- * foreground unless we were specifically requested to run the command
- * in background (and running commands in background is enabled).
- */
-
-# ifndef CONFIG_NSH_DISABLEBG
- if (vtbl->np.np_bg == false)
-# endif /* CONFIG_NSH_DISABLEBG */
- {
- int rc = 0;
-
- /* Wait for the application to exit. We did lock the scheduler
- * above, but that does not guarantee that the application did not
- * already run to completion in the case where I/O was redirected.
- * Here the scheduler will be unlocked while waitpid is waiting
- * and if the application has not yet run, it will now be able to
- * do so.
- */
-
- ret = waitpid(pid, &rc, 0);
- if (ret < 0)
- {
- /* If the child thread does not exist, waitpid() will return
- * the error ECHLD. Since we know that the task was successfully
- * started, this must be one of the cases described above; we
- * have to assume that the task already exit'ed. In this case,
- * we have no idea if the application ran successfully or not
- * (because NuttX does not retain exit status of child tasks).
- * Let's assume that is did run successfully.
- */
-
- int errcode = errno;
- if (errcode == ECHILD)
- {
- ret = OK;
- }
- else
- {
- nsh_output(vtbl, g_fmtcmdfailed, cmd, "waitpid",
- NSH_ERRNO_OF(errcode));
- }
- }
-
- /* Waitpid completed the wait successfully */
-
- else
- {
- /* We can't return the exact status (nsh has nowhere to put it)
- * so just pass back zero/nonzero in a fashion that doesn't look
- * like an error.
- */
-
- ret = (rc == 0) ? OK : 1;
-
- /* TODO: Set the environment variable '?' to a string corresponding
- * to WEXITSTATUS(rc) so that $? will expand to the exit status of
- * the most recently executed task.
- */
- }
- }
-# ifndef CONFIG_NSH_DISABLEBG
- else
-# endif /* CONFIG_NSH_DISABLEBG */
-#endif /* CONFIG_SCHED_WAITPID */
-
- /* We get here if either:
- *
- * - CONFIG_SCHED_WAITPID is not selected meaning that all commands
- * have to be run in background, or
- * - CONFIG_SCHED_WAITPID and CONFIG_NSH_DISABLEBG are both selected, but the
- * user requested to run the command in background.
- *
- * NOTE that the case of a) CONFIG_SCHED_WAITPID is not selected and
- * b) CONFIG_NSH_DISABLEBG selected cannot be supported. In that event, all
- * commands will have to run in background. The waitpid() API must be
- * available to support running the command in foreground.
- */
-
-#if !defined(CONFIG_SCHED_WAITPID) || !defined(CONFIG_NSH_DISABLEBG)
- {
- struct sched_param param;
- sched_getparam(ret, &param);
- nsh_output(vtbl, "%s [%d:%d]\n", cmd, ret, param.sched_priority);
-
- /* Backgrounded commands always 'succeed' as long as we can start
- * them.
- */
-
- ret = OK;
- }
-#endif /* !CONFIG_SCHED_WAITPID || !CONFIG_NSH_DISABLEBG */
- }
-
- sched_unlock();
-
- /* Free attibutes and file actions. Ignoring return values in the case
- * of an error.
- */
-
-errout_with_actions:
- (void)posix_spawn_file_actions_destroy(&file_actions);
-
-errout_with_attrs:
- (void)posix_spawnattr_destroy(&attr);
-
-errout:
- /* Most posix_spawn interfaces return a positive errno value on failure
- * and do not set the errno variable.
- */
-
- if (ret > 0)
- {
- /* Set the errno value and return -1 */
-
- set_errno(ret);
- ret = ERROR;
- }
- else if (ret < 0)
- {
- /* Return -1 on failure. errno should have been set. */
-
- ret = ERROR;
- }
-
- return ret;
-}
-
-#endif /* CONFIG_NSH_FILE_APPS */
diff --git a/apps/nshlib/nsh_fscmds.c b/apps/nshlib/nsh_fscmds.c
deleted file mode 100644
index 83717e416..000000000
--- a/apps/nshlib/nsh_fscmds.c
+++ /dev/null
@@ -1,1315 +0,0 @@
-/****************************************************************************
- * apps/nshlib/nsh_fscmds.c
- *
- * Copyright (C) 2007-2009, 2011-2013 Gregory Nutt. All rights reserved.
- * Author: Gregory Nutt <gnutt@nuttx.org>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * 3. Neither the name NuttX nor the names of its contributors may be
- * used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- ****************************************************************************/
-
-/****************************************************************************
- * Included Files
- ****************************************************************************/
-
-#include <nuttx/config.h>
-
-#include <sys/types.h>
-#include <stdint.h>
-#include <stdbool.h>
-
-#if CONFIG_NFILE_DESCRIPTORS > 0
-# include <sys/stat.h>
-# include <fcntl.h>
-# if !defined(CONFIG_DISABLE_MOUNTPOINT)
-# ifdef CONFIG_FS_READABLE /* Need at least one filesytem in configuration */
-# include <sys/mount.h>
-# include <nuttx/ramdisk.h>
-# endif
-# ifdef CONFIG_FS_FAT
-# include <nuttx/fs/mkfatfs.h>
-# endif
-# ifdef CONFIG_NFS
-# include <sys/socket.h>
-# include <netinet/in.h>
-# include <nuttx/fs/nfs.h>
-# endif
-# ifdef CONFIG_RAMLOG_SYSLOG
-# include <nuttx/ramlog.h>
-# endif
-#endif
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-#include <dirent.h>
-#include <limits.h>
-#include <libgen.h>
-#include <errno.h>
-#include <debug.h>
-
-#include "nsh.h"
-#include "nsh_console.h"
-
-/****************************************************************************
- * Definitions
- ****************************************************************************/
-
-#define LSFLAGS_SIZE 1
-#define LSFLAGS_LONG 2
-#define LSFLAGS_RECURSIVE 4
-
-/****************************************************************************
- * Private Types
- ****************************************************************************/
-
-typedef int (*direntry_handler_t)(FAR struct nsh_vtbl_s *, const char *,
- struct dirent *, void *);
-
-/****************************************************************************
- * Private Function Prototypes
- ****************************************************************************/
-
-/****************************************************************************
- * Private Data
- ****************************************************************************/
-
-/* Common buffer for file I/O. Note the use of this common buffer precludes
- * multiple copies of NSH running concurrently. It should be allocated per
- * NSH instance and retained in the "vtbl" as is done for the telnet
- * connection.
- */
-
-static char g_iobuffer[IOBUFFERSIZE];
-
-/****************************************************************************
- * Public Data
- ****************************************************************************/
-
-/****************************************************************************
- * Private Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Name: trim_dir
- ****************************************************************************/
-
-static void trim_dir(char *arg)
-{
- /* Skip any trailing '/' characters (unless it is also the leading '/') */
-
- int len = strlen(arg) - 1;
- while (len > 0 && arg[len] == '/')
- {
- arg[len] = '\0';
- len--;
- }
-}
-
-/****************************************************************************
- * Name: nsh_getdirpath
- ****************************************************************************/
-
-static char *nsh_getdirpath(const char *path, const char *file)
-{
- /* Handle the case where all that is left is '/' */
-
- if (strcmp(path, "/") == 0)
- {
- sprintf(g_iobuffer, "/%s", file);
- }
- else
- {
- sprintf(g_iobuffer, "%s/%s", path, file);
- }
-
- g_iobuffer[PATH_MAX] = '\0';
- return strdup(g_iobuffer);
-}
-
-/****************************************************************************
- * Name: foreach_direntry
- ****************************************************************************/
-
-#if CONFIG_NFILE_DESCRIPTORS > 0
-static int foreach_direntry(FAR struct nsh_vtbl_s *vtbl, const char *cmd, const char *dirpath,
- direntry_handler_t handler, void *pvarg)
-{
- DIR *dirp;
- int ret = OK;
-
- /* Trim trailing '/' from directory names */
-
-#ifdef CONFIG_NSH_FULLPATH
- trim_dir(arg);
-#endif
-
- /* Open the directory */
-
- dirp = opendir(dirpath);
-
- if (!dirp)
- {
- /* Failed to open the directory */
-
- nsh_output(vtbl, g_fmtnosuch, cmd, "directory", dirpath);
- return ERROR;
- }
-
- /* Read each directory entry */
-
- for (;;)
- {
- struct dirent *entryp = readdir(dirp);
- if (!entryp)
- {
- /* Finished with this directory */
-
- break;
- }
-
- /* Call the handler with this directory entry */
-
- if (handler(vtbl, dirpath, entryp, pvarg) < 0)
- {
- /* The handler reported a problem */
-
- ret = ERROR;
- break;
- }
- }
-
- closedir(dirp);
- return ret;
-}
-#endif
-
-/****************************************************************************
- * Name: ls_specialdir
- ****************************************************************************/
-
-static inline int ls_specialdir(const char *dir)
-{
- /* '.' and '..' directories are not listed like normal directories */
-
- return (strcmp(dir, ".") == 0 || strcmp(dir, "..") == 0);
-}
-
-/****************************************************************************
- * Name: ls_handler
- ****************************************************************************/
-
-#if CONFIG_NFILE_DESCRIPTORS > 0
-static int ls_handler(FAR struct nsh_vtbl_s *vtbl, const char *dirpath, struct dirent *entryp, void *pvarg)
-{
- unsigned int lsflags = (unsigned int)pvarg;
- int ret;
-
- /* Check if any options will require that we stat the file */
-
- if ((lsflags & (LSFLAGS_SIZE|LSFLAGS_LONG)) != 0)
- {
- struct stat buf;
- char *fullpath = nsh_getdirpath(dirpath, entryp->d_name);
-
- /* Yes, stat the file */
-
- ret = stat(fullpath, &buf);
- free(fullpath);
- if (ret != 0)
- {
- nsh_output(vtbl, g_fmtcmdfailed, "ls", "stat", NSH_ERRNO);
- return ERROR;
- }
-
- if ((lsflags & LSFLAGS_LONG) != 0)
- {
- char details[] = "----------";
- if (S_ISDIR(buf.st_mode))
- {
- details[0]='d';
- }
- else if (S_ISCHR(buf.st_mode))
- {
- details[0]='c';
- }
- else if (S_ISBLK(buf.st_mode))
- {
- details[0]='b';
- }
-
- if ((buf.st_mode & S_IRUSR) != 0)
- {
- details[1]='r';
- }
-
- if ((buf.st_mode & S_IWUSR) != 0)
- {
- details[2]='w';
- }
-
- if ((buf.st_mode & S_IXUSR) != 0)
- {
- details[3]='x';
- }
-
- if ((buf.st_mode & S_IRGRP) != 0)
- {
- details[4]='r';
- }
-
- if ((buf.st_mode & S_IWGRP) != 0)
- {
- details[5]='w';
- }
-
- if ((buf.st_mode & S_IXGRP) != 0)
- {
- details[6]='x';
- }
-
- if ((buf.st_mode & S_IROTH) != 0)
- {
- details[7]='r';
- }
-
- if ((buf.st_mode & S_IWOTH) != 0)
- {
- details[8]='w';
- }
-
- if ((buf.st_mode & S_IXOTH) != 0)
- {
- details[9]='x';
- }
-
- nsh_output(vtbl, " %s", details);
- }
-
- if ((lsflags & LSFLAGS_SIZE) != 0)
- {
- nsh_output(vtbl, "%8d", buf.st_size);
- }
- }
-
- /* then provide the filename that is common to normal and verbose output */
-
-#ifdef CONFIG_NSH_FULLPATH
- nsh_output(vtbl, " %s/%s", arg, entryp->d_name);
-#else
- nsh_output(vtbl, " %s", entryp->d_name);
-#endif
-
- if (DIRENT_ISDIRECTORY(entryp->d_type) && !ls_specialdir(entryp->d_name))
- {
- nsh_output(vtbl, "/\n");
- }
- else
- {
- nsh_output(vtbl, "\n");
- }
- return OK;
-}
-#endif
-
-/****************************************************************************
- * Name: ls_recursive
- ****************************************************************************/
-
-#if CONFIG_NFILE_DESCRIPTORS > 0
-static int ls_recursive(FAR struct nsh_vtbl_s *vtbl, const char *dirpath,
- struct dirent *entryp, void *pvarg)
-{
- int ret = OK;
-
- /* Is this entry a directory (and not one of the special directories, . and ..)? */
-
- if (DIRENT_ISDIRECTORY(entryp->d_type) && !ls_specialdir(entryp->d_name))
- {
- /* Yes.. */
-
- char *newpath;
- newpath = nsh_getdirpath(dirpath, entryp->d_name);
-
- /* List the directory contents */
-
- nsh_output(vtbl, "%s:\n", newpath);
-
- /* Traverse the directory */
-
- ret = foreach_direntry(vtbl, "ls", newpath, ls_handler, pvarg);
- if (ret == 0)
- {
- /* Then recurse to list each directory within the directory */
-
- ret = foreach_direntry(vtbl, "ls", newpath, ls_recursive, pvarg);
- free(newpath);
- }
- }
- return ret;
-}
-#endif
-
-/****************************************************************************
- * Name: cat_common
- ****************************************************************************/
-
-#if CONFIG_NFILE_DESCRIPTORS > 0
-#ifndef CONFIG_NSH_DISABLE_CAT
-static int cat_common(FAR struct nsh_vtbl_s *vtbl, FAR const char *cmd,
- FAR const char *filename)
-{
- char buffer[IOBUFFERSIZE];
- int fd;
- int ret = OK;
-
- /* Open the file for reading */
-
- fd = open(filename, O_RDONLY);
- if (fd < 0)
- {
- nsh_output(vtbl, g_fmtcmdfailed, cmd, "open", NSH_ERRNO);
- return ERROR;
- }
-
- /* And just dump it byte for byte into stdout */
-
- for (;;)
- {
- int nbytesread = read(fd, buffer, IOBUFFERSIZE);
-
- /* Check for read errors */
-
- if (nbytesread < 0)
- {
- int errval = errno;
-
- /* EINTR is not an error (but will stop stop the cat) */
-
-#ifndef CONFIG_DISABLE_SIGNALS
- if (errval == EINTR)
- {
- nsh_output(vtbl, g_fmtsignalrecvd, cmd);
- }
- else
-#endif
- {
- nsh_output(vtbl, g_fmtcmdfailed, cmd, "read", NSH_ERRNO_OF(errval));
- }
-
- ret = ERROR;
- break;
- }
-
- /* Check for data successfully read */
-
- else if (nbytesread > 0)
- {
- int nbyteswritten = 0;
-
- while (nbyteswritten < nbytesread)
- {
- ssize_t n = nsh_write(vtbl, buffer, nbytesread);
- if (n < 0)
- {
- int errval = errno;
-
- /* EINTR is not an error (but will stop stop the cat) */
-
- #ifndef CONFIG_DISABLE_SIGNALS
- if (errval == EINTR)
- {
- nsh_output(vtbl, g_fmtsignalrecvd, cmd);
- }
- else
-#endif
- {
- nsh_output(vtbl, g_fmtcmdfailed, cmd, "write", NSH_ERRNO);
- }
-
- ret = ERROR;
- break;
- }
- else
- {
- nbyteswritten += n;
- }
- }
- }
-
- /* Otherwise, it is the end of file */
-
- else
- {
- break;
- }
- }
-
- (void)close(fd);
- return ret;
-}
-#endif
-#endif
-
-/****************************************************************************
- * Public Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Name: cmd_cat
- ****************************************************************************/
-
-#if CONFIG_NFILE_DESCRIPTORS > 0
-#ifndef CONFIG_NSH_DISABLE_CAT
-int cmd_cat(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
-{
- char *fullpath;
- int i;
- int ret = OK;
-
- /* Loop for each file name on the command line */
-
- for (i = 1; i < argc && ret == OK; i++)
- {
- /* Get the fullpath to the file */
-
- fullpath = nsh_getfullpath(vtbl, argv[i]);
- if (!fullpath)
- {
- ret = ERROR;
- }
- else
- {
- /* Dump the file to the console */
-
- ret = cat_common(vtbl, argv[0], fullpath);
-
- /* Free the allocated full path */
-
- nsh_freefullpath(fullpath);
- }
- }
-
- return ret;
-}
-#endif
-#endif
-
-/****************************************************************************
- * Name: cmd_dmesg
- ****************************************************************************/
-
-#if CONFIG_NFILE_DESCRIPTORS > 0 && defined(CONFIG_SYSLOG) && \
- defined(CONFIG_RAMLOG_SYSLOG) && !defined(CONFIG_NSH_DISABLE_DMESG)
-int cmd_dmesg(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
-{
- return cat_common(vtbl, argv[0], CONFIG_SYSLOG_DEVPATH);
-}
-#endif
-
-/****************************************************************************
- * Name: cmd_cp
- ****************************************************************************/
-
-#if CONFIG_NFILE_DESCRIPTORS > 0
-#ifndef CONFIG_NSH_DISABLE_CP
-int cmd_cp(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
-{
- struct stat buf;
- char *srcpath = NULL;
- char *destpath = NULL;
- char *allocpath = NULL;
- int oflags = O_WRONLY|O_CREAT|O_TRUNC;
- int rdfd;
- int wrfd;
- int ret = ERROR;
-
- /* Get the full path to the source file */
-
- srcpath = nsh_getfullpath(vtbl, argv[1]);
- if (!srcpath)
- {
- goto errout;
- }
-
- /* Open the source file for reading */
-
- rdfd = open(srcpath, O_RDONLY);
- if (rdfd < 0)
- {
- nsh_output(vtbl, g_fmtcmdfailed, argv[0], "open", NSH_ERRNO);
- goto errout_with_srcpath;
- }
-
- /* Get the full path to the destination file or directory */
-
- destpath = nsh_getfullpath(vtbl, argv[2]);
- if (!destpath)
- {
- goto errout_with_rdfd;
- }
-
- /* Check if the destination is a directory */
-
- ret = stat(destpath, &buf);
- if (ret == 0)
- {
- /* Something exists here... is it a directory? */
-
- if (S_ISDIR(buf.st_mode))
- {
- /* Yes, it is a directory. Remove any trailing '/' characters from the path */
-
- trim_dir(argv[2]);
-
- /* Construct the full path to the new file */
-
- allocpath = nsh_getdirpath(argv[2], basename(argv[1]) );
- if (!allocpath)
- {
- nsh_output(vtbl, g_fmtcmdoutofmemory, argv[0]);
- goto errout_with_destpath;
- }
-
- /* Open then dest for writing */
-
- nsh_freefullpath(destpath);
- destpath = allocpath;
- }
- else if (!S_ISREG(buf.st_mode))
- {
- /* Maybe it is a driver? */
-
- oflags = O_WRONLY;
- }
- }
-
- /* Now open the destination */
-
- wrfd = open(destpath, oflags, 0666);
- if (wrfd < 0)
- {
- nsh_output(vtbl, g_fmtcmdfailed, argv[0], "open", NSH_ERRNO);
- goto errout_with_allocpath;
- }
-
- /* Now copy the file */
-
- for (;;)
- {
- int nbytesread;
- int nbyteswritten;
-
- do
- {
- nbytesread = read(rdfd, g_iobuffer, IOBUFFERSIZE);
- if (nbytesread == 0)
- {
- /* End of file */
-
- ret = OK;
- goto errout_with_wrfd;
- }
- else if (nbytesread < 0)
- {
- /* EINTR is not an error (but will still stop the copy) */
-
-#ifndef CONFIG_DISABLE_SIGNALS
- if (errno == EINTR)
- {
- nsh_output(vtbl, g_fmtsignalrecvd, argv[0]);
- }
- else
-#endif
- {
- /* Read error */
-
- nsh_output(vtbl, g_fmtcmdfailed, argv[0], "read", NSH_ERRNO);
- }
- goto errout_with_wrfd;
- }
- }
- while (nbytesread <= 0);
-
- do
- {
- nbyteswritten = write(wrfd, g_iobuffer, nbytesread);
- if (nbyteswritten >= 0)
- {
- nbytesread -= nbyteswritten;
- }
- else
- {
- /* EINTR is not an error (but will still stop the copy) */
-
-#ifndef CONFIG_DISABLE_SIGNALS
- if (errno == EINTR)
- {
- nsh_output(vtbl, g_fmtsignalrecvd, argv[0]);
- }
- else
-#endif
- {
- /* Read error */
-
- nsh_output(vtbl, g_fmtcmdfailed, argv[0], "write", NSH_ERRNO);
- }
- goto errout_with_wrfd;
- }
- }
- while (nbytesread > 0);
- }
-
-errout_with_wrfd:
- close(wrfd);
-
-errout_with_allocpath:
- if (allocpath)
- {
- free(allocpath);
- }
-
-errout_with_destpath:
- if (destpath && !allocpath)
- {
- nsh_freefullpath(destpath);
- }
-
-errout_with_rdfd:
- close(rdfd);
-
-errout_with_srcpath:
- if (srcpath)
- {
- nsh_freefullpath(srcpath);
- }
-errout:
- return ret;
-}
-#endif
-#endif
-
-/****************************************************************************
- * Name: cmd_losetup
- ****************************************************************************/
-
-#if CONFIG_NFILE_DESCRIPTORS > 0 && !defined(CONFIG_DISABLE_MOUNTPOINT)
-#ifndef CONFIG_NSH_DISABLE_LOSETUP
-int cmd_losetup(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
-{
- char *loopdev = NULL;
- char *filepath = NULL;
- bool teardown = false;
- bool readonly = false;
- off_t offset = 0;
- bool badarg = false;
- int ret = ERROR;
- int option;
-
- /* Get the losetup options: Two forms are supported:
- *
- * losetup -d <loop-device>
- * losetup [-o <offset>] [-r] <loop-device> <filename>
- *
- * NOTE that the -o and -r options are accepted with the -d option, but
- * will be ignored.
- */
-
- while ((option = getopt(argc, argv, "d:o:r")) != ERROR)
- {
- switch (option)
- {
- case 'd':
- loopdev = nsh_getfullpath(vtbl, optarg);
- teardown = true;
- break;
-
- case 'o':
- offset = atoi(optarg);
- break;
-
- case 'r':
- readonly = true;
- break;
-
- case '?':
- default:
- nsh_output(vtbl, g_fmtarginvalid, argv[0]);
- badarg = true;
- break;
- }
- }
-
- /* If a bad argument was encountered, then return without processing the command */
-
- if (badarg)
- {
- goto errout_with_paths;
- }
-
- /* If this is not a tear down operation, then additional command line
- * parameters are required.
- */
-
- if (!teardown)
- {
- /* There must be two arguments on the command line after the options */
-
- if (optind + 1 < argc)
- {
- loopdev = nsh_getfullpath(vtbl, argv[optind]);
- optind++;
-
- filepath = nsh_getfullpath(vtbl, argv[optind]);
- optind++;
- }
- else
- {
- nsh_output(vtbl, g_fmtargrequired, argv[0]);
- goto errout_with_paths;
- }
- }
-
- /* There should be nothing else on the command line */
-
- if (optind < argc)
- {
- nsh_output(vtbl, g_fmttoomanyargs, argv[0]);
- goto errout_with_paths;
- }
-
- /* Perform the teardown operation */
-
- if (teardown)
- {
- /* Tear down the loop device. */
-
- ret = loteardown(loopdev);
- if (ret < 0)
- {
- nsh_output(vtbl, g_fmtcmdfailed, argv[0], "loteardown", NSH_ERRNO_OF(-ret));
- goto errout_with_paths;
- }
- }
- else
- {
- /* Set up the loop device */
-
- ret = losetup(loopdev, filepath, 512, offset, readonly);
- if (ret < 0)
- {
- nsh_output(vtbl, g_fmtcmdfailed, argv[0], "losetup", NSH_ERRNO_OF(-ret));
- goto errout_with_paths;
- }
- }
-
- /* Free memory */
-
-errout_with_paths:
- if (loopdev)
- {
- free(loopdev);
- }
-
- if (filepath)
- {
- free(filepath);
- }
- return ret;
-}
-#endif
-#endif
-
-/****************************************************************************
- * Name: cmd_ls
- ****************************************************************************/
-
-#if CONFIG_NFILE_DESCRIPTORS > 0
-#ifndef CONFIG_NSH_DISABLE_LS
-int cmd_ls(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
-{
- const char *relpath;
- unsigned int lsflags = 0;
- char *fullpath;
- bool badarg = false;
- int ret;
-
- /* Get the ls options */
-
- int option;
- while ((option = getopt(argc, argv, "lRs")) != ERROR)
- {
- switch (option)
- {
- case 'l':
- lsflags |= (LSFLAGS_SIZE|LSFLAGS_LONG);
- break;
-
- case 'R':
- lsflags |= LSFLAGS_RECURSIVE;
- break;
-
- case 's':
- lsflags |= LSFLAGS_SIZE;
- break;
-
- case '?':
- default:
- nsh_output(vtbl, g_fmtarginvalid, argv[0]);
- badarg = true;
- break;
- }
- }
-
- /* If a bad argument was encountered, then return without processing the command */
-
- if (badarg)
- {
- return ERROR;
- }
-
- /* There may be one argument after the options */
-
- if (optind + 1 < argc)
- {
- nsh_output(vtbl, g_fmttoomanyargs, argv[0]);
- return ERROR;
- }
- else if (optind >= argc)
- {
-#ifndef CONFIG_DISABLE_ENVIRON
- relpath = nsh_getcwd();
-#else
- nsh_output(vtbl, g_fmtargrequired, argv[0]);
- return ERROR;
-#endif
- }
- else
- {
- relpath = argv[optind];
- }
-
- /* Get the fullpath to the directory */
-
- fullpath = nsh_getfullpath(vtbl, relpath);
- if (!fullpath)
- {
- return ERROR;
- }
-
- /* List the directory contents */
-
- nsh_output(vtbl, "%s:\n", fullpath);
- ret = foreach_direntry(vtbl, "ls", fullpath, ls_handler, (void*)lsflags);
- if (ret == OK && (lsflags & LSFLAGS_RECURSIVE) != 0)
- {
- /* Then recurse to list each directory within the directory */
-
- ret = foreach_direntry(vtbl, "ls", fullpath, ls_recursive, (void*)lsflags);
- }
- nsh_freefullpath(fullpath);
- return ret;
-}
-#endif
-#endif
-
-/****************************************************************************
- * Name: cmd_mkdir
- ****************************************************************************/
-
-#if !defined(CONFIG_DISABLE_MOUNTPOINT) && CONFIG_NFILE_DESCRIPTORS > 0 && defined(CONFIG_FS_WRITABLE)
-#ifndef CONFIG_NSH_DISABLE_MKDIR
-int cmd_mkdir(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
-{
- char *fullpath = nsh_getfullpath(vtbl, argv[1]);
- int ret = ERROR;
-
- if (fullpath)
- {
- ret = mkdir(fullpath, 0777);
- if (ret < 0)
- {
- nsh_output(vtbl, g_fmtcmdfailed, argv[0], "mkdir", NSH_ERRNO);
- }
- nsh_freefullpath(fullpath);
- }
- return ret;
-}
-#endif
-#endif
-
-/****************************************************************************
- * Name: cmd_mkfatfs
- ****************************************************************************/
-
-#if !defined(CONFIG_DISABLE_MOUNTPOINT) && CONFIG_NFILE_DESCRIPTORS > 0 && defined(CONFIG_FS_FAT)
-#ifndef CONFIG_NSH_DISABLE_MKFATFS
-int cmd_mkfatfs(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
-{
- struct fat_format_s fmt = FAT_FORMAT_INITIALIZER;
- char *fullpath = nsh_getfullpath(vtbl, argv[1]);
- int ret = ERROR;
-
- if (fullpath)
- {
- ret = mkfatfs(fullpath, &fmt);
- if (ret < 0)
- {
- nsh_output(vtbl, g_fmtcmdfailed, argv[0], "mkfatfs", NSH_ERRNO);
- }
- nsh_freefullpath(fullpath);
- }
- return ret;
-}
-#endif
-#endif
-
-/****************************************************************************
- * Name: cmd_mkfifo
- ****************************************************************************/
-
-#if CONFIG_NFILE_DESCRIPTORS > 0
-#ifndef CONFIG_NSH_DISABLE_MKFIFO
-int cmd_mkfifo(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
-{
- char *fullpath = nsh_getfullpath(vtbl, argv[1]);
- int ret = ERROR;
-
- if (fullpath)
- {
- ret = mkfifo(fullpath, 0777);
- if (ret < 0)
- {
- nsh_output(vtbl, g_fmtcmdfailed, argv[0], "mkfifo", NSH_ERRNO);
- }
- nsh_freefullpath(fullpath);
- }
- return ret;
-}
-#endif
-#endif
-
-/****************************************************************************
- * Name: cmd_mkrd
- ****************************************************************************/
-
-#if !defined(CONFIG_DISABLE_MOUNTPOINT) && CONFIG_NFILE_DESCRIPTORS > 0 && defined(CONFIG_FS_WRITABLE)
-#ifndef CONFIG_NSH_DISABLE_MKRD
-int cmd_mkrd(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
-{
- const char *fmt;
- uint8_t *buffer;
- uint32_t nsectors;
- bool badarg = false;
- int sectsize = 512;
- int minor = 0;
- int ret;
-
- /* Get the mkrd options */
-
- int option;
- while ((option = getopt(argc, argv, ":m:s:")) != ERROR)
- {
- switch (option)
- {
- case 'm':
- minor = atoi(optarg);
- if (minor < 0 || minor > 255)
- {
- nsh_output(vtbl, g_fmtargrange, argv[0]);
- badarg = true;
- }
- break;
-
- case 's':
- sectsize = atoi(optarg);
- if (minor < 0 || minor > 16384)
- {
- nsh_output(vtbl, g_fmtargrange, argv[0]);
- badarg = true;
- }
- break;
-
- case ':':
- nsh_output(vtbl, g_fmtargrequired, argv[0]);
- badarg = true;
- break;
-
- case '?':
- default:
- nsh_output(vtbl, g_fmtarginvalid, argv[0]);
- badarg = true;
- break;
- }
- }
-
- /* If a bad argument was encountered, then return without processing the command */
-
- if (badarg)
- {
- return ERROR;
- }
-
- /* There should be exactly on parameter left on the command-line */
-
- if (optind == argc-1)
- {
- nsectors = (uint32_t)atoi(argv[optind]);
- }
- else if (optind >= argc)
- {
- fmt = g_fmttoomanyargs;
- goto errout_with_fmt;
- }
- else
- {
- fmt = g_fmtargrequired;
- goto errout_with_fmt;
- }
-
- /* Allocate the memory backing up the ramdisk */
-
- buffer = (uint8_t*)malloc(sectsize * nsectors);
- if (!buffer)
- {
- fmt = g_fmtcmdoutofmemory;
- goto errout_with_fmt;
- }
-
-#ifdef CONFIG_DEBUG_VERBOSE
- memset(buffer, 0, sectsize * nsectors);
-#endif
- dbg("RAMDISK at %p\n", buffer);
-
- /* Then register the ramdisk */
-
- ret = ramdisk_register(minor, buffer, nsectors, sectsize, true);
- if (ret < 0)
- {
- nsh_output(vtbl, g_fmtcmdfailed, argv[0], "ramdisk_register", NSH_ERRNO_OF(-ret));
- free(buffer);
- return ERROR;
- }
- return ret;
-
-errout_with_fmt:
- nsh_output(vtbl, fmt, argv[0]);
- return ERROR;
-}
-#endif
-#endif
-
-/****************************************************************************
- * Name: cmd_mv
- ****************************************************************************/
-
-#if !defined(CONFIG_DISABLE_MOUNTPOINT) && CONFIG_NFILE_DESCRIPTORS > 0 && defined(CONFIG_FS_WRITABLE)
-#ifndef CONFIG_NSH_DISABLE_MV
-int cmd_mv(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
-{
- char *oldpath;
- char *newpath;
- int ret;
-
- /* Get the full path to the old and new file paths */
-
- oldpath = nsh_getfullpath(vtbl, argv[1]);
- if (!oldpath)
- {
- return ERROR;
- }
-
- newpath = nsh_getfullpath(vtbl, argv[2]);
- if (!newpath)
- {
- nsh_freefullpath(newpath);
- return ERROR;
- }
-
- /* Perform the mount */
-
- ret = rename(oldpath, newpath);
- if (ret < 0)
- {
- nsh_output(vtbl, g_fmtcmdfailed, argv[0], "rename", NSH_ERRNO);
- }
-
- /* Free the file paths */
-
- nsh_freefullpath(oldpath);
- nsh_freefullpath(newpath);
- return ret;
-}
-#endif
-#endif
-
-/****************************************************************************
- * Name: cmd_rm
- ****************************************************************************/
-
-#if !defined(CONFIG_DISABLE_MOUNTPOINT) && CONFIG_NFILE_DESCRIPTORS > 0 && defined(CONFIG_FS_WRITABLE)
-#ifndef CONFIG_NSH_DISABLE_RM
-int cmd_rm(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
-{
- char *fullpath = nsh_getfullpath(vtbl, argv[1]);
- int ret = ERROR;
-
- if (fullpath)
- {
- ret = unlink(fullpath);
- if (ret < 0)
- {
- nsh_output(vtbl, g_fmtcmdfailed, argv[0], "unlink", NSH_ERRNO);
- }
- nsh_freefullpath(fullpath);
- }
- return ret;
-}
-#endif
-#endif
-
-/****************************************************************************
- * Name: cmd_rmdir
- ****************************************************************************/
-
-#if !defined(CONFIG_DISABLE_MOUNTPOINT) && CONFIG_NFILE_DESCRIPTORS > 0 && defined(CONFIG_FS_WRITABLE)
-#ifndef CONFIG_NSH_DISABLE_RMDIR
-int cmd_rmdir(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
-{
- char *fullpath = nsh_getfullpath(vtbl, argv[1]);
- int ret = ERROR;
-
- if (fullpath)
- {
- ret = rmdir(fullpath);
- if (ret < 0)
- {
- nsh_output(vtbl, g_fmtcmdfailed, argv[0], "rmdir", NSH_ERRNO);
- }
- nsh_freefullpath(fullpath);
- }
- return ret;
-}
-#endif
-#endif
-
-/****************************************************************************
- * Name: cmd_sh
- ****************************************************************************/
-
-#if CONFIG_NFILE_DESCRIPTORS > 0 && CONFIG_NFILE_STREAMS > 0 && !defined(CONFIG_NSH_DISABLESCRIPT)
-#ifndef CONFIG_NSH_DISABLE_SH
-int cmd_sh(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
-{
- return nsh_script(vtbl, argv[0], argv[1]);
-}
-#endif
-#endif
-
-
-#if CONFIG_NFILE_DESCRIPTORS > 0
-#ifndef CONFIG_NSH_DISABLE_CMP
-int cmd_cmp(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
-{
- char *path1 = NULL;
- char *path2 = NULL;
- int fd1 = -1, fd2 = -1;
- int ret = ERROR;
- unsigned total_read = 0;
-
- /* Get the full path to the two files */
-
- path1 = nsh_getfullpath(vtbl, argv[1]);
- if (!path1)
- {
- goto errout;
- }
-
- path2 = nsh_getfullpath(vtbl, argv[2]);
- if (!path2)
- {
- goto errout;
- }
-
- /* Open the files for reading */
- fd1 = open(path1, O_RDONLY);
- if (fd1 < 0)
- {
- nsh_output(vtbl, g_fmtcmdfailed, argv[0], "open", NSH_ERRNO);
- goto errout;
- }
-
- fd2 = open(path2, O_RDONLY);
- if (fd2 < 0)
- {
- nsh_output(vtbl, g_fmtcmdfailed, argv[0], "open", NSH_ERRNO);
- goto errout;
- }
-
- for (;;)
- {
- char buf1[128];
- char buf2[128];
-
- int nbytesread1 = read(fd1, buf1, sizeof(buf1));
- int nbytesread2 = read(fd2, buf2, sizeof(buf2));
-
- if (nbytesread1 < 0)
- {
- nsh_output(vtbl, g_fmtcmdfailed, argv[0], "read", NSH_ERRNO);
- goto errout;
- }
-
- if (nbytesread2 < 0)
- {
- nsh_output(vtbl, g_fmtcmdfailed, argv[0], "read", NSH_ERRNO);
- goto errout;
- }
-
- total_read += nbytesread1>nbytesread2?nbytesread2:nbytesread1;
-
- if (nbytesread1 != nbytesread2 || memcmp(buf1, buf2, nbytesread1) != 0)
- {
- nsh_output(vtbl, "files differ: byte %u\n", total_read);
- goto errout;
- }
-
- if (nbytesread1 < sizeof(buf1)) break;
- }
-
- ret = OK;
-
-errout:
- if (fd1 != -1) close(fd1);
- if (fd2 != -1) close(fd2);
- return ret;
-}
-#endif
-#endif
diff --git a/apps/nshlib/nsh_init.c b/apps/nshlib/nsh_init.c
deleted file mode 100644
index 7c7e78ea1..000000000
--- a/apps/nshlib/nsh_init.c
+++ /dev/null
@@ -1,102 +0,0 @@
-/****************************************************************************
- * apps/nshlib/nsh_init.c
- *
- * Copyright (C) 2007-2012 Gregory Nutt. All rights reserved.
- * Author: Gregory Nutt <gnutt@nuttx.org>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * 3. Neither the name NuttX nor the names of its contributors may be
- * used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- ****************************************************************************/
-
-/****************************************************************************
- * Included Files
- ****************************************************************************/
-
-#include <nuttx/config.h>
-
-#include "nsh.h"
-
-/****************************************************************************
- * Definitions
- ****************************************************************************/
-
-/****************************************************************************
- * Private Types
- ****************************************************************************/
-
-/****************************************************************************
- * Private Function Prototypes
- ****************************************************************************/
-
-/****************************************************************************
- * Private Data
- ****************************************************************************/
-
-/****************************************************************************
- * Public Data
- ****************************************************************************/
-
-/****************************************************************************
- * Private Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Public Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Name: nsh_initialize
- *
- * Description:
- * This nterfaces is used to initialize the NuttShell (NSH).
- * nsh_initialize() should be called one during application start-up prior
- * to executing either nsh_consolemain() or nsh_telnetstart().
- *
- * Input Parameters:
- * None
- *
- * Returned Value:
- * None
- *
- ****************************************************************************/
-
-void nsh_initialize(void)
-{
- /* Mount the /etc filesystem */
-
- (void)nsh_romfsetc();
-
- /* Perform architecture-specific initialization (if available) */
-
- (void)nsh_archinitialize();
-
- /* Bring up the network */
-
- (void)nsh_netinit();
-}
-
diff --git a/apps/nshlib/nsh_mmcmds.c b/apps/nshlib/nsh_mmcmds.c
deleted file mode 100644
index 545ae60ad..000000000
--- a/apps/nshlib/nsh_mmcmds.c
+++ /dev/null
@@ -1,96 +0,0 @@
-/****************************************************************************
- * apps/nshlib/nsh_mmcmds.c
- *
- * Copyright (C) 2011-2012 Gregory Nutt. All rights reserved.
- * Author: Gregory Nutt <gnutt@nuttx.org>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * 3. Neither the name NuttX nor the names of its contributors may be
- * used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- ****************************************************************************/
-
-/****************************************************************************
- * Included Files
- ****************************************************************************/
-
-#include <nuttx/config.h>
-
-#include <stdlib.h>
-
-#include "nsh.h"
-#include "nsh_console.h"
-
-/****************************************************************************
- * Definitions
- ****************************************************************************/
-
-/****************************************************************************
- * Private Types
- ****************************************************************************/
-
-/****************************************************************************
- * Private Function Prototypes
- ****************************************************************************/
-
-/****************************************************************************
- * Private Data
- ****************************************************************************/
-
-/****************************************************************************
- * Public Data
- ****************************************************************************/
-
-/****************************************************************************
- * Private Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Public Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Name: cmd_free
- ****************************************************************************/
-
-#ifndef CONFIG_NSH_DISABLE_FREE
-int cmd_free(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
-{
- struct mallinfo mem;
-
-#ifdef CONFIG_CAN_PASS_STRUCTS
- mem = mallinfo();
-#else
- (void)mallinfo(&mem);
-#endif
-
- nsh_output(vtbl, " total used free largest\n");
- nsh_output(vtbl, "Mem: %11d%11d%11d%11d\n",
- mem.arena, mem.uordblks, mem.fordblks, mem.mxordblk);
-
- return OK;
-}
-#endif /* !CONFIG_NSH_DISABLE_FREE */
diff --git a/apps/nshlib/nsh_mntcmds.c b/apps/nshlib/nsh_mntcmds.c
deleted file mode 100644
index f8e3a142a..000000000
--- a/apps/nshlib/nsh_mntcmds.c
+++ /dev/null
@@ -1,467 +0,0 @@
-/****************************************************************************
- * apps/nshlib/nsh_mntcmds.c
- *
- * Copyright (C) 2007-2009, 2011-2012 Gregory Nutt. All rights reserved.
- * Author: Gregory Nutt <gnutt@nuttx.org>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * 3. Neither the name NuttX nor the names of its contributors may be
- * used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- ****************************************************************************/
-
-/****************************************************************************
- * Included Files
- ****************************************************************************/
-
-#include <nuttx/config.h>
-
-#include <sys/types.h>
-#include <sys/mount.h>
-#include <sys/statfs.h>
-
-#include <stdint.h>
-#include <stdbool.h>
-#include <string.h>
-#include <unistd.h>
-#include <errno.h>
-#include <debug.h>
-
-#include <nuttx/fs/nfs.h>
-
-#include "nsh.h"
-#include "nsh_console.h"
-
-/****************************************************************************
- * Definitions
- ****************************************************************************/
-
-/****************************************************************************
- * Private Types
- ****************************************************************************/
-
-/****************************************************************************
- * Private Function Prototypes
- ****************************************************************************/
-
-/****************************************************************************
- * Private Data
- ****************************************************************************/
-
-/****************************************************************************
- * Public Data
- ****************************************************************************/
-
-/****************************************************************************
- * Private Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Name: df_handler
- ****************************************************************************/
-
-#if CONFIG_NFILE_DESCRIPTORS > 0 && !defined(CONFIG_DISABLE_MOUNTPOINT) && \
- defined(CONFIG_FS_READABLE) && !defined(CONFIG_NSH_DISABLE_MOUNT)
-static int df_handler(FAR const char *mountpoint,
- FAR struct statfs *statbuf, FAR void *arg)
-{
- FAR struct nsh_vtbl_s *vtbl = (FAR struct nsh_vtbl_s *)arg;
-
- DEBUGASSERT(mountpoint && statbuf && vtbl);
-
- nsh_output(vtbl, "%6ld %8ld %8ld %8ld %s\n",
- statbuf->f_bsize, statbuf->f_blocks,
- statbuf->f_blocks - statbuf->f_bavail, statbuf->f_bavail,
- mountpoint);
-
- return OK;
-}
-#endif
-
-/****************************************************************************
- * Name: mount_handler
- ****************************************************************************/
-
-#if CONFIG_NFILE_DESCRIPTORS > 0 && !defined(CONFIG_DISABLE_MOUNTPOINT) && \
- defined(CONFIG_FS_READABLE) && !defined(CONFIG_NSH_DISABLE_MOUNT)
-static int mount_handler(FAR const char *mountpoint,
- FAR struct statfs *statbuf, FAR void *arg)
-{
- FAR struct nsh_vtbl_s *vtbl = (FAR struct nsh_vtbl_s *)arg;
- FAR const char *fstype;
-
- DEBUGASSERT(mountpoint && statbuf && vtbl);
-
- /* Get the file system type */
-
- switch (statbuf->f_type)
- {
-#ifdef CONFIG_FS_FAT
- case MSDOS_SUPER_MAGIC:
- fstype = "vfat";
- break;
-#endif
-
-#ifdef CONFIG_FS_ROMFS
- case ROMFS_MAGIC:
- fstype = "romfs";
- break;
-#endif
-
-#ifdef CONFIG_FS_BINFS
- case BINFS_MAGIC:
- fstype = "binfs";
- break;
-#endif
-
-#ifdef CONFIG_FS_NXFFS
- case NXFFS_MAGIC:
- fstype = "nxffs";
- break;
-#endif
-
-#ifdef CONFIG_NFS
- case NFS_SUPER_MAGIC:
- fstype = "nfs";
- break;
-#endif
-
- default:
- fstype = "Unrecognized";
- break;
- }
-
- nsh_output(vtbl, " %s type %s\n", mountpoint, fstype);
- return OK;
-}
-#endif
-
-/****************************************************************************
- * Name: mount_show
- ****************************************************************************/
-
-#if CONFIG_NFILE_DESCRIPTORS > 0 && !defined(CONFIG_DISABLE_MOUNTPOINT) && \
- defined(CONFIG_FS_READABLE) && !defined(CONFIG_NSH_DISABLE_MOUNT)
-static inline int mount_show(FAR struct nsh_vtbl_s *vtbl, FAR const char *progname)
-{
- return foreach_mountpoint(mount_handler, (FAR void *)vtbl);
-}
-#endif
-
-/****************************************************************************
- * Public Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Name: cmd_df
- ****************************************************************************/
-
-#if CONFIG_NFILE_DESCRIPTORS > 0 && !defined(CONFIG_DISABLE_MOUNTPOINT) && \
- defined(CONFIG_FS_READABLE) && !defined(CONFIG_NSH_DISABLE_DF)
-int cmd_df(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
-{
- nsh_output(vtbl, " Block Number\n");
- nsh_output(vtbl, " Size Blocks Used Available Mounted on\n");
-
- return foreach_mountpoint(df_handler, (FAR void *)vtbl);
-}
-#endif
-
-/****************************************************************************
- * Name: cmd_mount
- ****************************************************************************/
-
-#if CONFIG_NFILE_DESCRIPTORS > 0 && !defined(CONFIG_DISABLE_MOUNTPOINT) && \
- defined(CONFIG_FS_READABLE) && !defined(CONFIG_NSH_DISABLE_MOUNT)
-int cmd_mount(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
-{
- FAR const char *source;
- FAR char *fullsource;
- FAR const char *target;
- FAR char *fulltarget;
- FAR const char *filesystem = NULL;
- bool badarg = false;
- int option;
- int ret;
-
- /* The mount command behaves differently if no parameters are provided */
-
- if (argc < 2)
- {
- return mount_show(vtbl, argv[0]);
- }
-
- /* Get the mount options. NOTE: getopt() is not thread safe nor re-entrant.
- * To keep its state proper for the next usage, it is necessary to parse to
- * the end of the line even if an error occurs. If an error occurs, this
- * logic just sets 'badarg' and continues.
- */
-
- while ((option = getopt(argc, argv, ":t:")) != ERROR)
- {
- switch (option)
- {
- case 't':
- filesystem = optarg;
- break;
-
- case ':':
- nsh_output(vtbl, g_fmtargrequired, argv[0]);
- badarg = true;
- break;
-
- case '?':
- default:
- nsh_output(vtbl, g_fmtarginvalid, argv[0]);
- badarg = true;
- break;
- }
- }
-
- /* If a bad argument was encountered, then return without processing the
- * command.
- */
-
- if (badarg)
- {
- return ERROR;
- }
-
- /* There may be one or two required arguments after the options: the source
- * and target paths. Some file systems do not require the source parameter
- * so if there is only one parameter left, it must be the target.
- */
-
- if (optind >= argc)
- {
- nsh_output(vtbl, g_fmtargrequired, argv[0]);
- return ERROR;
- }
-
- source = NULL;
- target = argv[optind];
- optind++;
-
- if (optind < argc)
- {
- source = target;
- target = argv[optind];
- optind++;
-
- if (optind < argc)
- {
- nsh_output(vtbl, g_fmttoomanyargs, argv[0]);
- return ERROR;
- }
- }
-
- /* While the above parsing for the -t argument looks nice, the -t argument
- * not really optional.
- */
-
- if (!filesystem)
- {
- nsh_output(vtbl, g_fmtargrequired, argv[0]);
- return ERROR;
- }
-
- /* The source and target paths might be relative to the current
- * working directory.
- */
-
- fullsource = NULL;
- fulltarget = NULL;
-
- if (source)
- {
- fullsource = nsh_getfullpath(vtbl, source);
- if (!fullsource)
- {
- return ERROR;
- }
- }
-
- fulltarget = nsh_getfullpath(vtbl, target);
- if (!fulltarget)
- {
- ret = ERROR;
- goto errout;
- }
-
- /* Perform the mount */
-
- ret = mount(fullsource, fulltarget, filesystem, 0, NULL);
- if (ret < 0)
- {
- nsh_output(vtbl, g_fmtcmdfailed, argv[0], "mount", NSH_ERRNO);
- }
-
-errout:
- if (fullsource)
- {
- nsh_freefullpath(fullsource);
- }
-
- if (fulltarget)
- {
- nsh_freefullpath(fulltarget);
- }
-
- return ret;
-}
-#endif
-
-/****************************************************************************
- * Name: cmd_nfsmount
- ****************************************************************************/
-
-#if CONFIG_NFILE_DESCRIPTORS > 0 && !defined(CONFIG_DISABLE_MOUNTPOINT) && \
- defined(CONFIG_NET) && defined(CONFIG_NFS) && !defined(CONFIG_NSH_DISABLE_NFSMOUNT)
-int cmd_nfsmount(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
-{
- struct nfs_args data;
- FAR char *address;
- FAR char *lpath;
- FAR char *rpath;
- bool badarg = false;
-#ifdef CONFIG_NET_IPv6
- FAR struct sockaddr_in6 *sin;
- struct in6_addr inaddr;
-#else
- FAR struct sockaddr_in *sin;
- struct in_addr inaddr;
-#endif
- int ret;
-
- /* If a bad argument was encountered, then return without processing the
- * command.
- */
-
- if (badarg)
- {
- return ERROR;
- }
-
- /* The fist argument on the command line should be the NFS server IP address
- * in standard IPv4 (or IPv6) dot format.
- */
-
- address = argv[1];
- if (!address)
- {
- return ERROR;
- }
-
- /* The local mount point path (lpath) might be relative to the current working
- * directory.
- */
-
- lpath = nsh_getfullpath(vtbl, argv[2]);
- if (!lpath)
- {
- return ERROR;
- }
-
- /* Get the remote mount point path */
-
- rpath = argv[3];
-
- /* Convert the IP address string into its binary form */
-
-#ifdef CONFIG_NET_IPv6
- ret = inet_pton(AF_INET6, address, &inaddr);
-#else
- ret = inet_pton(AF_INET, address, &inaddr);
-#endif
- if (ret != 1)
- {
- nsh_freefullpath(lpath);
- return ERROR;
- }
-
- /* Place all of the NFS arguements into the nfs_args structure */
-
- memset(&data, 0, sizeof(data));
-
-#ifdef CONFIG_NET_IPv6
- sin = (FAR struct sockaddr_in6 *)&data.addr;
- sin->sin_family = AF_INET6;
- sin->sin_port = htons(NFS_PMAPPORT);
- memcpy(&sin->sin6_addr, &inaddr, sizeof(struct in6_addr));
- data.addrlen = sizeof(struct sockaddr_in6);
-#else
- sin = (FAR struct sockaddr_in *)&data.addr;
- sin->sin_family = AF_INET;
- sin->sin_port = htons(NFS_PMAPPORT);
- sin->sin_addr = inaddr;
- data.addrlen = sizeof(struct sockaddr_in);
-#endif
-
- data.sotype = SOCK_DGRAM;
- data.path = rpath;
- data.flags = 0; /* 0=Use all defaults */
-
- /* Perform the mount */
-
- ret = mount(NULL, lpath, "nfs", 0, (FAR void *)&data);
- if (ret < 0)
- {
- nsh_output(vtbl, g_fmtcmdfailed, argv[0], "mount", NSH_ERRNO);
- }
-
- /* We no longer need the allocated mount point path */
-
- nsh_freefullpath(lpath);
- return ret;
-}
-#endif
-
-/****************************************************************************
- * Name: cmd_umount
- ****************************************************************************/
-
-#if CONFIG_NFILE_DESCRIPTORS > 0 && !defined(CONFIG_DISABLE_MOUNTPOINT) && \
- defined(CONFIG_FS_READABLE) && !defined(CONFIG_NSH_DISABLE_UMOUNT)
-int cmd_umount(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
-{
- char *fullpath = nsh_getfullpath(vtbl, argv[1]);
- int ret = ERROR;
-
- if (fullpath)
- {
- /* Perform the umount */
-
- ret = umount(fullpath);
- if (ret < 0)
- {
- nsh_output(vtbl, g_fmtcmdfailed, argv[0], "umount", NSH_ERRNO);
- }
- nsh_freefullpath(fullpath);
- }
-
- return ret;
-}
-#endif
diff --git a/apps/nshlib/nsh_netcmds.c b/apps/nshlib/nsh_netcmds.c
deleted file mode 100644
index 473045c40..000000000
--- a/apps/nshlib/nsh_netcmds.c
+++ /dev/null
@@ -1,1153 +0,0 @@
-/****************************************************************************
- * apps/nshlib/nsh_netcmds.c
- *
- * Copyright (C) 2007-2012 Gregory Nutt. All rights reserved.
- * Author: Gregory Nutt <gnutt@nuttx.org>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * 3. Neither the name NuttX nor the names of its contributors may be
- * used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- ****************************************************************************/
-
-/****************************************************************************
- * Included Files
- ****************************************************************************/
-
-#include <nuttx/config.h>
-#ifdef CONFIG_NET
-
-#include <sys/stat.h> /* Needed for open */
-#include <stdint.h>
-#include <stdbool.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-#include <sched.h>
-#include <fcntl.h> /* Needed for open */
-#include <libgen.h> /* Needed for basename */
-#include <errno.h>
-#include <debug.h>
-
-#include <net/ethernet.h>
-#include <netinet/ether.h>
-
-#include <nuttx/net/net.h>
-#include <nuttx/clock.h>
-#include <nuttx/net/uip/uip.h>
-#include <nuttx/net/uip/uip-arch.h>
-
-#ifdef CONFIG_NET_STATISTICS
-# include <nuttx/net/uip/uip.h>
-#endif
-
-#if defined(CONFIG_NET_ICMP) && defined(CONFIG_NET_ICMP_PING) && \
- !defined(CONFIG_DISABLE_CLOCK) && !defined(CONFIG_DISABLE_SIGNALS)
-# include <apps/netutils/uiplib.h>
-# include <apps/netutils/resolv.h>
-#endif
-
-#if defined(CONFIG_NET_UDP) && CONFIG_NFILE_DESCRIPTORS > 0
-# include <apps/netutils/uiplib.h>
-# include <apps/netutils/tftp.h>
-#endif
-
-#if defined(CONFIG_NET_TCP) && CONFIG_NFILE_DESCRIPTORS > 0
-# ifndef CONFIG_NSH_DISABLE_WGET
-# include <apps/netutils/uiplib.h>
-# include <apps/netutils/webclient.h>
-# endif
-#endif
-
-#if defined(CONFIG_NSH_DHCPC) || defined(CONFIG_NSH_DNS)
-# ifdef CONFIG_HAVE_GETHOSTBYNAME
-# include <netdb.h>
-# else
-# include <apps/netutils/resolv.h>
-# endif
-# include <apps/netutils/dhcpc.h>
-#endif
-
-#include "nsh.h"
-#include "nsh_console.h"
-
-/****************************************************************************
- * Definitions
- ****************************************************************************/
-
-/* Size of the ECHO data */
-
-#define DEFAULT_PING_DATALEN 56
-
-/* Get the larger value */
-
-#ifndef MAX
-# define MAX(a,b) (a > b ? a : b)
-#endif
-
-/****************************************************************************
- * Private Types
- ****************************************************************************/
-
-#if defined(CONFIG_NET_UDP) && CONFIG_NFILE_DESCRIPTORS > 0
-struct tftpc_args_s
-{
- bool binary; /* true:binary ("octect") false:text ("netascii") */
- bool allocated; /* true: destpath is allocated */
- char *destpath; /* Path at destination */
- const char *srcpath; /* Path at src */
- in_addr_t ipaddr; /* Host IP address */
-};
-#endif
-
-/****************************************************************************
- * Private Function Prototypes
- ****************************************************************************/
-
-/****************************************************************************
- * Private Data
- ****************************************************************************/
-
-#if defined(CONFIG_NET_ICMP) && defined(CONFIG_NET_ICMP_PING) && \
- !defined(CONFIG_DISABLE_CLOCK) && !defined(CONFIG_DISABLE_SIGNALS)
-static uint16_t g_pingid = 0;
-#endif
-
-/****************************************************************************
- * Public Data
- ****************************************************************************/
-
-/****************************************************************************
- * Private Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Name: ping_newid
- ****************************************************************************/
-
-#if defined(CONFIG_NET_ICMP) && defined(CONFIG_NET_ICMP_PING) && \
- !defined(CONFIG_DISABLE_CLOCK) && !defined(CONFIG_DISABLE_SIGNALS)
-static inline uint16_t ping_newid(void)
-{
- irqstate_t save = irqsave();
- uint16_t ret = ++g_pingid;
- irqrestore(save);
- return ret;
-}
-#endif
-
-/****************************************************************************
- * Name: uip_statistics
- ****************************************************************************/
-
-#if defined(CONFIG_NET_STATISTICS) && !defined(CONFIG_NSH_DISABLE_IFCONFIG)
-static inline void uip_statistics(FAR struct nsh_vtbl_s *vtbl)
-{
- nsh_output(vtbl, "uIP IP ");
-#ifdef CONFIG_NET_TCP
- nsh_output(vtbl, " TCP");
-#endif
-#ifdef CONFIG_NET_UDP
- nsh_output(vtbl, " UDP");
-#endif
-#ifdef CONFIG_NET_ICMP
- nsh_output(vtbl, " ICMP");
-#endif
- nsh_output(vtbl, "\n");
-
- /* Received packets */
-
- nsh_output(vtbl, "Received %04x",uip_stat.ip.recv);
-#ifdef CONFIG_NET_TCP
- nsh_output(vtbl, " %04x",uip_stat.tcp.recv);
-#endif
-#ifdef CONFIG_NET_UDP
- nsh_output(vtbl, " %04x",uip_stat.udp.recv);
-#endif
-#ifdef CONFIG_NET_ICMP
- nsh_output(vtbl, " %04x",uip_stat.icmp.recv);
-#endif
- nsh_output(vtbl, "\n");
-
- /* Dropped packets */
-
- nsh_output(vtbl, "Dropped %04x",uip_stat.ip.drop);
-#ifdef CONFIG_NET_TCP
- nsh_output(vtbl, " %04x",uip_stat.tcp.drop);
-#endif
-#ifdef CONFIG_NET_UDP
- nsh_output(vtbl, " %04x",uip_stat.udp.drop);
-#endif
-#ifdef CONFIG_NET_ICMP
- nsh_output(vtbl, " %04x",uip_stat.icmp.drop);
-#endif
- nsh_output(vtbl, "\n");
-
- nsh_output(vtbl, " IP VHL: %04x HBL: %04x\n",
- uip_stat.ip.vhlerr, uip_stat.ip.hblenerr);
- nsh_output(vtbl, " LBL: %04x Frg: %04x\n",
- uip_stat.ip.lblenerr, uip_stat.ip.fragerr);
-
- nsh_output(vtbl, " Checksum %04x",uip_stat.ip.chkerr);
-#ifdef CONFIG_NET_TCP
- nsh_output(vtbl, " %04x",uip_stat.tcp.chkerr);
-#endif
-#ifdef CONFIG_NET_UDP
- nsh_output(vtbl, " %04x",uip_stat.udp.chkerr);
-#endif
-#ifdef CONFIG_NET_ICMP
- nsh_output(vtbl, " ----");
-#endif
- nsh_output(vtbl, "\n");
-
-#ifdef CONFIG_NET_TCP
- nsh_output(vtbl, " TCP ACK: %04x SYN: %04x\n",
- uip_stat.tcp.ackerr, uip_stat.tcp.syndrop);
- nsh_output(vtbl, " RST: %04x %04x\n",
- uip_stat.tcp.rst, uip_stat.tcp.synrst);
-#endif
-
- nsh_output(vtbl, " Type %04x",uip_stat.ip.protoerr);
-#ifdef CONFIG_NET_TCP
- nsh_output(vtbl, " ----");
-#endif
-#ifdef CONFIG_NET_UDP
- nsh_output(vtbl, " ----");
-#endif
-#ifdef CONFIG_NET_ICMP
- nsh_output(vtbl, " %04x",uip_stat.icmp.typeerr);
-#endif
- nsh_output(vtbl, "\n");
-
- /* Sent packets */
-
- nsh_output(vtbl, "Sent ----",uip_stat.ip.sent);
-#ifdef CONFIG_NET_TCP
- nsh_output(vtbl, " %04x",uip_stat.tcp.sent);
-#endif
-#ifdef CONFIG_NET_UDP
- nsh_output(vtbl, " %04x",uip_stat.udp.sent);
-#endif
-#ifdef CONFIG_NET_ICMP
- nsh_output(vtbl, " %04x",uip_stat.icmp.sent);
-#endif
- nsh_output(vtbl, "\n");
-
-#ifdef CONFIG_NET_TCP
- nsh_output(vtbl, " Rexmit ---- %04x",uip_stat.tcp.rexmit);
-#ifdef CONFIG_NET_UDP
- nsh_output(vtbl, " ----");
-#endif
-#ifdef CONFIG_NET_ICMP
- nsh_output(vtbl, " ----");
-#endif
- nsh_output(vtbl, "\n");
-#endif
- nsh_output(vtbl, "\n");
-}
-#else
-# define uip_statistics(vtbl)
-#endif
-
-
-/****************************************************************************
- * Name: ifconfig_callback
- ****************************************************************************/
-
-int ifconfig_callback(FAR struct uip_driver_s *dev, void *arg)
-{
- struct nsh_vtbl_s *vtbl = (struct nsh_vtbl_s*)arg;
- struct in_addr addr;
- bool is_running = false;
- int ret;
-
- ret = uip_getifstatus(dev->d_ifname,&is_running);
- if (ret != OK)
- {
- nsh_output(vtbl, "\tGet %s interface flags error: %d\n",
- dev->d_ifname, ret);
- }
-
- nsh_output(vtbl, "%s\tHWaddr %s at %s\n",
- dev->d_ifname, ether_ntoa(&dev->d_mac), (is_running)?"UP":"DOWN");
-
- addr.s_addr = dev->d_ipaddr;
- nsh_output(vtbl, "\tIPaddr:%s ", inet_ntoa(addr));
-
- addr.s_addr = dev->d_draddr;
- nsh_output(vtbl, "DRaddr:%s ", inet_ntoa(addr));
-
- addr.s_addr = dev->d_netmask;
- nsh_output(vtbl, "Mask:%s\n", inet_ntoa(addr));
-
-#if defined(CONFIG_NSH_DHCPC) || defined(CONFIG_NSH_DNS)
- resolv_getserver(&addr);
- nsh_output(vtbl, "\tDNSaddr:%s\n", inet_ntoa(addr));
-#endif
-
- nsh_output(vtbl, "\n");
- return OK;
-}
-
-/****************************************************************************
- * Name: tftpc_parseargs
- ****************************************************************************/
-
-#if defined(CONFIG_NET_UDP) && CONFIG_NFILE_DESCRIPTORS > 0
-int tftpc_parseargs(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv,
- struct tftpc_args_s *args)
-{
- FAR const char *fmt = g_fmtarginvalid;
- bool badarg = false;
- int option;
-
- /* Get the ping options */
-
- memset(args, 0, sizeof(struct tftpc_args_s));
- while ((option = getopt(argc, argv, ":bnf:h:")) != ERROR)
- {
- switch (option)
- {
- case 'b':
- args->binary = true;
- break;
-
- case 'n':
- args->binary = false;
- break;
-
- case 'f':
- args->destpath = optarg;
- break;
-
- case 'h':
- if (!uiplib_ipaddrconv(optarg, (FAR unsigned char*)&args->ipaddr))
- {
- nsh_output(vtbl, g_fmtarginvalid, argv[0]);
- badarg = true;
- }
- break;
-
- case ':':
- nsh_output(vtbl, g_fmtargrequired, argv[0]);
- badarg = true;
- break;
-
- case '?':
- default:
- nsh_output(vtbl, g_fmtarginvalid, argv[0]);
- badarg = true;
- break;
- }
- }
-
- /* If a bad argument was encountered, then return without processing the command */
-
- if (badarg)
- {
- return ERROR;
- }
-
- /* There should be exactly one parameter left on the command-line */
-
- if (optind == argc-1)
- {
- args->srcpath = argv[optind];
- }
-
- /* optind == argc means that there is nothing left on the command-line */
-
- else if (optind >= argc)
- {
- fmt = g_fmtargrequired;
- goto errout;
- }
-
- /* optind < argc-1 means that there are too many arguments on the
- * command-line
- */
-
- else
- {
- fmt = g_fmttoomanyargs;
- goto errout;
- }
-
- /* The HOST IP address is also required */
-
- if (!args->ipaddr)
- {
- fmt = g_fmtargrequired;
- goto errout;
- }
-
- /* If the destpath was not provided, then we have do a little work. */
-
- if (!args->destpath)
- {
- char *tmp1;
- char *tmp2;
-
- /* Copy the srcpath... baseanme might modify it */
-
- fmt = g_fmtcmdoutofmemory;
- tmp1 = strdup(args->srcpath);
- if (!tmp1)
- {
- goto errout;
- }
-
- /* Get the basename of the srcpath */
-
- tmp2 = basename(tmp1);
- if (!tmp2)
- {
- free(tmp1);
- goto errout;
- }
-
- /* Use that basename as the destpath */
-
- args->destpath = strdup(tmp2);
- free(tmp1);
- if (!args->destpath)
- {
- goto errout;
- }
- args->allocated = true;
- }
-
- return OK;
-
-errout:
- nsh_output(vtbl, fmt, argv[0]);
- return ERROR;
-}
-#endif
-
-/****************************************************************************
- * Name: wget_callback
- ****************************************************************************/
-
-#if defined(CONFIG_NET_TCP) && CONFIG_NFILE_DESCRIPTORS > 0
-#ifndef CONFIG_NSH_DISABLE_WGET
-static void wget_callback(FAR char **buffer, int offset, int datend,
- FAR int *buflen, FAR void *arg)
-{
- (void)write((int)arg, &((*buffer)[offset]), datend - offset);
-}
-#endif
-#endif
-
-/****************************************************************************
- * Public Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Name: cmd_get
- ****************************************************************************/
-
-#if defined(CONFIG_NET_UDP) && CONFIG_NFILE_DESCRIPTORS > 0
-#ifndef CONFIG_NSH_DISABLE_GET
-int cmd_get(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
-{
- struct tftpc_args_s args;
- char *fullpath;
-
- /* Parse the input parameter list */
-
- if (tftpc_parseargs(vtbl, argc, argv, &args) != OK)
- {
- return ERROR;
- }
-
- /* Get the full path to the local file */
-
- fullpath = nsh_getfullpath(vtbl, args.srcpath);
-
- /* Then perform the TFTP get operation */
-
- if (tftpget(args.srcpath, fullpath, args.ipaddr, args.binary) != OK)
- {
- nsh_output(vtbl, g_fmtcmdfailed, argv[0], "tftpget", NSH_ERRNO);
- }
-
- /* Release any allocated memory */
-
- if (args.allocated)
- {
- free(args.destpath);
- }
- free(fullpath);
- return OK;
-}
-#endif
-#endif
-
-/****************************************************************************
- * Name: cmd_ifup
- ****************************************************************************/
-
-#ifndef CONFIG_NSH_DISABLE_IFUPDOWN
-int cmd_ifup(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
-{
- FAR char *intf = NULL;
- int ret;
-
- if (argc != 2)
- {
- nsh_output(vtbl, "Please select nic_name:\n");
- netdev_foreach(ifconfig_callback, vtbl);
- return OK;
- }
-
- intf = argv[1];
- ret = uip_ifup(intf);
- nsh_output(vtbl, "ifup %s...%s\n", intf, (ret == OK) ? "OK" : "Failed");
- return ret;
-}
-#endif
-
-/****************************************************************************
- * Name: cmd_ifdown
- ****************************************************************************/
-
-#ifndef CONFIG_NSH_DISABLE_IFUPDOWN
-int cmd_ifdown(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
-{
- FAR char *intf = NULL;
- int ret;
-
- if (argc != 2)
- {
- nsh_output(vtbl, "Please select nic_name:\n");
- netdev_foreach(ifconfig_callback, vtbl);
- return OK;
- }
-
- intf = argv[1];
- ret = uip_ifdown(intf);
- nsh_output(vtbl, "ifdown %s...%s\n", intf, (ret == OK) ? "OK" : "Failed");
- return ret;
-}
-#endif
-
-/****************************************************************************
- * Name: cmd_ifconfig
- ****************************************************************************/
-
-#ifndef CONFIG_NSH_DISABLE_IFCONFIG
-int cmd_ifconfig(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
-{
- struct in_addr addr;
- in_addr_t gip;
- int i;
- FAR char *intf = NULL;
- FAR char *hostip = NULL;
- FAR char *gwip = NULL;
- FAR char *mask = NULL;
- FAR char *tmp = NULL;
- FAR char *hw = NULL;
- FAR char *dns = NULL;
- bool badarg = false;
- uint8_t mac[IFHWADDRLEN];
-#if defined(CONFIG_NSH_DHCPC)
- FAR void *handle;
-#endif
-
- /* With one or no arguments, ifconfig simply shows the status of ethernet
- * device:
- *
- * ifconfig
- * ifconfig [nic_name]
- */
-
- if (argc <= 2)
- {
- netdev_foreach(ifconfig_callback, vtbl);
- uip_statistics(vtbl);
- return OK;
- }
-
- /* If both the network interface name and an IP address are supplied as
- * arguments, then ifconfig will set the address of the ethernet device:
- *
- * ifconfig nic_name ip_address
- */
-
- if (argc > 2)
- {
- for(i = 0; i < argc; i++)
- {
- if (i == 1)
- {
- intf = argv[i];
- }
- else if (i == 2)
- {
- hostip = argv[i];
- }
- else
- {
- tmp = argv[i];
- if (!strcmp(tmp, "dr") || !strcmp(tmp, "gw") || !strcmp(tmp, "gateway"))
- {
- if (argc-1 >= i+1)
- {
- gwip = argv[i+1];
- i++;
- }
- else
- {
- badarg = true;
- }
- }
- else if(!strcmp(tmp, "netmask"))
- {
- if (argc-1 >= i+1)
- {
- mask = argv[i+1];
- i++;
- }
- else
- {
- badarg = true;
- }
- }
- else if(!strcmp(tmp, "hw"))
- {
- if (argc-1>=i+1)
- {
- hw = argv[i+1];
- i++;
- badarg = !uiplib_hwmacconv(hw, mac);
- }
- else
- {
- badarg = true;
- }
- }
- else if(!strcmp(tmp, "dns"))
- {
- if (argc-1 >= i+1)
- {
- dns = argv[i+1];
- i++;
- }
- else
- {
- badarg = true;
- }
- }
- }
- }
- }
-
- if (badarg)
- {
- nsh_output(vtbl, g_fmtargrequired, argv[0]);
- return ERROR;
- }
-
- /* Set Hardware ethernet MAC addr */
-
- if (hw)
- {
- ndbg("HW MAC: %s\n", hw);
- uip_setmacaddr(intf, mac);
- }
-
-#if defined(CONFIG_NSH_DHCPC)
- if (!strcmp(hostip, "dhcp"))
- {
- /* Set DHCP addr */
-
- ndbg("DHCPC Mode\n");
- gip = addr.s_addr = 0;
- }
- else
-#endif
- {
- /* Set host IP address */
-
- ndbg("Host IP: %s\n", hostip);
- gip = addr.s_addr = inet_addr(hostip);
- }
-
- uip_sethostaddr(intf, &addr);
-
- /* Set gateway */
-
- if (gwip)
- {
- ndbg("Gateway: %s\n", gwip);
- gip = addr.s_addr = inet_addr(gwip);
- }
- else
- {
- if (gip)
- {
- ndbg("Gateway: default\n");
- gip = NTOHL(gip);
- gip &= ~0x000000ff;
- gip |= 0x00000001;
- gip = HTONL(gip);
- }
-
- addr.s_addr = gip;
- }
-
- uip_setdraddr(intf, &addr);
-
- /* Set network mask */
-
- if (mask)
- {
- ndbg("Netmask: %s\n",mask);
- addr.s_addr = inet_addr(mask);
- }
- else
- {
- ndbg("Netmask: Default\n");
- addr.s_addr = inet_addr("255.255.255.0");
- }
-
- uip_setnetmask(intf, &addr);
-
-#if defined(CONFIG_NSH_DHCPC) || defined(CONFIG_NSH_DNS)
- if (dns)
- {
- ndbg("DNS: %s\n", dns);
- addr.s_addr = inet_addr(dns);
- }
- else
- {
- ndbg("DNS: Default\n");
- addr.s_addr = gip;
- }
-
- resolv_conf(&addr);
-#endif
-
-#if defined(CONFIG_NSH_DHCPC)
- /* Get the MAC address of the NIC */
-
- if (!gip)
- {
- uip_getmacaddr("eth0", mac);
-
- /* Set up the DHCPC modules */
-
- handle = dhcpc_open(&mac, IFHWADDRLEN);
-
- /* Get an IP address. Note that there is no logic for renewing the IP address in this
- * example. The address should be renewed in ds.lease_time/2 seconds.
- */
-
- if (handle)
- {
- struct dhcpc_state ds;
-
- (void)dhcpc_request(handle, &ds);
- uip_sethostaddr("eth0", &ds.ipaddr);
-
- if (ds.netmask.s_addr != 0)
- {
- uip_setnetmask("eth0", &ds.netmask);
- }
-
- if (ds.default_router.s_addr != 0)
- {
- uip_setdraddr("eth0", &ds.default_router);
- }
-
- if (ds.dnsaddr.s_addr != 0)
- {
- resolv_conf(&ds.dnsaddr);
- }
-
- dhcpc_close(handle);
- }
- }
-#endif
-
- return OK;
-}
-#endif
-
-/****************************************************************************
- * Name: cmd_ping
- ****************************************************************************/
-
-#if defined(CONFIG_NET_ICMP) && defined(CONFIG_NET_ICMP_PING) && \
- !defined(CONFIG_DISABLE_CLOCK) && !defined(CONFIG_DISABLE_SIGNALS)
-#ifndef CONFIG_NSH_DISABLE_PING
-int cmd_ping(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
-{
- FAR const char *fmt = g_fmtarginvalid;
- const char *staddr;
- uip_ipaddr_t ipaddr;
- uint32_t start;
- uint32_t next;
- uint32_t dsec = 10;
- uint32_t maxwait;
- uint16_t id;
- bool badarg = false;
- int count = 10;
- int option;
- int seqno;
- int replies = 0;
- int elapsed;
- int tmp;
- int i;
-
- /* Get the ping options */
-
- while ((option = getopt(argc, argv, ":c:i:")) != ERROR)
- {
- switch (option)
- {
- case 'c':
- count = atoi(optarg);
- if (count < 1 || count > 10000)
- {
- nsh_output(vtbl, g_fmtargrange, argv[0]);
- badarg = true;
- }
- break;
-
- case 'i':
- tmp = atoi(optarg);
- if (tmp < 1 || tmp >= 4294)
- {
- nsh_output(vtbl, g_fmtargrange, argv[0]);
- badarg = true;
- }
- else
- {
- dsec = 10 * tmp;
- }
- break;
-
- case ':':
- nsh_output(vtbl, g_fmtargrequired, argv[0]);
- badarg = true;
- break;
-
- case '?':
- default:
- nsh_output(vtbl, g_fmtarginvalid, argv[0]);
- badarg = true;
- break;
- }
- }
-
- /* If a bad argument was encountered, then return without processing the command */
-
- if (badarg)
- {
- return ERROR;
- }
-
- /* There should be exactly on parameter left on the command-line */
-
- if (optind == argc-1)
- {
- staddr = argv[optind];
- if (dns_gethostip(staddr, &ipaddr) < 0)
- {
- goto errout;
- }
- }
- else if (optind >= argc)
- {
- fmt = g_fmttoomanyargs;
- goto errout;
- }
- else
- {
- fmt = g_fmtargrequired;
- goto errout;
- }
-
- /* Get the ID to use */
-
- id = ping_newid();
-
- /* The maximum wait for a response will be the larger of the inter-ping time and
- * the configured maximum round-trip time.
- */
-
- maxwait = MAX(dsec, CONFIG_NSH_MAX_ROUNDTRIP);
-
- /* Loop for the specified count */
-
- nsh_output(vtbl, "PING %d.%d.%d.%d %d bytes of data\n",
- (ipaddr ) & 0xff, (ipaddr >> 8 ) & 0xff,
- (ipaddr >> 16 ) & 0xff, (ipaddr >> 24 ) & 0xff,
- DEFAULT_PING_DATALEN);
-
- start = g_system_timer;
- for (i = 1; i <= count; i++)
- {
- /* Send the ECHO request and wait for the response */
-
- next = g_system_timer;
- seqno = uip_ping(ipaddr, id, i, DEFAULT_PING_DATALEN, maxwait);
-
- /* Was any response returned? We can tell if a non-negative sequence
- * number was returned.
- */
-
- if (seqno >= 0 && seqno <= i)
- {
- /* Get the elapsed time from the time that the request was
- * sent until the response was received. If we got a response
- * to an earlier request, then fudge the elpased time.
- */
-
- elapsed = TICK2MSEC(g_system_timer - next);
- if (seqno < i)
- {
- elapsed += 100 * dsec * (i - seqno);
- }
-
- /* Report the receipt of the reply */
-
- nsh_output(vtbl, "%d bytes from %s: icmp_seq=%d time=%d ms\n",
- DEFAULT_PING_DATALEN, staddr, seqno, elapsed);
- replies++;
- }
-
- /* Wait for the remainder of the interval. If the last seqno<i,
- * then this is a bad idea... we will probably lose the response
- * to the current request!
- */
-
- elapsed = TICK2DSEC(g_system_timer - next);
- if (elapsed < dsec)
- {
- usleep(100000 * (dsec - elapsed));
- }
- }
-
- /* Get the total elapsed time */
-
- elapsed = TICK2MSEC(g_system_timer - start);
-
- /* Calculate the percentage of lost packets */
-
- tmp = (100*(count - replies) + (count >> 1)) / count;
-
- nsh_output(vtbl, "%d packets transmitted, %d received, %d%% packet loss, time %d ms\n",
- count, replies, tmp, elapsed);
- return OK;
-
-errout:
- nsh_output(vtbl, fmt, argv[0]);
- return ERROR;
-}
-#endif
-#endif /* CONFIG_NET_ICMP && CONFIG_NET_ICMP_PING */
-
-/****************************************************************************
- * Name: cmd_put
- ****************************************************************************/
-
-#if defined(CONFIG_NET_UDP) && CONFIG_NFILE_DESCRIPTORS > 0
-#ifndef CONFIG_NSH_DISABLE_PUT
-int cmd_put(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
-{
- struct tftpc_args_s args;
- char *fullpath;
-
- /* Parse the input parameter list */
-
- if (tftpc_parseargs(vtbl, argc, argv, &args) != OK)
- {
- return ERROR;
- }
-
- /* Get the full path to the local file */
-
- fullpath = nsh_getfullpath(vtbl, args.srcpath);
-
- /* Then perform the TFTP put operation */
-
- if (tftpput(fullpath, args.destpath, args.ipaddr, args.binary) != OK)
- {
- nsh_output(vtbl, g_fmtcmdfailed, argv[0], "tftpput", NSH_ERRNO);
- }
-
- /* Release any allocated memory */
-
- if (args.allocated)
- {
- free(args.destpath);
- }
- free(fullpath);
- return OK;
-}
-#endif
-#endif
-
-/****************************************************************************
- * Name: cmd_wget
- ****************************************************************************/
-
-#if defined(CONFIG_NET_TCP) && CONFIG_NFILE_DESCRIPTORS > 0
-#ifndef CONFIG_NSH_DISABLE_WGET
-int cmd_wget(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
-{
- char *localfile = NULL;
- char *allocfile = NULL;
- char *buffer = NULL;
- char *fullpath = NULL;
- char *url;
- const char *fmt;
- bool badarg = false;
- int option;
- int fd = -1;
- int ret;
-
- /* Get the wget options */
-
- while ((option = getopt(argc, argv, ":o:")) != ERROR)
- {
- switch (option)
- {
- case 'o':
- localfile = optarg;
- break;
-
- case ':':
- nsh_output(vtbl, g_fmtargrequired, argv[0]);
- badarg = true;
- break;
-
- case '?':
- default:
- nsh_output(vtbl, g_fmtarginvalid, argv[0]);
- badarg = true;
- break;
- }
- }
-
- /* If a bad argument was encountered, then return without processing the command */
-
- if (badarg)
- {
- return ERROR;
- }
-
- /* There should be exactly on parameter left on the command-line */
-
- if (optind == argc-1)
- {
- url = argv[optind];
- }
- else if (optind >= argc)
- {
- fmt = g_fmttoomanyargs;
- goto errout;
- }
- else
- {
- fmt = g_fmtargrequired;
- goto errout;
- }
-
- /* Get the local file name */
-
- if (!localfile)
- {
- allocfile = strdup(url);
- localfile = basename(allocfile);
- }
-
- /* Get the full path to the local file */
-
- fullpath = nsh_getfullpath(vtbl, localfile);
-
- /* Open the local file for writing */
-
- fd = open(fullpath, O_WRONLY|O_CREAT|O_TRUNC, 0644);
- if (fd < 0)
- {
- nsh_output(vtbl, g_fmtcmdfailed, argv[0], "open", NSH_ERRNO);
- ret = ERROR;
- goto exit;
- }
-
- /* Allocate an I/O buffer */
-
- buffer = malloc(512);
- if (!buffer)
- {
- fmt = g_fmtcmdoutofmemory;
- goto errout;
- }
-
- /* And perform the wget */
-
- ret = wget(url, buffer, 512, wget_callback, (FAR void *)fd);
- if (ret < 0)
- {
- nsh_output(vtbl, g_fmtcmdfailed, argv[0], "wget", NSH_ERRNO);
- goto exit;
- }
-
- /* Free allocated resources */
-
-exit:
- if (fd >= 0)
- {
- close(fd);
- }
- if (allocfile)
- {
- free(allocfile);
- }
- if (fullpath)
- {
- free(fullpath);
- }
- if (buffer)
- {
- free(buffer);
- }
- return ret;
-
-errout:
- nsh_output(vtbl, fmt, argv[0]);
- ret = ERROR;
- goto exit;
-}
-#endif
-#endif
-
-#endif /* CONFIG_NET */
diff --git a/apps/nshlib/nsh_netinit.c b/apps/nshlib/nsh_netinit.c
deleted file mode 100644
index 58d238312..000000000
--- a/apps/nshlib/nsh_netinit.c
+++ /dev/null
@@ -1,179 +0,0 @@
-/****************************************************************************
- * apps/nshlib/nsh_netinit.c
- *
- * Copyright (C) 2010-2012 Gregory Nutt. All rights reserved.
- * Author: Gregory Nutt <gnutt@nuttx.org>
- *
- * This is influenced by similar logic from uIP:
- *
- * Author: Adam Dunkels <adam@sics.se>
- * Copyright (c) 2003, Adam Dunkels.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Institute nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- ****************************************************************************/
-
-/****************************************************************************
- * Included Files
- ****************************************************************************/
-
-#include <nuttx/config.h>
-
-#include <debug.h>
-
-#include <net/if.h>
-
-#include <apps/netutils/uiplib.h>
-#if defined(CONFIG_NSH_DHCPC) || defined(CONFIG_NSH_DNS)
-# include <apps/netutils/resolv.h>
-# include <apps/netutils/dhcpc.h>
-#endif
-
-#include "nsh.h"
-
-#ifdef CONFIG_NET
-
-/****************************************************************************
- * Definitions
- ****************************************************************************/
-
-#if defined(CONFIG_NSH_DRIPADDR) && !defined(CONFIG_NSH_DNSIPADDR)
-# define CONFIG_NSH_DNSIPADDR CONFIG_NSH_DRIPADDR
-#endif
-
-/****************************************************************************
- * Private Types
- ****************************************************************************/
-
-/****************************************************************************
- * Private Function Prototypes
- ****************************************************************************/
-
-/****************************************************************************
- * Private Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Public Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Name: nsh_netinit
- *
- * Description:
- * Initialize the network per the selected NuttX configuration
- *
- ****************************************************************************/
-
-int nsh_netinit(void)
-{
- struct in_addr addr;
-#if defined(CONFIG_NSH_DHCPC)
- FAR void *handle;
-#endif
-#if defined(CONFIG_NSH_DHCPC) || defined(CONFIG_NSH_NOMAC)
- uint8_t mac[IFHWADDRLEN];
-#endif
-
-/* Many embedded network interfaces must have a software assigned MAC */
-
-#ifdef CONFIG_NSH_NOMAC
- mac[0] = 0x00;
- mac[1] = 0xe0;
- mac[2] = 0xde;
- mac[3] = 0xad;
- mac[4] = 0xbe;
- mac[5] = 0xef;
- uip_setmacaddr("eth0", mac);
-#endif
-
- /* Set up our host address */
-
-#if !defined(CONFIG_NSH_DHCPC)
- addr.s_addr = HTONL(CONFIG_NSH_IPADDR);
-#else
- addr.s_addr = 0;
-#endif
- uip_sethostaddr("eth0", &addr);
-
- /* Set up the default router address */
-
- addr.s_addr = HTONL(CONFIG_NSH_DRIPADDR);
- uip_setdraddr("eth0", &addr);
-
- /* Setup the subnet mask */
-
- addr.s_addr = HTONL(CONFIG_NSH_NETMASK);
- uip_setnetmask("eth0", &addr);
-
-#if defined(CONFIG_NSH_DHCPC) || defined(CONFIG_NSH_DNS)
- /* Set up the resolver */
-
- resolv_init();
-#if defined(CONFIG_NSH_DNS)
- addr.s_addr = HTONL(CONFIG_NSH_DNSIPADDR);
- resolv_conf(&addr);
-#endif
-#endif
-
-#if defined(CONFIG_NSH_DHCPC)
- /* Get the MAC address of the NIC */
-
- uip_getmacaddr("eth0", mac);
-
- /* Set up the DHCPC modules */
-
- handle = dhcpc_open(&mac, IFHWADDRLEN);
-
- /* Get an IP address. Note that there is no logic for renewing the IP address in this
- * example. The address should be renewed in ds.lease_time/2 seconds.
- */
-
- if (handle)
- {
- struct dhcpc_state ds;
- (void)dhcpc_request(handle, &ds);
- uip_sethostaddr("eth0", &ds.ipaddr);
- if (ds.netmask.s_addr != 0)
- {
- uip_setnetmask("eth0", &ds.netmask);
- }
- if (ds.default_router.s_addr != 0)
- {
- uip_setdraddr("eth0", &ds.default_router);
- }
- if (ds.dnsaddr.s_addr != 0)
- {
- resolv_conf(&ds.dnsaddr);
- }
- dhcpc_close(handle);
- }
-#endif
-
- return OK;
-}
-
-#endif /* CONFIG_NET */
diff --git a/apps/nshlib/nsh_parse.c b/apps/nshlib/nsh_parse.c
deleted file mode 100644
index 4d8f04b23..000000000
--- a/apps/nshlib/nsh_parse.c
+++ /dev/null
@@ -1,1645 +0,0 @@
-/****************************************************************************
- * apps/nshlib/nsh_parse.c
- *
- * Copyright (C) 2007-2013 Gregory Nutt. All rights reserved.
- * Author: Gregory Nutt <gnutt@nuttx.org>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * 3. Neither the name NuttX nor the names of its contributors may be
- * used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- ****************************************************************************/
-
-/****************************************************************************
- * Included Files
- ****************************************************************************/
-
-#include <nuttx/config.h>
-
-#include <sys/stat.h>
-
-#include <stdint.h>
-#include <stdbool.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-#include <sched.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <debug.h>
-
-#include <nuttx/version.h>
-
-#ifndef CONFIG_NSH_DISABLEBG
-# include <pthread.h>
-#endif
-
-#ifdef CONFIG_NSH_BUILTIN_APPS
-# include <nuttx/binfmt/builtin.h>
-#endif
-
-#include <apps/nsh.h>
-
-#include "nsh.h"
-#include "nsh_console.h"
-
-/****************************************************************************
- * Pre-processor Definitions
- ****************************************************************************/
-
-/* Argument list size
- *
- * argv[0]: The command name.
- * argv[1]: The beginning of argument (up to CONFIG_NSH_MAXARGUMENTS)
- * argv[argc-3]: Possibly '>' or '>>'
- * argv[argc-2]: Possibly <file>
- * argv[argc-1]: Possibly '&' (if pthreads are enabled)
- * argv[argc]: NULL terminating pointer
- *
- * Maximum size is CONFIG_NSH_MAXARGUMENTS+5
- */
-
-#ifndef CONFIG_NSH_DISABLEBG
-# define MAX_ARGV_ENTRIES (CONFIG_NSH_MAXARGUMENTS+5)
-#else
-# define MAX_ARGV_ENTRIES (CONFIG_NSH_MAXARGUMENTS+4)
-#endif
-
-/* Help command summary layout */
-
-#define MAX_CMDLEN 12
-#define CMDS_PER_LINE 6
-
-#define NUM_CMDS ((sizeof(g_cmdmap)/sizeof(struct cmdmap_s)) - 1)
-#define NUM_CMD_ROWS ((NUM_CMDS + (CMDS_PER_LINE-1)) / CMDS_PER_LINE)
-
-/****************************************************************************
- * Private Types
- ****************************************************************************/
-
-struct cmdmap_s
-{
- const char *cmd; /* Name of the command */
- cmd_t handler; /* Function that handles the command */
- uint8_t minargs; /* Minimum number of arguments (including command) */
- uint8_t maxargs; /* Maximum number of arguments (including command) */
- const char *usage; /* Usage instructions for 'help' command */
-};
-
-#ifndef CONFIG_NSH_DISABLEBG
-struct cmdarg_s
-{
- FAR struct nsh_vtbl_s *vtbl; /* For front-end interaction */
- int fd; /* FD for output redirection */
- int argc; /* Number of arguments in argv */
- FAR char *argv[MAX_ARGV_ENTRIES]; /* Argument list */
-};
-#endif
-
-/****************************************************************************
- * Private Function Prototypes
- ****************************************************************************/
-
-#ifndef CONFIG_NSH_DISABLE_HELP
-static int cmd_help(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
-#endif
-
-#ifndef CONFIG_NSH_DISABLE_EXIT
-static int cmd_exit(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
-#endif
-static int cmd_unrecognized(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
-
-/****************************************************************************
- * Private Data
- ****************************************************************************/
-
-static const char g_delim[] = " \t\n";
-static const char g_redirect1[] = ">";
-static const char g_redirect2[] = ">>";
-static const char g_exitstatus[] = "$?";
-static const char g_success[] = "0";
-static const char g_failure[] = "1";
-
-static const struct cmdmap_s g_cmdmap[] =
-{
-#if !defined(CONFIG_NSH_DISABLESCRIPT) && !defined(CONFIG_NSH_DISABLE_TEST)
- { "[", cmd_lbracket, 4, CONFIG_NSH_MAXARGUMENTS, "<expression> ]" },
-#endif
-
-#ifndef CONFIG_NSH_DISABLE_HELP
- { "?", cmd_help, 1, 1, NULL },
-#endif
-
-#if defined(CONFIG_NETUTILS_CODECS) && defined(CONFIG_CODECS_BASE64)
-# ifndef CONFIG_NSH_DISABLE_BASE64DEC
- { "base64dec", cmd_base64decode, 2, 4, "[-w] [-f] <string or filepath>" },
-# endif
-# ifndef CONFIG_NSH_DISABLE_BASE64ENC
- { "base64enc", cmd_base64encode, 2, 4, "[-w] [-f] <string or filepath>" },
-# endif
-#endif
-
-#if CONFIG_NFILE_DESCRIPTORS > 0
-# ifndef CONFIG_NSH_DISABLE_CAT
- { "cat", cmd_cat, 2, CONFIG_NSH_MAXARGUMENTS, "<path> [<path> [<path> ...]]" },
-# endif
-#ifndef CONFIG_DISABLE_ENVIRON
-# ifndef CONFIG_NSH_DISABLE_CD
- { "cd", cmd_cd, 1, 2, "[<dir-path>|-|~|..]" },
-# endif
-#endif
-# ifndef CONFIG_NSH_DISABLE_CP
- { "cp", cmd_cp, 3, 3, "<source-path> <dest-path>" },
-# endif
-# ifndef CONFIG_NSH_DISABLE_CMP
- { "cmp", cmd_cmp, 3, 3, "<path1> <path2>" },
-# endif
-#endif
-
-#if defined (CONFIG_RTC) && !defined(CONFIG_DISABLE_CLOCK) && !defined(CONFIG_NSH_DISABLE_DATE)
- { "date", cmd_date, 1, 3, "[-s \"MMM DD HH:MM:SS YYYY\"]" },
-#endif
-
-#if CONFIG_NFILE_DESCRIPTORS > 0 && !defined(CONFIG_NSH_DISABLE_DD)
- { "dd", cmd_dd, 3, 6, "if=<infile> of=<outfile> [bs=<sectsize>] [count=<sectors>] [skip=<sectors>]" },
-# endif
-
-#if CONFIG_NFILE_DESCRIPTORS > 0 && !defined(CONFIG_DISABLE_MOUNTPOINT) && \
- defined(CONFIG_FS_READABLE) && !defined(CONFIG_NSH_DISABLE_DF)
- { "df", cmd_df, 1, 1, NULL },
-#endif
-
-#if CONFIG_NFILE_DESCRIPTORS > 0 && defined(CONFIG_SYSLOG) && \
- defined(CONFIG_RAMLOG_SYSLOG) && !defined(CONFIG_NSH_DISABLE_DMESG)
- { "dmesg", cmd_dmesg, 1, 1, NULL },
-#endif
-
-#ifndef CONFIG_NSH_DISABLE_ECHO
-# ifndef CONFIG_DISABLE_ENVIRON
- { "echo", cmd_echo, 0, CONFIG_NSH_MAXARGUMENTS, "[<string|$name> [<string|$name>...]]" },
-# else
- { "echo", cmd_echo, 0, CONFIG_NSH_MAXARGUMENTS, "[<string> [<string>...]]" },
-# endif
-#endif
-
-#ifndef CONFIG_NSH_DISABLE_EXEC
- { "exec", cmd_exec, 2, 3, "<hex-address>" },
-#endif
-#ifndef CONFIG_NSH_DISABLE_EXIT
- { "exit", cmd_exit, 1, 1, NULL },
-#endif
-
-#ifndef CONFIG_NSH_DISABLE_FREE
- { "free", cmd_free, 1, 1, NULL },
-#endif
-
-#if defined(CONFIG_NET_UDP) && CONFIG_NFILE_DESCRIPTORS > 0
-# ifndef CONFIG_NSH_DISABLE_GET
- { "get", cmd_get, 4, 7, "[-b|-n] [-f <local-path>] -h <ip-address> <remote-path>" },
-# endif
-#endif
-
-#ifndef CONFIG_NSH_DISABLE_HELP
-# ifdef CONFIG_NSH_HELP_TERSE
- { "help", cmd_help, 1, 2, "[<cmd>]" },
-#else
- { "help", cmd_help, 1, 3, "[-v] [<cmd>]" },
-# endif
-#endif
-
-#if CONFIG_NFILE_DESCRIPTORS > 0
-#ifndef CONFIG_NSH_DISABLE_HEXDUMP
- { "hexdump", cmd_hexdump, 2, 2, "<file or device>" },
-#endif
-#endif
-
-#ifdef CONFIG_NET
-# ifndef CONFIG_NSH_DISABLE_IFCONFIG
- { "ifconfig", cmd_ifconfig, 1, 11, "[nic_name [<ip-address>|dhcp]] [dr|gw|gateway <dr-address>] [netmask <net-mask>] [dns <dns-address>] [hw <hw-mac>]" },
-# endif
-# ifndef CONFIG_NSH_DISABLE_IFUPDOWN
- { "ifdown", cmd_ifdown, 2, 2, "<nic_name>" },
- { "ifup", cmd_ifup, 2, 2, "<nic_name>" },
-# endif
-#endif
-
-#ifndef CONFIG_DISABLE_SIGNALS
-# ifndef CONFIG_NSH_DISABLE_KILL
- { "kill", cmd_kill, 3, 3, "-<signal> <pid>" },
-# endif
-#endif
-
-#if CONFIG_NFILE_DESCRIPTORS > 0 && !defined(CONFIG_DISABLE_MOUNTPOINT)
-# ifndef CONFIG_NSH_DISABLE_LOSETUP
- { "losetup", cmd_losetup, 3, 6, "[-d <dev-path>] | [[-o <offset>] [-r] <dev-path> <file-path>]" },
-# endif
-#endif
-
-#if CONFIG_NFILE_DESCRIPTORS > 0
-# ifndef CONFIG_NSH_DISABLE_LS
- { "ls", cmd_ls, 1, 5, "[-lRs] <dir-path>" },
-# endif
-#endif
-
-#ifndef CONFIG_NSH_DISABLE_MB
- { "mb", cmd_mb, 2, 3, "<hex-address>[=<hex-value>][ <hex-byte-count>]" },
-#endif
-
-#if defined(CONFIG_NETUTILS_CODECS) && defined(CONFIG_CODECS_HASH_MD5)
-# ifndef CONFIG_NSH_DISABLE_MD5
- { "md5", cmd_md5, 2, 3, "[-f] <string or filepath>" },
-# endif
-#endif
-
-#if !defined(CONFIG_DISABLE_MOUNTPOINT) && CONFIG_NFILE_DESCRIPTORS > 0 && defined(CONFIG_FS_WRITABLE)
-# ifndef CONFIG_NSH_DISABLE_MKDIR
- { "mkdir", cmd_mkdir, 2, 2, "<path>" },
-# endif
-#endif
-
-#if !defined(CONFIG_DISABLE_MOUNTPOINT) && CONFIG_NFILE_DESCRIPTORS > 0 && defined(CONFIG_FS_FAT)
-# ifndef CONFIG_NSH_DISABLE_MKFATFS
- { "mkfatfs", cmd_mkfatfs, 2, 2, "<path>" },
-# endif
-#endif
-
-#if !defined(CONFIG_DISABLE_MOUNTPOINT) && CONFIG_NFILE_DESCRIPTORS > 0
-# ifndef CONFIG_NSH_DISABLE_MKFIFO
- { "mkfifo", cmd_mkfifo, 2, 2, "<path>" },
-# endif
-#endif
-
-#if !defined(CONFIG_DISABLE_MOUNTPOINT) && CONFIG_NFILE_DESCRIPTORS > 0 && defined(CONFIG_FS_WRITABLE)
-# ifndef CONFIG_NSH_DISABLE_MKRD
- { "mkrd", cmd_mkrd, 2, 6, "[-m <minor>] [-s <sector-size>] <nsectors>" },
-# endif
-#endif
-
-#ifndef CONFIG_NSH_DISABLE_MH
- { "mh", cmd_mh, 2, 3, "<hex-address>[=<hex-value>][ <hex-byte-count>]" },
-#endif
-
-#if !defined(CONFIG_DISABLE_MOUNTPOINT) && CONFIG_NFILE_DESCRIPTORS > 0 && defined(CONFIG_FS_READABLE)
-# ifndef CONFIG_NSH_DISABLE_MOUNT
- { "mount", cmd_mount, 1, 5, "[-t <fstype> [<block-device>] <mount-point>]" },
-# endif
-#endif
-
-#if !defined(CONFIG_DISABLE_MOUNTPOINT) && CONFIG_NFILE_DESCRIPTORS > 0 && defined(CONFIG_FS_WRITABLE)
-# ifndef CONFIG_NSH_DISABLE_MV
- { "mv", cmd_mv, 3, 3, "<old-path> <new-path>" },
-# endif
-#endif
-
-#ifndef CONFIG_NSH_DISABLE_MW
- { "mw", cmd_mw, 2, 3, "<hex-address>[=<hex-value>][ <hex-byte-count>]" },
-#endif
-
-#if !defined(CONFIG_DISABLE_MOUNTPOINT) && CONFIG_NFILE_DESCRIPTORS > 0 && \
- defined(CONFIG_NET) && defined(CONFIG_NFS)
-# ifndef CONFIG_NSH_DISABLE_NFSMOUNT
- { "nfsmount", cmd_nfsmount, 4, 4, "<server-address> <mount-point> <remote-path>" },
-# endif
-#endif
-
-#if defined(CONFIG_NET) && defined(CONFIG_NET_ICMP) && defined(CONFIG_NET_ICMP_PING) && \
- !defined(CONFIG_DISABLE_CLOCK) && !defined(CONFIG_DISABLE_SIGNALS)
-# ifndef CONFIG_NSH_DISABLE_PING
- { "ping", cmd_ping, 2, 6, "[-c <count>] [-i <interval>] <ip-address>" },
-# endif
-#endif
-
-#ifndef CONFIG_NSH_DISABLE_PS
- { "ps", cmd_ps, 1, 1, NULL },
-#endif
-
-#if defined(CONFIG_NET_UDP) && CONFIG_NFILE_DESCRIPTORS > 0
-# ifndef CONFIG_NSH_DISABLE_PUT
- { "put", cmd_put, 4, 7, "[-b|-n] [-f <remote-path>] -h <ip-address> <local-path>" },
-# endif
-#endif
-
-#if CONFIG_NFILE_DESCRIPTORS > 0 && !defined(CONFIG_DISABLE_ENVIRON)
-# ifndef CONFIG_NSH_DISABLE_PWD
- { "pwd", cmd_pwd, 1, 1, NULL },
-# endif
-#endif
-
-#if !defined(CONFIG_DISABLE_MOUNTPOINT) && CONFIG_NFILE_DESCRIPTORS > 0 && defined(CONFIG_FS_WRITABLE)
-# ifndef CONFIG_NSH_DISABLE_RM
- { "rm", cmd_rm, 2, 2, "<file-path>" },
-# endif
-# ifndef CONFIG_NSH_DISABLE_RMDIR
- { "rmdir", cmd_rmdir, 2, 2, "<dir-path>" },
-# endif
-#endif
-
-#ifndef CONFIG_DISABLE_ENVIRON
-# ifndef CONFIG_NSH_DISABLE_SET
- { "set", cmd_set, 3, 3, "<name> <value>" },
-# endif
-#endif
-
-#if CONFIG_NFILE_DESCRIPTORS > 0 && CONFIG_NFILE_STREAMS > 0 && !defined(CONFIG_NSH_DISABLESCRIPT)
-# ifndef CONFIG_NSH_DISABLE_SH
- { "sh", cmd_sh, 2, 2, "<script-path>" },
-# endif
-#endif
-
-#ifndef CONFIG_DISABLE_SIGNALS
-# ifndef CONFIG_NSH_DISABLE_SLEEP
- { "sleep", cmd_sleep, 2, 2, "<sec>" },
-# endif
-#endif
-
-#if !defined(CONFIG_NSH_DISABLESCRIPT) && !defined(CONFIG_NSH_DISABLE_TEST)
- { "test", cmd_test, 3, CONFIG_NSH_MAXARGUMENTS, "<expression>" },
-#endif
-
-#if !defined(CONFIG_DISABLE_MOUNTPOINT) && CONFIG_NFILE_DESCRIPTORS > 0 && defined(CONFIG_FS_READABLE)
-# ifndef CONFIG_NSH_DISABLE_UMOUNT
- { "umount", cmd_umount, 2, 2, "<dir-path>" },
-# endif
-#endif
-
-#ifndef CONFIG_DISABLE_ENVIRON
-# ifndef CONFIG_NSH_DISABLE_UNSET
- { "unset", cmd_unset, 2, 2, "<name>" },
-# endif
-#endif
-
-#if defined(CONFIG_NETUTILS_CODECS) && defined(CONFIG_CODECS_URLCODE)
-# ifndef CONFIG_NSH_DISABLE_URLDECODE
- { "urldecode", cmd_urldecode, 2, 3, "[-f] <string or filepath>" },
-# endif
-# ifndef CONFIG_NSH_DISABLE_URLENCODE
- { "urlencode", cmd_urlencode, 2, 3, "[-f] <string or filepath>" },
-# endif
-#endif
-
-#ifndef CONFIG_DISABLE_SIGNALS
-# ifndef CONFIG_NSH_DISABLE_USLEEP
- { "usleep", cmd_usleep, 2, 2, "<usec>" },
-# endif
-#endif
-
-#if defined(CONFIG_NET_TCP) && CONFIG_NFILE_DESCRIPTORS > 0
-# ifndef CONFIG_NSH_DISABLE_WGET
- { "wget", cmd_wget, 2, 4, "[-o <local-path>] <url>" },
-# endif
-#endif
-
-#ifndef CONFIG_NSH_DISABLE_XD
- { "xd", cmd_xd, 3, 3, "<hex-address> <byte-count>" },
-#endif
-
- { NULL, NULL, 1, 1, NULL }
-};
-
-/****************************************************************************
- * Public Data
- ****************************************************************************/
-
-/* If NuttX versioning information is available, Include that information
- * in the NSH greeting.
- */
-
-#if CONFIG_VERSION_MAJOR != 0 || CONFIG_VERSION_MINOR != 0
-const char g_nshgreeting[] = "\nNuttShell (NSH) NuttX-" CONFIG_VERSION_STRING "\n";
-#else
-const char g_nshgreeting[] = "\nNuttShell (NSH)\n";
-#endif
-
-/* Telnet login prompts */
-
-#if defined(CONFIG_NSH_TELNET_LOGIN) && defined(CONFIG_NSH_TELNET)
-const char g_telnetgreeting[] = "\nWelcome to NuttShell(NSH) Telnet Server...\n";
-const char g_userprompt[] = "login: ";
-const char g_passwordprompt[] = "password: ";
-const char g_loginsuccess[] = "\nUser Logged-in!\n";
-const char g_badcredentials[] = "\nInvalid username or password\n";
-const char g_loginfailure[] = "Login failed!\n";
-#endif
-
-/* The NSH prompt */
-
-const char g_nshprompt[] = "nsh> ";
-
-/* Common, message formats */
-
-const char g_nshsyntax[] = "nsh: %s: syntax error\n";
-const char g_fmtargrequired[] = "nsh: %s: missing required argument(s)\n";
-const char g_fmtarginvalid[] = "nsh: %s: argument invalid\n";
-const char g_fmtargrange[] = "nsh: %s: value out of range\n";
-const char g_fmtcmdnotfound[] = "nsh: %s: command not found\n";
-const char g_fmtnosuch[] = "nsh: %s: no such %s: %s\n";
-const char g_fmttoomanyargs[] = "nsh: %s: too many arguments\n";
-const char g_fmtdeepnesting[] = "nsh: %s: nesting too deep\n";
-const char g_fmtcontext[] = "nsh: %s: not valid in this context\n";
-#ifdef CONFIG_NSH_STRERROR
-const char g_fmtcmdfailed[] = "nsh: %s: %s failed: %s\n";
-#else
-const char g_fmtcmdfailed[] = "nsh: %s: %s failed: %d\n";
-#endif
-const char g_fmtcmdoutofmemory[] = "nsh: %s: out of memory\n";
-const char g_fmtinternalerror[] = "nsh: %s: Internal error\n";
-#ifndef CONFIG_DISABLE_SIGNALS
-const char g_fmtsignalrecvd[] = "nsh: %s: Interrupted by signal\n";
-#endif
-
-/****************************************************************************
- * Private Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Name: help_cmdlist
- ****************************************************************************/
-
-#ifndef CONFIG_NSH_DISABLE_HELP
-static inline void help_cmdlist(FAR struct nsh_vtbl_s *vtbl)
-{
- int i;
- int j;
- int k;
-
- /* Print the command name in NUM_CMD_ROWS rows with CMDS_PER_LINE commands
- * on each line.
- */
-
- for (i = 0; i < NUM_CMD_ROWS; i++)
- {
- nsh_output(vtbl, " ");
- for (j = 0, k = i; j < CMDS_PER_LINE && k < NUM_CMDS; j++, k += NUM_CMD_ROWS)
- {
- nsh_output(vtbl, "%-12s", g_cmdmap[k].cmd);
- }
-
- nsh_output(vtbl, "\n");
- }
-}
-#endif
-
-/****************************************************************************
- * Name: help_usage
- ****************************************************************************/
-
-#if !defined(CONFIG_NSH_DISABLE_HELP) && !defined(CONFIG_NSH_HELP_TERSE)
-static inline void help_usage(FAR struct nsh_vtbl_s *vtbl)
-{
- nsh_output(vtbl, "NSH command forms:\n");
-#ifndef CONFIG_NSH_DISABLEBG
- nsh_output(vtbl, " [nice [-d <niceness>>]] <cmd> [> <file>|>> <file>] [&]\n");
-#else
- nsh_output(vtbl, " <cmd> [> <file>|>> <file>]\n");
-#endif
-#ifndef CONFIG_NSH_DISABLESCRIPT
- nsh_output(vtbl, "OR\n");
- nsh_output(vtbl, " if <cmd>\n");
- nsh_output(vtbl, " then\n");
- nsh_output(vtbl, " [sequence of <cmd>]\n");
- nsh_output(vtbl, " else\n");
- nsh_output(vtbl, " [sequence of <cmd>]\n");
- nsh_output(vtbl, " fi\n\n");
-#endif
-}
-#endif
-
-/****************************************************************************
- * Name: help_showcmd
- ****************************************************************************/
-
-#ifndef CONFIG_NSH_DISABLE_HELP
-static void help_showcmd(FAR struct nsh_vtbl_s *vtbl,
- FAR const struct cmdmap_s *cmdmap)
-{
- if (cmdmap->usage)
- {
- nsh_output(vtbl, " %s %s\n", cmdmap->cmd, cmdmap->usage);
- }
- else
- {
- nsh_output(vtbl, " %s\n", cmdmap->cmd);
- }
-}
-#endif
-
-/****************************************************************************
- * Name: help_cmd
- ****************************************************************************/
-
-#ifndef CONFIG_NSH_DISABLE_HELP
-static int help_cmd(FAR struct nsh_vtbl_s *vtbl, FAR const char *cmd)
-{
- FAR const struct cmdmap_s *cmdmap;
-
- /* Find the command in the command table */
-
- for (cmdmap = g_cmdmap; cmdmap->cmd; cmdmap++)
- {
- /* Is this the one we are looking for? */
-
- if (strcmp(cmdmap->cmd, cmd) == 0)
- {
- /* Yes... show it */
-
- nsh_output(vtbl, "%s usage:", cmd);
- help_showcmd(vtbl, cmdmap);
- return OK;
- }
- }
-
- nsh_output(vtbl, g_fmtcmdnotfound, cmd);
- return ERROR;
-}
-#endif
-
-/****************************************************************************
- * Name: help_allcmds
- ****************************************************************************/
-
-#if !defined(CONFIG_NSH_DISABLE_HELP) && !defined(CONFIG_NSH_HELP_TERSE)
-static inline void help_allcmds(FAR struct nsh_vtbl_s *vtbl)
-{
- FAR const struct cmdmap_s *cmdmap;
-
- /* Show all of the commands in the command table */
-
- for (cmdmap = g_cmdmap; cmdmap->cmd; cmdmap++)
- {
- help_showcmd(vtbl, cmdmap);
- }
-}
-#endif
-
-/****************************************************************************
- * Name: help_builtins
- ****************************************************************************/
-
-#ifndef CONFIG_NSH_DISABLE_HELP
-static inline void help_builtins(FAR struct nsh_vtbl_s *vtbl)
-{
-#ifdef CONFIG_NSH_BUILTIN_APPS
- FAR const char *name;
- int i;
-
- /* List the set of available built-in commands */
-
- nsh_output(vtbl, "\nBuiltin Apps:\n");
- for (i = 0; (name = builtin_getname(i)) != NULL; i++)
- {
- nsh_output(vtbl, " %s\n", name);
- }
-#endif
-}
-#endif
-
-/****************************************************************************
- * Name: cmd_help
- ****************************************************************************/
-
-#ifndef CONFIG_NSH_DISABLE_HELP
-static int cmd_help(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
-{
- FAR const char *cmd = NULL;
-#ifndef CONFIG_NSH_HELP_TERSE
- bool verbose = false;
- int i;
-#endif
-
- /* The command may be followed by a verbose option */
-
-#ifndef CONFIG_NSH_HELP_TERSE
- i = 1;
- if (argc > i)
- {
- if (strcmp(argv[i], "-v") == 0)
- {
- verbose = true;
- i++;
- }
- }
-
- /* The command line may end with a command name */
-
- if (argc > i)
- {
- cmd = argv[i];
- }
-
- /* Show the generic usage if verbose is requested */
-
- if (verbose)
- {
- help_usage(vtbl);
- }
-#else
- if (argc > 1)
- {
- cmd = argv[1];
- }
-#endif
-
- /* Are we showing help on a single command? */
-
- if (cmd)
- {
- /* Yes.. show the single command */
-
- help_cmd(vtbl, cmd);
- }
- else
- {
- /* In verbose mode, show detailed help for all commands */
-
-#ifndef CONFIG_NSH_HELP_TERSE
- if (verbose)
- {
- nsh_output(vtbl, "Where <cmd> is one of:\n");
- help_allcmds(vtbl);
- }
-
- /* Otherwise, just show the list of command names */
-
- else
-#endif
- {
- help_cmd(vtbl, "help");
- nsh_output(vtbl, "\n");
- help_cmdlist(vtbl);
- }
-
- /* And show the list of built-in applications */
-
- help_builtins(vtbl);
- }
-
- return OK;
-}
-#endif
-
-/****************************************************************************
- * Name: cmd_unrecognized
- ****************************************************************************/
-
-static int cmd_unrecognized(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
-{
- nsh_output(vtbl, g_fmtcmdnotfound, argv[0]);
- return ERROR;
-}
-
-/****************************************************************************
- * Name: cmd_exit
- ****************************************************************************/
-
-#ifndef CONFIG_NSH_DISABLE_EXIT
-static int cmd_exit(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
-{
- nsh_exit(vtbl, 0);
- return OK;
-}
-#endif
-
-/****************************************************************************
- * Name: nsh_execute
- *
- * Description:
- * Execute the command in argv[0]
- *
- * Returned Value:
- * -1 (ERRROR) if the command was unsuccessful
- * 0 (OK) if the command was successful
- *
- ****************************************************************************/
-
-static int nsh_execute(FAR struct nsh_vtbl_s *vtbl, int argc, char *argv[])
-{
- const struct cmdmap_s *cmdmap;
- const char *cmd;
- cmd_t handler = cmd_unrecognized;
- int ret;
-
- /* The form of argv is:
- *
- * argv[0]: The command name. This is argv[0] when the arguments
- * are, finally, received by the command vtblr
- * argv[1]: The beginning of argument (up to CONFIG_NSH_MAXARGUMENTS)
- * argv[argc]: NULL terminating pointer
- */
-
- cmd = argv[0];
-
- /* See if the command is one that we understand */
-
- for (cmdmap = g_cmdmap; cmdmap->cmd; cmdmap++)
- {
- if (strcmp(cmdmap->cmd, cmd) == 0)
- {
- /* Check if a valid number of arguments was provided. We
- * do this simple, imperfect checking here so that it does
- * not have to be performed in each command.
- */
-
- if (argc < cmdmap->minargs)
- {
- /* Fewer than the minimum number were provided */
-
- nsh_output(vtbl, g_fmtargrequired, cmd);
- return ERROR;
- }
- else if (argc > cmdmap->maxargs)
- {
- /* More than the maximum number were provided */
-
- nsh_output(vtbl, g_fmttoomanyargs, cmd);
- return ERROR;
- }
- else
- {
- /* A valid number of arguments were provided (this does
- * not mean they are right).
- */
-
- handler = cmdmap->handler;
- break;
- }
- }
- }
-
- ret = handler(vtbl, argc, argv);
- return ret;
-}
-
-/****************************************************************************
- * Name: nsh_releaseargs
- ****************************************************************************/
-
-#ifndef CONFIG_NSH_DISABLEBG
-static void nsh_releaseargs(struct cmdarg_s *arg)
-{
- FAR struct nsh_vtbl_s *vtbl = arg->vtbl;
- int i;
-
- /* If the output was redirected, then file descriptor should
- * be closed. The created task has its one, independent copy of
- * the file descriptor
- */
-
- if (vtbl->np.np_redirect)
- {
- (void)close(arg->fd);
- }
-
- /* Released the cloned vtbl instance */
-
- nsh_release(vtbl);
-
- /* Release the cloned args */
-
- for (i = 0; i < arg->argc; i++)
- {
- free(arg->argv[i]);
- }
- free(arg);
-}
-#endif
-
-/****************************************************************************
- * Name: nsh_child
- ****************************************************************************/
-
-#ifndef CONFIG_NSH_DISABLEBG
-static pthread_addr_t nsh_child(pthread_addr_t arg)
-{
- struct cmdarg_s *carg = (struct cmdarg_s *)arg;
- int ret;
-
- dbg("BG %s\n", carg->argv[0]);
-
- /* Execute the specified command on the child thread */
-
- ret = nsh_execute(carg->vtbl, carg->argc, carg->argv);
-
- /* Released the cloned arguments */
-
- dbg("BG %s complete\n", carg->argv[0]);
- nsh_releaseargs(carg);
- return (void*)ret;
-}
-#endif
-
-/****************************************************************************
- * Name: nsh_cloneargs
- ****************************************************************************/
-
-#ifndef CONFIG_NSH_DISABLEBG
-static inline struct cmdarg_s *nsh_cloneargs(FAR struct nsh_vtbl_s *vtbl,
- int fd, int argc, char *argv[])
-{
- struct cmdarg_s *ret = (struct cmdarg_s *)zalloc(sizeof(struct cmdarg_s));
- int i;
-
- if (ret)
- {
- ret->vtbl = vtbl;
- ret->fd = fd;
- ret->argc = argc;
-
- for (i = 0; i < argc; i++)
- {
- ret->argv[i] = strdup(argv[i]);
- }
- }
- return ret;
-}
-#endif
-
-/****************************************************************************
- * Name: nsh_argument
- ****************************************************************************/
-
-char *nsh_argument(FAR struct nsh_vtbl_s *vtbl, char **saveptr)
-{
- char *pbegin = *saveptr;
- char *pend = NULL;
- const char *term;
-#ifndef CONFIG_DISABLE_ENVIRON
- bool quoted = false;
-#endif
-
- /* Find the beginning of the next token */
-
- for (;
- *pbegin && strchr(g_delim, *pbegin) != NULL;
- pbegin++);
-
- /* If we are at the end of the string with nothing
- * but delimiters found, then return NULL.
- */
-
- if (!*pbegin)
- {
- return NULL;
- }
-
- /* Does the token begin with '>' -- redirection of output? */
-
- if (*pbegin == '>')
- {
- /* Yes.. does it begin with ">>"? */
-
- if (*(pbegin + 1) == '>')
- {
- *saveptr = pbegin + 2;
- pbegin = (char*)g_redirect2;
- }
- else
- {
- *saveptr = pbegin + 1;
- pbegin = (char*)g_redirect1;
- }
- }
-
- /* Does the token begin with '#' -- comment */
-
- else if (*pbegin == '#')
- {
- /* Return NULL meaning that we are at the end of the line */
-
- *saveptr = pbegin;
- pbegin = NULL;
- }
- else
- {
- /* Otherwise, we are going to have to parse to find the end of
- * the token. Does the token begin with '"'?
- */
-
- if (*pbegin == '"')
- {
- /* Yes.. then only another '"' can terminate the string */
-
- pbegin++;
- term = "\"";
-#ifndef CONFIG_DISABLE_ENVIRON
- quoted = true;
-#endif
- }
- else
- {
- /* No, then any of the usual terminators will terminate the argument */
-
- term = g_delim;
- }
-
- /* Find the end of the string */
-
- for (pend = pbegin + 1;
- *pend && strchr(term, *pend) == NULL;
- pend++);
-
- /* pend either points to the end of the string or to
- * the first delimiter after the string.
- */
-
- if (*pend)
- {
- /* Turn the delimiter into a null terminator */
-
- *pend++ = '\0';
- }
-
- /* Save the pointer where we left off */
-
- *saveptr = pend;
-
-#ifndef CONFIG_DISABLE_ENVIRON
- /* Check for references to environment variables */
-
- if (pbegin[0] == '$' && !quoted)
- {
- /* Check for built-in variables */
-
- if (strcmp(pbegin, g_exitstatus) == 0)
- {
- if (vtbl->np.np_fail)
- {
- return (char*)g_failure;
- }
- else
- {
- return (char*)g_success;
- }
- }
-
- /* Not a built-in? Return the value of the environment variable with this name */
-
- else
- {
- char *value = getenv(pbegin+1);
- if (value)
- {
- return value;
- }
- else
- {
- return (char*)"";
- }
- }
- }
-#endif
- }
-
- /* Return the beginning of the token. */
-
- return pbegin;
-}
-
-/****************************************************************************
- * Name: nsh_cmdenabled
- ****************************************************************************/
-
-#ifndef CONFIG_NSH_DISABLESCRIPT
-static inline bool nsh_cmdenabled(FAR struct nsh_vtbl_s *vtbl)
-{
- struct nsh_parser_s *np = &vtbl->np;
- bool ret = !np->np_st[np->np_ndx].ns_disabled;
- if (ret)
- {
- switch (np->np_st[np->np_ndx].ns_state)
- {
- case NSH_PARSER_NORMAL :
- case NSH_PARSER_IF:
- default:
- break;
-
- case NSH_PARSER_THEN:
- ret = !np->np_st[np->np_ndx].ns_ifcond;
- break;
-
- case NSH_PARSER_ELSE:
- ret = np->np_st[np->np_ndx].ns_ifcond;
- break;
- }
- }
- return ret;
-}
-#endif
-
-/****************************************************************************
- * Name: nsh_ifthenelse
- ****************************************************************************/
-
-#ifndef CONFIG_NSH_DISABLESCRIPT
-static inline int nsh_ifthenelse(FAR struct nsh_vtbl_s *vtbl, FAR char **ppcmd, FAR char **saveptr)
-{
- struct nsh_parser_s *np = &vtbl->np;
- FAR char *cmd = *ppcmd;
- bool disabled;
-
- if (cmd)
- {
- /* Check if the command is preceeded by "if" */
-
- if (strcmp(cmd, "if") == 0)
- {
- /* Get the cmd following the if */
-
- *ppcmd = nsh_argument(vtbl, saveptr);
- if (!*ppcmd)
- {
- nsh_output(vtbl, g_fmtarginvalid, "if");
- goto errout;
- }
-
- /* Verify that "if" is valid in this context */
-
- if (np->np_st[np->np_ndx].ns_state != NSH_PARSER_NORMAL &&
- np->np_st[np->np_ndx].ns_state != NSH_PARSER_THEN &&
- np->np_st[np->np_ndx].ns_state != NSH_PARSER_ELSE)
- {
- nsh_output(vtbl, g_fmtcontext, "if");
- goto errout;
- }
-
- /* Check if we have exceeded the maximum depth of nesting */
-
- if (np->np_ndx >= CONFIG_NSH_NESTDEPTH-1)
- {
- nsh_output(vtbl, g_fmtdeepnesting, "if");
- goto errout;
- }
-
- /* "Push" the old state and set the new state */
-
- disabled = !nsh_cmdenabled(vtbl);
- np->np_ndx++;
- np->np_st[np->np_ndx].ns_state = NSH_PARSER_IF;
- np->np_st[np->np_ndx].ns_disabled = disabled;
- np->np_st[np->np_ndx].ns_ifcond = false;
- }
- else if (strcmp(cmd, "then") == 0)
- {
- /* Get the cmd following the then -- there shouldn't be one */
-
- *ppcmd = nsh_argument(vtbl, saveptr);
- if (*ppcmd)
- {
- nsh_output(vtbl, g_fmtarginvalid, "then");
- goto errout;
- }
-
- /* Verify that "then" is valid in this context */
-
- if (np->np_st[np->np_ndx].ns_state != NSH_PARSER_IF)
- {
- nsh_output(vtbl, g_fmtcontext, "then");
- goto errout;
- }
- np->np_st[np->np_ndx].ns_state = NSH_PARSER_THEN;
- }
- else if (strcmp(cmd, "else") == 0)
- {
- /* Get the cmd following the else -- there shouldn't be one */
-
- *ppcmd = nsh_argument(vtbl, saveptr);
- if (*ppcmd)
- {
- nsh_output(vtbl, g_fmtarginvalid, "else");
- goto errout;
- }
-
- /* Verify that "then" is valid in this context */
-
- if (np->np_st[np->np_ndx].ns_state != NSH_PARSER_THEN)
- {
- nsh_output(vtbl, g_fmtcontext, "else");
- goto errout;
- }
- np->np_st[np->np_ndx].ns_state = NSH_PARSER_ELSE;
- }
- else if (strcmp(cmd, "fi") == 0)
- {
- /* Get the cmd following the fi -- there should be one */
-
- *ppcmd = nsh_argument(vtbl, saveptr);
- if (*ppcmd)
- {
- nsh_output(vtbl, g_fmtarginvalid, "fi");
- goto errout;
- }
-
- /* Verify that "fi" is valid in this context */
-
- if (np->np_st[np->np_ndx].ns_state != NSH_PARSER_THEN &&
- np->np_st[np->np_ndx].ns_state != NSH_PARSER_ELSE)
- {
- nsh_output(vtbl, g_fmtcontext, "fi");
- goto errout;
- }
-
- if (np->np_ndx < 1) /* Shouldn't happen */
- {
- nsh_output(vtbl, g_fmtinternalerror, "if");
- goto errout;
- }
-
- /* "Pop" the previous state */
-
- np->np_ndx--;
- }
- else if (np->np_st[np->np_ndx].ns_state == NSH_PARSER_IF)
- {
- nsh_output(vtbl, g_fmtcontext, cmd);
- goto errout;
- }
- }
- return OK;
-
-errout:
- np->np_ndx = 0;
- np->np_st[0].ns_state = NSH_PARSER_NORMAL;
- np->np_st[0].ns_disabled = false;
- np->np_st[0].ns_ifcond = false;
- return ERROR;
-}
-#endif
-
-/****************************************************************************
- * Name: nsh_saveresult
- ****************************************************************************/
-
-static inline int nsh_saveresult(FAR struct nsh_vtbl_s *vtbl, bool result)
-{
- struct nsh_parser_s *np = &vtbl->np;
-
-#ifndef CONFIG_NSH_DISABLESCRIPT
- if (np->np_st[np->np_ndx].ns_state == NSH_PARSER_IF)
- {
- np->np_fail = false;
- np->np_st[np->np_ndx].ns_ifcond = result;
- return OK;
- }
- else
-#endif
- {
- np->np_fail = result;
- return result ? ERROR : OK;
- }
-}
-
-/****************************************************************************
- * Name: nsh_nice
- ****************************************************************************/
-
-#ifndef CONFIG_NSH_DISABLEBG
-static inline int nsh_nice(FAR struct nsh_vtbl_s *vtbl, FAR char **ppcmd, FAR char **saveptr)
-{
- FAR char *cmd = *ppcmd;
-
- vtbl->np.np_nice = 0;
- if (cmd)
- {
- /* Check if the command is preceded by "nice" */
-
- if (strcmp(cmd, "nice") == 0)
- {
- /* Nicenesses range from -20 (most favorable scheduling) to 19
- * (least favorable). Default is 10.
- */
-
- vtbl->np.np_nice = 10;
-
- /* Get the cmd (or -d option of nice command) */
-
- cmd = nsh_argument(vtbl, saveptr);
- if (cmd && strcmp(cmd, "-d") == 0)
- {
- FAR char *val = nsh_argument(vtbl, saveptr);
- if (val)
- {
- char *endptr;
- vtbl->np.np_nice = (int)strtol(val, &endptr, 0);
- if (vtbl->np.np_nice > 19 || vtbl->np.np_nice < -20 ||
- endptr == val || *endptr != '\0')
- {
- nsh_output(vtbl, g_fmtarginvalid, "nice");
- return ERROR;
- }
- cmd = nsh_argument(vtbl, saveptr);
- }
- }
-
- /* Return the real command name */
-
- *ppcmd = cmd;
- }
- }
- return OK;
-}
-#endif
-
-/****************************************************************************
- * Public Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Name: nsh_parse
- *
- * Description:
- * This function parses and executes one NSH command.
- *
- ****************************************************************************/
-
-int nsh_parse(FAR struct nsh_vtbl_s *vtbl, char *cmdline)
-{
- FAR char *argv[MAX_ARGV_ENTRIES];
- FAR char *saveptr;
- FAR char *cmd;
- FAR char *redirfile = NULL;
- int fd = -1;
- int oflags = 0;
- int argc;
- int ret;
-
- /* Initialize parser state */
-
- memset(argv, 0, MAX_ARGV_ENTRIES*sizeof(FAR char *));
-#ifndef CONFIG_NSH_DISABLEBG
- vtbl->np.np_bg = false;
-#endif
- vtbl->np.np_redirect = false;
-
- /* Parse out the command at the beginning of the line */
-
- saveptr = cmdline;
- cmd = nsh_argument(vtbl, &saveptr);
-
- /* Handler if-then-else-fi */
-
-#ifndef CONFIG_NSH_DISABLESCRIPT
- if (nsh_ifthenelse(vtbl, &cmd, &saveptr) != 0)
- {
- goto errout;
- }
-#endif
-
- /* Handle nice */
-
-#ifndef CONFIG_NSH_DISABLEBG
- if (nsh_nice(vtbl, &cmd, &saveptr) != 0)
- {
- goto errout;
- }
-#endif
-
- /* Check if any command was provided -OR- if command processing is
- * currently disabled.
- */
-
-#ifndef CONFIG_NSH_DISABLESCRIPT
- if (!cmd || !nsh_cmdenabled(vtbl))
-#else
- if (!cmd)
-#endif
- {
- /* An empty line is not an error and an unprocessed command cannot
- * generate an error, but neither should they change the last
- * command status.
- */
-
- return OK;
- }
-
- /* Parse all of the arguments following the command name. The form
- * of argv is:
- *
- * argv[0]: The command name.
- * argv[1]: The beginning of argument (up to CONFIG_NSH_MAXARGUMENTS)
- * argv[argc-3]: Possibly '>' or '>>'
- * argv[argc-2]: Possibly <file>
- * argv[argc-1]: Possibly '&'
- * argv[argc]: NULL terminating pointer
- *
- * Maximum size is CONFIG_NSH_MAXARGUMENTS+5
- */
-
- argv[0] = cmd;
- for (argc = 1; argc < MAX_ARGV_ENTRIES-1; argc++)
- {
- argv[argc] = nsh_argument(vtbl, &saveptr);
- if (!argv[argc])
- {
- break;
- }
- }
-
- argv[argc] = NULL;
-
- /* Check if the command should run in background */
-
-#ifndef CONFIG_NSH_DISABLEBG
- if (argc > 1 && strcmp(argv[argc-1], "&") == 0)
- {
- vtbl->np.np_bg = true;
- argv[argc-1] = NULL;
- argc--;
- }
-#endif
-
- /* Check if the output was re-directed using > or >> */
-
- if (argc > 2)
- {
- /* Check for redirection to a new file */
-
- if (strcmp(argv[argc-2], g_redirect1) == 0)
- {
- vtbl->np.np_redirect = true;
- oflags = O_WRONLY|O_CREAT|O_TRUNC;
- redirfile = nsh_getfullpath(vtbl, argv[argc-1]);
- argc -= 2;
- }
-
- /* Check for redirection by appending to an existing file */
-
- else if (strcmp(argv[argc-2], g_redirect2) == 0)
- {
- vtbl->np.np_redirect = true;
- oflags = O_WRONLY|O_CREAT|O_APPEND;
- redirfile = nsh_getfullpath(vtbl, argv[argc-1]);
- argc -= 2;
- }
- }
-
- /* Check if the maximum number of arguments was exceeded */
-
- if (argc > CONFIG_NSH_MAXARGUMENTS)
- {
- nsh_output(vtbl, g_fmttoomanyargs, cmd);
- }
-
- /* Does this command correspond to an application filename?
- * nsh_fileapp() returns:
- *
- * -1 (ERROR) if the application task corresponding to 'argv[0]' could not
- * be started (possibly because it doesn not exist).
- * 0 (OK) if the application task corresponding to 'argv[0]' was
- * and successfully started. If CONFIG_SCHED_WAITPID is
- * defined, this return value also indicates that the
- * application returned successful status (EXIT_SUCCESS)
- * 1 If CONFIG_SCHED_WAITPID is defined, then this return value
- * indicates that the application task was spawned successfully
- * but returned failure exit status.
- *
- * Note the priority if not effected by nice-ness.
- */
-
-#ifdef CONFIG_NSH_FILE_APPS
- ret = nsh_fileapp(vtbl, argv[0], argv, redirfile, oflags);
- if (ret >= 0)
- {
- /* nsh_fileapp() returned 0 or 1. This means that the builtin
- * command was successfully started (although it may not have ran
- * successfully). So certainly it is not an NSH command.
- */
-
- return nsh_saveresult(vtbl, ret != OK);
- }
-
- /* No, not a built in command (or, at least, we were unable to start a
- * builtin command of that name). Treat it like an NSH command.
- */
-
-#endif
-
- /* Does this command correspond to a builtin command?
- * nsh_builtin() returns:
- *
- * -1 (ERROR) if the application task corresponding to 'argv[0]' could not
- * be started (possibly because it doesn not exist).
- * 0 (OK) if the application task corresponding to 'argv[0]' was
- * and successfully started. If CONFIG_SCHED_WAITPID is
- * defined, this return value also indicates that the
- * application returned successful status (EXIT_SUCCESS)
- * 1 If CONFIG_SCHED_WAITPID is defined, then this return value
- * indicates that the application task was spawned successfully
- * but returned failure exit status.
- *
- * Note the priority if not effected by nice-ness.
- */
-
-#if defined(CONFIG_NSH_BUILTIN_APPS) && (!defined(CONFIG_NSH_FILE_APPS) || !defined(CONFIG_FS_BINFS))
- ret = nsh_builtin(vtbl, argv[0], argv, redirfile, oflags);
- if (ret >= 0)
- {
- /* nsh_builtin() returned 0 or 1. This means that the builtin
- * command was successfully started (although it may not have ran
- * successfully). So certainly it is not an NSH command.
- */
-
- return nsh_saveresult(vtbl, ret != OK);
- }
-
- /* No, not a built in command (or, at least, we were unable to start a
- * builtin command of that name). Treat it like an NSH command.
- */
-
-#endif
-
- /* Redirected output? */
-
- if (vtbl->np.np_redirect)
- {
- /* Open the redirection file. This file will eventually
- * be closed by a call to either nsh_release (if the command
- * is executed in the background) or by nsh_undirect if the
- * command is executed in the foreground.
- */
-
- fd = open(redirfile, oflags, 0666);
- nsh_freefullpath(redirfile);
- redirfile = NULL;
-
- if (fd < 0)
- {
- nsh_output(vtbl, g_fmtcmdfailed, cmd, "open", NSH_ERRNO);
- goto errout;
- }
- }
-
- /* Handle the case where the command is executed in background.
- * However is app is to be started as builtin new process will
- * be created anyway, so skip this step.
- */
-
-#ifndef CONFIG_NSH_DISABLEBG
- if (vtbl->np.np_bg)
- {
- struct sched_param param;
- struct nsh_vtbl_s *bkgvtbl;
- struct cmdarg_s *args;
- pthread_attr_t attr;
- pthread_t thread;
-
- /* Get a cloned copy of the vtbl with reference count=1.
- * after the command has been processed, the nsh_release() call
- * at the end of nsh_child() will destroy the clone.
- */
-
- bkgvtbl = nsh_clone(vtbl);
- if (!bkgvtbl)
- {
- goto errout_with_redirect;
- }
-
- /* Create a container for the command arguments */
-
- args = nsh_cloneargs(bkgvtbl, fd, argc, argv);
- if (!args)
- {
- nsh_release(bkgvtbl);
- goto errout_with_redirect;
- }
-
- /* Handle redirection of output via a file descriptor */
-
- if (vtbl->np.np_redirect)
- {
- (void)nsh_redirect(bkgvtbl, fd, NULL);
- }
-
- /* Get the execution priority of this task */
-
- ret = sched_getparam(0, &param);
- if (ret != 0)
- {
- nsh_output(vtbl, g_fmtcmdfailed, cmd, "sched_getparm", NSH_ERRNO);
- nsh_releaseargs(args);
- nsh_release(bkgvtbl);
- goto errout;
- }
-
- /* Determine the priority to execute the command */
-
- if (vtbl->np.np_nice != 0)
- {
- int priority = param.sched_priority - vtbl->np.np_nice;
- if (vtbl->np.np_nice < 0)
- {
- int max_priority = sched_get_priority_max(SCHED_NSH);
- if (priority > max_priority)
- {
- priority = max_priority;
- }
- }
- else
- {
- int min_priority = sched_get_priority_min(SCHED_NSH);
- if (priority < min_priority)
- {
- priority = min_priority;
- }
- }
-
- param.sched_priority = priority;
- }
-
- /* Set up the thread attributes */
-
- (void)pthread_attr_init(&attr);
- (void)pthread_attr_setschedpolicy(&attr, SCHED_NSH);
- (void)pthread_attr_setschedparam(&attr, &param);
-
- /* Execute the command as a separate thread at the appropriate priority */
-
- ret = pthread_create(&thread, &attr, nsh_child, (pthread_addr_t)args);
- if (ret != 0)
- {
- nsh_output(vtbl, g_fmtcmdfailed, cmd, "pthread_create", NSH_ERRNO_OF(ret));
- nsh_releaseargs(args);
- nsh_release(bkgvtbl);
- goto errout;
- }
-
- nsh_output(vtbl, "%s [%d:%d]\n", cmd, thread, param.sched_priority);
- }
- else
-#endif
- {
- uint8_t save[SAVE_SIZE];
-
- /* Handle redirection of output via a file descriptor */
-
- if (vtbl->np.np_redirect)
- {
- nsh_redirect(vtbl, fd, save);
- }
-
- /* Then execute the command in "foreground" -- i.e., while the user waits
- * for the next prompt. nsh_execute will return:
- *
- * -1 (ERRROR) if the command was unsuccessful
- * 0 (OK) if the command was successful
- */
-
- ret = nsh_execute(vtbl, argc, argv);
-
- /* Restore the original output. Undirect will close the redirection
- * file descriptor.
- */
-
- if (vtbl->np.np_redirect)
- {
- nsh_undirect(vtbl, save);
- }
-
- /* Mark errors so that it is possible to test for non-zero return values
- * in nsh scripts.
- */
-
- if (ret < 0)
- {
- goto errout;
- }
- }
-
- /* Return success if the command succeeded (or at least, starting of the
- * command task succeeded).
- */
-
- return nsh_saveresult(vtbl, false);
-
-#ifndef CONFIG_NSH_DISABLEBG
-errout_with_redirect:
- if (vtbl->np.np_redirect)
- {
- close(fd);
- }
-#endif
-errout:
- return nsh_saveresult(vtbl, true);
-}
diff --git a/apps/nshlib/nsh_proccmds.c b/apps/nshlib/nsh_proccmds.c
deleted file mode 100644
index 487214501..000000000
--- a/apps/nshlib/nsh_proccmds.c
+++ /dev/null
@@ -1,310 +0,0 @@
-/****************************************************************************
- * apps/nshlib/nsh_proccmds.c
- *
- * Copyright (C) 2007-2009, 2011-2012 Gregory Nutt. All rights reserved.
- * Author: Gregory Nutt <gnutt@nuttx.org>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * 3. Neither the name NuttX nor the names of its contributors may be
- * used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- ****************************************************************************/
-
-/****************************************************************************
- * Included Files
- ****************************************************************************/
-
-#include <nuttx/config.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <sched.h>
-#include <errno.h>
-
-#include "nsh.h"
-#include "nsh_console.h"
-
-/****************************************************************************
- * Definitions
- ****************************************************************************/
-
-/****************************************************************************
- * Private Types
- ****************************************************************************/
-
-/* The returned value should be zero for sucess or TRUE or non zero for
- * failure or FALSE.
- */
-
-typedef int (*exec_t)(void);
-
-/****************************************************************************
- * Private Function Prototypes
- ****************************************************************************/
-
-/****************************************************************************
- * Private Data
- ****************************************************************************/
-
-#ifndef CONFIG_NSH_DISABLE_PS
-static const char *g_statenames[] =
-{
- "INVALID ",
- "PENDING ",
- "READY ",
- "RUNNING ",
- "INACTIVE",
- "WAITSEM ",
-#ifndef CONFIG_DISABLE_MQUEUE
- "WAITSIG ",
-#endif
-#ifndef CONFIG_DISABLE_MQUEUE
- "MQNEMPTY",
- "MQNFULL "
-#endif
-};
-
-static const char *g_ttypenames[4] =
-{
- "TASK ",
- "PTHREAD",
- "KTHREAD",
- "--?-- "
-};
-#endif
-
-/****************************************************************************
- * Public Data
- ****************************************************************************/
-
-/****************************************************************************
- * Private Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Name: ps_task
- ****************************************************************************/
-
-#ifndef CONFIG_NSH_DISABLE_PS
-static void ps_task(FAR _TCB *tcb, FAR void *arg)
-{
- struct nsh_vtbl_s *vtbl = (struct nsh_vtbl_s*)arg;
-#if CONFIG_MAX_TASK_ARGS > 2
- int i;
-#endif
-
- /* Show task status */
-
- nsh_output(vtbl, "%5d %3d %4s %7s%c%c %8s ",
- tcb->pid, tcb->sched_priority,
- tcb->flags & TCB_FLAG_ROUND_ROBIN ? "RR " : "FIFO",
- g_ttypenames[(tcb->flags & TCB_FLAG_TTYPE_MASK) >> TCB_FLAG_TTYPE_SHIFT],
- tcb->flags & TCB_FLAG_NONCANCELABLE ? 'N' : ' ',
- tcb->flags & TCB_FLAG_CANCEL_PENDING ? 'P' : ' ',
- g_statenames[tcb->task_state]);
-
- /* Show task name and arguments */
-
- nsh_output(vtbl, "%s(", tcb->argv[0]);
-
- /* Special case 1st argument (no comma) */
-
- if (tcb->argv[1])
- {
- nsh_output(vtbl, "%p", tcb->argv[1]);
- }
-
- /* Then any additional arguments */
-
-#if CONFIG_MAX_TASK_ARGS > 2
- for (i = 2; i <= CONFIG_MAX_TASK_ARGS && tcb->argv[i]; i++)
- {
- nsh_output(vtbl, ", %p", tcb->argv[i]);
- }
-#endif
- nsh_output(vtbl, ")\n");
-}
-#endif
-
-/****************************************************************************
- * Public Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Name: cmd_exec
- ****************************************************************************/
-
-#ifndef CONFIG_NSH_DISABLE_EXEC
-int cmd_exec(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
-{
- char *endptr;
- uintptr_t addr;
-
- addr = (uintptr_t)strtol(argv[1], &endptr, 0);
- if (!addr || endptr == argv[1] || *endptr != '\0')
- {
- nsh_output(vtbl, g_fmtarginvalid, argv[0]);
- return ERROR;
- }
-
- nsh_output(vtbl, "Calling %p\n", (exec_t)addr);
- return ((exec_t)addr)();
-}
-#endif
-
-/****************************************************************************
- * Name: cmd_ps
- ****************************************************************************/
-
-#ifndef CONFIG_NSH_DISABLE_PS
-int cmd_ps(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
-{
- nsh_output(vtbl, "PID PRI SCHD TYPE NP STATE NAME\n");
- sched_foreach(ps_task, vtbl);
- return OK;
-}
-#endif
-
-/****************************************************************************
- * Name: cmd_kill
- ****************************************************************************/
-
-#ifndef CONFIG_DISABLE_SIGNALS
-#ifndef CONFIG_NSH_DISABLE_KILL
-int cmd_kill(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
-{
- char *ptr;
- char *endptr;
- long signal;
- long pid;
-
- /* Check incoming parameters. The first parameter should be "-<signal>" */
-
- ptr = argv[1];
- if (*ptr != '-' || ptr[1] < '0' || ptr[1] > '9')
- {
- goto invalid_arg;
- }
-
- /* Extract the signal number */
-
- signal = strtol(&ptr[1], &endptr, 0);
-
- /* The second parameter should be <pid> */
-
- ptr = argv[2];
- if (*ptr < '0' || *ptr > '9')
- {
- goto invalid_arg;
- }
-
- /* Extract athe pid */
-
- pid = strtol(ptr, &endptr, 0);
-
- /* Send the signal. Kill return values:
- *
- * EINVAL An invalid signal was specified.
- * EPERM The process does not have permission to send the signal to any
- * of the target processes.
- * ESRCH The pid or process group does not exist.
- * ENOSYS Do not support sending signals to process groups.
- */
-
- if (kill((pid_t)pid, (int)signal) == 0)
- {
- return OK;
- }
-
- switch (errno)
- {
- case EINVAL:
- goto invalid_arg;
-
- case ESRCH:
- nsh_output(vtbl, g_fmtnosuch, argv[0], "task", argv[2]);
- return ERROR;
-
- case EPERM:
- case ENOSYS:
- default:
- nsh_output(vtbl, g_fmtcmdfailed, argv[0], "kill", NSH_ERRNO);
- return ERROR;
- }
-
-invalid_arg:
- nsh_output(vtbl, g_fmtarginvalid, argv[0]);
- return ERROR;
-}
-#endif
-#endif
-
-/****************************************************************************
- * Name: cmd_sleep
- ****************************************************************************/
-
-#ifndef CONFIG_DISABLE_SIGNALS
-#ifndef CONFIG_NSH_DISABLE_SLEEP
-int cmd_sleep(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
-{
- char *endptr;
- long secs;
-
- secs = strtol(argv[1], &endptr, 0);
- if (!secs || endptr == argv[1] || *endptr != '\0')
- {
- nsh_output(vtbl, g_fmtarginvalid, argv[0]);
- return ERROR;
- }
- sleep(secs);
- return OK;
-}
-#endif
-#endif
-
-/****************************************************************************
- * Name: cmd_usleep
- ****************************************************************************/
-
-#ifndef CONFIG_DISABLE_SIGNALS
-#ifndef CONFIG_NSH_DISABLE_USLEEP
-int cmd_usleep(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
-{
- char *endptr;
- long usecs;
-
- usecs = strtol(argv[1], &endptr, 0);
- if (!usecs || endptr == argv[1] || *endptr != '\0')
- {
- nsh_output(vtbl, g_fmtarginvalid, argv[0]);
- return ERROR;
- }
- usleep(usecs);
- return OK;
-}
-#endif
-#endif
diff --git a/apps/nshlib/nsh_romfsetc.c b/apps/nshlib/nsh_romfsetc.c
deleted file mode 100644
index 4134b45a3..000000000
--- a/apps/nshlib/nsh_romfsetc.c
+++ /dev/null
@@ -1,124 +0,0 @@
-/****************************************************************************
- * apps/nshlib/nsh_romfsetc.c
- *
- * Copyright (C) 2008-2012 Gregory Nutt. All rights reserved.
- * Author: Gregory Nutt <gnutt@nuttx.org>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * 3. Neither the name NuttX nor the names of its contributors may be
- * used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- ****************************************************************************/
-
-/****************************************************************************
- * Included Files
- ****************************************************************************/
-
-#include <nuttx/config.h>
-
-#include <sys/mount.h>
-#include <debug.h>
-#include <errno.h>
-
-#include <nuttx/ramdisk.h>
-
-#include "nsh.h"
-
-#ifdef CONFIG_NSH_ROMFSETC
-
-/* Should we use the default ROMFS image? Or a custom, board-specific
- * ROMFS image?
- */
-
-#ifdef CONFIG_NSH_ARCHROMFS
-# include <arch/board/nsh_romfsimg.h>
-#else
-# include "nsh_romfsimg.h"
-#endif
-
-/****************************************************************************
- * Definitions
- ****************************************************************************/
-
-/****************************************************************************
- * Private Types
- ****************************************************************************/
-
-/****************************************************************************
- * Private Function Prototypes
- ****************************************************************************/
-
-/****************************************************************************
- * Private Data
- ****************************************************************************/
-
-/****************************************************************************
- * Public Data
- ****************************************************************************/
-
-/****************************************************************************
- * Private Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Public Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Name: nsh_romfsetc
- ****************************************************************************/
-
-int nsh_romfsetc(void)
-{
- int ret;
-
- /* Create a ROM disk for the /etc filesystem */
-
- ret = romdisk_register(CONFIG_NSH_ROMFSDEVNO, romfs_img,
- NSECTORS(romfs_img_len), CONFIG_NSH_ROMFSSECTSIZE);
- if (ret < 0)
- {
- dbg("nsh: romdisk_register failed: %d\n", -ret);
- return ERROR;
- }
-
- /* Mount the file system */
-
- vdbg("Mounting ROMFS filesystem at target=%s with source=%s\n",
- CONFIG_NSH_ROMFSMOUNTPT, MOUNT_DEVNAME);
-
- ret = mount(MOUNT_DEVNAME, CONFIG_NSH_ROMFSMOUNTPT, "romfs", MS_RDONLY, NULL);
- if (ret < 0)
- {
- dbg("nsh: mount(%s,%s,romfs) failed: %d\n",
- MOUNT_DEVNAME, CONFIG_NSH_ROMFSMOUNTPT, errno);
- return ERROR;
- }
- return OK;
-}
-
-#endif /* CONFIG_NSH_ROMFSETC */
-
diff --git a/apps/nshlib/nsh_romfsimg.h b/apps/nshlib/nsh_romfsimg.h
deleted file mode 100644
index 49b0ad166..000000000
--- a/apps/nshlib/nsh_romfsimg.h
+++ /dev/null
@@ -1,89 +0,0 @@
-unsigned char romfs_img[] = {
- 0x2d, 0x72, 0x6f, 0x6d, 0x31, 0x66, 0x73, 0x2d, 0x00, 0x00, 0x01, 0x50,
- 0x9f, 0x13, 0x82, 0x87, 0x4e, 0x53, 0x48, 0x49, 0x6e, 0x69, 0x74, 0x56,
- 0x6f, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49,
- 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0xd1, 0xff, 0xff, 0x97,
- 0x2e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x20,
- 0x00, 0x00, 0x00, 0x00, 0xd1, 0xd1, 0xff, 0x80, 0x2e, 0x2e, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00,
- 0x68, 0x2d, 0x96, 0x03, 0x69, 0x6e, 0x69, 0x74, 0x2e, 0x64, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0,
- 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0xd1, 0xff, 0xff, 0x00,
- 0x2e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x3a, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x6e, 0x8d, 0x9c, 0xab, 0x58, 0x72, 0x63, 0x53, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x23, 0x20, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x61, 0x20, 0x52,
- 0x41, 0x4d, 0x44, 0x49, 0x53, 0x4b, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6d,
- 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x69, 0x74, 0x20, 0x61, 0x74, 0x20, 0x2f,
- 0x74, 0x6d, 0x70, 0x0a, 0x0a, 0x6d, 0x6b, 0x72, 0x64, 0x20, 0x2d, 0x6d,
- 0x20, 0x32, 0x20, 0x2d, 0x73, 0x20, 0x35, 0x31, 0x32, 0x20, 0x31, 0x30,
- 0x32, 0x34, 0x0a, 0x6d, 0x6b, 0x66, 0x61, 0x74, 0x66, 0x73, 0x20, 0x2f,
- 0x64, 0x65, 0x76, 0x2f, 0x72, 0x61, 0x6d, 0x32, 0x0a, 0x6d, 0x6f, 0x75,
- 0x6e, 0x74, 0x20, 0x2d, 0x74, 0x20, 0x76, 0x66, 0x61, 0x74, 0x20, 0x2f,
- 0x64, 0x65, 0x76, 0x2f, 0x72, 0x61, 0x6d, 0x32, 0x20, 0x2f, 0x74, 0x6d,
- 0x70, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20,
- 0x00, 0x00, 0x00, 0x00, 0xd1, 0xd1, 0xff, 0xe0, 0x2e, 0x2e, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00
-};
-unsigned int romfs_img_len = 1024;
diff --git a/apps/nshlib/nsh_script.c b/apps/nshlib/nsh_script.c
deleted file mode 100644
index 3aa698b31..000000000
--- a/apps/nshlib/nsh_script.c
+++ /dev/null
@@ -1,195 +0,0 @@
-/****************************************************************************
- * apps/nshlib/nsh_script.c
- *
- * Copyright (C) 2007-2009, 2011-2013 Gregory Nutt. All rights reserved.
- * Author: Gregory Nutt <gnutt@nuttx.org>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * 3. Neither the name NuttX nor the names of its contributors may be
- * used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- ****************************************************************************/
-
-/****************************************************************************
- * Included Files
- ****************************************************************************/
-
-#include <nuttx/config.h>
-
-#include "nsh.h"
-#include "nsh_console.h"
-
-#if CONFIG_NFILE_DESCRIPTORS > 0 && CONFIG_NFILE_STREAMS > 0 && !defined(CONFIG_NSH_DISABLESCRIPT)
-
-/****************************************************************************
- * Definitions
- ****************************************************************************/
-
-/****************************************************************************
- * Private Types
- ****************************************************************************/
-
-/****************************************************************************
- * Private Function Prototypes
- ****************************************************************************/
-
-/****************************************************************************
- * Private Data
- ****************************************************************************/
-
-/****************************************************************************
- * Public Data
- ****************************************************************************/
-
-/****************************************************************************
- * Private Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Public Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Name: nsh_script
- *
- * Description:
- * Execute the NSH script at path.
- *
- ****************************************************************************/
-
-int nsh_script(FAR struct nsh_vtbl_s *vtbl, FAR const char *cmd,
- FAR const char *path)
-{
- char *fullpath;
- FILE *stream;
- char *buffer;
- char *pret;
- int ret = ERROR;
-
- /* The path to the script may be relative to the current working directory */
-
- fullpath = nsh_getfullpath(vtbl, path);
- if (!fullpath)
- {
- return ERROR;
- }
-
- /* Get a reference to the common input buffer */
-
- buffer = nsh_linebuffer(vtbl);
- if (buffer)
- {
- /* Open the file containing the script */
-
- stream = fopen(fullpath, "r");
- if (!stream)
- {
- nsh_output(vtbl, g_fmtcmdfailed, cmd, "fopen", NSH_ERRNO);
- nsh_freefullpath(fullpath);
- return ERROR;
- }
-
- /* Loop, processing each command line in the script file (or
- * until an error occurs)
- */
-
- do
- {
- /* Get the next line of input from the file */
-
- fflush(stdout);
- pret = fgets(buffer, CONFIG_NSH_LINELEN, stream);
- if (pret)
- {
- /* Parse process the command. NOTE: this is recursive...
- * we got to cmd_sh via a call to nsh_parse. So some
- * considerable amount of stack may be used.
- */
-
- ret = nsh_parse(vtbl, buffer);
- }
- }
- while (pret && ret == OK);
- fclose(stream);
- }
-
- nsh_freefullpath(fullpath);
- return ret;
-}
-
-/****************************************************************************
- * Name: nsh_initscript
- *
- * Description:
- * Attempt to execute the configured initialization script. This script
- * should be executed once when NSH starts. nsh_initscript is idempotent
- * and may, however, be called multiple times (the script will be executed
- * once.
- *
- ****************************************************************************/
-
-#ifdef CONFIG_NSH_ROMFSETC
-int nsh_initscript(FAR struct nsh_vtbl_s *vtbl)
-{
- static bool initialized;
- bool already;
- int ret = OK;
-
- /* Atomic test and set of the initialized flag */
-
- sched_lock();
- already = initialized;
- initialized = true;
- sched_unlock();
-
- /* If we have not already executed the init script, then do so now */
-
- if (!already)
- {
- ret = nsh_script(vtbl, "init", NSH_INITPATH);
- }
-
- return ret;
-}
-
-/****************************************************************************
- * Name: nsh_loginscript
- *
- * Description:
- * Attempt to execute the configured login script. This script
- * should be executed when each NSH session starts.
- *
- ****************************************************************************/
-
-#ifdef CONFIG_NSH_ROMFSRC
-int nsh_loginscript(FAR struct nsh_vtbl_s *vtbl)
-{
- return nsh_script(vtbl, "login", NSH_RCPATH);
-}
-#endif
-#endif /* CONFIG_NSH_ROMFSETC */
-
-#endif /* CONFIG_NFILE_DESCRIPTORS > 0 && CONFIG_NFILE_STREAMS > 0 && !CONFIG_NSH_DISABLESCRIPT */
diff --git a/apps/nshlib/nsh_session.c b/apps/nshlib/nsh_session.c
deleted file mode 100644
index 8079b2de5..000000000
--- a/apps/nshlib/nsh_session.c
+++ /dev/null
@@ -1,163 +0,0 @@
-/****************************************************************************
- * apps/nshlib/nsh_session.c
- *
- * Copyright (C) 2007-2009, 2011-2013 Gregory Nutt. All rights reserved.
- * Author: Gregory Nutt <gnutt@nuttx.org>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * 3. Neither the name Gregory Nutt nor the names of its contributors may be
- * used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- ****************************************************************************/
-
-/****************************************************************************
- * Included Files
- ****************************************************************************/
-
-#include <nuttx/config.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include <apps/readline.h>
-
-#include "nsh.h"
-#include "nsh_console.h"
-
-/****************************************************************************
- * Pre-processor Definitions
- ****************************************************************************/
-
-/****************************************************************************
- * Private Types
- ****************************************************************************/
-
-/****************************************************************************
- * Private Function Prototypes
- ****************************************************************************/
-
-/****************************************************************************
- * Private Data
- ****************************************************************************/
-
-/****************************************************************************
- * Public Data
- ****************************************************************************/
-
-/****************************************************************************
- * Private Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Public Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Name: nsh_session
- *
- * Description:
- * This is the common session logic or any NSH session. This function
- * return when an error reading from the input stream occurs, presumably
- * signaling the end of the session.
- *
- * This function:
- * - Executes the NSH logic script
- * - Presents a greeting
- * - Then provides a prompt then gets and processes the command line.
- * - This continues until an error occurs, then the session returns.
- *
- * Input Parameters:
- * pstate - Abstracts the underlying session.
- *
- * Returned Values:
- * EXIT_SUCESS or EXIT_FAILURE is returned.
- *
- ****************************************************************************/
-
-int nsh_session(FAR struct console_stdio_s *pstate)
-{
- int ret;
-
- DEBUGASSERT(pstate);
-
- /* Present a greeting */
-
- fputs(g_nshgreeting, pstate->cn_outstream);
- fflush(pstate->cn_outstream);
-
- /* Execute the login script */
-
-#ifdef CONFIG_NSH_ROMFSRC
- (void)nsh_loginscript(&pstate->cn_vtbl);
-#endif
-
- /* Then enter the command line parsing loop */
-
- for (;;)
- {
- /* For the case of debugging the USB console... dump collected USB trace data */
-
-#ifdef CONFIG_NSH_USBDEV_TRACE
- nsh_usbtrace();
-#endif
-
- /* Display the prompt string */
-
- fputs(g_nshprompt, pstate->cn_outstream);
- fflush(pstate->cn_outstream);
-
- /* Get the next line of input */
-
- ret = readline(pstate->cn_line, CONFIG_NSH_LINELEN,
- INSTREAM(pstate), OUTSTREAM(pstate));
- if (ret > 0)
- {
- /* Parse process the command */
-
- (void)nsh_parse(&pstate->cn_vtbl, pstate->cn_line);
- fflush(pstate->cn_outstream);
- }
-
- /* Readline normally returns the number of characters read,
- * but will return 0 on end of file or a negative value
- * if an error occurs. Either will cause the session to
- * terminate.
- */
-
- else
- {
- fprintf(pstate->cn_outstream, g_fmtcmdfailed, "nsh_session",
- "readline", NSH_ERRNO_OF(-ret));
- return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
- }
- }
-
- /* We do not get here, but this is necessary to keep some compilers happy.
- * But others will complain that this code is not reachable.
- */
-
- return EXIT_SUCCESS;
-}
diff --git a/apps/nshlib/nsh_telnetd.c b/apps/nshlib/nsh_telnetd.c
deleted file mode 100644
index 76ed81086..000000000
--- a/apps/nshlib/nsh_telnetd.c
+++ /dev/null
@@ -1,318 +0,0 @@
-/****************************************************************************
- * apps/nshlib/nsh_telnetd.c
- *
- * Copyright (C) 2007-2013 Gregory Nutt. All rights reserved.
- * Author: Gregory Nutt <gnutt@nuttx.org>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * 3. Neither the name Gregory Nutt nor the names of its contributors may be
- * used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- ****************************************************************************/
-
-/****************************************************************************
- * Included Files
- ****************************************************************************/
-
-#include <nuttx/config.h>
-
-#include <stdio.h>
-#include <unistd.h>
-#include <assert.h>
-#include <debug.h>
-#include <string.h>
-
-#include <apps/netutils/telnetd.h>
-
-#include "nsh.h"
-#include "nsh_console.h"
-
-#ifdef CONFIG_NSH_TELNET
-
-/****************************************************************************
- * Pre-processor Definitions
- ****************************************************************************/
-
-#ifdef CONFIG_NSH_TELNET_LOGIN
-
-# define TELNET_IAC 255
-# define TELNET_WILL 251
-# define TELNET_WONT 252
-# define TELNET_DO 253
-# define TELNET_DONT 254
-# define TELNET_USE_ECHO 1
-# define TELNET_NOTUSE_ECHO 0
-
-#endif /* CONFIG_NSH_TELNET_LOGIN */
-
-/****************************************************************************
- * Private Types
- ****************************************************************************/
-
-/****************************************************************************
- * Private Function Prototypes
- ****************************************************************************/
-
-/****************************************************************************
- * Private Data
- ****************************************************************************/
-
-/****************************************************************************
- * Public Data
- ****************************************************************************/
-
-/****************************************************************************
- * Private Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Name: nsh_telnetecho
- ****************************************************************************/
-
-#ifdef CONFIG_NSH_TELNET_LOGIN
-void nsh_telnetecho(struct console_stdio_s *pstate, uint8_t is_use)
-{
- uint8_t optbuf[4];
- optbuf[0] = TELNET_IAC;
- optbuf[1] = (is_use == TELNET_USE_ECHO) ? TELNET_WILL : TELNET_DO;
- optbuf[2] = 1;
- optbuf[3] = 0;
- fputs((char *)optbuf, pstate->cn_outstream);
- fflush(pstate->cn_outstream);
-}
-#endif
-
-/****************************************************************************
- * Name: nsh_telnetlogin
- ****************************************************************************/
-
-#ifdef CONFIG_NSH_TELNET_LOGIN
-int nsh_telnetlogin(struct console_stdio_s *pstate)
-{
- char username[16];
- char password[16];
- uint8_t i;
-
- /* Present the NSH Telnet greeting */
-
- fputs(g_telnetgreeting, pstate->cn_outstream);
- fflush(pstate->cn_outstream);
-
- /* Loop for the configured number of retries */
-
- for(i = 0; i < CONFIG_NSH_TELNET_FAILCOUNT; i++)
- {
- /* Ask for the login username */
-
- fputs(g_userprompt, pstate->cn_outstream);
- fflush(pstate->cn_outstream);
- if (fgets(pstate->cn_line, CONFIG_NSH_LINELEN, INSTREAM(pstate)) != NULL)
- {
- strcpy(username, pstate->cn_line);
- username[strlen(pstate->cn_line) - 1] = 0;
- }
-
- /* Ask for the login password */
-
- fputs(g_passwordprompt, pstate->cn_outstream);
- fflush(pstate->cn_outstream);
- nsh_telnetecho(pstate, TELNET_NOTUSE_ECHO);
- if (fgets(pstate->cn_line, CONFIG_NSH_LINELEN, INSTREAM(pstate)) != NULL)
- {
- /* Verify the username and password */
-
- strcpy(password,pstate->cn_line);
- password[strlen(pstate->cn_line) - 1] = 0;
-
- if (strcmp(password, CONFIG_NSH_TELNET_PASSWORD) == 0 &&
- strcmp(username, CONFIG_NSH_TELNET_USERNAME) == 0)
- {
- fputs(g_loginsuccess, pstate->cn_outstream);
- fflush(pstate->cn_outstream);
- nsh_telnetecho(pstate, TELNET_USE_ECHO);
- return OK;
- }
- else
- {
- fputs(g_badcredentials, pstate->cn_outstream);
- fflush(pstate->cn_outstream);
- }
- }
-
- nsh_telnetecho(pstate, TELNET_USE_ECHO);
- }
-
- /* Too many failed login attempts */
-
- fputs(g_loginfailure, pstate->cn_outstream);
- fflush(pstate->cn_outstream);
- return -1;
-}
-#endif /* CONFIG_NSH_TELNET_LOGIN */
-
-/****************************************************************************
- * Public Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Name: nsh_telnetmain
- ****************************************************************************/
-
-int nsh_telnetmain(int argc, char *argv[])
-{
- FAR struct console_stdio_s *pstate = nsh_newconsole();
- DEBUGASSERT(pstate != NULL);
-
- dbg("Session [%d] Started\n", getpid());
-
- /* Login User and Password Check */
-
-#ifdef CONFIG_NSH_TELNET_LOGIN
- if (nsh_telnetlogin(pstate) != OK)
- {
- nsh_exit(&pstate->cn_vtbl, 1);
- return -1; /* nsh_exit does not return */
- }
-#endif /* CONFIG_NSH_TELNET_LOGIN */
-
- /* The following logic mostly the same as the login in nsh_session.c. It
- * differs only in that gets() is called to get the command instead of
- * readline().
- */
-
- /* Present the NSH greeting */
-
- fputs(g_nshgreeting, pstate->cn_outstream);
- fflush(pstate->cn_outstream);
-
- /* Execute the startup script. If standard console is also defined, then
- * we will not bother with the initscript here (although it is safe to
- * call nshinitscript multiple times).
- */
-
-#if defined(CONFIG_NSH_ROMFSETC) && !defined(CONFIG_NSH_CONSOLE)
- (void)nsh_initscript(&pstate->cn_vtbl);
-#endif
-
- /* Execute the login script */
-
-#ifdef CONFIG_NSH_ROMFSRC
- (void)nsh_loginscript(&pstate->cn_vtbl);
-#endif
-
- /* Then enter the command line parsing loop */
-
- for (;;)
- {
- /* Display the prompt string */
-
- fputs(g_nshprompt, pstate->cn_outstream);
- fflush(pstate->cn_outstream);
-
- /* Get the next line of input from the Telnet client */
-
- if (fgets(pstate->cn_line, CONFIG_NSH_LINELEN, INSTREAM(pstate)) != NULL)
- {
- /* Parse process the received Telnet command */
-
- (void)nsh_parse(&pstate->cn_vtbl, pstate->cn_line);
- fflush(pstate->cn_outstream);
- }
- else
- {
- fprintf(pstate->cn_outstream, g_fmtcmdfailed, "nsh_telnetmain",
- "fgets", NSH_ERRNO);
- nsh_exit(&pstate->cn_vtbl, 1);
- }
- }
-
- /* Clean up */
-
- nsh_exit(&pstate->cn_vtbl, 0);
-
- /* We do not get here, but this is necessary to keep some compilers happy */
-
- return OK;
-}
-
-/****************************************************************************
- * Public Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Name: nsh_telnetstart
- *
- * Description:
- * nsh_telnetstart() starts the Telnet daemon that will allow multiple
- * NSH connections via Telnet. This function returns immediately after
- * the daemon has been started.
- *
- * Input Parameters:
- * None. All of the properties of the Telnet daemon are controlled by
- * NuttX configuration setting.
- *
- * Returned Values:
- * The task ID of the Telnet daemon was successfully started. A negated
- * errno value will be returned on failure.
- *
- ****************************************************************************/
-
-int nsh_telnetstart(void)
-{
- struct telnetd_config_s config;
- int ret;
-
- /* Initialize any USB tracing options that were requested. If standard
- * console is also defined, then we will defer this step to the standard
- * console.
- */
-
-#if defined(CONFIG_NSH_USBDEV_TRACE) && !defined(CONFIG_NSH_CONSOLE)
- usbtrace_enable(TRACE_BITSET);
-#endif
-
- /* Configure the telnet daemon */
-
- config.d_port = HTONS(CONFIG_NSH_TELNETD_PORT);
- config.d_priority = CONFIG_NSH_TELNETD_DAEMONPRIO;
- config.d_stacksize = CONFIG_NSH_TELNETD_DAEMONSTACKSIZE;
- config.t_priority = CONFIG_NSH_TELNETD_CLIENTPRIO;
- config.t_stacksize = CONFIG_NSH_TELNETD_CLIENTSTACKSIZE;
- config.t_entry = nsh_telnetmain;
-
- /* Start the telnet daemon */
-
- vdbg("Starting the Telnet daemon\n");
- ret = telnetd_start(&config);
- if (ret < 0)
- {
- dbg("Failed to tart the Telnet daemon: %d\n", ret);
- }
-
- return ret;
-}
-
-#endif /* CONFIG_NSH_TELNET */
diff --git a/apps/nshlib/nsh_test.c b/apps/nshlib/nsh_test.c
deleted file mode 100644
index 6e1b65e5f..000000000
--- a/apps/nshlib/nsh_test.c
+++ /dev/null
@@ -1,438 +0,0 @@
-/****************************************************************************
- * apps/nshlib/nsh_test.c
- *
- * Copyright (C) 2008, 2011-2012 Gregory Nutt. All rights reserved.
- * Author: Gregory Nutt <gnutt@nuttx.org>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * 3. Neither the name NuttX nor the names of its contributors may be
- * used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- ****************************************************************************/
-
-/* Test syntax:
- *
- * expression = simple-expression | !expression |
- * expression -o expression | expression -a expression
- *
- * simple-expression = unary-expression | binary-expression
- *
- * unary-expression = string-unary | file-unary
- *
- * string-unary = -n string | -z string
- *
- * file-unary = -b file | -c file | -d file | -e file | -f file |
- * -r file | -s file | -w file
- *
- * binary-expression = string-binary | numeric-binary
- *
- * string-binary = string = string | string == string | string != string
- *
- * numeric-binary = integer -eq integer | integer -ge integer |
- * integer -gt integer | integer -le integer |
- * integer -lt integer | integer -ne integer
- *
- * Note that the smallest expression consists of two strings.
- */
-
-/****************************************************************************
- * Included Files
- ****************************************************************************/
-
-#include <nuttx/config.h>
-
-#include <sys/stat.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "nsh.h"
-#include "nsh_console.h"
-
-#if !defined(CONFIG_NSH_DISABLESCRIPT) && !defined(CONFIG_NSH_DISABLE_TEST)
-
-/****************************************************************************
- * Definitions
- ****************************************************************************/
-
-#define TEST_TRUE OK
-#define TEST_FALSE ERROR
-#define TEST_ERROR 1
-
-/****************************************************************************
- * Private Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Name: binaryexpression
- ****************************************************************************/
-
-static inline int binaryexpression(FAR struct nsh_vtbl_s *vtbl, char **argv)
-{
- char *endptr;
- long integer1;
- long integer2;
-
- /* STRING2 = STRING2 */
-
- if (strcmp(argv[1], "=") == 0 || strcmp(argv[1], "==") == 0)
- {
- /* Return true if the strings are identical */
-
- return strcmp(argv[0], argv[2]) == 0 ? TEST_TRUE : TEST_FALSE;
- }
-
- /* STRING1 != STRING2 */
-
- if (strcmp(argv[1], "!=") == 0)
- {
- /* Return true if the strings are different */
-
- return strcmp(argv[0], argv[2]) != 0 ? TEST_TRUE : TEST_FALSE;
- }
-
- /* The remaining operators assuming that the two values are integers */
-
- integer1 = strtol(argv[0], &endptr, 0);
- if (argv[0][0] == '\0' || *endptr != '\0')
- {
- return TEST_ERROR;
- }
-
- integer2 = strtol(argv[2], &endptr, 0);
- if (argv[2][0] == '\0' || *endptr != '\0')
- {
- return TEST_ERROR;
- }
-
- /* INTEGER1 -eq INTEGER2 */
-
- if (strcmp(argv[1], "-eq") == 0)
- {
- /* Return true if the strings are different */
-
- return integer1 == integer2 ? TEST_TRUE : TEST_FALSE;
- }
-
- /* INTEGER1 -ge INTEGER2 */
-
- if (strcmp(argv[1], "-ge") == 0)
- {
- /* Return true if the strings are different */
-
- return integer1 >= integer2 ? TEST_TRUE : TEST_FALSE;
- }
-
- /* INTEGER1 -gt INTEGER2 */
-
- if (strcmp(argv[1], "-gt") == 0)
- {
- /* Return true if the strings are different */
-
- return integer1 > integer2 ? TEST_TRUE : TEST_FALSE;
- }
-
- /* INTEGER1 -le INTEGER2 */
-
- if (strcmp(argv[1], "-le") == 0)
- {
- /* Return true if the strings are different */
-
- return integer1 <= integer2 ? TEST_TRUE : TEST_FALSE;
- }
-
- /* INTEGER1 -lt INTEGER2 */
-
- if (strcmp(argv[1], "-lt") == 0)
- {
- /* Return true if the strings are different */
-
- return integer1 < integer2 ? TEST_TRUE : TEST_FALSE;
- }
-
- /* INTEGER1 -ne INTEGER2 */
-
- if (strcmp(argv[1], "-ne") == 0)
- {
- /* Return true if the strings are different */
-
- return integer1 != integer2 ? TEST_TRUE : TEST_FALSE;
- }
-
- return TEST_ERROR;
-}
-
-/****************************************************************************
- * Name: unaryexpression
- ****************************************************************************/
-
-static inline int unaryexpression(FAR struct nsh_vtbl_s *vtbl, char **argv)
-{
- struct stat buf;
- char *fullpath;
- int ret;
-
- /* -n STRING */
-
- if (strcmp(argv[0], "-n") == 0)
- {
- /* Return true if the length of the string is non-zero */
-
- return strlen(argv[1]) != 0 ? TEST_TRUE : TEST_FALSE;
- }
-
- /* -z STRING */
-
- if (strcmp(argv[0], "-z") == 0)
- {
- /* Return true if the length of the string is zero */
-
- return strlen(argv[1]) == 0 ? TEST_TRUE : TEST_FALSE;
- }
-
- /* All of the remaining assume that the following argument is the
- * path to a file.
- */
-
- fullpath = nsh_getfullpath(vtbl, argv[1]);
- if (!fullpath)
- {
- return TEST_FALSE;
- }
-
- ret = stat(fullpath, &buf);
- nsh_freefullpath(fullpath);
-
- if (ret != 0)
- {
- /* The file does not exist (or another error occurred) -- return FALSE */
-
- return TEST_FALSE;
- }
-
- /* -b FILE */
-
- if (strcmp(argv[0], "-b") == 0)
- {
- /* Return true if the path is a block device */
-
- return S_ISBLK(buf.st_mode) ? TEST_TRUE : TEST_FALSE;
- }
-
- /* -c FILE */
-
- if (strcmp(argv[0], "-c") == 0)
- {
- /* Return true if the path is a character device */
-
- return S_ISCHR(buf.st_mode) ? TEST_TRUE : TEST_FALSE;
- }
-
- /* -d FILE */
-
- if (strcmp(argv[0], "-d") == 0)
- {
- /* Return true if the path is a directory */
-
- return S_ISDIR(buf.st_mode) ? TEST_TRUE : TEST_FALSE;
- }
-
- /* -e FILE */
-
- if (strcmp(argv[0], "-e") == 0)
- {
- /* Return true if the file exists */
-
- return TEST_TRUE;
- }
-
- /* -f FILE */
-
- if (strcmp(argv[0], "-f") == 0)
- {
- /* Return true if the path refers to a regular file */
-
- return S_ISREG(buf.st_mode) ? TEST_TRUE : TEST_FALSE;
- }
-
- /* -r FILE */
-
- if (strcmp(argv[0], "-r") == 0)
- {
- /* Return true if the file is readable */
-
- return (buf.st_mode & (S_IRUSR|S_IRGRP|S_IROTH)) != 0 ? TEST_TRUE : TEST_FALSE;
- }
-
- /* -s FILE */
-
- if (strcmp(argv[0], "-s") == 0)
- {
- /* Return true if the size of the file is greater than zero */
-
- return buf.st_size > 0 ? TEST_TRUE : TEST_FALSE;
- }
-
- /* -w FILE */
-
- if (strcmp(argv[0], "-w") == 0)
- {
- /* Return true if the file is write-able */
-
- return (buf.st_mode & (S_IWUSR|S_IWGRP|S_IWOTH)) != 0 ? TEST_TRUE : TEST_FALSE;
- }
-
- /* Unrecognized operator */
-
- return TEST_ERROR;
-}
-
-/****************************************************************************
- * Name: expression
- ****************************************************************************/
-
-static int expression(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
-{
- int value;
- int i = 0;
-
- /* Check for unary operations on expressions */
-
- if (strcmp(argv[0], "!") == 0)
- {
- if (argc < 2)
- {
- goto errout_syntax;
- }
- return expression(vtbl, argc-1, &argv[1]) == TEST_TRUE ? TEST_FALSE : TEST_TRUE;
- }
-
- /* Check for unary operations on simple, typed arguments */
-
- else if (argv[0][0] == '-')
- {
- if (argc < 2)
- {
- goto errout_syntax;
- }
- i += 2;
- value = unaryexpression(vtbl, argv);
- }
-
- /* Check for binary operations on simple, typed arguments */
-
- else
- {
- if (argc < 3)
- {
- goto errout_syntax;
- }
- i += 3;
- value = binaryexpression(vtbl, argv);
- }
-
- /* Test if there any failure */
-
- if (value == TEST_ERROR)
- {
- goto errout_syntax;
- }
-
- /* Is there anything after the simple expression? */
-
- if (i < argc)
- {
- /* EXPRESSION -a EXPRESSION */
-
- if (strcmp(argv[i], "-a") == 0)
- {
- if (value != TEST_TRUE)
- {
- return TEST_FALSE;
- }
- else
- {
- i++;
- return expression(vtbl, argc-i, &argv[i]);
- }
- }
-
- /* EXPRESSION -o EXPRESSION */
-
- else if (strcmp(argv[i], "-o") == 0)
- {
- if (value == TEST_TRUE)
- {
- return TEST_TRUE;
- }
- else
- {
- i++;
- return expression(vtbl, argc-i, &argv[i]);
- }
- }
- else
- {
- goto errout_syntax;
- }
- }
- return value;
-
-errout_syntax:
- nsh_output(vtbl, g_nshsyntax, "test");
- return TEST_FALSE;
-}
-
-/****************************************************************************
- * Public Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Name: cmd_test
- ****************************************************************************/
-
-int cmd_test(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
-{
- return expression(vtbl, argc-1, &argv[1]);
-}
-
-/****************************************************************************
- * Name: cmd_lbracket
- ****************************************************************************/
-
-int cmd_lbracket(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
-{
- if (strcmp(argv[argc-1], "]") != 0)
- {
- nsh_output(vtbl, g_nshsyntax, argv[0]);
- return ERROR;
- }
- else
- {
- return expression(vtbl, argc-2, &argv[1]);
- }
-}
-
-#endif /* !CONFIG_NSH_DISABLESCRIPT && !CONFIG_NSH_DISABLE_TEST */
diff --git a/apps/nshlib/nsh_timcmds.c b/apps/nshlib/nsh_timcmds.c
deleted file mode 100644
index bc2bda6f4..000000000
--- a/apps/nshlib/nsh_timcmds.c
+++ /dev/null
@@ -1,331 +0,0 @@
-/****************************************************************************
- * apps/nshlib/dbg_timcmds.c
- *
- * Copyright (C) 2011-2012 Gregory Nutt. All rights reserved.
- * Author: Gregory Nutt <gnutt@nuttx.org>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * 3. Neither the name NuttX nor the names of its contributors may be
- * used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- ****************************************************************************/
-
-/****************************************************************************
- * Included Files
- ****************************************************************************/
-
-#include <nuttx/config.h>
-
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <time.h>
-
-#include "nsh.h"
-#include "nsh_console.h"
-
-/****************************************************************************
- * Definitions
- ****************************************************************************/
-
-#define MAX_TIME_STRING 80
-
-/****************************************************************************
- * Private Types
- ****************************************************************************/
-
-/****************************************************************************
- * Private Function Prototypes
- ****************************************************************************/
-
-/****************************************************************************
- * Private Data
- ****************************************************************************/
-
-#if defined (CONFIG_RTC) && !defined(CONFIG_DISABLE_CLOCK) && !defined(CONFIG_NSH_DISABLE_DATE)
-static FAR const char * const g_datemontab[] =
-{
- "jan", "feb", "mar", "apr", "may", "jun",
- "jul", "aug", "sep", "oct", "nov", "dec"
-};
-#endif
-
-/****************************************************************************
- * Public Data
- ****************************************************************************/
-
-/****************************************************************************
- * Private Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Name: date_month
- ****************************************************************************/
-
-#if defined (CONFIG_RTC) && !defined(CONFIG_DISABLE_CLOCK) && !defined(CONFIG_NSH_DISABLE_DATE)
-static inline int date_month(FAR const char *abbrev)
-{
- int i;
-
- for (i = 0; i < 12; i++)
- {
- if (strncasecmp(g_datemontab[i], abbrev, 3) == 0)
- {
- return i;
- }
- }
- return ERROR;
-}
-#endif
-
-/****************************************************************************
- * Name: date_gettime
- ****************************************************************************/
-
-#if defined (CONFIG_RTC) && !defined(CONFIG_DISABLE_CLOCK) && !defined(CONFIG_NSH_DISABLE_DATE)
-static inline int date_showtime(FAR struct nsh_vtbl_s *vtbl, FAR const char *name)
-{
- static const char format[] = "%b %d %H:%M:%S %Y";
- struct timespec ts;
- struct tm tm;
- char timbuf[MAX_TIME_STRING];
- int ret;
-
- /* Get the current time */
-
- ret = clock_gettime(CLOCK_REALTIME, &ts);
- if (ret < 0)
- {
- nsh_output(vtbl, g_fmtcmdfailed, name, "clock_gettime", NSH_ERRNO);
- return ERROR;
- }
-
- /* Break the current time up into the format needed by strftime */
-
- (void)gmtime_r((FAR const time_t*)&ts.tv_sec, &tm);
-
- /* Show the current time in the requested format */
-
- (void)strftime(timbuf, MAX_TIME_STRING, format, &tm);
- nsh_output(vtbl, "%s\n", timbuf);
- return OK;
-}
-#endif
-
-/****************************************************************************
- * Name: date_settime
- ****************************************************************************/
-
-#if defined (CONFIG_RTC) && !defined(CONFIG_DISABLE_CLOCK) && !defined(CONFIG_NSH_DISABLE_DATE)
-static inline int date_settime(FAR struct nsh_vtbl_s *vtbl, FAR const char *name,
- FAR char *newtime)
-{
- struct timespec ts;
- struct tm tm;
- FAR char *token;
- FAR char *saveptr;
- long result;
- int ret;
-
- /* Only this date format is supported: MMM DD HH:MM:SS YYYY */
- /* Get the month abbreviation */
-
- token = strtok_r(newtime, " \t",&saveptr);
- if (token == NULL)
- {
- goto errout_bad_parm;
- }
-
- tm.tm_mon = date_month(token);
- if (tm.tm_mon < 0)
- {
- goto errout_bad_parm;
- }
-
- /* Get the day of the month. NOTE: Accepts day-of-month up to 31 for all months */
-
- token = strtok_r(NULL, " \t",&saveptr);
- if (token == NULL)
- {
- goto errout_bad_parm;
- }
-
- result = strtol(token, NULL, 10);
- if (result < 1 || result > 31)
- {
- goto errout_bad_parm;
- }
- tm.tm_mday = (int)result;
-
- /* Get the hours */
-
- token = strtok_r(NULL, " \t:", &saveptr);
- if (token == NULL)
- {
- goto errout_bad_parm;
- }
-
- result = strtol(token, NULL, 10);
- if (result < 0 || result > 23)
- {
- goto errout_bad_parm;
- }
- tm.tm_hour = (int)result;
-
- /* Get the minutes */
-
- token = strtok_r(NULL, " \t:", &saveptr);
- if (token == NULL)
- {
- goto errout_bad_parm;
- }
-
- result = strtol(token, NULL, 10);
- if (result < 0 || result > 59)
- {
- goto errout_bad_parm;
- }
- tm.tm_min = (int)result;
-
- /* Get the seconds */
-
- token = strtok_r(NULL, " \t:", &saveptr);
- if (token == NULL)
- {
- goto errout_bad_parm;
- }
-
- result = strtol(token, NULL, 10);
- if (result < 0 || result > 61)
- {
- goto errout_bad_parm;
- }
- tm.tm_sec = (int)result;
-
- /* And finally the year */
-
- token = strtok_r(NULL, " \t", &saveptr);
- if (token == NULL)
- {
- goto errout_bad_parm;
- }
-
- result = strtol(token, NULL, 10);
- if (result < 1900 || result > 2100)
- {
- goto errout_bad_parm;
- }
- tm.tm_year = (int)result - 1900;
-
- /* Convert this to the right form, then set the timer */
-
- ts.tv_sec = mktime(&tm);
- ts.tv_nsec = 0;
-
- ret = clock_settime(CLOCK_REALTIME, &ts);
- if (ret < 0)
- {
- nsh_output(vtbl, g_fmtcmdfailed, name, "clock_settime", NSH_ERRNO);
- return ERROR;
- }
- return OK;
-
-errout_bad_parm:
- nsh_output(vtbl, g_fmtarginvalid, name);
- return ERROR;
-}
-#endif
-
-/****************************************************************************
- * Public Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Name: cmd_date
- ****************************************************************************/
-
-#if defined (CONFIG_RTC) && !defined(CONFIG_DISABLE_CLOCK) && !defined(CONFIG_NSH_DISABLE_DATE)
-int cmd_date(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
-{
- FAR char *newtime = NULL;
- FAR const char *errfmt;
- bool badarg = false;
- int option;
- int ret;
-
- /* Get the date options: date [-s time] [+FORMAT] */
-
- while ((option = getopt(argc, argv, "s:")) != ERROR)
- {
- if (option == 's')
- {
- /* We will be setting the time */
-
- newtime = optarg;
- }
- else /* option = '?' */
- {
- /* We need to parse to the end anyway so that getopt stays healthy */
-
- badarg = true;
- }
- }
-
- /* If a bad argument was encountered then exit with an error */
-
- if (badarg)
- {
- errfmt = g_fmtarginvalid;
- goto errout;
- }
-
- /* optind < argc-1 means that there are additional, unexpected arguments on
- * th command-line
- */
-
- if (optind < argc)
- {
- errfmt = g_fmttoomanyargs;
- goto errout;
- }
-
- /* Display or set the time */
-
- if (newtime)
- {
- ret = date_settime(vtbl, argv[0], newtime);
- }
- else
- {
- ret = date_showtime(vtbl, argv[0]);
- }
- return ret;
-
-errout:
- nsh_output(vtbl, errfmt, argv[0]);
- return ERROR;
-}
-#endif
diff --git a/apps/nshlib/nsh_usbdev.c b/apps/nshlib/nsh_usbdev.c
deleted file mode 100644
index 193fe0d79..000000000
--- a/apps/nshlib/nsh_usbdev.c
+++ /dev/null
@@ -1,391 +0,0 @@
-/****************************************************************************
- * apps/nshlib/nsh_usbdev.c
- *
- * Copyright (C) 2012-2013 Gregory Nutt. All rights reserved.
- * Author: Gregory Nutt <gnutt@nuttx.org>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * 3. Neither the name NuttX nor the names of its contributors may be
- * used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- ****************************************************************************/
-
-/****************************************************************************
- * Included Files
- ****************************************************************************/
-
-#include <nuttx/config.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <assert.h>
-#include <debug.h>
-
-#ifdef CONFIG_CDCACM
-# include <nuttx/usb/cdcacm.h>
-#endif
-
-#ifdef CONFIG_CDCACM
-# include <nuttx/usb/pl2303.h>
-#endif
-
-#include "nsh.h"
-#include "nsh_console.h"
-
-/****************************************************************************
- * Pre-processor Definitions
- ****************************************************************************/
-/* Output USB trace data to the console device using printf() unless (1)
- * debug is enabled, then we want to keep the trace output in sync with the
- * debug output by using syslog()we are using a USB console. In that case,
- * we don't want the trace output on the USB console; let's try sending it
- * a SYSLOG device (hopefully one is set up!)
- */
-
-#if defined(CONFIG_DEBUG) || defined(HAVE_USB_CONSOLE)
-# define trmessage syslog
-#else
-# define trmessage printf
-#endif
-
-/****************************************************************************
- * Private Types
- ****************************************************************************/
-
-/****************************************************************************
- * Private Function Prototypes
- ****************************************************************************/
-
-/****************************************************************************
- * Private Data
- ****************************************************************************/
-
-/****************************************************************************
- * Public Data
- ****************************************************************************/
-
-/****************************************************************************
- * Private Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Name: nsh_tracecallback
- ****************************************************************************/
-
-/****************************************************************************
- * Name: nsh_tracecallback
- *
- * Description:
- * This is part of the USB trace logic
- *
- ****************************************************************************/
-
-#ifdef CONFIG_NSH_USBDEV_TRACE
-static int nsh_tracecallback(struct usbtrace_s *trace, void *arg)
-{
- usbtrace_trprintf((trprintf_t)trmessage, trace->event, trace->value);
- return 0;
-}
-#endif
-
-/****************************************************************************
- * Name: nsh_configstdio
- *
- * Description:
- * Configure standard I/O
- *
- ****************************************************************************/
-
-#ifdef HAVE_USB_CONSOLE
-static void nsh_configstdio(int fd)
-{
- /* Make sure the stdin, stdout, and stderr are closed */
-
- (void)fclose(stdin);
- (void)fclose(stdout);
- (void)fclose(stderr);
-
- /* Dup the fd to create standard fd 0-2 */
-
- (void)dup2(fd, 0);
- (void)dup2(fd, 1);
- (void)dup2(fd, 2);
-
- /* fdopen to get the stdin, stdout and stderr streams. The following logic depends
- * on the fact that the library layer will allocate FILEs in order. And since
- * we closed stdin, stdout, and stderr above, that is what we should get.
- *
- * fd = 0 is stdin (read-only)
- * fd = 1 is stdout (write-only, append)
- * fd = 2 is stderr (write-only, append)
- */
-
- (void)fdopen(0, "r");
- (void)fdopen(1, "a");
- (void)fdopen(2, "a");
-}
-#endif
-
-/****************************************************************************
- * Name: nsh_nullstdio
- *
- * Description:
- * Use /dev/null for standard I/O
- *
- ****************************************************************************/
-
-#ifdef HAVE_USB_CONSOLE
-static int nsh_nullstdio(void)
-{
- int fd;
-
- /* Open /dev/null for read/write access */
-
- fd = open("/dev/null", O_RDWR);
- if (fd >= 0)
- {
- /* Configure standard I/O to use /dev/null */
-
- nsh_configstdio(fd);
-
- /* We can close the original file descriptor now (unless it was one of
- * 0-2)
- */
-
- if (fd > 2)
- {
- close(fd);
- }
-
- return OK;
- }
-
- return fd;
-}
-#endif
-
-/****************************************************************************
- * Name: nsh_waitusbready
- *
- * Description:
- * Wait for the USB console device to be ready
- *
- ****************************************************************************/
-
-#ifdef HAVE_USB_CONSOLE
-static int nsh_waitusbready(void)
-{
- char inch;
- ssize_t nbytes;
- int nlc;
- int fd;
-
- /* Don't start the NSH console until the console device is ready. Chances
- * are, we get here with no functional console. The USB console will not
- * be available until the device is connected to the host and until the
- * host-side application opens the connection.
- */
-
- /* Open the USB serial device for read/write access */
-
- do
- {
- /* Try to open the console */
-
- fd = open(CONFIG_NSH_USBCONDEV, O_RDWR);
- if (fd < 0)
- {
- /* ENOTCONN means that the USB device is not yet connected. Anything
- * else is bad.
- */
-
- DEBUGASSERT(errno == ENOTCONN);
-
- /* Sleep a bit and try again */
-
- sleep(2);
- }
- }
- while (fd < 0);
-
- /* Now waiting until we successfully read a carriage return a few times.
- * That is a sure way of know that there is something at the other end of
- * the USB serial connection that is ready to talk with us. The user needs
- * to hit ENTER a few times to get things started.
- */
-
- nlc = 0;
- do
- {
- /* Read one byte */
-
- inch = 0;
- nbytes = read(fd, &inch, 1);
-
- /* Is it a carriage return (or maybe a newline)? */
-
- if (nbytes == 1 && (inch == '\n' || inch == '\r'))
- {
- /* Yes.. increment the count */
-
- nlc++;
- }
- else
- {
- /* No.. Reset the count. We need to see 3 in a row to continue. */
-
- nlc = 0;
- }
- }
- while (nlc < 3);
-
- /* Configure standard I/O */
-
- nsh_configstdio(fd);
-
- /* We can close the original file descriptor now (unless it was one of 0-2) */
-
- if (fd > 2)
- {
- close(fd);
- }
-
- return OK;
-}
-#endif
-
-/****************************************************************************
- * Public Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Name: nsh_consolemain (USB console version)
- *
- * Description:
- * This interfaces maybe to called or started with task_start to start a
- * single an NSH instance that operates on stdin and stdout. This
- * function does not return.
- *
- * This function handles generic /dev/console character devices, or
- * special USB console devices. The USB console requires some special
- * operations to handle the cases where the session is lost when the
- * USB device is unplugged and restarted when the USB device is plugged
- * in again.
- *
- * Input Parameters:
- * Standard task start-up arguments. These are not used. argc may be
- * zero and argv may be NULL.
- *
- * Returned Values:
- * This function does not return nor does it ever exit (unless the user
- * executes the NSH exit command).
- *
- ****************************************************************************/
-
-#ifdef HAVE_USB_CONSOLE
-int nsh_consolemain(int argc, char *argv[])
-{
- FAR struct console_stdio_s *pstate = nsh_newconsole();
- int ret;
-
- DEBUGASSERT(pstate);
-
- /* Initialize any USB tracing options that were requested */
-
-#ifdef CONFIG_NSH_USBDEV_TRACE
- usbtrace_enable(TRACE_BITSET);
-#endif
-
- /* Initialize the USB serial driver */
-
-#if defined(CONFIG_PL2303) || defined(CONFIG_CDCACM)
-#ifdef CONFIG_CDCACM
- ret = cdcacm_initialize(CONFIG_NSH_USBDEV_MINOR, NULL);
-#else
- ret = usbdev_serialinitialize(CONFIG_NSH_USBDEV_MINOR);
-#endif
- DEBUGASSERT(ret == OK);
-#endif
-
- /* Configure to use /dev/null if we do not have a valid console. */
-
-#ifndef CONFIG_DEV_CONSOLE
- (void)nsh_nullstdio();
-#endif
-
- /* Execute the one-time start-up script (output may go to /dev/null) */
-
-#ifdef CONFIG_NSH_ROMFSETC
- (void)nsh_initscript(&pstate->cn_vtbl);
-#endif
-
- /* Now loop, executing creating a session for each USB connection */
-
- for (;;)
- {
- /* Wait for the USB to be connected to the host and switch
- * standard I/O to the USB serial device.
- */
-
- ret = nsh_waitusbready();
- DEBUGASSERT(ret == OK);
-
- /* Execute the session */
-
- (void)nsh_session(pstate);
-
- /* Switch to /dev/null because we probably no longer have a
- * valid console device.
- */
-
- (void)nsh_nullstdio();
- }
-}
-#endif
-
-/****************************************************************************
- * Name: nsh_usbtrace
- *
- * Description:
- * The function is called from the nsh_session() to dump USB data to the
- * SYSLOG device.
- *
- * Input Parameters:
- * None
- *
- * Returned Values:
- * None
- *
- ****************************************************************************/
-
-#ifdef CONFIG_NSH_USBDEV_TRACE
-void nsh_usbtrace(void)
-{
- (void)usbtrace_enumerate(nsh_tracecallback, NULL);
-}
-#endif
diff --git a/apps/nshlib/rcS.template b/apps/nshlib/rcS.template
deleted file mode 100644
index 996f37fb1..000000000
--- a/apps/nshlib/rcS.template
+++ /dev/null
@@ -1,5 +0,0 @@
-# Create a RAMDISK and mount it at XXXRDMOUNTPOUNTXXX
-
-mkrd -m XXXMKRDMINORXXX -s XXMKRDSECTORSIZEXXX XXMKRDBLOCKSXXX
-mkfatfs /dev/ramXXXMKRDMINORXXX
-mount -t vfat /dev/ramXXXMKRDMINORXXX XXXRDMOUNTPOUNTXXX