diff options
| author | Andreas Frisch <andreas.frisch@multimedia-labs.de> | 2008-06-02 14:21:41 +0000 |
|---|---|---|
| committer | Andreas Frisch <andreas.frisch@multimedia-labs.de> | 2008-06-02 14:21:41 +0000 |
| commit | 7ee3f3b8aaf43c8c712ce1c4c1d8b8c52e692e12 (patch) | |
| tree | 75e1bdd286045941ac1f66c10a09450ffb3e82ca /lib/base/console.cpp | |
| parent | 1c6c579ff6302c3301eb21bd0933d5ede824a384 (diff) | |
| download | enigma2-7ee3f3b8aaf43c8c712ce1c4c1d8b8c52e692e12.tar.gz enigma2-7ee3f3b8aaf43c8c712ce1c4c1d8b8c52e692e12.zip | |
Add setCWD to change task's work directories for eConsoleAppContainers
Diffstat (limited to 'lib/base/console.cpp')
| -rw-r--r-- | lib/base/console.cpp | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/lib/base/console.cpp b/lib/base/console.cpp index a29772d8..2e00804a 100644 --- a/lib/base/console.cpp +++ b/lib/base/console.cpp @@ -8,7 +8,7 @@ #include <sys/types.h> #include <sys/wait.h> -int bidirpipe(int pfd[], const char *cmd , const char * const argv[]) +int bidirpipe(int pfd[], const char *cmd , const char * const argv[], const char *cwd ) { int pfdin[2]; /* from child to parent */ int pfdout[2]; /* from parent to child */ @@ -37,6 +37,9 @@ int bidirpipe(int pfd[], const char *cmd , const char * const argv[]) for (unsigned int i=3; i < 90; ++i ) close(i); + if (cwd) + chdir(cwd); + execvp(cmd, (char * const *)argv); /* the vfork will actually suspend the parent thread until execvp is called. thus it's ok to use the shared arg/cmdline pointers here. */ _exit(0); @@ -79,6 +82,20 @@ static char *find_bracket(char ch) return NULL; } +int eConsoleAppContainer::setCWD( const char *path ) +{ + struct stat dir_stat; + + if (stat(path, &dir_stat) == -1) + return -1; + + if (!S_ISDIR(dir_stat.st_mode)) + return -2; + + m_cwd = path; + return 0; +} + int eConsoleAppContainer::execute( const char *cmd ) { int cnt=0, slen=strlen(cmd); @@ -157,7 +174,8 @@ int eConsoleAppContainer::execute(const char *cmdline, const char * const argv[] killstate=0; // get one read ,one write and the err pipe to the prog.. - pid = bidirpipe(fd, cmdline, argv); + pid = bidirpipe(fd, cmdline, argv, m_cwd.length() ? m_cwd.c_str() : 0); + if ( pid == -1 ) return -3; |
