diff options
author | Petr Mrázek <peterix@gmail.com> | 2013-12-22 18:49:52 +0100 |
---|---|---|
committer | Petr Mrázek <peterix@gmail.com> | 2013-12-22 18:49:52 +0100 |
commit | 3051d0d3283656baafe6021e5036fdca9db0c4aa (patch) | |
tree | 1b8d57283c060c4cb6b88fec75fc2afd03916f5d /logic | |
parent | 7a07ed79407edcb2a543aa0dc80745a0b8c2e234 (diff) | |
download | MultiMC-3051d0d3283656baafe6021e5036fdca9db0c4aa.tar MultiMC-3051d0d3283656baafe6021e5036fdca9db0c4aa.tar.gz MultiMC-3051d0d3283656baafe6021e5036fdca9db0c4aa.tar.lz MultiMC-3051d0d3283656baafe6021e5036fdca9db0c4aa.tar.xz MultiMC-3051d0d3283656baafe6021e5036fdca9db0c4aa.zip |
Make pack200 use QFile by proxy, eliminating some unicode issues.
Diffstat (limited to 'logic')
-rw-r--r-- | logic/net/ForgeXzDownload.cpp | 45 |
1 files changed, 39 insertions, 6 deletions
diff --git a/logic/net/ForgeXzDownload.cpp b/logic/net/ForgeXzDownload.cpp index 83cbabd0..359ad858 100644 --- a/logic/net/ForgeXzDownload.cpp +++ b/logic/net/ForgeXzDownload.cpp @@ -311,18 +311,51 @@ void ForgeXzDownload::decompressAndInstall() m_pack200_xz_file.remove(); // revert pack200 - pack200_file.close(); - QString pack_name = pack200_file.fileName(); - QString source_native = QDir::toNativeSeparators(pack_name); - QString target_native = QDir::toNativeSeparators(m_target_path); + pack200_file.seek(0); + int handle_in = pack200_file.handle(); + // FIXME: dispose of file handles, pointers and the like. Ideally wrap in objects. + if(handle_in == -1) + { + QLOG_ERROR() << "Error reopening " << pack200_file.fileName(); + failAndTryNextMirror(); + return; + } + FILE * file_in = fdopen(handle_in,"r"); + if(!file_in) + { + QLOG_ERROR() << "Error reopening " << pack200_file.fileName(); + failAndTryNextMirror(); + return; + } + QFile qfile_out(m_target_path); + if(!qfile_out.open(QIODevice::WriteOnly)) + { + QLOG_ERROR() << "Error opening " << qfile_out.fileName(); + failAndTryNextMirror(); + return; + } + int handle_out = qfile_out.handle(); + if(handle_out == -1) + { + QLOG_ERROR() << "Error opening " << qfile_out.fileName(); + failAndTryNextMirror(); + return; + } + FILE * file_out = fdopen(handle_out,"w"); + if(!file_out) + { + QLOG_ERROR() << "Error opening " << qfile_out.fileName(); + failAndTryNextMirror(); + return; + } try { - unpack_200(source_native.toStdString(), target_native.toStdString()); + unpack_200(file_in, file_out); } catch (std::runtime_error &err) { m_status = Job_Failed; - QLOG_ERROR() << "Error unpacking " << pack_name.toUtf8() << " : " << err.what(); + QLOG_ERROR() << "Error unpacking " << pack200_file.fileName() << " : " << err.what(); QFile f(m_target_path); if (f.exists()) f.remove(); |