diff options
author | V3n3RiX <venerix@redcorelinux.org> | 2018-07-14 20:24:29 +0100 |
---|---|---|
committer | V3n3RiX <venerix@redcorelinux.org> | 2018-07-14 20:24:29 +0100 |
commit | 85b4dac8f08d6690d531e17fafe23f30ecb4064f (patch) | |
tree | 259bae2cf2a79c9da4fdbf47746e86a39f09828a /kde-apps/kio-extras/files | |
parent | 907e9d90c393da55ed9e9edeb2a81fa5c3fdce31 (diff) |
gentoo resync : 14.07.2018
Diffstat (limited to 'kde-apps/kio-extras/files')
-rw-r--r-- | kde-apps/kio-extras/files/kio-extras-18.04.2-fix-sftp-links.patch | 227 |
1 files changed, 0 insertions, 227 deletions
diff --git a/kde-apps/kio-extras/files/kio-extras-18.04.2-fix-sftp-links.patch b/kde-apps/kio-extras/files/kio-extras-18.04.2-fix-sftp-links.patch deleted file mode 100644 index 8f7c02338794..000000000000 --- a/kde-apps/kio-extras/files/kio-extras-18.04.2-fix-sftp-links.patch +++ /dev/null @@ -1,227 +0,0 @@ -From bca40518682a038aa08823fbbfb2cc4b9ef63802 Mon Sep 17 00:00:00 2001 -From: Jaime Torres <jtamate@gmail.com> -Date: Wed, 13 Jun 2018 19:21:34 +0200 -Subject: fix sftp links with new uds implementation - -Summary: -When listening a directory with links in sftp, the type of the entry of a symlink was inserted twice. -Now the entry data is inserted only once. -Get rid of the goto statement using local variables. - -Test Plan: Tested in sftp://127.0.0.1 with broken symbolic links and sftp://127.0.0.1/usr/lib64 with a lot of symbolic links. - -Reviewers: dfaure, martinkostolny, asturmlechner, lbeltrame, bruns - -Reviewed By: dfaure, martinkostolny - -Differential Revision: https://phabricator.kde.org/D13475 ---- - sftp/kio_sftp.cpp | 129 ++++++++++++++++++++++++++++-------------------------- - 1 file changed, 67 insertions(+), 62 deletions(-) - -diff --git a/sftp/kio_sftp.cpp b/sftp/kio_sftp.cpp -index 0a82365..f515458 100644 ---- a/sftp/kio_sftp.cpp -+++ b/sftp/kio_sftp.cpp -@@ -342,6 +342,9 @@ bool sftpProtocol::createUDSEntry(const QString &filename, const QByteArray &pat - mode_t type; - mode_t access; - char *link; -+ bool isBrokenLink = false; -+ long long fileType = S_IFREG; -+ long long size = 0LL; - - Q_ASSERT(entry.count() == 0); - -@@ -353,54 +356,53 @@ bool sftpProtocol::createUDSEntry(const QString &filename, const QByteArray &pat - entry.insert(KIO::UDSEntry::UDS_NAME, filename); - - if (sb->type == SSH_FILEXFER_TYPE_SYMLINK) { -- entry.insert(KIO::UDSEntry::UDS_FILE_TYPE, S_IFREG); - link = sftp_readlink(mSftp, path.constData()); - if (link == nullptr) { - sftp_attributes_free(sb); - return false; - } - entry.insert(KIO::UDSEntry::UDS_LINK_DEST, QFile::decodeName(link)); -- delete link; -+ free(link); - // A symlink -> follow it only if details > 1 - if (details > 1) { - sftp_attributes sb2 = sftp_stat(mSftp, path.constData()); - if (sb2 == nullptr) { -- // It is a link pointing to nowhere -- type = S_IFMT - 1; -- access = S_IRWXU | S_IRWXG | S_IRWXO; -- entry.insert( KIO::UDSEntry::UDS_FILE_TYPE, type); -- entry.insert( KIO::UDSEntry::UDS_ACCESS, access); -- entry.insert( KIO::UDSEntry::UDS_SIZE, 0LL ); -- -- goto notype; -+ isBrokenLink = true; -+ } else { -+ sftp_attributes_free(sb); -+ sb = sb2; - } -- sftp_attributes_free(sb); -- sb = sb2; - } - } - -- switch (sb->type) { -- case SSH_FILEXFER_TYPE_REGULAR: -- entry.insert(KIO::UDSEntry::UDS_FILE_TYPE, S_IFREG); -- break; -- case SSH_FILEXFER_TYPE_DIRECTORY: -- entry.insert(KIO::UDSEntry::UDS_FILE_TYPE, S_IFDIR); -- break; -- case SSH_FILEXFER_TYPE_SYMLINK: -- entry.insert(KIO::UDSEntry::UDS_FILE_TYPE, S_IFLNK); -- break; -- case SSH_FILEXFER_TYPE_SPECIAL: -- case SSH_FILEXFER_TYPE_UNKNOWN: -- entry.insert(KIO::UDSEntry::UDS_FILE_TYPE, S_IFMT - 1); -- break; -+ if (isBrokenLink) { -+ // It is a link pointing to nowhere -+ fileType = S_IFMT - 1; -+ access = S_IRWXU | S_IRWXG | S_IRWXO; -+ size = 0LL; -+ } else { -+ switch (sb->type) { -+ case SSH_FILEXFER_TYPE_REGULAR: -+ fileType = S_IFREG; -+ break; -+ case SSH_FILEXFER_TYPE_DIRECTORY: -+ fileType = S_IFDIR; -+ break; -+ case SSH_FILEXFER_TYPE_SYMLINK: -+ fileType = S_IFLNK; -+ break; -+ case SSH_FILEXFER_TYPE_SPECIAL: -+ case SSH_FILEXFER_TYPE_UNKNOWN: -+ fileType = S_IFMT - 1; -+ break; -+ } -+ access = sb->permissions & 07777; -+ size = sb->size; - } -- -- access = sb->permissions & 07777; -+ entry.insert(KIO::UDSEntry::UDS_FILE_TYPE, fileType); - entry.insert(KIO::UDSEntry::UDS_ACCESS, access); -+ entry.insert( KIO::UDSEntry::UDS_SIZE, size); - -- entry.insert(KIO::UDSEntry::UDS_SIZE, sb->size); -- --notype: - if (details > 0) { - if (sb->owner) { - entry.insert(KIO::UDSEntry::UDS_USER, QString::fromUtf8(sb->owner)); -@@ -419,6 +421,7 @@ notype: - entry.insert(KIO::UDSEntry::UDS_CREATION_TIME, sb->createtime); - } - -+ - sftp_attributes_free(sb); - - return true; -@@ -1830,6 +1833,9 @@ void sftpProtocol::listDir(const QUrl& url) { - mode_t access; - mode_t type; - char *link; -+ bool isBrokenLink = false; -+ long long fileType = S_IFREG; -+ long long size = 0LL; - - dirent = sftp_readdir(mSftp, dp); - if (dirent == nullptr) { -@@ -1842,8 +1848,6 @@ void sftpProtocol::listDir(const QUrl& url) { - if (dirent->type == SSH_FILEXFER_TYPE_SYMLINK) { - QByteArray file = path + '/' + QFile::decodeName(dirent->name).toUtf8(); - -- entry.insert(KIO::UDSEntry::UDS_FILE_TYPE, S_IFREG); -- - link = sftp_readlink(mSftp, file.constData()); - if (link == nullptr) { - sftp_attributes_free(dirent); -@@ -1851,46 +1855,47 @@ void sftpProtocol::listDir(const QUrl& url) { - return; - } - entry.insert(KIO::UDSEntry::UDS_LINK_DEST, QFile::decodeName(link)); -- delete link; -+ free(link); - // A symlink -> follow it only if details > 1 - if (details > 1) { - sftp_attributes sb = sftp_stat(mSftp, file.constData()); - if (sb == nullptr) { -- // It is a link pointing to nowhere -- type = S_IFMT - 1; -- access = S_IRWXU | S_IRWXG | S_IRWXO; -- entry.insert( KIO::UDSEntry::UDS_FILE_TYPE, type); -- entry.insert( KIO::UDSEntry::UDS_ACCESS, access); -- entry.insert( KIO::UDSEntry::UDS_SIZE, 0LL ); -- -- goto notype; -+ isBrokenLink = true; -+ } else { -+ sftp_attributes_free(dirent); -+ dirent = sb; - } -- sftp_attributes_free(dirent); -- dirent = sb; - } - } - -- switch (dirent->type) { -- case SSH_FILEXFER_TYPE_REGULAR: -- entry.insert(KIO::UDSEntry::UDS_FILE_TYPE, S_IFREG); -- break; -- case SSH_FILEXFER_TYPE_DIRECTORY: -- entry.insert(KIO::UDSEntry::UDS_FILE_TYPE, S_IFDIR); -- break; -- case SSH_FILEXFER_TYPE_SYMLINK: -- entry.insert(KIO::UDSEntry::UDS_FILE_TYPE, S_IFLNK); -- break; -- case SSH_FILEXFER_TYPE_SPECIAL: -- case SSH_FILEXFER_TYPE_UNKNOWN: -- break; -- } -+ if (isBrokenLink) { -+ // It is a link pointing to nowhere -+ fileType = S_IFMT - 1; -+ access = S_IRWXU | S_IRWXG | S_IRWXO; -+ size = 0LL; -+ } else { -+ switch (dirent->type) { -+ case SSH_FILEXFER_TYPE_REGULAR: -+ fileType = S_IFREG; -+ break; -+ case SSH_FILEXFER_TYPE_DIRECTORY: -+ fileType = S_IFDIR; -+ break; -+ case SSH_FILEXFER_TYPE_SYMLINK: -+ fileType = S_IFLNK; -+ break; -+ case SSH_FILEXFER_TYPE_SPECIAL: -+ case SSH_FILEXFER_TYPE_UNKNOWN: -+ break; -+ } - -- access = dirent->permissions & 07777; -+ access = dirent->permissions & 07777; -+ size = dirent->size; -+ } -+ entry.insert(KIO::UDSEntry::UDS_FILE_TYPE, fileType); - entry.insert(KIO::UDSEntry::UDS_ACCESS, access); -+ entry.insert(KIO::UDSEntry::UDS_SIZE, size); - -- entry.insert(KIO::UDSEntry::UDS_SIZE, dirent->size); -- --notype: - if (details > 0) { - if (dirent->owner) { - entry.insert(KIO::UDSEntry::UDS_USER, QString::fromUtf8(dirent->owner)); --- -cgit v0.11.2 - |