summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2008-08-22 00:07:57 +0000
committerpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2008-08-22 00:07:57 +0000
commitab92a9dd0a6a84517ec966e5c79e4e692970ba16 (patch)
tree540775f4354c71329d4935d01801dfca5c047b01
parentf77ac6a9d33041e23ff3c82c26b1c3cff3b3e513 (diff)
downloadpx4-nuttx-ab92a9dd0a6a84517ec966e5c79e4e692970ba16.tar.gz
px4-nuttx-ab92a9dd0a6a84517ec966e5c79e4e692970ba16.tar.bz2
px4-nuttx-ab92a9dd0a6a84517ec966e5c79e4e692970ba16.zip
cat accepts multiple files
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@836 42af7a65-404d-4744-a932-0658087f49c3
-rw-r--r--nuttx/ChangeLog1
-rw-r--r--nuttx/Documentation/NuttX.html3
-rw-r--r--nuttx/examples/nsh/nsh_fscmds.c96
-rw-r--r--nuttx/examples/nsh/nsh_main.c5
4 files changed, 59 insertions, 46 deletions
diff --git a/nuttx/ChangeLog b/nuttx/ChangeLog
index 8d098eaea..6f21cf3c1 100644
--- a/nuttx/ChangeLog
+++ b/nuttx/ChangeLog
@@ -416,4 +416,5 @@
* NSH now supports if-then[-else]-fi construct
* NSH now supports comments beginning with '#'
* NSH now supports commands to inspect and modify memory
+ * NSH cat command now supports multiple files on command line
diff --git a/nuttx/Documentation/NuttX.html b/nuttx/Documentation/NuttX.html
index 3c4bfe8ac..1c48e5d58 100644
--- a/nuttx/Documentation/NuttX.html
+++ b/nuttx/Documentation/NuttX.html
@@ -8,7 +8,7 @@
<tr align="center" bgcolor="#e4e4e4">
<td>
<h1><big><font color="#3c34ec"><i>NuttX RTOS</i></font></big></h1>
- <p>Last Updated: August 19, 2008</p>
+ <p>Last Updated: August 21, 2008</p>
</td>
</tr>
</table>
@@ -1050,6 +1050,7 @@ nuttx-0.3.13 2008-xx-xx Gregory Nutt &lt;spudmonkey@racsa.co.cr&gt;
* NSH now supports if-then[-else]-fi construct
* NSH now supports comments beginning with '#'
* NSH now supports commands to inspect and modify memory
+ * NSH cat command now supports multiple files on command line
pascal-0.1.3 2008-xx-xx Gregory Nutt &lt;spudmonkey@racsa.co.cr&gt;
diff --git a/nuttx/examples/nsh/nsh_fscmds.c b/nuttx/examples/nsh/nsh_fscmds.c
index 75bbfc8e9..144cea9a4 100644
--- a/nuttx/examples/nsh/nsh_fscmds.c
+++ b/nuttx/examples/nsh/nsh_fscmds.c
@@ -375,72 +375,82 @@ static int ls_recursive(FAR struct nsh_vtbl_s *vtbl, const char *dirpath, struct
int cmd_cat(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
{
char buffer[IOBUFFERSIZE];
- int ret = ERROR;
-
- /* Open the file for reading */
-
- int fd = open(argv[1], O_RDONLY);
- if (fd < 0)
- {
- nsh_output(vtbl, g_fmtcmdfailed, argv[0], "open", NSH_ERRNO);
- return ERROR;
- }
+ int fd;
+ int i;
+ int ret = OK;
- /* And just dump it byte for byte into stdout */
+ /* Loop for each file name on the command line */
- for (;;)
+ for (i = 1; i < argc && ret == OK; i++)
{
- int nbytesread = read(fd, buffer, IOBUFFERSIZE);
+ /* Open the file for reading */
- /* Check for read errors */
-
- if (nbytesread < 0)
+ fd = open(argv[1], O_RDONLY);
+ if (fd < 0)
{
- /* EINTR is not an error */
-
- if (errno != EINTR)
- {
- nsh_output(vtbl, g_fmtcmdfailed, argv[0], "read", NSH_ERRNO);
- break;
- }
+ nsh_output(vtbl, g_fmtcmdfailed, argv[0], "open", NSH_ERRNO);
+ ret = ERROR;
}
-
- /* Check for data successfully read */
-
- else if (nbytesread > 0)
+ else
{
- int nbyteswritten = 0;
+ /* And just dump it byte for byte into stdout */
- while (nbyteswritten < nbytesread)
+ for (;;)
{
- int n = write(1, buffer, nbytesread);
- if (n < 0)
+ int nbytesread = read(fd, buffer, IOBUFFERSIZE);
+
+ /* Check for read errors */
+
+ if (nbytesread < 0)
{
- /* EINTR is not an error */
+ /* EINTR is not an error */
if (errno != EINTR)
{
- nsh_output(vtbl, g_fmtcmdfailed, argv[0], "write", NSH_ERRNO);
+ nsh_output(vtbl, g_fmtcmdfailed, argv[0], "read", NSH_ERRNO);
+ ret = ERROR;
break;
}
}
+
+ /* Check for data successfully read */
+
+ else if (nbytesread > 0)
+ {
+ int nbyteswritten = 0;
+
+ while (nbyteswritten < nbytesread)
+ {
+ int n = write(1, buffer, nbytesread);
+ if (n < 0)
+ {
+ /* EINTR is not an error */
+
+ if (errno != EINTR)
+ {
+ nsh_output(vtbl, g_fmtcmdfailed, argv[0], "write", NSH_ERRNO);
+ ret = ERROR;
+ break;
+ }
+ }
+ else
+ {
+ nbyteswritten += n;
+ }
+ }
+ }
+
+ /* Otherwise, it is the end of file */
+
else
{
- nbyteswritten += n;
+ break;
}
}
- }
-
- /* Otherwise, it is the end of file */
- else
- {
- ret = OK;
- break;
+ (void)close(fd);
}
}
-
- (void)close(fd);
return ret;
}
#endif
diff --git a/nuttx/examples/nsh/nsh_main.c b/nuttx/examples/nsh/nsh_main.c
index b7070f439..8cbf78ad9 100644
--- a/nuttx/examples/nsh/nsh_main.c
+++ b/nuttx/examples/nsh/nsh_main.c
@@ -90,7 +90,7 @@ static const char g_failure[] = "1";
static const struct cmdmap_s g_cmdmap[] =
{
#if CONFIG_NFILE_DESCRIPTORS > 0
- { "cat", cmd_cat, 2, 2, "<path>" },
+ { "cat", cmd_cat, 2, NSH_MAX_ARGUMENTS, "<path> [<path> [<path> ...]]" },
{ "cp", cmd_cp, 3, 3, "<source-path> <dest-path>" },
#endif
#ifndef CONFIG_DISABLE_ENVIRON
@@ -659,7 +659,8 @@ static inline int nsh_nice(FAR struct nsh_vtbl_s *vtbl, FAR char **ppcmd, FAR ch
{
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')
+ if (vtbl->np.np_nice > 19 || vtbl->np.np_nice < -20 ||
+ endptr == val || *endptr != '\0')
{
nsh_output(vtbl, g_fmtarginvalid, "nice");
return ERROR;