From b9ab71577ff3e366abc6c9c88bba9ad8bd00298b Mon Sep 17 00:00:00 2001 From: Chee Yee Date: Thu, 27 Jun 2024 22:04:06 -0700 Subject: [PATCH] fix crash installing from real-debrid webdav --- CMakeLists.txt | 1 + source/clients/smbclient.cpp | 103 ++++++++++++++++++++--------------- source/clients/webdav.cpp | 66 +++++++++++++++++----- source/clients/webdav.h | 1 + source/installer.cpp | 84 ++++++++++++++-------------- source/main.cpp | 6 +- source/zip_util.cpp | 12 ++-- 7 files changed, 164 insertions(+), 109 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8aa2362..d652b41 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -70,6 +70,7 @@ add_self(ezremote_client) add_pkg(ezremote_client ${CMAKE_SOURCE_DIR}/data "RMTC00001" "ezRemote Client" "01.27" 32 0) target_link_libraries(ezremote_client + dbglogger c c++ png diff --git a/source/clients/smbclient.cpp b/source/clients/smbclient.cpp index 48b1b02..32d91e5 100644 --- a/source/clients/smbclient.cpp +++ b/source/clients/smbclient.cpp @@ -197,21 +197,21 @@ int SmbClient::Get(const std::string &outputfile, const std::string &ppath, uint return 0; } - struct smb2fh* in = smb2_open(smb2, path.c_str(), O_RDONLY); + struct smb2fh *in = smb2_open(smb2, path.c_str(), O_RDONLY); if (in == NULL) { sprintf(response, "%s", smb2_get_error(smb2)); return 0; } - FILE* out = FS::Create(outputfile); + FILE *out = FS::Create(outputfile); if (out == NULL) { sprintf(response, "%s", lang_strings[STR_FAILED]); return 0; } - uint8_t *buff = (uint8_t*)malloc(max_read_size); + uint8_t *buff = (uint8_t *)malloc(max_read_size); int count = 0; bytes_transfered = 0; sceRtcGetCurrentTick(&prev_tick); @@ -223,7 +223,7 @@ int SmbClient::Get(const std::string &outputfile, const std::string &ppath, uint sprintf(response, "%s", smb2_get_error(smb2)); FS::Close(out); smb2_close(smb2, in); - free((void*)buff); + free((void *)buff); return 0; } FS::Write(out, buff, count); @@ -231,7 +231,7 @@ int SmbClient::Get(const std::string &outputfile, const std::string &ppath, uint } FS::Close(out); smb2_close(smb2, in); - free((void*)buff); + free((void *)buff); return 1; } @@ -239,7 +239,7 @@ int SmbClient::GetRange(const std::string &ppath, DataSink &sink, uint64_t size, { std::string path = std::string(ppath); path = Util::Trim(path, "/"); - struct smb2fh* in = smb2_open(smb2, path.c_str(), O_RDONLY); + struct smb2fh *in = smb2_open(smb2, path.c_str(), O_RDONLY); if (in == NULL) { return 0; @@ -253,34 +253,34 @@ int SmbClient::GetRange(const std::string &ppath, DataSink &sink, uint64_t size, int SmbClient::GetRange(void *fp, DataSink &sink, uint64_t size, uint64_t offset) { - struct smb2fh* in = (struct smb2fh*)fp; + struct smb2fh *in = (struct smb2fh *)fp; - smb2_lseek(smb2, in, offset, SEEK_SET, NULL); + smb2_lseek(smb2, in, offset, SEEK_SET, NULL); - uint8_t *buff = (uint8_t*)malloc(max_read_size); - int count = 0; - size_t bytes_remaining = size; - do - { - size_t bytes_to_read = std::min(max_read_size, bytes_remaining); - count = smb2_read(smb2, in, buff, bytes_to_read); - if (count > 0) - { - bytes_remaining -= count; - bool ok = sink.write((char*)buff, count); + uint8_t *buff = (uint8_t *)malloc(max_read_size); + int count = 0; + size_t bytes_remaining = size; + do + { + size_t bytes_to_read = std::min(max_read_size, bytes_remaining); + count = smb2_read(smb2, in, buff, bytes_to_read); + if (count > 0) + { + bytes_remaining -= count; + bool ok = sink.write((char *)buff, count); if (!ok) { free((uint8_t *)buff); return 0; } - } - else - { - break; - } - } while (1); + } + else + { + break; + } + } while (1); - free((char *)buff); + free((char *)buff); return 1; } @@ -295,7 +295,7 @@ int SmbClient::GetRange(const std::string &ppath, void *buffer, uint64_t size, u return 0; } - struct smb2fh* in = smb2_open(smb2, path.c_str(), O_RDONLY); + struct smb2fh *in = smb2_open(smb2, path.c_str(), O_RDONLY); if (in == NULL) { return 0; @@ -309,13 +309,27 @@ int SmbClient::GetRange(const std::string &ppath, void *buffer, uint64_t size, u int SmbClient::GetRange(void *fp, void *buffer, uint64_t size, uint64_t offset) { - struct smb2fh* in = (struct smb2fh*) fp; + struct smb2fh *in = (struct smb2fh *)fp; smb2_lseek(smb2, in, offset, SEEK_SET, NULL); - int count = smb2_read(smb2, in, (uint8_t*)buffer, size); - if (count != size) - return 0; + uint8_t *buff = (uint8_t *)buffer; + int count = 0; + size_t bytes_remaining = size; + do + { + size_t bytes_to_read = std::min(max_read_size, bytes_remaining); + count = smb2_read(smb2, in, buff, bytes_to_read); + if (count > 0) + { + bytes_remaining -= count; + buff += count; + } + else + { + break; + } + } while (1); return 1; } @@ -342,14 +356,14 @@ int SmbClient::CopyToSocket(const std::string &ppath, int socket_fd) return 0; } - struct smb2fh* in = smb2_open(smb2, path.c_str(), O_RDONLY); + struct smb2fh *in = smb2_open(smb2, path.c_str(), O_RDONLY); if (in == NULL) { sprintf(response, "%s", smb2_get_error(smb2)); return 0; } - uint8_t *buff = (uint8_t*)malloc(max_read_size); + uint8_t *buff = (uint8_t *)malloc(max_read_size); int count = 0; while ((count = smb2_read(smb2, in, buff, max_read_size)) > 0) { @@ -357,7 +371,7 @@ int SmbClient::CopyToSocket(const std::string &ppath, int socket_fd) { sprintf(response, "%s", smb2_get_error(smb2)); smb2_close(smb2, in); - free((void*)buff); + free((void *)buff); return 0; } int ret = sceNetSend(socket_fd, buff, count, 0); @@ -367,7 +381,7 @@ int SmbClient::CopyToSocket(const std::string &ppath, int socket_fd) } } smb2_close(smb2, in); - free((void*)buff); + free((void *)buff); return 1; } @@ -403,21 +417,21 @@ int SmbClient::Put(const std::string &inputfile, const std::string &ppath, uint6 return 0; } - FILE* in = FS::OpenRead(inputfile); + FILE *in = FS::OpenRead(inputfile); if (in == NULL) { sprintf(response, "%s", lang_strings[STR_FAILED]); return 0; } - - struct smb2fh* out = smb2_open(smb2, path.c_str(), O_WRONLY | O_CREAT | O_TRUNC); + + struct smb2fh *out = smb2_open(smb2, path.c_str(), O_WRONLY | O_CREAT | O_TRUNC); if (out == NULL) { sprintf(response, "%s", smb2_get_error(smb2)); return 0; } - uint8_t* buff = (uint8_t*)malloc(max_write_size); + uint8_t *buff = (uint8_t *)malloc(max_write_size); int count = 0; bytes_transfered = 0; sceRtcGetCurrentTick(&prev_tick); @@ -440,7 +454,6 @@ int SmbClient::Put(const std::string &inputfile, const std::string &ppath, uint6 free(buff); return 1; - } int SmbClient::Rename(const std::string &src, const std::string &dst) @@ -574,13 +587,13 @@ int SmbClient::Head(const std::string &ppath, void *buffer, uint64_t len) return 0; } - struct smb2fh* in = smb2_open(smb2, path.c_str(), O_RDONLY); + struct smb2fh *in = smb2_open(smb2, path.c_str(), O_RDONLY); if (in == NULL) { return 0; } - int count = smb2_read(smb2, in, (uint8_t*)buffer, len); + int count = smb2_read(smb2, in, (uint8_t *)buffer, len); smb2_close(smb2, in); if (count != len) return 0; @@ -593,13 +606,13 @@ void *SmbClient::Open(const std::string &ppath, int flags) std::string path = std::string(ppath); path = Util::Trim(path, "/"); - struct smb2fh* in = smb2_open(smb2, path.c_str(), flags); - return in; + struct smb2fh *in = smb2_open(smb2, path.c_str(), flags); + return in; } void SmbClient::Close(void *fp) { - smb2_close(smb2, (struct smb2fh*)fp); + smb2_close(smb2, (struct smb2fh *)fp); } ClientType SmbClient::clientType() diff --git a/source/clients/webdav.cpp b/source/clients/webdav.cpp index c0f495a..6da07fe 100644 --- a/source/clients/webdav.cpp +++ b/source/clients/webdav.cpp @@ -10,10 +10,10 @@ #include "windows.h" using httplib::Client; +using httplib::ContentProvider; using httplib::Headers; using httplib::Progress; using httplib::Result; -using httplib::ContentProvider; static const char *months[12] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}; @@ -43,6 +43,50 @@ Result WebDAVClient::PropFind(const std::string &path, int depth) return client->send(req); } +int WebDAVClient::Size(const std::string &path, int64_t *size) +{ + std::string encoded_path = httplib::detail::encode_url(GetFullPath(path)); + if (auto res = PropFind(encoded_path, 0)) + { + if (HTTP_SUCCESS(res->status)) + { + pugi::xml_document document; + document.load_buffer(res->body.c_str(), res->body.length()); + auto multistatus = document.select_node("*[local-name()='multistatus']").node(); + auto responses = multistatus.select_nodes("*[local-name()='response']"); + for (auto response : responses) + { + pugi::xml_node href = response.node().select_node("*[local-name()='href']").node(); + std::string resource_path = httplib::detail::decode_url(href.first_child().value(), true); + + auto target_path_without_sep = GetFullPath(path); + if (!target_path_without_sep.empty() && target_path_without_sep.back() == '/') + target_path_without_sep.resize(target_path_without_sep.length() - 1); + auto resource_path_without_sep = resource_path.erase(resource_path.find_last_not_of('/') + 1); + size_t pos = resource_path_without_sep.find(this->host_url); + if (pos != std::string::npos) + resource_path_without_sep.erase(pos, this->host_url.length()); + + if (resource_path_without_sep != target_path_without_sep) + continue; + + auto propstat = response.node().select_node("*[local-name()='propstat']").node(); + auto prop = propstat.select_node("*[local-name()='prop']").node(); + std::string content_length = prop.select_node("*[local-name()='getcontentlength']").node().first_child().value(); + + *size = std::strtoll(content_length.c_str(), nullptr, 10); + return 1; + } + } + } + else + { + sprintf(this->response, "%s", httplib::to_string(res.error()).c_str()); + } + + return 0; +} + std::vector WebDAVClient::ListDir(const std::string &path) { std::vector out; @@ -152,12 +196,11 @@ int WebDAVClient::Put(const std::string &inputfile, const std::string &path, uin size_t bytes_remaining = FS::GetSize(inputfile); bytes_transfered = 0; sceRtcGetCurrentTick(&prev_tick); - - FILE* in = FS::OpenRead(inputfile); - if (auto res = client->Put(GetFullPath(path), - [&](size_t offset, DataSink &sink) - { + FILE *in = FS::OpenRead(inputfile); + + if (auto res = client->Put(GetFullPath(path), [&](size_t offset, DataSink &sink) + { size_t buf_size = MIN(bytes_remaining, CPPHTTPLIB_RECV_BUFSIZ); char* buf = (char*) malloc(buf_size); FS::Seek(in, offset); @@ -171,9 +214,7 @@ int WebDAVClient::Put(const std::string &inputfile, const std::string &path, uin } sink.done(); free(buf); - return true; - }, - "application/octet-stream")) + return true; }, "application/octet-stream")) { if (HTTP_SUCCESS(res->status)) { @@ -230,15 +271,14 @@ int WebDAVClient::Delete(const std::string &path) if (HTTP_SUCCESS(res->status)) return 1; } - - return 0; + return 0; } int WebDAVClient::Copy(const std::string &from, const std::string &to) { Request req; - Headers header = {{"Accept", "*/*"}, {"Destination", httplib::detail::encode_url(GetFullPath(to)) }}; + Headers header = {{"Accept", "*/*"}, {"Destination", httplib::detail::encode_url(GetFullPath(to))}}; req.method = "COPY"; req.path = httplib::detail::encode_url(GetFullPath(from)); @@ -257,7 +297,7 @@ int WebDAVClient::Copy(const std::string &from, const std::string &to) int WebDAVClient::Move(const std::string &from, const std::string &to) { Request req; - Headers header = {{"Accept", "*/*"}, {"Destination", httplib::detail::encode_url(GetFullPath(to)) }}; + Headers header = {{"Accept", "*/*"}, {"Destination", httplib::detail::encode_url(GetFullPath(to))}}; req.method = "MOVE"; req.path = httplib::detail::encode_url(GetFullPath(from)); diff --git a/source/clients/webdav.h b/source/clients/webdav.h index 4ad043e..2da9688 100644 --- a/source/clients/webdav.h +++ b/source/clients/webdav.h @@ -19,6 +19,7 @@ public: int Copy(const std::string &from, const std::string &to); int Move(const std::string &from, const std::string &to); int Put(const std::string &inputfile, const std::string &path, uint64_t offset = 0); + int Size(const std::string &path, int64_t *size); std::vector ListDir(const std::string &path); ClientType clientType(); uint32_t SupportedActions(); diff --git a/source/installer.cpp b/source/installer.cpp index 16d769e..beb887d 100644 --- a/source/installer.cpp +++ b/source/installer.cpp @@ -26,8 +26,8 @@ struct BgProgressCheck { - ArchivePkgInstallData* archive_pkg_data; - SplitPkgInstallData* split_pkg_data; + ArchivePkgInstallData *archive_pkg_data; + SplitPkgInstallData *split_pkg_data; int task_id; std::string hash; }; @@ -109,22 +109,22 @@ namespace INSTALLER s_bgft_initialized = false; } - std::string GetRemotePkgTitle(RemoteClient *client, const std::string &path, pkg_header *header) - { + std::string GetRemotePkgTitle(RemoteClient *client, const std::string &path, pkg_header *header) + { size_t entry_count = BE32(header->pkg_entry_count); uint32_t entry_table_offset = BE32(header->pkg_table_offset); uint64_t entry_table_size = entry_count * sizeof(pkg_table_entry); void *entry_table_data = malloc(entry_table_size); - int ret = client->GetRange(path, entry_table_data, entry_table_size, entry_table_offset); - if (ret == 0) - { - free(entry_table_data); - return ""; - } + int ret = client->GetRange(path, entry_table_data, entry_table_size, entry_table_offset); + if (ret == 0) + { + free(entry_table_data); + return ""; + } pkg_table_entry *entries = (pkg_table_entry *)entry_table_data; - void* param_sfo_data = nullptr; + void *param_sfo_data = nullptr; uint32_t param_sfo_offset = 0; uint32_t param_sfo_size = 0; for (size_t i = 0; i < entry_count; ++i) @@ -134,7 +134,7 @@ namespace INSTALLER param_sfo_offset = BE32(entries[i].offset); param_sfo_size = BE32(entries[i].size); break; - } + } } free(entry_table_data); @@ -142,10 +142,10 @@ namespace INSTALLER if (param_sfo_offset > 0 && param_sfo_size > 0) { param_sfo_data = malloc(param_sfo_size); - int ret = client->GetRange(path, param_sfo_data, param_sfo_size, param_sfo_offset); - if (ret) + int ret = client->GetRange(path, param_sfo_data, param_sfo_size, param_sfo_offset); + if (ret) { - const char* tmp_title = SFO::GetString((const char*)param_sfo_data, param_sfo_size, "TITLE"); + const char *tmp_title = SFO::GetString((const char *)param_sfo_data, param_sfo_size, "TITLE"); if (tmp_title != nullptr) title = std::string(tmp_title); } @@ -153,7 +153,7 @@ namespace INSTALLER } return title; - } + } std::string GetLocalPkgTitle(const std::string &path, pkg_header *header) { @@ -167,7 +167,7 @@ namespace INSTALLER FS::Read(fd, entry_table_data, entry_table_size); pkg_table_entry *entries = (pkg_table_entry *)entry_table_data; - void* param_sfo_data = NULL; + void *param_sfo_data = NULL; uint32_t param_sfo_offset = 0; uint32_t param_sfo_size = 0; void *icon0_png_data = NULL; @@ -190,7 +190,7 @@ namespace INSTALLER param_sfo_data = malloc(param_sfo_size); FS::Seek(fd, param_sfo_offset); FS::Read(fd, param_sfo_data, param_sfo_size); - const char* tmp_title = SFO::GetString((const char*)param_sfo_data, param_sfo_size, "TITLE"); + const char *tmp_title = SFO::GetString((const char *)param_sfo_data, param_sfo_size, "TITLE"); if (tmp_title != nullptr) title = std::string(tmp_title); free(param_sfo_data); @@ -221,8 +221,8 @@ namespace INSTALLER } else { - std::string encoded_path = httplib::detail::encode_url(path); - std::string encoded_site_name = httplib::detail::encode_url(remote_settings->site_name); + std::string encoded_path = httplib::detail::encode_url(path); + std::string encoded_site_name = httplib::detail::encode_url(remote_settings->site_name); std::string full_url = std::string("http://localhost:") + std::to_string(http_server_port) + "/rmt_inst/" + encoded_site_name + encoded_path; return full_url; } @@ -234,7 +234,7 @@ namespace INSTALLER { bool completed = false; OrbisBgftTaskProgress progress_info; - BgProgressCheck *bg_check_data = (BgProgressCheck*) argp; + BgProgressCheck *bg_check_data = (BgProgressCheck *)argp; int ret; while (!completed) @@ -259,7 +259,7 @@ namespace INSTALLER { bg_check_data->archive_pkg_data->stop_write_thread = true; pthread_join(bg_check_data->archive_pkg_data->thread, NULL); - delete(bg_check_data->archive_pkg_data->split_file); + delete (bg_check_data->archive_pkg_data->split_file); free(bg_check_data->archive_pkg_data); RemoveArchivePkgInstallData(bg_check_data->hash); free(bg_check_data); @@ -269,8 +269,8 @@ namespace INSTALLER bg_check_data->split_pkg_data->stop_write_thread = true; bg_check_data->split_pkg_data->split_file->Close(); pthread_join(bg_check_data->split_pkg_data->thread, NULL); - delete(bg_check_data->split_pkg_data->split_file); - delete(bg_check_data->split_pkg_data->remote_client); + delete (bg_check_data->split_pkg_data->split_file); + delete (bg_check_data->split_pkg_data->remote_client); free(bg_check_data->split_pkg_data); RemoveSplitPkgInstallData(bg_check_data->hash); free(bg_check_data); @@ -411,7 +411,7 @@ namespace INSTALLER ret = sceBgftServiceDownloadGetProgress(task_id, &progress_info); if (ret || (progress_info.transferred > 0 && progress_info.errorResult != 0)) return 0; - + if (progress_info.length > 0) { completed = progress_info.transferred == progress_info.length; @@ -423,7 +423,7 @@ namespace INSTALLER } else { - BgProgressCheck *bg_check_data = (BgProgressCheck*) malloc(sizeof(BgProgressCheck)); + BgProgressCheck *bg_check_data = (BgProgressCheck *)malloc(sizeof(BgProgressCheck)); memset(bg_check_data, 0, sizeof(BgProgressCheck)); bg_check_data->archive_pkg_data = nullptr; bg_check_data->split_pkg_data = nullptr; @@ -532,13 +532,13 @@ namespace INSTALLER { int ret; bool completed = false; - + if (strncmp(path.c_str(), "/data/", 6) != 0 && strncmp(path.c_str(), "/user/data/", 11) != 0 && strncmp(path.c_str(), "/mnt/usb", 8) != 0) return -1; - std::string filename = path.substr(path.find_last_of("/")+1); + std::string filename = path.substr(path.find_last_of("/") + 1); char filepath[1024]; snprintf(filepath, 1023, "%s", path.c_str()); if (strncmp(path.c_str(), "/data/", 6) == 0) @@ -658,7 +658,7 @@ namespace INSTALLER FS::Read(fd, entry_table_data, entry_table_size); pkg_table_entry *entries = (pkg_table_entry *)entry_table_data; - void* param_sfo_data = NULL; + void *param_sfo_data = NULL; uint32_t param_sfo_offset = 0; uint32_t param_sfo_size = 0; void *icon0_png_data = NULL; @@ -729,7 +729,7 @@ namespace INSTALLER return false; pkg_table_entry *entries = (pkg_table_entry *)entry_table_data; - void* param_sfo_data = NULL; + void *param_sfo_data = NULL; uint32_t param_sfo_offset = 0; uint32_t param_sfo_size = 0; void *icon0_png_data = NULL; @@ -797,7 +797,7 @@ namespace INSTALLER void AddArchivePkgInstallData(const std::string &hash, ArchivePkgInstallData *pkg_data) { - std::pair pair = std::make_pair(hash, pkg_data); + std::pair pair = std::make_pair(hash, pkg_data); archive_pkg_install_data_list.erase(hash); archive_pkg_install_data_list.insert(pair); } @@ -807,10 +807,10 @@ namespace INSTALLER archive_pkg_install_data_list.erase(hash); } - bool InstallArchivePkg(const std::string &path, ArchivePkgInstallData* pkg_data, bool bg) + bool InstallArchivePkg(const std::string &path, ArchivePkgInstallData *pkg_data, bool bg) { pkg_header header; - pkg_data->split_file->Read((char*)&header, sizeof(pkg_header), 0); + pkg_data->split_file->Read((char *)&header, sizeof(pkg_header), 0); int ret; std::string cid = std::string((char *)header.pkg_content_id); @@ -958,7 +958,7 @@ namespace INSTALLER } else { - BgProgressCheck *bg_check_data = (BgProgressCheck*) malloc(sizeof(BgProgressCheck)); + BgProgressCheck *bg_check_data = (BgProgressCheck *)malloc(sizeof(BgProgressCheck)); memset(bg_check_data, 0, sizeof(BgProgressCheck)); bg_check_data->archive_pkg_data = pkg_data; bg_check_data->split_pkg_data = nullptr; @@ -971,11 +971,10 @@ namespace INSTALLER finish: pkg_data->stop_write_thread = true; pthread_join(pkg_data->thread, NULL); - delete(pkg_data->split_file); + delete (pkg_data->split_file); free(pkg_data); RemoveArchivePkgInstallData(hash); return ret; - } SplitPkgInstallData *GetSplitPkgInstallData(const std::string &hash) @@ -985,7 +984,7 @@ namespace INSTALLER void AddSplitPkgInstallData(const std::string &hash, SplitPkgInstallData *pkg_data) { - std::pair pair = std::make_pair(hash, pkg_data); + std::pair pair = std::make_pair(hash, pkg_data); split_pkg_install_data_list.erase(hash); split_pkg_install_data_list.insert(pair); } @@ -995,10 +994,10 @@ namespace INSTALLER split_pkg_install_data_list.erase(hash); } - bool InstallSplitPkg(const std::string &path, SplitPkgInstallData* pkg_data, bool bg) + bool InstallSplitPkg(const std::string &path, SplitPkgInstallData *pkg_data, bool bg) { pkg_header header; - pkg_data->split_file->Read((char*)&header, sizeof(pkg_header), 0); + pkg_data->split_file->Read((char *)&header, sizeof(pkg_header), 0); int ret; std::string cid = std::string((char *)header.pkg_content_id); @@ -1146,7 +1145,7 @@ namespace INSTALLER } else { - BgProgressCheck *bg_check_data = (BgProgressCheck*) malloc(sizeof(BgProgressCheck)); + BgProgressCheck *bg_check_data = (BgProgressCheck *)malloc(sizeof(BgProgressCheck)); memset(bg_check_data, 0, sizeof(BgProgressCheck)); bg_check_data->split_pkg_data = pkg_data; bg_check_data->archive_pkg_data = nullptr; @@ -1160,14 +1159,13 @@ namespace INSTALLER pkg_data->stop_write_thread = true; pkg_data->split_file->Close(); pthread_join(pkg_data->thread, NULL); - delete(pkg_data->split_file); - delete(pkg_data->remote_client); + delete (pkg_data->split_file); + delete (pkg_data->remote_client); free(pkg_data); RemoveSplitPkgInstallData(hash); activity_inprogess = false; file_transfering = false; Windows::SetModalMode(false); return ret; - } } diff --git a/source/main.cpp b/source/main.cpp index de60173..477f0ae 100644 --- a/source/main.cpp +++ b/source/main.cpp @@ -11,7 +11,7 @@ #include #include #include -// #include +#include #include "imgui.h" #include "SDL2/SDL.h" @@ -271,8 +271,8 @@ static void terminate() int main() { - // dbglogger_init(); - // dbglogger_log("If you see this you've set up dbglogger correctly."); + dbglogger_init(); + dbglogger_log("If you see this you've set up dbglogger correctly."); int rc; // No buffering setvbuf(stdout, NULL, _IONBF, 0); diff --git a/source/zip_util.cpp b/source/zip_util.cpp index a343f0d..578ca38 100644 --- a/source/zip_util.cpp +++ b/source/zip_util.cpp @@ -290,7 +290,7 @@ namespace ZipUtil static int extract2fd(struct archive *a, const std::string &pathname, int fd) { ssize_t len; - unsigned char *buffer = (unsigned char *) malloc(ARCHIVE_TRANSFER_SIZE); + unsigned char *buffer = (unsigned char *)malloc(ARCHIVE_TRANSFER_SIZE); bytes_transfered = 0; sceRtcGetCurrentTick(&prev_tick); @@ -312,7 +312,7 @@ namespace ZipUtil return 0; } bytes_transfered += len; - + if (write(fd, buffer, len) != len) { sprintf(status_message, "error write('%s')", pathname.c_str()); @@ -479,7 +479,7 @@ namespace ZipUtil ret = data->client->GetRange((data->fp), data->buf, to_read, data->offset); else ret = data->client->GetRange(data->path, data->buf, to_read, data->offset); - + if (ret == 0) return -1; data->offset = data->offset + to_read; @@ -521,7 +521,7 @@ namespace ZipUtil return data->offset; } - int64_t SkipRemoteArchive(struct archive *, void *client_data, int64_t request) + int64_t SkipRemoteArchive(struct archive *, void *client_data, int64_t request) { RemoteArchiveData *data = (RemoteArchiveData *)client_data; @@ -529,7 +529,7 @@ namespace ZipUtil return request; } - + /* * Main loop: open the zipfile, iterate over its contents and decide what * to do with each entry. @@ -672,7 +672,9 @@ namespace ZipUtil } if (ret == ARCHIVE_EOF) + { break; + } if ((pathname = pathdup(archive_entry_pathname(e))) == NULL) {