diff --git a/launcher/archive/ArchiveWriter.cpp b/launcher/archive/ArchiveWriter.cpp index 4f01e7cea..0d678c152 100644 --- a/launcher/archive/ArchiveWriter.cpp +++ b/launcher/archive/ArchiveWriter.cpp @@ -65,6 +65,11 @@ bool ArchiveWriter::open() return false; } + if (archive_write_set_options(m_archive, "hdrcharset=UTF-8") != ARCHIVE_OK) { + qCritical() << "Failed to open archive file:" << m_filename << "-" << archive_error_string(m_archive); + return false; + } + auto archiveNameUtf8 = m_filename.toUtf8(); if (archive_write_open_filename(m_archive, archiveNameUtf8.constData()) != ARCHIVE_OK) { qCritical() << "Failed to open archive file:" << m_filename << "-" << archive_error_string(m_archive); @@ -138,7 +143,7 @@ bool ArchiveWriter::addFile(const QString& fileName, const QString& fileDest) archive_entry_set_size(entry, file.size()); if (archive_write_header(m_archive, entry) != ARCHIVE_OK) { - qCritical() << "Failed to write header for: " << fileDest; + qCritical() << "Failed to write header for: " << fileDest << "-" << archive_error_string(m_archive); return false; } @@ -178,12 +183,12 @@ bool ArchiveWriter::addFile(const QString& fileDest, const QByteArray& data) archive_entry_set_size(entry, data.size()); if (archive_write_header(m_archive, entry) != ARCHIVE_OK) { - qCritical() << "Failed to write header for: " << fileDest; + qCritical() << "Failed to write header for: " << fileDest << "-" << archive_error_string(m_archive); return false; } if (archive_write_data(m_archive, data.constData(), data.size()) < 0) { - qCritical() << "Write error in archive for: " << fileDest; + qCritical() << "Write error in archive for: " << fileDest << "-" << archive_error_string(m_archive); return false; } return true; @@ -193,6 +198,7 @@ bool ArchiveWriter::addFile(ArchiveReader::File* f) { return f->writeFile(m_archive, "", true); } + std::unique_ptr ArchiveWriter::createDiskWriter() { int flags = ARCHIVE_EXTRACT_TIME | ARCHIVE_EXTRACT_PERM | ARCHIVE_EXTRACT_ACL | ARCHIVE_EXTRACT_FFLAGS; diff --git a/launcher/main.cpp b/launcher/main.cpp index 2bce655d2..46368e72e 100644 --- a/launcher/main.cpp +++ b/launcher/main.cpp @@ -37,6 +37,13 @@ int main(int argc, char* argv[]) { + // try to set the utf-8 locale for the libarchive + for (auto name : { ".UTF-8", "en_US.UTF-8", "C.UTF-8" }) { + if (std::setlocale(LC_CTYPE, name)) { + break; + } + } + // initialize Qt Application app(argc, argv);