| 837 | } |
| 838 | |
| 839 | bool FileAccess::writeFile(const void* pSrcBuffer, qint64 length) |
| 840 | { |
| 841 | ProgressScope pp; |
| 842 | |
| 843 | setStatusText(""); |
| 844 | if(isLocal()) |
| 845 | { |
| 846 | if(realFile->open(QIODevice::WriteOnly)) |
| 847 | { |
| 848 | const qint64 maxChunkSize = 100000; |
| 849 | ProgressProxy::setMaxNofSteps(length / maxChunkSize + 1); |
| 850 | qint64 i = 0; |
| 851 | while(i < length) |
| 852 | { |
| 853 | qint64 nextLength = std::min(length - i, maxChunkSize); |
| 854 | qint64 reallyWritten = realFile->write((char*)pSrcBuffer + i, nextLength); |
| 855 | if(reallyWritten != nextLength) |
| 856 | { |
| 857 | realFile->close(); |
| 858 | return false; |
| 859 | } |
| 860 | i += reallyWritten; |
| 861 | |
| 862 | ProgressProxy::step(); |
| 863 | if(ProgressProxy::wasCancelled()) |
| 864 | { |
| 865 | realFile->close(); |
| 866 | return false; |
| 867 | } |
| 868 | } |
| 869 | |
| 870 | if(isExecutable()) // value is true if the old file was executable |
| 871 | { |
| 872 | // Preserve attributes |
| 873 | realFile->setPermissions(realFile->permissions() | QFile::ExeUser); |
| 874 | } |
| 875 | |
| 876 | realFile->close(); |
| 877 | assert((realFile == nullptr || !realFile->isOpen()) && !tmpFile->isOpen()); |
| 878 | return true; |
| 879 | } |
| 880 | } |
| 881 | else |
| 882 | { |
| 883 | bool success = mJobHandler->put(pSrcBuffer, length, true /*overwrite*/); |
| 884 | close(); |
| 885 | |
| 886 | assert((realFile == nullptr || !realFile->isOpen()) && !tmpFile->isOpen()); |
| 887 | return success; |
| 888 | } |
| 889 | |
| 890 | assert((realFile == nullptr || !realFile->isOpen()) && !tmpFile->isOpen()); |
| 891 | return false; |
| 892 | } |
| 893 | |
| 894 | bool FileAccess::copyFile(const QString& dest) |
| 895 | { |
no test coverage detected