You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
2.2 KiB
58 lines
2.2 KiB
13 years ago
|
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/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 @@ TQString 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 @@ TQString KSshProcess::getLine() {
|
||
|
// had data on it first.
|
||
|
if( FD_ISSET(ptyfd, &rfds) ) {
|
||
|
ptyLine = ssh.readLineFromPty(false);
|
||
|
- buffer.prepend(TQString(ptyLine));
|
||
|
+ if (ptyLine.size() > 0) {
|
||
|
+ buffer.prepend(TQString(ptyLine));
|
||
|
+ }
|
||
|
//kdDebug(KSSHPROC) << "KSshProcess::getLine(): "
|
||
|
// "line from pty -" << ptyLine << endl;
|
||
|
}
|
||
|
-
|
||
|
+
|
||
|
if( FD_ISSET(errfd, &rfds) ) {
|
||
|
errLine = ssh.readLineFromStderr(false);
|
||
|
- buffer.prepend(TQString(errLine));
|
||
|
+ if (errLine.size() > 0) {
|
||
|
+ buffer.prepend(TQString(errLine));
|
||
|
+ }
|
||
|
//kdDebug(KSSHPROC) << "KSshProcess::getLine(): "
|
||
|
// "line from err -" << errLine << endl;
|
||
|
}
|
||
|
@@ -637,7 +643,11 @@ TQString KSshProcess::getLine() {
|
||
|
kdDebug(KSSHPROC) << "KSshProcess::getLine(): "
|
||
|
"Exception on std err file descriptor." << endl;
|
||
|
}
|
||
|
-
|
||
|
+
|
||
|
+ if (buffer.size() == 0) {
|
||
|
+ milliseconds++;
|
||
|
+ usleep(1000);
|
||
|
+ }
|
||
|
}
|
||
|
}
|
||
|
|