-rw-r--r-- | noncore/apps/opie-console/MyPty.cpp | 22 | ||||
-rw-r--r-- | noncore/apps/opie-console/procctl.cpp | 2 |
2 files changed, 18 insertions, 6 deletions
diff --git a/noncore/apps/opie-console/MyPty.cpp b/noncore/apps/opie-console/MyPty.cpp index 10828b0..cacb4ce 100644 --- a/noncore/apps/opie-console/MyPty.cpp +++ b/noncore/apps/opie-console/MyPty.cpp @@ -79,12 +79,13 @@ #include <sys/wait.h> #ifdef HAVE_OPENPTY #include <pty.h> #endif +#include "procctl.h" #include "MyPty.h" #undef VERBOSE_DEBUG @@ -110,28 +111,31 @@ void MyPty::donePty() // This is code from the Qt DumbTerminal example int status = 0; ::close(m_fd); if (m_cpid) { + qWarning("killing!!!"); kill(m_cpid, SIGHUP); waitpid(m_cpid, &status, 0); } - emit done(status); + m_cpid = 0; +// emit done(status); } const char* MyPty::deviceName() { return m_ttynam; } void MyPty::error() { + qWarning("error"); // This is code from the Qt DumbTerminal example donePty(); } void MyPty::start() { char* cmd = "/bin/sh"; @@ -179,15 +183,15 @@ int MyPty::run(const char* cmd, QStrList &, const char*, int) donePty(); exit(-1); } // parent - continue as a widget QSocketNotifier* sn_r = new QSocketNotifier(m_fd,QSocketNotifier::Read,this); - QSocketNotifier* sn_e = new QSocketNotifier(m_fd,QSocketNotifier::Exception,this); +// QSocketNotifier* sn_e = new QSocketNotifier(m_fd,QSocketNotifier::Exception,this); connect(sn_r,SIGNAL(activated(int)),this,SLOT(readPty())); - connect(sn_e,SIGNAL(activated(int)),this,SLOT(error())); +// connect(sn_e,SIGNAL(activated(int)),this,SLOT(error())); return 0; } int MyPty::openPty() { @@ -226,12 +230,13 @@ int MyPty::openPty() /*! Create an instance. */ MyPty::MyPty(const Profile&) : m_cpid(0) { m_fd = openPty(); + ProcCtl* ctl = ProcCtl::self(); } /*! Destructor. Note that the related client program is not killed (yet) when a instance is deleted. @@ -256,13 +261,13 @@ void MyPty::close() { void MyPty::reload( const Profile& ) { } /*! sends len bytes through the line */ void MyPty::send(const QByteArray& ar) { - + qWarning("sending!"); #ifdef VERBOSE_DEBUG // verbose debug printf("sending bytes:\n"); for (uint i = 0; i < ar.count(); i++) printf("%c", ar[i]); printf("\n"); @@ -271,22 +276,29 @@ void MyPty::send(const QByteArray& ar) ::write(m_fd, ar.data(), ar.count()); } /*! indicates that a block of data is received */ void MyPty::readPty() { + qWarning("read"); QByteArray buf(4096); int len = ::read( m_fd, buf.data(), 4096 ); - if (len == -1) + if (len == -1 || len == 0) { + qWarning("donePty!!! now!"); donePty(); + qWarning("return %s", sender()->className() ); + delete sender(); + return; + } if (len < 0) return; + buf.resize(len); emit received(buf); #ifdef VERBOSE_DEBUG // verbose debug printf("read bytes:\n"); diff --git a/noncore/apps/opie-console/procctl.cpp b/noncore/apps/opie-console/procctl.cpp index b0b6846..d1cfaf6 100644 --- a/noncore/apps/opie-console/procctl.cpp +++ b/noncore/apps/opie-console/procctl.cpp @@ -68,13 +68,13 @@ int ProcCtl::status(pid_t pid )const{ return con->status; con = con->prev; } return -1; } void ProcCtl::signal_handler(int) { - qWarning("signal handler"); + qWarning("signal handler in ProcCtl"); int status; signal( SIGCHLD, signal_handler ); pid_t pi = waitpid( -1, &status, WNOHANG ); /* * find the container for pid |