2 #include <stdio.h> /* for FILE etc */
3 #include <stdlib.h> /* for malloc */
4 #include <string.h> /* for memset */
5 #include <unistd.h> /* for fork/exec */
7 #include <sys/types.h> /* for wait */
8 #include <sys/wait.h> /* for wait */
10 #include "pnd_container.h"
14 unsigned char pnd_apps_exec ( char *pndrun, char *fullpath, char *unique_id,
15 char *rel_exec, char *rel_startdir,
16 unsigned int clockspeed, unsigned int options )
21 //printf ( "Entering pnd_apps_exec\n" );
24 printf ( " runscript: %s\n", pndrun );
25 printf ( " path: %s\n", fullpath );
26 printf ( " id: %s\n", unique_id );
27 printf ( " exec: %s\n", rel_exec );
28 printf ( " cwd: %s\n", rel_startdir );
29 printf ( " clock: %u\n", clockspeed );
32 memset ( argv, '\0', sizeof(char*) * 20 );
35 argv [ f++ ] = pndrun;
37 argv [ f++ ] = fullpath;
39 argv [ f++ ] = rel_exec;
41 argv [ f++ ] = rel_startdir;
42 // skip -a (arguments) for now
44 //argv [ f++ ] = "-b";
45 //argv [ f++ ] = baename;
47 argv [ f++ ] = "-u"; // no union for now
48 argv [ f++ ] = NULL; // for execv
53 for ( i = 0; i < f; i++ ) {
54 printf ( "exec's argv %u [ %s ]\n", i, argv [ i ] );
60 if ( ( f = fork() ) < 0 ) {
66 execv ( pndrun, argv );
69 // by definition, either error occurred or we are the original application.
71 // do we wish to wait until the child process completes? (we don't
72 // care if it crashed, was killed, was suspended, whatever.)
73 if ( options & PND_EXEC_OPTION_BLOCK ) {
75 //waitpid ( f, &status. 0 /* no options */ );
79 // printf ( "Exiting pnd_apps_exec\n" );