mirror of
https://github.com/melonDS-emu/melonDS.git
synced 2025-07-28 00:30:24 -06:00
more work. also, make archive shito somewhat better.
This commit is contained in:
@ -17,52 +17,37 @@
|
||||
*/
|
||||
|
||||
#include "ArchiveUtil.h"
|
||||
#include "Platform.h"
|
||||
|
||||
namespace Archive
|
||||
{
|
||||
|
||||
QVector<QString> ListArchive(const char* path)
|
||||
#ifdef __WIN32__
|
||||
#define melon_archive_open(a, f, b) archive_read_open_filename_w(a, (const wchar_t*)f.utf16(), b)
|
||||
#else
|
||||
#define melon_archive_open(a, f, b) archive_read_open_filename(a, f.toUtf8().constData(), b)
|
||||
#endif // __WIN32__
|
||||
|
||||
bool compareCI(const QString& s1, const QString& s2)
|
||||
{
|
||||
return s1.toLower() < s2.toLower();
|
||||
}
|
||||
|
||||
QVector<QString> ListArchive(QString path)
|
||||
{
|
||||
struct archive *a;
|
||||
struct archive_entry *entry;
|
||||
int r;
|
||||
|
||||
QVector<QString> fileList = {"OK"};
|
||||
|
||||
QVector<QString> fileList;
|
||||
|
||||
a = archive_read_new();
|
||||
|
||||
archive_read_support_filter_all(a);
|
||||
archive_read_support_format_all(a);
|
||||
r = archive_read_open_filename(a, path, 10240);
|
||||
if (r != ARCHIVE_OK)
|
||||
{
|
||||
return QVector<QString> {"Err"};
|
||||
}
|
||||
|
||||
while (archive_read_next_header(a, &entry) == ARCHIVE_OK)
|
||||
{
|
||||
fileList.push_back(archive_entry_pathname(entry));
|
||||
archive_read_data_skip(a);
|
||||
}
|
||||
archive_read_close(a);
|
||||
archive_read_free(a);
|
||||
if (r != ARCHIVE_OK)
|
||||
{
|
||||
return QVector<QString> {"Err"};
|
||||
}
|
||||
|
||||
return fileList;
|
||||
}
|
||||
|
||||
QVector<QString> ExtractFileFromArchive(const char* path, const char* wantedFile, QByteArray *romBuffer)
|
||||
{
|
||||
struct archive *a = archive_read_new();
|
||||
struct archive_entry *entry;
|
||||
int r;
|
||||
|
||||
archive_read_support_format_all(a);
|
||||
archive_read_support_filter_all(a);
|
||||
|
||||
r = archive_read_open_filename(a, path, 10240);
|
||||
//r = archive_read_open_filename(a, path, 10240);
|
||||
r = melon_archive_open(a, path, 10240);
|
||||
if (r != ARCHIVE_OK)
|
||||
{
|
||||
return QVector<QString> {"Err"};
|
||||
@ -70,7 +55,46 @@ QVector<QString> ExtractFileFromArchive(const char* path, const char* wantedFile
|
||||
|
||||
while (archive_read_next_header(a, &entry) == ARCHIVE_OK)
|
||||
{
|
||||
if (strcmp(wantedFile, archive_entry_pathname(entry)) == 0)
|
||||
if (archive_entry_filetype(entry) != AE_IFREG)
|
||||
continue;
|
||||
|
||||
fileList.push_back(archive_entry_pathname_utf8(entry));
|
||||
archive_read_data_skip(a);
|
||||
}
|
||||
|
||||
archive_read_close(a);
|
||||
archive_read_free(a);
|
||||
|
||||
if (r != ARCHIVE_OK)
|
||||
{
|
||||
return QVector<QString> {"Err"};
|
||||
}
|
||||
|
||||
std::stable_sort(fileList.begin(), fileList.end(), compareCI);
|
||||
fileList.prepend("OK");
|
||||
|
||||
return fileList;
|
||||
}
|
||||
|
||||
QVector<QString> ExtractFileFromArchive(QString path, QString wantedFile, QByteArray *romBuffer)
|
||||
{
|
||||
struct archive *a = archive_read_new();
|
||||
struct archive_entry *entry;
|
||||
int r;
|
||||
|
||||
archive_read_support_format_all(a);
|
||||
archive_read_support_filter_all(a);
|
||||
|
||||
//r = archive_read_open_filename(a, path, 10240);
|
||||
r = melon_archive_open(a, path, 10240);
|
||||
if (r != ARCHIVE_OK)
|
||||
{
|
||||
return QVector<QString> {"Err"};
|
||||
}
|
||||
|
||||
while (archive_read_next_header(a, &entry) == ARCHIVE_OK)
|
||||
{
|
||||
if (strcmp(wantedFile.toUtf8().constData(), archive_entry_pathname_utf8(entry)) == 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
Reference in New Issue
Block a user