Skip to content
Snippets Groups Projects
Commit e222dcd3 authored by patacongo's avatar patacongo
Browse files

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
parent 4a801e49
No related branches found
No related tags found
No related merge requests found
......@@ -291,14 +291,31 @@ nsh
apps/examples/hello.
3. This configuration has BINFS enabled so that the builtin applications
can be made visible in the file system. For example:
NuttShell (NSH) NuttX-6.24
nsh> mount -t binfs /bin
nsh> ls /bin
/bin:
hello
nsh>
can be made visible in the file system. Because of that, the
build in applications do not work as other examples.
For example trying to execute the hello builtin application will
fail:
nsh> hello
nsh: hello: command not found
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
......
......@@ -39,6 +39,7 @@
#include <nuttx/config.h>
#include <sys/wait.h>
#include <semaphore.h>
#include <signal.h>
#include <sched.h>
......@@ -75,7 +76,9 @@ struct spawn_parms_s
****************************************************************************/
static sem_t g_ps_parmsem = SEM_INITIALIZER(1);
#ifndef CONFIG_SCHED_WAITPID
static sem_t g_ps_execsem = SEM_INITIALIZER(0);
#endif
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;
#ifndef CONFIG_SCHED_WAITPID
ps_semgive(&g_ps_execsem);
#endif
return 0;
}
......@@ -540,6 +545,9 @@ int posix_spawn(FAR pid_t *pid, FAR const char *path,
{
struct sched_param param;
pid_t proxy;
#ifdef CONFIG_SCHED_WAITPID
int status;
#endif
int ret;
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 */
#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);
#endif
/* Get the result and relinquish our access to the parameter structure */
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment