nsh_fileapp: handle input redirection
This commit is contained in:
parent
8fba726a7d
commit
e46347ec1b
@ -859,7 +859,8 @@ int nsh_builtin(FAR struct nsh_vtbl_s *vtbl, FAR const char *cmd,
|
|||||||
|
|
||||||
#ifdef CONFIG_NSH_FILE_APPS
|
#ifdef CONFIG_NSH_FILE_APPS
|
||||||
int nsh_fileapp(FAR struct nsh_vtbl_s *vtbl, FAR const char *cmd,
|
int nsh_fileapp(FAR struct nsh_vtbl_s *vtbl, FAR const char *cmd,
|
||||||
FAR char **argv, FAR const char *redirfile, int oflags);
|
FAR char **argv, FAR const char *redirfile_in,
|
||||||
|
FAR const char *redirfile_out, int oflags);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef CONFIG_DISABLE_ENVIRON
|
#ifndef CONFIG_DISABLE_ENVIRON
|
||||||
|
@ -35,6 +35,8 @@
|
|||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <libgen.h>
|
#include <libgen.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
|
||||||
#include <nuttx/lib/builtin.h>
|
#include <nuttx/lib/builtin.h>
|
||||||
|
|
||||||
#include "nsh.h"
|
#include "nsh.h"
|
||||||
@ -68,7 +70,8 @@
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
int nsh_fileapp(FAR struct nsh_vtbl_s *vtbl, FAR const char *cmd,
|
int nsh_fileapp(FAR struct nsh_vtbl_s *vtbl, FAR const char *cmd,
|
||||||
FAR char **argv, FAR const char *redirfile, int oflags)
|
FAR char **argv, FAR const char *redirfile_in,
|
||||||
|
FAR const char *redirfile_out, int oflags)
|
||||||
{
|
{
|
||||||
posix_spawn_file_actions_t file_actions;
|
posix_spawn_file_actions_t file_actions;
|
||||||
posix_spawnattr_t attr;
|
posix_spawnattr_t attr;
|
||||||
@ -104,11 +107,28 @@ int nsh_fileapp(FAR struct nsh_vtbl_s *vtbl, FAR const char *cmd,
|
|||||||
goto errout_with_actions;
|
goto errout_with_actions;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Handle redirection of input */
|
||||||
|
|
||||||
|
if (redirfile_in)
|
||||||
|
{
|
||||||
|
/* Set up to close open redirfile and set to stdin (0) */
|
||||||
|
|
||||||
|
ret = posix_spawn_file_actions_addopen(&file_actions, 0,
|
||||||
|
redirfile_in, O_RDONLY, 0);
|
||||||
|
if (ret != 0)
|
||||||
|
{
|
||||||
|
nsh_error(vtbl, g_fmtcmdfailed, cmd,
|
||||||
|
"posix_spawn_file_actions_addopen",
|
||||||
|
NSH_ERRNO);
|
||||||
|
goto errout_with_actions;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Handle re-direction of output */
|
/* Handle re-direction of output */
|
||||||
|
|
||||||
if (redirfile)
|
if (redirfile_out)
|
||||||
{
|
{
|
||||||
ret = posix_spawn_file_actions_addopen(&file_actions, 1, redirfile,
|
ret = posix_spawn_file_actions_addopen(&file_actions, 1, redirfile_out,
|
||||||
oflags, 0644);
|
oflags, 0644);
|
||||||
if (ret != 0)
|
if (ret != 0)
|
||||||
{
|
{
|
||||||
|
@ -685,7 +685,8 @@ static int nsh_execute(FAR struct nsh_vtbl_s *vtbl,
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef CONFIG_NSH_FILE_APPS
|
#ifdef CONFIG_NSH_FILE_APPS
|
||||||
ret = nsh_fileapp(vtbl, argv[0], argv, redirfile_out, oflags);
|
ret = nsh_fileapp(vtbl, argv[0], argv, redirfile_in,
|
||||||
|
redirfile_out, oflags);
|
||||||
if (ret >= 0)
|
if (ret >= 0)
|
||||||
{
|
{
|
||||||
/* nsh_fileapp() returned 0 or 1. This means that the built-in
|
/* nsh_fileapp() returned 0 or 1. This means that the built-in
|
||||||
|
Loading…
Reference in New Issue
Block a user