apply suggestions

Signed-off-by: Trial97 <alexandru.tripon97@gmail.com>
This commit is contained in:
Trial97
2025-11-26 19:12:13 +02:00
parent c787f4e291
commit 792b1d6648
3 changed files with 34 additions and 30 deletions

View File

@@ -1,4 +1,4 @@
// SPDX-License-Identifier: GPL-3.0-only // SPDX-License-Identifier: GPL-3.0-only AND LicenseRef-PublicDomain
/* /*
* Prism Launcher - Minecraft Launcher * Prism Launcher - Minecraft Launcher
* Copyright (c) 2025 Trial97 <alexandru.tripon97@gmail.com> * Copyright (c) 2025 Trial97 <alexandru.tripon97@gmail.com>
@@ -14,6 +14,9 @@
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*
* Additional note: Portions of this file are released into the public domain
* under LicenseRef-PublicDomain.
*/ */
#include "ArchiveReader.h" #include "ArchiveReader.h"
#include <archive.h> #include <archive.h>
@@ -144,7 +147,7 @@ bool ArchiveReader::File::writeFile(archive* out, QString targetFileName, bool n
} }
auto r = archive_write_finish_entry(out); auto r = archive_write_finish_entry(out);
if (r < ARCHIVE_OK) if (r < ARCHIVE_OK)
qCritical() << "Failed dinish entry:" << archive_error_string(out); qCritical() << "Failed to finish writing entry:" << archive_error_string(out);
return (r > ARCHIVE_WARN); return (r > ARCHIVE_WARN);
} }
@@ -155,7 +158,8 @@ bool ArchiveReader::parse(std::function<bool(File*, bool&)> doStuff)
archive_read_support_format_all(a); archive_read_support_format_all(a);
archive_read_support_filter_all(a); archive_read_support_filter_all(a);
auto fileName = m_archivePath.toUtf8(); auto fileName = m_archivePath.toUtf8();
if (archive_read_open_filename(a, fileName.constData(), 10240) != ARCHIVE_OK) { const auto blockSize = 10240;
if (archive_read_open_filename(a, fileName.constData(), blockSize) != ARCHIVE_OK) {
qCritical() << "Failed to open archive file:" << m_archivePath << "-" << f->error(); qCritical() << "Failed to open archive file:" << m_archivePath << "-" << f->error();
return false; return false;
} }

View File

@@ -47,7 +47,8 @@ bool ArchiveWriter::open()
return false; return false;
} }
archive_write_set_format_zip(m_archive); auto format = m_format.toUtf8();
archive_write_set_format_by_name(m_archive, format.constData());
if (archive_write_set_options(m_archive, "hdrcharset=UTF-8") != ARCHIVE_OK) { 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); qCritical() << "Failed to open archive file:" << m_filename << "-" << archive_error_string(m_archive);
@@ -84,7 +85,7 @@ bool ArchiveWriter::addFile(const QString& fileName, const QString& fileDest)
{ {
QFileInfo fileInfo(fileName); QFileInfo fileInfo(fileName);
if (!fileInfo.exists()) { if (!fileInfo.exists()) {
qCritical() << "File does not exists:" << fileInfo.filePath(); qCritical() << "File does not exist:" << fileInfo.filePath();
return false; return false;
} }
@@ -101,16 +102,15 @@ bool ArchiveWriter::addFile(const QString& fileName, const QString& fileDest)
QByteArray utf8 = fileInfo.absoluteFilePath().toUtf8(); QByteArray utf8 = fileInfo.absoluteFilePath().toUtf8();
const char* cpath = utf8.constData(); const char* cpath = utf8.constData();
struct stat st; struct stat st;
if (stat(cpath, &st) == 0) { if (stat(cpath, &st) != 0) {
archive_entry_copy_stat(entry, &st); qCritical() << "Failed to stat file:" << fileInfo.filePath();
} }
archive_entry_copy_stat(entry, &st);
archive_entry_set_perm(entry, fileInfo.permissions()); archive_entry_set_perm(entry, fileInfo.permissions());
if (fileInfo.isSymLink()) { if (fileInfo.isSymLink()) {
auto target = fileInfo.symLinkTarget().toUtf8(); auto target = fileInfo.symLinkTarget().toUtf8();
archive_entry_set_filetype(entry, AE_IFLNK);
archive_entry_set_symlink(entry, target.constData()); archive_entry_set_symlink(entry, target.constData());
archive_entry_set_size(entry, 0);
if (archive_write_header(m_archive, entry) != ARCHIVE_OK) { if (archive_write_header(m_archive, entry) != ARCHIVE_OK) {
qCritical() << "Failed to write symlink header for:" << fileDest << "-" << archive_error_string(m_archive); qCritical() << "Failed to write symlink header for:" << fileDest << "-" << archive_error_string(m_archive);
@@ -119,39 +119,38 @@ bool ArchiveWriter::addFile(const QString& fileName, const QString& fileDest)
return true; return true;
} }
if (!fileInfo.isFile()) { if (!fileInfo.isFile() && !fileInfo.isDir()) {
qCritical() << "Unsupported file type:" << fileInfo.filePath(); qCritical() << "Unsupported file type:" << fileInfo.filePath();
return false; return false;
} }
QFile file(fileInfo.absoluteFilePath());
if (!file.open(QIODevice::ReadOnly)) {
qCritical() << "Failed to open file: " << fileInfo.filePath();
return false;
}
archive_entry_set_filetype(entry, AE_IFREG);
archive_entry_set_size(entry, file.size());
if (archive_write_header(m_archive, entry) != ARCHIVE_OK) { if (archive_write_header(m_archive, entry) != ARCHIVE_OK) {
qCritical() << "Failed to write header for: " << fileDest << "-" << archive_error_string(m_archive); qCritical() << "Failed to write header for: " << fileDest << "-" << archive_error_string(m_archive);
return false; return false;
} }
constexpr qint64 chunkSize = 8192; if (fileInfo.isFile()) {
QByteArray buffer; QFile file(fileInfo.absoluteFilePath());
buffer.resize(chunkSize); if (!file.open(QIODevice::ReadOnly)) {
qCritical() << "Failed to open file: " << fileInfo.filePath();
while (!file.atEnd()) {
auto bytesRead = file.read(buffer.data(), chunkSize);
if (bytesRead < 0) {
qCritical() << "Read error in file: " << fileInfo.filePath();
return false; return false;
} }
if (archive_write_data(m_archive, buffer.constData(), bytesRead) < 0) { constexpr qint64 chunkSize = 8192;
qCritical() << "Write error in archive for: " << fileDest; QByteArray buffer;
return false; buffer.resize(chunkSize);
while (!file.atEnd()) {
auto bytesRead = file.read(buffer.data(), chunkSize);
if (bytesRead < 0) {
qCritical() << "Read error in file: " << fileInfo.filePath();
return false;
}
if (archive_write_data(m_archive, buffer.constData(), bytesRead) < 0) {
qCritical() << "Write error in archive for: " << fileDest;
return false;
}
} }
} }
return true; return true;

View File

@@ -41,5 +41,6 @@ class ArchiveWriter {
private: private:
struct archive* m_archive = nullptr; struct archive* m_archive = nullptr;
QString m_filename; QString m_filename;
QString m_format = "zip";
}; };
} // namespace MMCZip } // namespace MMCZip