Split disco_t -> path_to_object into object_path and object_filename so it is more...
[pandora-libraries.git] / lib / pnd_apps.c
1
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 */
6
7 #include "pnd_container.h"
8 #include "pnd_pxml.h"
9 #include "pnd_apps.h"
10
11 unsigned char pnd_apps_exec ( char *pndrun, char *fullpath, char *unique_id, char *rel_exec, char *rel_startdir, unsigned int clockspeed ) {
12   char *argv [ 20 ];
13   int f;
14
15   printf ( "Entering pnd_apps_exec\n" );
16 #if 0
17   printf ( "  runscript: %s\n", pndrun );
18   printf ( "  path: %s\n", fullpath );
19   printf ( "  id: %s\n", unique_id );
20   printf ( "  exec: %s\n", rel_exec );
21   printf ( "  cwd: %s\n", rel_startdir );
22   printf ( "  clock: %u\n", clockspeed );
23 #endif
24
25   memset ( argv, '\0', sizeof(char*) * 20 );
26
27   f = 0;
28   argv [ f++ ] = pndrun;
29   argv [ f++ ] = "-p";
30   argv [ f++ ] = fullpath;
31   argv [ f++ ] = "-e";
32   argv [ f++ ] = rel_exec;
33   argv [ f++ ] = "-s";
34   argv [ f++ ] = rel_startdir;
35   // skip -a (arguments) for now
36
37   //argv [ f++ ] = "-b";
38   //argv [ f++ ] = baename;
39
40   argv [ f++ ] = "-u"; // no union for now
41   argv [ f++ ] = NULL; // for execv
42
43   // debug
44 #if 0
45   int i;
46   for ( i = 0; i < f; i++ ) {
47     printf ( "exec's argv %u [ %s ]\n", i, argv [ i ] );
48   }
49 #endif
50
51   // invoke it!
52
53   if ( ( f = fork() ) < 0 ) {
54     // error forking
55   } else if ( f > 0 ) {
56     // parent
57   } else {
58     // child, do it
59     execv ( pndrun, argv );
60   } 
61
62   printf ( "Exiting pnd_apps_exec\n" );
63
64   return ( 1 );
65 }