diff --git a/src/core/copyjob.cpp b/src/core/copyjob.cpp
--- a/src/core/copyjob.cpp
+++ b/src/core/copyjob.cpp
@@ -1606,6 +1606,16 @@
if (!bCopyFile) {
it = files.erase(it);
}
+
+ if ((*it).size > ((1ul << 32) -1)) { // (1ul << 32 -1) = 4 GB
+ const auto fileSystem = KFileSystemType::fileSystemType(m_globalDest.toString());
+ if (fileSystem == KFileSystemType::Fat) {
+ q->setError(ERR_FILE_TOO_LARGE_FOR_FAT32);
+ q->setErrorText(m_globalDest.toDisplayString());
+ q->emitResult();
+ return;
+ }
+ }
}
if (bCopyFile) { // any file to create, finally ?
@@ -1616,7 +1626,6 @@
q->emitResult();
return;
}
- //TODO check if dst mount is msdos and (*it).size exceeds it's limits
}
const QUrl &uSource = (*it).uSource;
diff --git a/src/core/global.h b/src/core/global.h
--- a/src/core/global.h
+++ b/src/core/global.h
@@ -245,7 +245,8 @@
ERR_DROP_ON_ITSELF = KJob::UserDefinedError + 70, ///< from KIO::DropJob, @since 5.6
ERR_CANNOT_MOVE_INTO_ITSELF = KJob::UserDefinedError + 71, ///< emitted by KIO::move, @since 5.18
ERR_PASSWD_SERVER = KJob::UserDefinedError + 72, ///< returned by SlaveBase::openPasswordDialogV2, @since 5.24
- ERR_CANNOT_CREATE_SLAVE = KJob::UserDefinedError + 73 ///< used by Slave::createSlave, @since 5.30
+ ERR_CANNOT_CREATE_SLAVE = KJob::UserDefinedError + 73, ///< used by Slave::createSlave, @since 5.30
+ ERR_FILE_TOO_LARGE_FOR_FAT32 = KJob::UserDefinedError + 74 ///< @since 5.52
};
/**
diff --git a/src/core/job_error.cpp b/src/core/job_error.cpp
--- a/src/core/job_error.cpp
+++ b/src/core/job_error.cpp
@@ -245,6 +245,9 @@
case KIO::ERR_CANNOT_CREATE_SLAVE:
result = i18n("Unable to create io-slave. %1", errorText);
break;
+ case KIO::ERR_FILE_TOO_LARGE_FOR_FAT32:
+ result = xi18n("Cannot transfer %1 because it is too large. The destination filesystem only supports files up to 4GB", errorText);
+ break;
default:
result = i18n("Unknown error code %1\n%2\nPlease send a full bug report at https://bugs.kde.org.", errorCode, errorText);
break;
@@ -1068,6 +1071,13 @@
solutions << sUpdate << sSysadmin;
break;
+ case KIO::ERR_FILE_TOO_LARGE_FOR_FAT32:
+ errorName = xi18n("Cannot transfer %1", errorText);
+ description = xi18n("The file %1 cannot be transeferred,"
+ " because the destination filesystem does not support files that large", errorText);
+ solutions << i18n("Reformat the destination drive to use a filesystem that supports files that large.");
+ break;
+
default:
// fall back to the plain error...
errorName = i18n("Undocumented Error");