From 96900dbce3aaa1fcac74a07a71482c5c6fcd3cab Mon Sep 17 00:00:00 2001 From: tpearson Date: Thu, 2 Sep 2010 21:21:15 +0000 Subject: * Large set of SuSE patches to fix bugs and add functionality * kdemm is included but not used by knotify as it does not work out of the box git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdelibs@1171141 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- kioslave/file/Makefile.am | 2 +- kioslave/file/file.cc | 26 ++++++++++++++++++++++++++ kioslave/ftp/ftp.cc | 23 +++++++++++++++++++++++ kioslave/ftp/ftp.h | 5 +++++ 4 files changed, 55 insertions(+), 1 deletion(-) (limited to 'kioslave') diff --git a/kioslave/file/Makefile.am b/kioslave/file/Makefile.am index 7cafcb339..0f26c723a 100644 --- a/kioslave/file/Makefile.am +++ b/kioslave/file/Makefile.am @@ -10,7 +10,7 @@ kde_module_LTLIBRARIES = kio_file.la kio_file_la_SOURCES = file.cc kio_file_la_LIBADD = $(LIB_KIO) $(LIB_QT) $(LIB_KDECORE) $(ACL_LIBS) -kio_file_la_LDFLAGS = $(all_libraries) -module $(KDE_PLUGIN) +kio_file_la_LDFLAGS = $(all_libraries) -module $(KDE_PLUGIN) $(top_builddir)/dcop/libDCOP.la noinst_HEADERS = file.h fileinclude_HEADERS = file.h diff --git a/kioslave/file/file.cc b/kioslave/file/file.cc index 1fde27a81..441d03b98 100644 --- a/kioslave/file/file.cc +++ b/kioslave/file/file.cc @@ -69,6 +69,7 @@ #include #include +#include #include #include #include @@ -1617,6 +1618,31 @@ void FileProtocol::unmount( const TQString& _point ) #endif /* HAVE_VOLMGT */ err = testLogFile( tmp ); + + if (err.contains("fstab") || err.contains("root")) { + TQString olderr; + err = TQString::null; + + DCOPRef d("kded", "mediamanager"); + d.setDCOPClient ( dcopClient() ); + DCOPReply reply = d.call("properties", _point); + TQString udi; + + if ( reply.isValid() ) { + TQStringList list = reply; + if (list.size()) + udi = list[0]; + } + + if (!udi.isEmpty()) + reply = d.call("unmount", udi); + + if (udi.isEmpty() || !reply.isValid()) + err = olderr; + else if (reply.isValid()) + reply.get(err); + } + if ( err.isEmpty() ) finished(); else diff --git a/kioslave/ftp/ftp.cc b/kioslave/ftp/ftp.cc index ffc324c39..9e4fc21d9 100644 --- a/kioslave/ftp/ftp.cc +++ b/kioslave/ftp/ftp.cc @@ -1275,6 +1275,16 @@ bool Ftp::ftpRename( const TQString & src, const TQString & dst, bool overwrite return false; } + // Must check if dst already exists, RNFR+RNTO overwrites by default (#127793). + if (ftpFileExists(dst)) { + error(ERR_FILE_ALREADY_EXIST, dst); + return false; + } + if (ftpFolder(dst, false)) { + error(ERR_DIR_ALREADY_EXIST, dst); + return false; + } + int pos = src.findRev("/"); if( !ftpFolder(src.left(pos+1), false) ) return false; @@ -2406,6 +2416,19 @@ bool Ftp::ftpSize( const TQString & path, char mode ) return true; } +bool Ftp::ftpFileExists(const TQString& path) +{ + TQCString buf; + buf = "SIZE "; + buf += remoteEncoding()->encode(path); + if( !ftpSendCmd( buf ) || (m_iRespType != 2) ) + return false; + + // skip leading "213 " (response code) + const char* psz = ftpResponse(4); + return psz != 0; +} + // Today the differences between ASCII and BINARY are limited to // CR or CR/LF line terminators. Many servers ignore ASCII (like // win2003 -or- vsftp with default config). In the early days of diff --git a/kioslave/ftp/ftp.h b/kioslave/ftp/ftp.h index b2ce56492..44f0bdc71 100644 --- a/kioslave/ftp/ftp.h +++ b/kioslave/ftp/ftp.h @@ -347,6 +347,11 @@ private: */ bool ftpSize( const TQString & path, char mode ); + /** + * Set the current working directory, but only if not yet current + */ + bool ftpFileExists(const TQString& path); + /** * Set the current working directory, but only if not yet current */ -- cgit v1.2.1