summaryrefslogtreecommitdiff
path: root/core/launcher/qprocess_unix.cpp
Side-by-side diff
Diffstat (limited to 'core/launcher/qprocess_unix.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--core/launcher/qprocess_unix.cpp646
1 files changed, 323 insertions, 323 deletions
diff --git a/core/launcher/qprocess_unix.cpp b/core/launcher/qprocess_unix.cpp
index 56e1b1d..97c0460 100644
--- a/core/launcher/qprocess_unix.cpp
+++ b/core/launcher/qprocess_unix.cpp
@@ -135,5 +135,5 @@ public:
#endif
- socketStdin = 0;
- socketStdout = 0;
- socketStderr = 0;
+ socketStdin = 0;
+ socketStdout = 0;
+ socketStderr = 0;
}
@@ -144,19 +144,19 @@ public:
#endif
- if ( process != 0 ) {
- if ( process->d->notifierStdin )
- process->d->notifierStdin->setEnabled( FALSE );
- if ( process->d->notifierStdout )
- process->d->notifierStdout->setEnabled( FALSE );
- if ( process->d->notifierStderr )
- process->d->notifierStderr->setEnabled( FALSE );
- process->d->proc = 0;
- }
- if( socketStdin != 0 )
- ::close( socketStdin );
- // ### close these sockets even on parent exit or is it better only on
- // sigchld (but what do I have to do with them on exit then)?
- if( socketStdout != 0 )
- ::close( socketStdout );
- if( socketStderr != 0 )
- ::close( socketStderr );
+ if ( process != 0 ) {
+ if ( process->d->notifierStdin )
+ process->d->notifierStdin->setEnabled( FALSE );
+ if ( process->d->notifierStdout )
+ process->d->notifierStdout->setEnabled( FALSE );
+ if ( process->d->notifierStderr )
+ process->d->notifierStderr->setEnabled( FALSE );
+ process->d->proc = 0;
+ }
+ if( socketStdin != 0 )
+ ::close( socketStdin );
+ // ### close these sockets even on parent exit or is it better only on
+ // sigchld (but what do I have to do with them on exit then)?
+ if( socketStdout != 0 )
+ ::close( socketStdout );
+ if( socketStderr != 0 )
+ ::close( socketStderr );
}
@@ -210,4 +210,4 @@ QProcessManager::QProcessManager()
if ( ::socketpair( AF_UNIX, SOCK_STREAM, 0, sigchldFd ) ) {
- sigchldFd[0] = 0;
- sigchldFd[1] = 0;
+ sigchldFd[0] = 0;
+ sigchldFd[1] = 0;
} else {
@@ -216,7 +216,7 @@ QProcessManager::QProcessManager()
#endif
- QSocketNotifier *sn = new QSocketNotifier( sigchldFd[1],
- QSocketNotifier::Read, this );
- connect( sn, SIGNAL(activated(int)),
- this, SLOT(sigchldHnd(int)) );
- sn->setEnabled( TRUE );
+ QSocketNotifier *sn = new QSocketNotifier( sigchldFd[1],
+ QSocketNotifier::Read, this );
+ connect( sn, SIGNAL(activated(int)),
+ this, SLOT(sigchldHnd(int)) );
+ sn->setEnabled( TRUE );
}
@@ -243,6 +243,6 @@ QProcessManager::QProcessManager()
/*
- Using qt_C_sigpipeHnd rather than SIG_IGN is a workaround
- for a strange problem where GNU tar (called by backuprestore)
- would hang on filesystem-full. Strangely, the qt_C_sigpipeHnd
- is never even called, yet this avoids the hang.
+ Using qt_C_sigpipeHnd rather than SIG_IGN is a workaround
+ for a strange problem where GNU tar (called by backuprestore)
+ would hang on filesystem-full. Strangely, the qt_C_sigpipeHnd
+ is never even called, yet this avoids the hang.
*/
@@ -261,5 +261,5 @@ QProcessManager::~QProcessManager()
if ( sigchldFd[0] != 0 )
- ::close( sigchldFd[0] );
+ ::close( sigchldFd[0] );
if ( sigchldFd[1] != 0 )
- ::close( sigchldFd[1] );
+ ::close( sigchldFd[1] );
@@ -299,3 +299,3 @@ void QProcessManager::cleanup()
if ( procList->count() == 0 ) {
- QTimer::singleShot( 0, this, SLOT(removeMe()) );
+ QTimer::singleShot( 0, this, SLOT(removeMe()) );
}
@@ -306,5 +306,5 @@ void QProcessManager::removeMe()
if ( procList->count() == 0 ) {
- qprocess_cleanup_procmanager.remove( &QProcessPrivate::procManager );
- QProcessPrivate::procManager = 0;
- delete this;
+ qprocess_cleanup_procmanager.remove( &QProcessPrivate::procManager );
+ QProcessPrivate::procManager = 0;
+ delete this;
}
@@ -324,7 +324,7 @@ void QProcessManager::sigchldHnd( int fd )
while ( proc != 0 ) {
- removeProc = FALSE;
- process = proc->process;
- QProcess *process_exit_notify=0;
- if ( process != 0 ) {
- if ( !process->isRunning() ) {
+ removeProc = FALSE;
+ process = proc->process;
+ QProcess *process_exit_notify=0;
+ if ( process != 0 ) {
+ if ( !process->isRunning() ) {
#if defined(QT_QPROCESS_DEBUG)
@@ -332,5 +332,5 @@ void QProcessManager::sigchldHnd( int fd )
#endif
- // read pending data
- int nbytes = 0;
- if ( ::ioctl(proc->socketStdout, FIONREAD, (char*)&nbytes)==0 && nbytes>0 ) {
+ // read pending data
+ int nbytes = 0;
+ if ( ::ioctl(proc->socketStdout, FIONREAD, (char*)&nbytes)==0 && nbytes>0 ) {
#if defined(QT_QPROCESS_DEBUG)
@@ -338,6 +338,6 @@ void QProcessManager::sigchldHnd( int fd )
#endif
- process->socketRead( proc->socketStdout );
- }
- nbytes = 0;
- if ( ::ioctl(proc->socketStderr, FIONREAD, (char*)&nbytes)==0 && nbytes>0 ) {
+ process->socketRead( proc->socketStdout );
+ }
+ nbytes = 0;
+ if ( ::ioctl(proc->socketStderr, FIONREAD, (char*)&nbytes)==0 && nbytes>0 ) {
#if defined(QT_QPROCESS_DEBUG)
@@ -345,13 +345,13 @@ void QProcessManager::sigchldHnd( int fd )
#endif
- process->socketRead( proc->socketStderr );
- }
+ process->socketRead( proc->socketStderr );
+ }
- if ( process->notifyOnExit )
- process_exit_notify = process;
+ if ( process->notifyOnExit )
+ process_exit_notify = process;
- removeProc = TRUE;
- }
- } else {
- int status;
- if ( ::waitpid( proc->pid, &status, WNOHANG ) == proc->pid ) {
+ removeProc = TRUE;
+ }
+ } else {
+ int status;
+ if ( ::waitpid( proc->pid, &status, WNOHANG ) == proc->pid ) {
#if defined(QT_QPROCESS_DEBUG)
@@ -359,14 +359,14 @@ void QProcessManager::sigchldHnd( int fd )
#endif
- removeProc = TRUE;
- }
- }
- if ( removeProc ) {
- QProc *oldproc = proc;
- proc = procList->next();
- remove( oldproc );
- } else {
- proc = procList->next();
- }
- if ( process_exit_notify )
- emit process_exit_notify->processExited();
+ removeProc = TRUE;
+ }
+ }
+ if ( removeProc ) {
+ QProc *oldproc = proc;
+ proc = procList->next();
+ remove( oldproc );
+ } else {
+ proc = procList->next();
+ }
+ if ( process_exit_notify )
+ emit process_exit_notify->processExited();
}
@@ -408,7 +408,7 @@ QProcessPrivate::~QProcessPrivate()
if ( proc != 0 ) {
- if ( proc->socketStdin != 0 ) {
- ::close( proc->socketStdin );
- proc->socketStdin = 0;
- }
- proc->process = 0;
+ if ( proc->socketStdin != 0 ) {
+ ::close( proc->socketStdin );
+ proc->socketStdin = 0;
+ }
+ proc->process = 0;
}
@@ -416,3 +416,3 @@ QProcessPrivate::~QProcessPrivate()
while ( !stdinBuf.isEmpty() ) {
- delete stdinBuf.dequeue();
+ delete stdinBuf.dequeue();
}
@@ -431,14 +431,14 @@ void QProcessPrivate::closeOpenSocketsForChild()
if ( procManager != 0 ) {
- if ( procManager->sigchldFd[0] != 0 )
- ::close( procManager->sigchldFd[0] );
- if ( procManager->sigchldFd[1] != 0 )
- ::close( procManager->sigchldFd[1] );
-
- // close also the sockets from other QProcess instances
- QProc *proc;
- for ( proc=procManager->procList->first(); proc!=0; proc=procManager->procList->next() ) {
- ::close( proc->socketStdin );
- ::close( proc->socketStdout );
- ::close( proc->socketStderr );
- }
+ if ( procManager->sigchldFd[0] != 0 )
+ ::close( procManager->sigchldFd[0] );
+ if ( procManager->sigchldFd[1] != 0 )
+ ::close( procManager->sigchldFd[1] );
+
+ // close also the sockets from other QProcess instances
+ QProc *proc;
+ for ( proc=procManager->procList->first(); proc!=0; proc=procManager->procList->next() ) {
+ ::close( proc->socketStdin );
+ ::close( proc->socketStdout );
+ ::close( proc->socketStderr );
+ }
}
@@ -450,4 +450,4 @@ void QProcessPrivate::newProc( pid_t pid, QProcess *process )
if ( procManager == 0 ) {
- procManager = new QProcessManager;
- qprocess_cleanup_procmanager.add( &procManager );
+ procManager = new QProcessManager;
+ qprocess_cleanup_procmanager.add( &procManager );
}
@@ -465,5 +465,5 @@ QT_SIGNAL_RETTYPE qt_C_sigchldHnd( QT_SIGNAL_ARGS )
if ( QProcessPrivate::procManager == 0 )
- return;
+ return;
if ( QProcessPrivate::procManager->sigchldFd[0] == 0 )
- return;
+ return;
@@ -510,5 +510,5 @@ QByteArray* QProcess::bufStdout()
if ( d->proc && d->proc->socketStdout ) {
- // ### can this cause a blocking behaviour (maybe do a ioctl() to see
- // if data is available)?
- socketRead( d->proc->socketStdout );
+ // ### can this cause a blocking behaviour (maybe do a ioctl() to see
+ // if data is available)?
+ socketRead( d->proc->socketStdout );
}
@@ -520,5 +520,5 @@ QByteArray* QProcess::bufStderr()
if ( d->proc && d->proc->socketStderr ) {
- // ### can this cause a blocking behaviour (maybe do a ioctl() to see
- // if data is available)?
- socketRead( d->proc->socketStderr );
+ // ### can this cause a blocking behaviour (maybe do a ioctl() to see
+ // if data is available)?
+ socketRead( d->proc->socketStderr );
}
@@ -531,7 +531,7 @@ void QProcess::consumeBufStdout( int consume )
if ( consume==-1 || (uint)consume >= n ) {
- d->bufStdout.resize( 0 );
+ d->bufStdout.resize( 0 );
} else {
- QByteArray tmp( n - consume );
- memcpy( tmp.data(), d->bufStdout.data()+consume, n-consume );
- d->bufStdout = tmp;
+ QByteArray tmp( n - consume );
+ memcpy( tmp.data(), d->bufStdout.data()+consume, n-consume );
+ d->bufStdout = tmp;
}
@@ -543,7 +543,7 @@ void QProcess::consumeBufStderr( int consume )
if ( consume==-1 || (uint)consume >= n ) {
- d->bufStderr.resize( 0 );
+ d->bufStderr.resize( 0 );
} else {
- QByteArray tmp( n - consume );
- memcpy( tmp.data(), d->bufStderr.data()+consume, n-consume );
- d->bufStderr = tmp;
+ QByteArray tmp( n - consume );
+ memcpy( tmp.data(), d->bufStderr.data()+consume, n-consume );
+ d->bufStderr = tmp;
}
@@ -610,9 +610,9 @@ bool QProcess::start( QStringList *env )
if ( (comms & Stdin) && ::socketpair( AF_UNIX, SOCK_STREAM, 0, sStdin ) == -1 ) {
- return FALSE;
+ return FALSE;
}
if ( (comms & Stderr) && ::socketpair( AF_UNIX, SOCK_STREAM, 0, sStderr ) == -1 ) {
- return FALSE;
+ return FALSE;
}
if ( (comms & Stdout) && ::socketpair( AF_UNIX, SOCK_STREAM, 0, sStdout ) == -1 ) {
- return FALSE;
+ return FALSE;
}
@@ -623,5 +623,5 @@ bool QProcess::start( QStringList *env )
if ( pipe( fd ) < 0 ) {
- // non critical error, go on
- fd[0] = 0;
- fd[1] = 0;
+ // non critical error, go on
+ fd[0] = 0;
+ fd[1] = 0;
}
@@ -633,4 +633,4 @@ bool QProcess::start( QStringList *env )
for ( QStringList::Iterator it = _arguments.begin(); it != _arguments.end(); ++it ) {
- arglistQ[i] = (*it).local8Bit();
- arglist[i] = arglistQ[i];
+ arglistQ[i] = (*it).local8Bit();
+ arglist[i] = arglistQ[i];
#if defined(QT_QPROCESS_DEBUG)
@@ -638,3 +638,3 @@ bool QProcess::start( QStringList *env )
#endif
- i++;
+ i++;
}
@@ -645,4 +645,4 @@ bool QProcess::start( QStringList *env )
if ( d->procManager == 0 ) {
- d->procManager = new QProcessManager;
- qprocess_cleanup_procmanager.add( &d->procManager );
+ d->procManager = new QProcessManager;
+ qprocess_cleanup_procmanager.add( &d->procManager );
}
@@ -653,87 +653,87 @@ bool QProcess::start( QStringList *env )
if ( pid == 0 ) {
- // child
- d->closeOpenSocketsForChild();
- if ( comms & Stdin ) {
- ::close( sStdin[1] );
- ::dup2( sStdin[0], STDIN_FILENO );
- }
- if ( comms & Stdout ) {
- ::close( sStdout[0] );
- ::dup2( sStdout[1], STDOUT_FILENO );
- }
- if ( comms & Stderr ) {
- ::close( sStderr[0] );
- ::dup2( sStderr[1], STDERR_FILENO );
- }
- if ( comms & DupStderr ) {
- ::dup2( STDOUT_FILENO, STDERR_FILENO );
- }
+ // child
+ d->closeOpenSocketsForChild();
+ if ( comms & Stdin ) {
+ ::close( sStdin[1] );
+ ::dup2( sStdin[0], STDIN_FILENO );
+ }
+ if ( comms & Stdout ) {
+ ::close( sStdout[0] );
+ ::dup2( sStdout[1], STDOUT_FILENO );
+ }
+ if ( comms & Stderr ) {
+ ::close( sStderr[0] );
+ ::dup2( sStderr[1], STDERR_FILENO );
+ }
+ if ( comms & DupStderr ) {
+ ::dup2( STDOUT_FILENO, STDERR_FILENO );
+ }
#ifndef QT_NO_DIR
- ::chdir( workingDir.absPath().latin1() );
+ ::chdir( workingDir.absPath().latin1() );
#endif
- if ( fd[0] )
- ::close( fd[0] );
- if ( fd[1] )
- ::fcntl( fd[1], F_SETFD, FD_CLOEXEC ); // close on exec shows sucess
-
- if ( env == 0 ) { // inherit environment and start process
- ::execvp( arglist[0], (char*const*)arglist ); // ### cast not nice
- } else { // start process with environment settins as specified in env
- // construct the environment for exec
- int numEntries = env->count();
- bool setLibraryPath =
- env->grep( QRegExp( "^LD_LIBRARY_PATH=" ) ).isEmpty() &&
- getenv( "LD_LIBRARY_PATH" ) != 0;
- if ( setLibraryPath )
- numEntries++;
- QCString *envlistQ = new QCString[ numEntries + 1 ];
- const char** envlist = new const char*[ numEntries + 1 ];
- int i = 0;
- if ( setLibraryPath ) {
- envlistQ[i] = QString( "LD_LIBRARY_PATH=%1" ).arg( getenv( "LD_LIBRARY_PATH" ) ).local8Bit();
- envlist[i] = envlistQ[i];
- i++;
- }
- for ( QStringList::Iterator it = env->begin(); it != env->end(); ++it ) {
- envlistQ[i] = (*it).local8Bit();
- envlist[i] = envlistQ[i];
- i++;
- }
- envlist[i] = 0;
-
- // look for the executable in the search path
- if ( _arguments.count()>0 && getenv("PATH")!=0 ) {
- QString command = _arguments[0];
- if ( !command.contains( '/' ) ) {
- QStringList pathList = QStringList::split( ':', getenv( "PATH" ) );
- for (QStringList::Iterator it = pathList.begin(); it != pathList.end(); ++it ) {
- QString dir = *it;
+ if ( fd[0] )
+ ::close( fd[0] );
+ if ( fd[1] )
+ ::fcntl( fd[1], F_SETFD, FD_CLOEXEC ); // close on exec shows sucess
+
+ if ( env == 0 ) { // inherit environment and start process
+ ::execvp( arglist[0], (char*const*)arglist ); // ### cast not nice
+ } else { // start process with environment settins as specified in env
+ // construct the environment for exec
+ int numEntries = env->count();
+ bool setLibraryPath =
+ env->grep( QRegExp( "^LD_LIBRARY_PATH=" ) ).isEmpty() &&
+ getenv( "LD_LIBRARY_PATH" ) != 0;
+ if ( setLibraryPath )
+ numEntries++;
+ QCString *envlistQ = new QCString[ numEntries + 1 ];
+ const char** envlist = new const char*[ numEntries + 1 ];
+ int i = 0;
+ if ( setLibraryPath ) {
+ envlistQ[i] = QString( "LD_LIBRARY_PATH=%1" ).arg( getenv( "LD_LIBRARY_PATH" ) ).local8Bit();
+ envlist[i] = envlistQ[i];
+ i++;
+ }
+ for ( QStringList::Iterator it = env->begin(); it != env->end(); ++it ) {
+ envlistQ[i] = (*it).local8Bit();
+ envlist[i] = envlistQ[i];
+ i++;
+ }
+ envlist[i] = 0;
+
+ // look for the executable in the search path
+ if ( _arguments.count()>0 && getenv("PATH")!=0 ) {
+ QString command = _arguments[0];
+ if ( !command.contains( '/' ) ) {
+ QStringList pathList = QStringList::split( ':', getenv( "PATH" ) );
+ for (QStringList::Iterator it = pathList.begin(); it != pathList.end(); ++it ) {
+ QString dir = *it;
#ifdef Q_OS_MACX
- if(QFile::exists(dir + "/" + command + ".app")) //look in a bundle
- dir += "/" + command + ".app/Contents/MacOS";
+ if(QFile::exists(dir + "/" + command + ".app")) //look in a bundle
+ dir += "/" + command + ".app/Contents/MacOS";
#endif
#ifndef QT_NO_DIR
- QFileInfo fileInfo( dir, command );
+ QFileInfo fileInfo( dir, command );
#else
- QFileInfo fileInfo( dir + "/" + command );
+ QFileInfo fileInfo( dir + "/" + command );
#endif
- if ( fileInfo.isExecutable() ) {
- arglistQ[0] = fileInfo.filePath().local8Bit();
- arglist[0] = arglistQ[0];
- break;
- }
- }
- }
- }
- ::execve( arglist[0], (char*const*)arglist, (char*const*)envlist ); // ### casts not nice
- }
- if ( fd[1] ) {
- char buf = 0;
- ::write( fd[1], &buf, 1 );
- ::close( fd[1] );
- }
- ::exit( -1 );
+ if ( fileInfo.isExecutable() ) {
+ arglistQ[0] = fileInfo.filePath().local8Bit();
+ arglist[0] = arglistQ[0];
+ break;
+ }
+ }
+ }
+ }
+ ::execve( arglist[0], (char*const*)arglist, (char*const*)envlist ); // ### casts not nice
+ }
+ if ( fd[1] ) {
+ char buf = 0;
+ ::write( fd[1], &buf, 1 );
+ ::close( fd[1] );
+ }
+ ::exit( -1 );
} else if ( pid == -1 ) {
- // error forking
- goto error;
+ // error forking
+ goto error;
}
@@ -742,19 +742,19 @@ bool QProcess::start( QStringList *env )
if ( fd[1] )
- ::close( fd[1] );
+ ::close( fd[1] );
if ( fd[0] ) {
- char buf;
- for ( ;; ) {
- int n = ::read( fd[0], &buf, 1 );
- if ( n==1 ) {
- // socket was not closed => error
- d->proc = 0;
- goto error;
- } else if ( n==-1 ) {
- if ( errno==EAGAIN || errno==EINTR )
- // try it again
- continue;
- }
- break;
- }
- ::close( fd[0] );
+ char buf;
+ for ( ;; ) {
+ int n = ::read( fd[0], &buf, 1 );
+ if ( n==1 ) {
+ // socket was not closed => error
+ d->proc = 0;
+ goto error;
+ } else if ( n==-1 ) {
+ if ( errno==EAGAIN || errno==EINTR )
+ // try it again
+ continue;
+ }
+ break;
+ }
+ ::close( fd[0] );
}
@@ -764,29 +764,29 @@ bool QProcess::start( QStringList *env )
if ( comms & Stdin ) {
- ::close( sStdin[0] );
- d->proc->socketStdin = sStdin[1];
- d->notifierStdin = new QSocketNotifier( sStdin[1], QSocketNotifier::Write );
- connect( d->notifierStdin, SIGNAL(activated(int)),
- this, SLOT(socketWrite(int)) );
- // setup notifiers for the sockets
- if ( !d->stdinBuf.isEmpty() ) {
- d->notifierStdin->setEnabled( TRUE );
- }
+ ::close( sStdin[0] );
+ d->proc->socketStdin = sStdin[1];
+ d->notifierStdin = new QSocketNotifier( sStdin[1], QSocketNotifier::Write );
+ connect( d->notifierStdin, SIGNAL(activated(int)),
+ this, SLOT(socketWrite(int)) );
+ // setup notifiers for the sockets
+ if ( !d->stdinBuf.isEmpty() ) {
+ d->notifierStdin->setEnabled( TRUE );
+ }
}
if ( comms & Stdout ) {
- ::close( sStdout[1] );
- d->proc->socketStdout = sStdout[0];
- d->notifierStdout = new QSocketNotifier( sStdout[0], QSocketNotifier::Read );
- connect( d->notifierStdout, SIGNAL(activated(int)),
- this, SLOT(socketRead(int)) );
- if ( ioRedirection )
- d->notifierStdout->setEnabled( TRUE );
+ ::close( sStdout[1] );
+ d->proc->socketStdout = sStdout[0];
+ d->notifierStdout = new QSocketNotifier( sStdout[0], QSocketNotifier::Read );
+ connect( d->notifierStdout, SIGNAL(activated(int)),
+ this, SLOT(socketRead(int)) );
+ if ( ioRedirection )
+ d->notifierStdout->setEnabled( TRUE );
}
if ( comms & Stderr ) {
- ::close( sStderr[1] );
- d->proc->socketStderr = sStderr[0];
- d->notifierStderr = new QSocketNotifier( sStderr[0], QSocketNotifier::Read );
- connect( d->notifierStderr, SIGNAL(activated(int)),
- this, SLOT(socketRead(int)) );
- if ( ioRedirection )
- d->notifierStderr->setEnabled( TRUE );
+ ::close( sStderr[1] );
+ d->proc->socketStderr = sStderr[0];
+ d->notifierStderr = new QSocketNotifier( sStderr[0], QSocketNotifier::Read );
+ connect( d->notifierStderr, SIGNAL(activated(int)),
+ this, SLOT(socketRead(int)) );
+ if ( ioRedirection )
+ d->notifierStderr->setEnabled( TRUE );
}
@@ -803,14 +803,14 @@ error:
if ( d->procManager )
- d->procManager->cleanup();
+ d->procManager->cleanup();
if ( comms & Stdin ) {
- ::close( sStdin[1] );
- ::close( sStdin[0] );
+ ::close( sStdin[1] );
+ ::close( sStdin[0] );
}
if ( comms & Stdout ) {
- ::close( sStdout[0] );
- ::close( sStdout[1] );
+ ::close( sStdout[0] );
+ ::close( sStdout[1] );
}
if ( comms & Stderr ) {
- ::close( sStderr[0] );
- ::close( sStderr[1] );
+ ::close( sStderr[0] );
+ ::close( sStderr[1] );
}
@@ -837,3 +837,3 @@ void QProcess::tryTerminate() const
if ( d->proc != 0 )
- ::kill( d->proc->pid, SIGTERM );
+ ::kill( d->proc->pid, SIGTERM );
}
@@ -867,3 +867,3 @@ void QProcess::kill() const
if ( d->proc != 0 )
- ::kill( d->proc->pid, SIGKILL );
+ ::kill( d->proc->pid, SIGKILL );
}
@@ -881,6 +881,6 @@ bool QProcess::isRunning() const
#endif
- return FALSE;
+ return FALSE;
}
if ( d->proc == 0 )
- return FALSE;
+ return FALSE;
int status;
@@ -888,9 +888,9 @@ bool QProcess::isRunning() const
{
- // compute the exit values
- QProcess *that = (QProcess*)this; // mutable
- that->exitNormal = WIFEXITED( status ) != 0;
- if ( exitNormal ) {
- that->exitStat = (char)WEXITSTATUS( status );
- }
- d->exitValuesCalculated = TRUE;
+ // compute the exit values
+ QProcess *that = (QProcess*)this; // mutable
+ that->exitNormal = WIFEXITED( status ) != 0;
+ if ( exitNormal ) {
+ that->exitStat = (char)WEXITSTATUS( status );
+ }
+ d->exitValuesCalculated = TRUE;
#if defined(QT_QPROCESS_DEBUG)
@@ -898,3 +898,3 @@ bool QProcess::isRunning() const
#endif
- return FALSE;
+ return FALSE;
}
@@ -925,3 +925,3 @@ void QProcess::writeToStdin( const QByteArray& buf )
if ( d->notifierStdin != 0 )
- d->notifierStdin->setEnabled( TRUE );
+ d->notifierStdin->setEnabled( TRUE );
}
@@ -940,12 +940,12 @@ void QProcess::closeStdin()
if ( d->proc == 0 )
- return;
+ return;
if ( d->proc->socketStdin !=0 ) {
- while ( !d->stdinBuf.isEmpty() ) {
- delete d->stdinBuf.dequeue();
- }
- delete d->notifierStdin;
- d->notifierStdin = 0;
- if ( ::close( d->proc->socketStdin ) != 0 ) {
+ while ( !d->stdinBuf.isEmpty() ) {
+ delete d->stdinBuf.dequeue();
+ }
+ delete d->notifierStdin;
+ d->notifierStdin = 0;
+ if ( ::close( d->proc->socketStdin ) != 0 ) {
owarn << "Could not close stdin of child process" << oendl;
- }
+ }
#if defined(QT_QPROCESS_DEBUG)
@@ -953,3 +953,3 @@ void QProcess::closeStdin()
#endif
- d->proc->socketStdin = 0;
+ d->proc->socketStdin = 0;
}
@@ -965,6 +965,6 @@ void QProcess::socketRead( int fd )
if ( d->socketReadCalled ) {
- // the slots that are connected to the readyRead...() signals might
- // trigger a recursive call of socketRead(). Avoid this since you get a
- // blocking read otherwise.
- return;
+ // the slots that are connected to the readyRead...() signals might
+ // trigger a recursive call of socketRead(). Avoid this since you get a
+ // blocking read otherwise.
+ return;
}
@@ -974,3 +974,3 @@ void QProcess::socketRead( int fd )
if ( fd == 0 )
- return;
+ return;
const int bufsize = 4096;
@@ -980,8 +980,8 @@ void QProcess::socketRead( int fd )
if ( fd == d->proc->socketStdout ) {
- buffer = &d->bufStdout;
+ buffer = &d->bufStdout;
} else if ( fd == d->proc->socketStderr ) {
- buffer = &d->bufStderr;
+ buffer = &d->bufStderr;
} else {
- // this case should never happen, but just to be safe
- return;
+ // this case should never happen, but just to be safe
+ return;
}
@@ -993,8 +993,8 @@ void QProcess::socketRead( int fd )
if ( n > 0 )
- buffer->resize( oldSize + n );
+ buffer->resize( oldSize + n );
else
- buffer->resize( oldSize );
+ buffer->resize( oldSize );
// eof or error?
if ( n == 0 || n == -1 ) {
- if ( fd == d->proc->socketStdout ) {
+ if ( fd == d->proc->socketStdout ) {
#if defined(QT_QPROCESS_DEBUG)
@@ -1002,9 +1002,9 @@ void QProcess::socketRead( int fd )
#endif
- d->notifierStdout->setEnabled( FALSE );
- delete d->notifierStdout;
- d->notifierStdout = 0;
- ::close( d->proc->socketStdout );
- d->proc->socketStdout = 0;
- return;
- } else if ( fd == d->proc->socketStderr ) {
+ d->notifierStdout->setEnabled( FALSE );
+ delete d->notifierStdout;
+ d->notifierStdout = 0;
+ ::close( d->proc->socketStdout );
+ d->proc->socketStdout = 0;
+ return;
+ } else if ( fd == d->proc->socketStderr ) {
#if defined(QT_QPROCESS_DEBUG)
@@ -1012,9 +1012,9 @@ void QProcess::socketRead( int fd )
#endif
- d->notifierStderr->setEnabled( FALSE );
- delete d->notifierStderr;
- d->notifierStderr = 0;
- ::close( d->proc->socketStderr );
- d->proc->socketStderr = 0;
- return;
- }
+ d->notifierStderr->setEnabled( FALSE );
+ delete d->notifierStderr;
+ d->notifierStderr = 0;
+ ::close( d->proc->socketStderr );
+ d->proc->socketStderr = 0;
+ return;
+ }
}
@@ -1022,9 +1022,9 @@ void QProcess::socketRead( int fd )
while ( n == bufsize ) {
- oldSize = buffer->size();
- buffer->resize( oldSize + bufsize );
- n = ::read( fd, buffer->data()+oldSize, bufsize );
- if ( n > 0 )
- buffer->resize( oldSize + n );
- else
- buffer->resize( oldSize );
+ oldSize = buffer->size();
+ buffer->resize( oldSize + bufsize );
+ n = ::read( fd, buffer->data()+oldSize, bufsize );
+ if ( n > 0 )
+ buffer->resize( oldSize + n );
+ else
+ buffer->resize( oldSize );
}
@@ -1034,12 +1034,12 @@ void QProcess::socketRead( int fd )
#if defined(QT_QPROCESS_DEBUG)
- qDebug( "QProcess::socketRead(): %d bytes read from stdout (%d)",
- buffer->size()-oldSize, fd );
+ odebug << "QProcess::socketRead(): " << buffer->size()-oldSize << "bytes read from stdout ("
+ << fd << ")" << oendl;
#endif
- emit readyReadStdout();
+ emit readyReadStdout();
} else if ( fd == d->proc->socketStderr ) {
#if defined(QT_QPROCESS_DEBUG)
- qDebug( "QProcess::socketRead(): %d bytes read from stderr (%d)",
- buffer->size()-oldSize, fd );
+ odebug << "QProcess::socketRead(): " << buffer->size()-oldSize << " bytes read from stderr ("
+ << fd << ")" << oendl;
#endif
- emit readyReadStderr();
+ emit readyReadStderr();
}
@@ -1056,6 +1056,6 @@ void QProcess::socketWrite( int fd )
if ( fd != d->proc->socketStdin || d->proc->socketStdin == 0 )
- return;
+ return;
if ( d->stdinBuf.isEmpty() ) {
- d->notifierStdin->setEnabled( FALSE );
- return;
+ d->notifierStdin->setEnabled( FALSE );
+ return;
}
@@ -1065,12 +1065,12 @@ void QProcess::socketWrite( int fd )
ssize_t ret = ::write( fd,
- d->stdinBuf.head()->data() + d->stdinBufRead,
- d->stdinBuf.head()->size() - d->stdinBufRead );
+ d->stdinBuf.head()->data() + d->stdinBufRead,
+ d->stdinBuf.head()->size() - d->stdinBufRead );
if ( ret > 0 )
- d->stdinBufRead += ret;
+ d->stdinBufRead += ret;
if ( d->stdinBufRead == (ssize_t)d->stdinBuf.head()->size() ) {
- d->stdinBufRead = 0;
- delete d->stdinBuf.dequeue();
- if ( wroteToStdinConnected && d->stdinBuf.isEmpty() )
- emit wroteToStdin();
- socketWrite( fd );
+ d->stdinBufRead = 0;
+ delete d->stdinBuf.dequeue();
+ if ( wroteToStdinConnected && d->stdinBuf.isEmpty() )
+ emit wroteToStdin();
+ socketWrite( fd );
}
@@ -1107,11 +1107,11 @@ void QProcess::setIoRedirection( bool value )
if ( ioRedirection ) {
- if ( d->notifierStdout )
- d->notifierStdout->setEnabled( TRUE );
- if ( d->notifierStderr )
- d->notifierStderr->setEnabled( TRUE );
+ if ( d->notifierStdout )
+ d->notifierStdout->setEnabled( TRUE );
+ if ( d->notifierStderr )
+ d->notifierStderr->setEnabled( TRUE );
} else {
- if ( d->notifierStdout )
- d->notifierStdout->setEnabled( FALSE );
- if ( d->notifierStderr )
- d->notifierStderr->setEnabled( FALSE );
+ if ( d->notifierStdout )
+ d->notifierStdout->setEnabled( FALSE );
+ if ( d->notifierStderr )
+ d->notifierStderr->setEnabled( FALSE );
}
@@ -1154,3 +1154,3 @@ QProcess::PID QProcess::processIdentifier()
if ( d->proc == 0 )
- return -1;
+ return -1;
return d->proc->pid;
@@ -1161,3 +1161,3 @@ int QProcess::priority() const
if ( d->proc )
- return getpriority(PRIO_PROCESS,d->proc->pid);
+ return getpriority(PRIO_PROCESS,d->proc->pid);
return 0;
@@ -1168,3 +1168,3 @@ void QProcess::setPriority(int p)
if ( d->proc )
- setpriority(PRIO_PROCESS,d->proc->pid,p);
+ setpriority(PRIO_PROCESS,d->proc->pid,p);
}