diff --git a/source/core/http.c b/source/core/http.c index bc89d9c..af51a18 100644 --- a/source/core/http.c +++ b/source/core/http.c @@ -250,7 +250,7 @@ static size_t http_curl_write_callback(char* ptr, size_t size, size_t nmemb, voi size_t srcPos = 0; size_t available = size * nmemb; - while(available > 0) { + while(R_SUCCEEDED(curlData->res) && available > 0) { size_t remaining = curlData->bufferSize - curlData->pos; size_t copySize = available < remaining ? available : remaining; @@ -272,7 +272,7 @@ static size_t http_curl_write_callback(char* ptr, size_t size, size_t nmemb, voi int http_curl_xfer_info_callback(void* clientp, curl_off_t dltotal, curl_off_t dlnow, curl_off_t ultotal, curl_off_t ulnow) { http_curl_data* curlData = (http_curl_data*) clientp; - if(curlData->checkRunning != NULL && R_FAILED(curlData->res = curlData->checkRunning(curlData->userData))) { + if(R_FAILED(curlData->res) || (curlData->checkRunning != NULL && R_FAILED(curlData->res = curlData->checkRunning(curlData->userData)))) { return 1; } @@ -344,16 +344,12 @@ Result http_download_callback(const char* url, u32 bufferSize, void* userData, R if(ret == CURLE_OK && curlData.pos != 0) { curlData.res = curlData.callback(curlData.userData, curlData.buf, curlData.pos); curlData.pos = 0; - - if(R_FAILED(curlData.res)) { - ret = CURLE_WRITE_ERROR; - } } - if(ret != CURLE_OK) { - if(ret == CURLE_WRITE_ERROR || ret == CURLE_ABORTED_BY_CALLBACK) { - res = curlData.res; - } else if(ret == CURLE_HTTP_RETURNED_ERROR) { + res = curlData.res; + + if(R_SUCCEEDED(res) && ret != CURLE_OK) { + if(ret == CURLE_HTTP_RETURNED_ERROR) { long responseCode = 0; curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &responseCode); diff --git a/source/fbi/action/installurl.c b/source/fbi/action/installurl.c index 310fdb7..fccd064 100644 --- a/source/fbi/action/installurl.c +++ b/source/fbi/action/installurl.c @@ -157,7 +157,7 @@ static Result action_install_url_open_dst(void* data, u32 index, void* initialRe string_get_file_name(name, filename, FILE_NAME_MAX); snprintf(dir, FILE_PATH_MAX, "/3ds/%s/", name); - snprintf(installData->currPath, FILE_PATH_MAX, "/3ds/%s/%s.3dsx", name, name); + snprintf(installData->currPath, FILE_PATH_MAX, "/3ds/%s/%s.%s", name, name, *(u32*) initialReadBlock == 0x58534433 ? "3dsx" : "smdh"); } if(R_SUCCEEDED(res = fs_ensure_dir(sdmcArchive, "/3ds/")) && R_SUCCEEDED(res = fs_ensure_dir(sdmcArchive, dir))) {