summaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
authorpatacongo <patacongo@7fd9a85b-ad96-42d3-883c-3090e2eb8679>2012-02-11 15:27:44 +0000
committerpatacongo <patacongo@7fd9a85b-ad96-42d3-883c-3090e2eb8679>2012-02-11 15:27:44 +0000
commite97a563223a6ce5b7f6ffea6da82441ed0d1650e (patch)
tree521e0720bfb45fd55e5fb5970cae76d38f60bc4d /apps
parente6e43e583c91e336de6de01e0e1fad3a5ebb2267 (diff)
Add dmesg command that can be used to dump the syslog
git-svn-id: https://nuttx.svn.sourceforge.net/svnroot/nuttx/trunk@4382 7fd9a85b-ad96-42d3-883c-3090e2eb8679
Diffstat (limited to 'apps')
-rwxr-xr-xapps/ChangeLog.txt2
-rw-r--r--apps/nshlib/nsh.h28
-rw-r--r--apps/nshlib/nsh_dbgcmds.c1
-rw-r--r--apps/nshlib/nsh_fscmds.c202
-rw-r--r--apps/nshlib/nsh_parse.c3
5 files changed, 141 insertions, 95 deletions
diff --git a/apps/ChangeLog.txt b/apps/ChangeLog.txt
index 78011ef840..5d855c3796 100755
--- a/apps/ChangeLog.txt
+++ b/apps/ChangeLog.txt
@@ -184,4 +184,6 @@
checkin).
* apps/examples/ftpd: Add a test for the FTPD server (untest on initial
check-in).
+ * apps/nshlib/nsh_fscmds.c: Add support for a 'dmesg' command that will
+ dump the system log if CONFIG_SYSLOG is selected.
diff --git a/apps/nshlib/nsh.h b/apps/nshlib/nsh.h
index 90d02bb7f4..46226adcd0 100644
--- a/apps/nshlib/nsh.h
+++ b/apps/nshlib/nsh.h
@@ -218,6 +218,25 @@
# 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
****************************************************************************/
@@ -396,10 +415,13 @@ void nsh_dumpbuffer(FAR struct nsh_vtbl_s *vtbl, const char *msg,
# ifndef CONFIG_NSH_DISABLE_LS
int cmd_ls(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
+# if defined(CONFIG_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
# endif /* CONFIG_NFILE_STREAMS && !CONFIG_NSH_DISABLESCRIPT */
# ifndef CONFIG_DISABLE_MOUNTPOINT
# ifndef CONFIG_NSH_DISABLE_LOSETUP
diff --git a/apps/nshlib/nsh_dbgcmds.c b/apps/nshlib/nsh_dbgcmds.c
index 31199db3ed..384b377f3a 100644
--- a/apps/nshlib/nsh_dbgcmds.c
+++ b/apps/nshlib/nsh_dbgcmds.c
@@ -353,4 +353,3 @@ int cmd_xd(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
return OK;
}
#endif
-
diff --git a/apps/nshlib/nsh_fscmds.c b/apps/nshlib/nsh_fscmds.c
index e478ddefbc..764caca6d1 100644
--- a/apps/nshlib/nsh_fscmds.c
+++ b/apps/nshlib/nsh_fscmds.c
@@ -78,25 +78,6 @@
#define LSFLAGS_LONG 2
#define LSFLAGS_RECURSIVE 4
-/* 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
-
/****************************************************************************
* Private Types
****************************************************************************/
@@ -388,123 +369,162 @@ static int ls_recursive(FAR struct nsh_vtbl_s *vtbl, const char *dirpath,
#endif
/****************************************************************************
- * Public Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Name: cmd_cat
+ * Name: cat_common
****************************************************************************/
#if CONFIG_NFILE_DESCRIPTORS > 0
#ifndef CONFIG_NSH_DISABLE_CAT
-int cmd_cat(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
+static int cat_common(FAR struct nsh_vtbl_s *vtbl, FAR const char *cmd,
+ FAR const char *filename)
{
char buffer[IOBUFFERSIZE];
- char *fullpath;
int fd;
- int i;
int ret = OK;
- /* Loop for each file name on the command line */
+ /* Open the file for reading */
- for (i = 1; i < argc && ret == OK; i++)
+ fd = open(filename, O_RDONLY);
+ if (fd < 0)
{
- /* Get the fullpath to the file */
+ nsh_output(vtbl, g_fmtcmdfailed, cmd, "open", NSH_ERRNO);
+ return ERROR;
+ }
- fullpath = nsh_getfullpath(vtbl, argv[i]);
- if (fullpath)
+ /* And just dump it byte for byte into stdout */
+
+ for (;;)
+ {
+ int nbytesread = read(fd, buffer, IOBUFFERSIZE);
+
+ /* Check for read errors */
+
+ if (nbytesread < 0)
{
- /* Open the file for reading */
+ int errval = errno;
+
+ /* EINTR is not an error (but will stop stop the cat) */
- fd = open(fullpath, O_RDONLY);
- if (fd < 0)
+#ifndef CONFIG_DISABLE_SIGNALS
+ if (errval == EINTR)
{
- nsh_output(vtbl, g_fmtcmdfailed, argv[0], "open", NSH_ERRNO);
+ nsh_output(vtbl, g_fmtsignalrecvd, cmd);
}
else
+#endif
{
- /* And just dump it byte for byte into stdout */
+ nsh_output(vtbl, g_fmtcmdfailed, cmd, "read", NSH_ERRNO_OF(errval));
+ }
+
+ ret = ERROR;
+ break;
+ }
- for (;;)
+ /* 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 nbytesread = read(fd, buffer, IOBUFFERSIZE);
+ int errval = errno;
- /* Check for read errors */
+ /* EINTR is not an error (but will stop stop the cat) */
- if (nbytesread < 0)
+ #ifndef CONFIG_DISABLE_SIGNALS
+ if (errval == EINTR)
{
- /* EINTR is not an error (but will stop stop the cat) */
-
-#ifndef CONFIG_DISABLE_SIGNALS
- if (errno == EINTR)
- {
- nsh_output(vtbl, g_fmtsignalrecvd, argv[0]);
- }
- else
+ nsh_output(vtbl, g_fmtsignalrecvd, cmd);
+ }
+ else
#endif
- {
- nsh_output(vtbl, g_fmtcmdfailed, argv[0], "read", NSH_ERRNO);
- }
-
- ret = ERROR;
- break;
+ {
+ nsh_output(vtbl, g_fmtcmdfailed, cmd, "write", NSH_ERRNO);
}
- /* Check for data successfully read */
+ ret = ERROR;
+ break;
+ }
+ else
+ {
+ nbyteswritten += n;
+ }
+ }
+ }
- else if (nbytesread > 0)
- {
- int nbyteswritten = 0;
+ /* Otherwise, it is the end of file */
- while (nbyteswritten < nbytesread)
- {
- ssize_t n = nsh_write(vtbl, buffer, nbytesread);
- if (n < 0)
- {
- /* EINTR is not an error (but will stop stop the cat) */
+ else
+ {
+ break;
+ }
+ }
- #ifndef CONFIG_DISABLE_SIGNALS
- if (errno == EINTR)
- {
- nsh_output(vtbl, g_fmtsignalrecvd, argv[0]);
- }
- else
+ (void)close(fd);
+ return ret;
+}
+#endif
#endif
- {
- nsh_output(vtbl, g_fmtcmdfailed, argv[0], "write", NSH_ERRNO);
- }
- ret = ERROR;
- break;
- }
- else
- {
- nbyteswritten += n;
- }
- }
- }
- /* Otherwise, it is the end of file */
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
- else
- {
- break;
- }
- }
+/****************************************************************************
+ * Name: cmd_cat
+ ****************************************************************************/
- (void)close(fd);
- }
+#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_NSH_DISABLE_DMESG)
+int cmd_dmesg(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
+{
+ return cat_common(vtbl, argv[0], "/dev/syslog");
+}
+#endif
+
+/****************************************************************************
* Name: cmd_cp
****************************************************************************/
diff --git a/apps/nshlib/nsh_parse.c b/apps/nshlib/nsh_parse.c
index ff1a50962a..67d5290138 100644
--- a/apps/nshlib/nsh_parse.c
+++ b/apps/nshlib/nsh_parse.c
@@ -167,6 +167,9 @@ static const struct cmdmap_s g_cmdmap[] =
# ifndef CONFIG_NSH_DISABLE_DD
{ "dd", cmd_dd, 3, 6, "if=<infile> of=<outfile> [bs=<sectsize>] [count=<sectors>] [skip=<sectors>]" },
# endif
+# if defined(CONFIG_SYSLOG) && !defined(CONFIG_NSH_DISABLE_DMESG)
+ { "dmesg", cmd_dmesg, 1, 1, NULL },
+# endif
#endif
#ifndef CONFIG_NSH_DISABLE_ECHO