LogoopenSUSE Build Service > Projects
Sign Up | Log In

View File kdebase-trinity-sftp-fix.diff of Package kdebase3 (Project openSUSE:Factory)

commit e72f4926c094b2bd94501518fbcd2a3e66a74f6a
Author: Timothy Pearson <kb9vqf@pearsoncomputing.net>
Date:   1335166907 -0500

    Fix sftp failure on newer systems
    This closes Bug 897

diff --git a/kioslave/sftp/kio_sftp.cpp b/kioslave/sftp/kio_sftp.cpp
index 2316c8c..04a2b33 100644
--- a/kioslave/sftp/kio_sftp.cpp
+++ b/kioslave/sftp/kio_sftp.cpp
@@ -481,11 +481,7 @@ void sftpProtocol::setHost (const QString& h, int port, const QString& user, c
     if( port > 0 )
         mPort = port;
     else {
-        struct servent *pse;
-        if( (pse = getservbyname("ssh", "tcp") ) == NULL )
-            mPort = 22;
-        else
-            mPort = ntohs(pse->s_port);
+        mPort = -1;
     }
 
     mUsername = user;
diff --git a/kioslave/sftp/ksshprocess.cpp b/kioslave/sftp/ksshprocess.cpp
index 2ccab59..3393f89 100644
--- a/kioslave/sftp/ksshprocess.cpp
+++ b/kioslave/sftp/ksshprocess.cpp
@@ -569,7 +569,9 @@ QString KSshProcess::getLine() {
         // If we still don't have anything in our buffer so there must
         // not be anything on the pty or stderr. Setup a select()
         // to wait for some data from SSH.
-        if( buffer.empty() ) {
+        // Hack around select() failure on newer systems
+        unsigned long milliseconds = 0;
+        while ((buffer.size() == 0) && (milliseconds < (60*1000))) {
             //kdDebug(KSSHPROC) << "KSshProcess::getLine(): " <<
             //    "Line buffer empty, calling select() to wait for data." << endl;
             int errfd = ssh.stderrFd();
@@ -616,14 +618,18 @@ QString KSshProcess::getLine() {
             // had data on it first.
             if( FD_ISSET(ptyfd, &rfds) ) {
                 ptyLine = ssh.readLineFromPty(false);
-                buffer.prepend(QString(ptyLine));
+                if (ptyLine.size() > 0) {
+                    buffer.prepend(QString(ptyLine));
+                }
                 //kdDebug(KSSHPROC) << "KSshProcess::getLine(): "
                 //    "line from pty -" << ptyLine  << endl;
             }
-            
+
             if( FD_ISSET(errfd, &rfds) ) {
                 errLine = ssh.readLineFromStderr(false);
-                buffer.prepend(QString(errLine));
+                if (errLine.size() > 0) {
+                    buffer.prepend(QString(errLine));
+                }
                 //kdDebug(KSSHPROC) << "KSshProcess::getLine(): "
                 //    "line from err -" << errLine << endl;
             }
@@ -637,7 +643,11 @@ QString KSshProcess::getLine() {
                 kdDebug(KSSHPROC) << "KSshProcess::getLine(): "
                     "Exception on std err file descriptor." << endl;
             }
-            
+
+            if (buffer.size() == 0) {
+                milliseconds++;
+                usleep(1000);
+            }
         }
     }