-rw-r--r-- | libopie2/opiecore/oprocess.cpp | 193 | ||||
-rw-r--r-- | libopie2/opiecore/oprocess.h | 80 |
2 files changed, 109 insertions, 164 deletions
diff --git a/libopie2/opiecore/oprocess.cpp b/libopie2/opiecore/oprocess.cpp index fb51bf9..f1a5f3b 100644 --- a/libopie2/opiecore/oprocess.cpp +++ b/libopie2/opiecore/oprocess.cpp @@ -1,70 +1,57 @@ /* - - $Id$ - - This file is part of the KDE libraries - Copyright (C) 1997 Christian Czezatke (e9025461@student.tuwien.ac.at) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + This file is part of the Opie Project + Copyright (C) 2002-2004 Holger Freyther <zecke@handhelds.org> + and The Opie Team <opie-devel@handhelds.org> + =. Based on KProcess (C) 1997 Christian Czezatke (e9025461@student.tuwien.ac.at) + .=l. + .>+-= +_;:, .> :=|. This program is free software; you can +.> <`_, > . <= redistribute it and/or modify it under +:`=1 )Y*s>-.-- : the terms of the GNU Library General Public +.="- .-=="i, .._ License as published by the Free Software +- . .-<_> .<> Foundation; either version 2 of the License, + ._= =} : or (at your option) any later version. + .%`+i> _;_. + .i_,=:_. -<s. This program is distributed in the hope that + + . -:. = it will be useful, but WITHOUT ANY WARRANTY; + : .. .:, . . . without even the implied warranty of + =_ + =;=|` MERCHANTABILITY or FITNESS FOR A + _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU +..}^=.= = ; Library General Public License for more +++= -. .` .: details. +: = ...= . :.=- +-. .:....=;==+<; You should have received a copy of the GNU + -_. . . )=. = Library General Public License along with + -- :-=` this library; see the file COPYING.LIB. + If not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -// -// KPROCESS -- A class for handling child processes in KDE without -// having to take care of Un*x specific implementation details -// -// version 0.3.1, Jan 8th 1998 -// -// (C) Christian Czezatke -// e9025461@student.tuwien.ac.at -// -// Changes: -// -// March 2nd, 1998: Changed parameter list for KShellProcess: -// Arguments are now placed in a single string so that -// <shell> -c <commandstring> is passed to the shell -// to make the use of "operator<<" consistent with KProcess -// -// -// Ported by Holger Freyther -// <zekce> Harlekin: oprocess and say it was ported to Qt by the Opie developers an Qt 2 - - - -#include "oprocess.h" -#define _MAY_INCLUDE_KPROCESSCONTROLLER_ #include "oprocctrl.h" -//#include <config.h> +/* OPIE */ +#include <opie2/oprocess.h> + +/* QT */ +#include <qapplication.h> #include <qfile.h> -#include <qsocketnotifier.h> +#include <qmap.h> #include <qregexp.h> +#include <qsocketnotifier.h> -#include <sys/time.h> -#include <sys/types.h> -#include <sys/stat.h> -#include <sys/socket.h> - +/* STD */ #include <errno.h> #include <fcntl.h> +#include <pwd.h> #include <stdlib.h> #include <signal.h> #include <stdio.h> #include <string.h> +#include <sys/time.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <sys/socket.h> #include <unistd.h> #ifdef HAVE_SYS_SELECT_H @@ -74,18 +61,10 @@ #include <grp.h> #endif -#include <pwd.h> - -#include <qapplication.h> -#include <qmap.h> -//#include <kdebug.h> - -///////////////////////////// -// public member functions // -///////////////////////////// class OProcessPrivate { public: - OProcessPrivate() : useShell(false) { } + OProcessPrivate() : useShell( false ) + { } bool useShell; @@ -144,6 +123,5 @@ void OProcess::init ( ) } -void -OProcess::setEnvironment(const QString &name, const QString &value) +void OProcess::setEnvironment( const QString &name, const QString &value ) { if (!d) @@ -152,6 +130,5 @@ OProcess::setEnvironment(const QString &name, const QString &value) } -void -OProcess::setWorkingDirectory(const QString &dir) +void OProcess::setWorkingDirectory( const QString &dir ) { if (!d) @@ -160,6 +137,5 @@ OProcess::setWorkingDirectory(const QString &dir) } -void -OProcess::setupEnvironment() +void OProcess::setupEnvironment() { if (d) @@ -174,17 +150,14 @@ OProcess::setupEnvironment() } -void -OProcess::setRunPrivileged(bool keepPrivileges) +void OProcess::setRunPrivileged( bool keepPrivileges ) { keepPrivs = keepPrivileges; } -bool -OProcess::runPrivileged() const +bool OProcess::runPrivileged() const { return keepPrivs; } - OProcess::~OProcess() { @@ -225,7 +198,9 @@ void OProcess::detach() bool OProcess::setExecutable(const QString& proc) { - if (runs) return false; + if ( runs ) + return false; - if (proc.isEmpty()) return false; + if ( proc.isEmpty() ) + return false; if (!arguments.isEmpty()) @@ -317,4 +292,5 @@ bool OProcess::start(RunMode runmode, Communication comm) gid_t gid = getgid(); #ifdef HAVE_INITGROUPS + struct passwd *pw = getpwuid(uid); #endif @@ -342,7 +318,9 @@ bool OProcess::start(RunMode runmode, Communication comm) setgid(gid); #if defined( HAVE_INITGROUPS) + if(pw) initgroups(pw->pw_name, pw->pw_gid); #endif + setuid(uid); } @@ -392,5 +370,6 @@ bool OProcess::start(RunMode runmode, Communication comm) // Check whether client could be started. - if (fd[0]) for(;;) + if ( fd[ 0 ] ) + for ( ;; ) { char resultByte; @@ -449,6 +428,4 @@ bool OProcess::kill(int signo) } - - bool OProcess::isRunning() const { @@ -456,6 +433,4 @@ bool OProcess::isRunning() const } - - pid_t OProcess::pid() const { @@ -463,6 +438,4 @@ pid_t OProcess::pid() const } - - bool OProcess::normalExit() const { @@ -471,6 +444,4 @@ bool OProcess::normalExit() const } - - int OProcess::exitStatus() const { @@ -479,6 +450,4 @@ int OProcess::exitStatus() const } - - bool OProcess::writeStdin(const char *buffer, int buflen) { @@ -584,11 +553,4 @@ bool OProcess::closeStderr() } - -///////////////////////////// -// protected slots // -///////////////////////////// - - - void OProcess::slotChildOutput(int fdno) { @@ -597,5 +559,4 @@ void OProcess::slotChildOutput(int fdno) } - void OProcess::slotChildError(int fdno) { @@ -604,5 +565,4 @@ void OProcess::slotChildError(int fdno) } - void OProcess::slotSendData(int) { @@ -617,12 +577,4 @@ void OProcess::slotSendData(int) } - - -////////////////////////////// -// private member functions // -////////////////////////////// - - - void OProcess::processHasExited(int state) { @@ -642,6 +594,4 @@ void OProcess::processHasExited(int state) } - - int OProcess::childOutput(int fdno) { @@ -668,6 +618,4 @@ int OProcess::childOutput(int fdno) } - - int OProcess::childError(int fdno) { @@ -682,6 +630,4 @@ int OProcess::childError(int fdno) } - - int OProcess::setupCommunication(Communication comm) { @@ -703,6 +649,4 @@ int OProcess::setupCommunication(Communication comm) } - - int OProcess::commSetupDoneP() { @@ -720,5 +664,6 @@ int OProcess::commSetupDoneP() // Don't create socket notifiers and set the sockets non-blocking if // blocking is requested. - if (run_mode == Block) return ok; + if ( run_mode == Block ) + return ok; if (communication & Stdin) @@ -755,6 +700,4 @@ int OProcess::commSetupDoneP() } - - int OProcess::commSetupDoneC() { @@ -803,6 +746,4 @@ int OProcess::commSetupDoneC() } - - void OProcess::commClose() { @@ -866,10 +807,12 @@ void OProcess::commClose() fds_ready = select(max_fd+1, &rfds, 0, 0, p_timeout); - if (fds_ready <= 0) break; + if ( fds_ready <= 0 ) + break; if (b_out && FD_ISSET(out[0], &rfds)) { int ret = 1; - while (ret > 0) ret = childOutput(out[0]); + while ( ret > 0 ) + ret = childOutput( out[ 0 ] ); if ((ret == -1 && errno != EAGAIN) || ret == 0) b_out = false; @@ -879,5 +822,6 @@ void OProcess::commClose() { int ret = 1; - while (ret > 0) ret = childError(err[0]); + while ( ret > 0 ) + ret = childError( err[ 0 ] ); if ((ret == -1 && errno != EAGAIN) || ret == 0) b_err = false; @@ -939,9 +883,11 @@ bool OProcess::isExecutable(const QCString &filename) struct stat fileinfo; - if (filename.isEmpty()) return false; + if ( filename.isEmpty() ) + return false; // CC: we've got a valid filename, now let's see whether we can execute that file - if (-1 == stat(filename.data(), &fileinfo)) return false; + if ( -1 == stat( filename.data(), &fileinfo ) ) + return false; // CC: return false if the file does not exist @@ -961,5 +907,6 @@ bool OProcess::isExecutable(const QCString &filename) // CC: now check for permission to execute the file - if (access(filename.data(), X_OK) != 0) return false; + if ( access( filename.data(), X_OK ) != 0 ) + return false; // CC: we've passed all the tests... @@ -967,4 +914,2 @@ bool OProcess::isExecutable(const QCString &filename) } - - diff --git a/libopie2/opiecore/oprocess.h b/libopie2/opiecore/oprocess.h index 8dd19b5..352485b 100644 --- a/libopie2/opiecore/oprocess.h +++ b/libopie2/opiecore/oprocess.h @@ -1,41 +1,45 @@ -/* This file is part of the KDE libraries - Copyright (C) 1997 Christian Czezakte (e9025461@student.tuwien.ac.at) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +/* + This file is part of the Opie Project + Copyright (C) 2003-2004 Holger Freyther <zecke@handhelds.org> + Copyright (C) The Opie Team <opie-devel@handhelds.org> + =. Based on KProcess (C) 1997 Christian Czezatke (e9025461@student.tuwien.ac.at) + .=l. + .>+-= +_;:, .> :=|. This program is free software; you can +.> <`_, > . <= redistribute it and/or modify it under +:`=1 )Y*s>-.-- : the terms of the GNU Library General Public +.="- .-=="i, .._ License as published by the Free Software +- . .-<_> .<> Foundation; either version 2 of the License, + ._= =} : or (at your option) any later version. + .%`+i> _;_. + .i_,=:_. -<s. This program is distributed in the hope that + + . -:. = it will be useful, but WITHOUT ANY WARRANTY; + : .. .:, . . . without even the implied warranty of + =_ + =;=|` MERCHANTABILITY or FITNESS FOR A + _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU +..}^=.= = ; Library General Public License for more +++= -. .` .: details. +: = ...= . :.=- +-. .:....=;==+<; You should have received a copy of the GNU + -_. . . )=. = Library General Public License along with + -- :-=` this library; see the file COPYING.LIB. + If not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -// -// KPROCESS -- A class for handling child processes in KDE without -// having to take care of Un*x specific implementation details -// -// version 0.3.1, Jan 8th 1998 -// -// (C) Christian Czezatke -// e9025461@student.tuwien.ac.at -// Ported by Holger Freyther to the Open Palmtop Integrated Environment -// -#ifndef __kprocess_h__ -#define __kprocess_h__ +#ifndef OPROCESS_H +#define OPROCESS_H + +/* QT */ +#include <qcstring.h> +#include <qobject.h> +#include <qvaluelist.h> +/* STD */ #include <sys/types.h> // for pid_t #include <sys/wait.h> #include <signal.h> #include <unistd.h> -#include <qvaluelist.h> -#include <qcstring.h> -#include <qobject.h> class QSocketNotifier; @@ -142,5 +146,5 @@ class OProcessPrivate; * *@author Christian Czezakte e9025461@student.tuwien.ac.at - * + *@author Holger Freyther (Opie Port) * **/ @@ -396,5 +400,8 @@ public: */ - const QValueList<QCString> &args() { return arguments; } + const QValueList<QCString> &args() + { + return arguments; + } /** @@ -455,6 +462,4 @@ public: void detach(); - - signals: @@ -523,5 +528,4 @@ signals: void wroteStdin(OProcess *proc); - protected slots: @@ -710,5 +714,4 @@ protected: friend class OProcessController; - private: /** @@ -738,10 +741,7 @@ private: private: void init ( ); - OProcessPrivate *d; }; - - #endif |