diff options
author | Mike Buland <eichlan@xagasoft.com> | 2009-07-31 16:43:16 +0000 |
---|---|---|
committer | Mike Buland <eichlan@xagasoft.com> | 2009-07-31 16:43:16 +0000 |
commit | 6070f3cb3fe44f17114fd58792055e9c91bd3576 (patch) | |
tree | 317cee043edcb891839643dc67d8f3b96718bfbc /src/process.cpp | |
parent | 4b6a91106a0033dc289a9663632aee776af878f0 (diff) | |
download | libbu++-6070f3cb3fe44f17114fd58792055e9c91bd3576.tar.gz libbu++-6070f3cb3fe44f17114fd58792055e9c91bd3576.tar.bz2 libbu++-6070f3cb3fe44f17114fd58792055e9c91bd3576.tar.xz libbu++-6070f3cb3fe44f17114fd58792055e9c91bd3576.zip |
Fixed Bu::Process' close function, it wasn't closing, now it actually closes
the pipes and waits for the child process like it should. It doesn't force the
child to close right now, I'm not sure it should, we'll figure that out later.
Diffstat (limited to 'src/process.cpp')
-rw-r--r-- | src/process.cpp | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/src/process.cpp b/src/process.cpp index f04d9fb..ff40f73 100644 --- a/src/process.cpp +++ b/src/process.cpp | |||
@@ -14,12 +14,14 @@ | |||
14 | #include <fcntl.h> | 14 | #include <fcntl.h> |
15 | #include <errno.h> | 15 | #include <errno.h> |
16 | 16 | ||
17 | Bu::Process::Process( const char *sName, char *const argv[] ) | 17 | Bu::Process::Process( const char *sName, char *const argv[] ) : |
18 | iPid( 0 ) | ||
18 | { | 19 | { |
19 | gexec( sName, argv ); | 20 | gexec( sName, argv ); |
20 | } | 21 | } |
21 | 22 | ||
22 | Bu::Process::Process( const char *sName, const char *argv, ...) | 23 | Bu::Process::Process( const char *sName, const char *argv, ...) : |
24 | iPid( 0 ) | ||
23 | { | 25 | { |
24 | int iCnt = 0; | 26 | int iCnt = 0; |
25 | va_list ap; | 27 | va_list ap; |
@@ -43,6 +45,7 @@ Bu::Process::Process( const char *sName, const char *argv, ...) | |||
43 | 45 | ||
44 | Bu::Process::~Process() | 46 | Bu::Process::~Process() |
45 | { | 47 | { |
48 | close(); | ||
46 | } | 49 | } |
47 | 50 | ||
48 | void Bu::Process::gexec( const char *sName, char *const argv[] ) | 51 | void Bu::Process::gexec( const char *sName, char *const argv[] ) |
@@ -79,6 +82,14 @@ void Bu::Process::gexec( const char *sName, char *const argv[] ) | |||
79 | 82 | ||
80 | void Bu::Process::close() | 83 | void Bu::Process::close() |
81 | { | 84 | { |
85 | if( iPid ) | ||
86 | { | ||
87 | ::close( iStdIn ); | ||
88 | ::close( iStdOut ); | ||
89 | int status; | ||
90 | waitpid( iPid, &status, 0 ); | ||
91 | iPid = 0; | ||
92 | } | ||
82 | } | 93 | } |
83 | 94 | ||
84 | size_t Bu::Process::read( void *pBuf, size_t nBytes ) | 95 | size_t Bu::Process::read( void *pBuf, size_t nBytes ) |