Misc bug fixes related to NSH file execution

git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@5530 42af7a65-404d-4744-a932-0658087f49c3
This commit is contained in:
patacongo 2013-01-17 20:25:32 +00:00
parent 4a801e4904
commit e222dcd354
2 changed files with 40 additions and 7 deletions

View File

@ -291,14 +291,31 @@ nsh
apps/examples/hello. apps/examples/hello.
3. This configuration has BINFS enabled so that the builtin applications 3. This configuration has BINFS enabled so that the builtin applications
can be made visible in the file system. For example: can be made visible in the file system. Because of that, the
build in applications do not work as other examples.
NuttShell (NSH) NuttX-6.24 For example trying to execute the hello builtin application will
nsh> mount -t binfs /bin fail:
nsh> ls /bin
/bin: nsh> hello
hello nsh: hello: command not found
nsh> nsh>
Unless you first mount the BINFS file system:
nsh> mount -t binfs /bin
nsh> ls /bin
/bin:
hello
nsh> echo $PATH
/bin
nsh> hello
Hello, World!!
nsh>
Notice that the executable 'hello' is found using the value in the PATH
variable (which was preset to "/bin"). If the PATH variable were not set
then you would have to use /bin/hello on the command line.
nsh2 nsh2

View File

@ -39,6 +39,7 @@
#include <nuttx/config.h> #include <nuttx/config.h>
#include <sys/wait.h>
#include <semaphore.h> #include <semaphore.h>
#include <signal.h> #include <signal.h>
#include <sched.h> #include <sched.h>
@ -75,7 +76,9 @@ struct spawn_parms_s
****************************************************************************/ ****************************************************************************/
static sem_t g_ps_parmsem = SEM_INITIALIZER(1); static sem_t g_ps_parmsem = SEM_INITIALIZER(1);
#ifndef CONFIG_SCHED_WAITPID
static sem_t g_ps_execsem = SEM_INITIALIZER(0); static sem_t g_ps_execsem = SEM_INITIALIZER(0);
#endif
static struct spawn_parms_s g_ps_parms; static struct spawn_parms_s g_ps_parms;
/**************************************************************************** /****************************************************************************
@ -425,7 +428,9 @@ static int spawn_proxy(int argc, char *argv[])
*/ */
g_ps_parms.result = ret; g_ps_parms.result = ret;
#ifndef CONFIG_SCHED_WAITPID
ps_semgive(&g_ps_execsem); ps_semgive(&g_ps_execsem);
#endif
return 0; return 0;
} }
@ -540,6 +545,9 @@ int posix_spawn(FAR pid_t *pid, FAR const char *path,
{ {
struct sched_param param; struct sched_param param;
pid_t proxy; pid_t proxy;
#ifdef CONFIG_SCHED_WAITPID
int status;
#endif
int ret; int ret;
DEBUGASSERT(path); DEBUGASSERT(path);
@ -613,7 +621,15 @@ int posix_spawn(FAR pid_t *pid, FAR const char *path,
/* Wait for the proxy to complete its job */ /* Wait for the proxy to complete its job */
#ifdef CONFIG_SCHED_WAITPID
ret = waitpid(proxy, &status, 0);
if (ret < 0)
{
sdbg("ERROR: waitpid() failed: %d\n", errno);
}
#else
ps_semtake(&g_ps_execsem); ps_semtake(&g_ps_execsem);
#endif
/* Get the result and relinquish our access to the parameter structure */ /* Get the result and relinquish our access to the parameter structure */