Result inline downloadPageToSDCard(httpcContext* context, const short* filename, u32 size) { Result ret = 0; u32 pos = 0, sz = 0; IFile_Open(FILE_LOC, filename, FILE_W); *((int *)FILE_LOC + 1) = 0; svcSleepThread(0x400000LL); while(pos < size) { sz = size - pos; sz = sz > BUF_LEN ? BUF_LEN : sz; ret = httpcReceiveData(context, BUF_LOC, sz); if(ret == HTTPC_RESULTCODE_DOWNLOADPENDING) { ret = httpcGetDownloadSizeState(context, &pos, 0); if(ret) return ret; goto filewrite; } else if(ret) return ret; else { pos += sz; filewrite: IFile_Write(FILE_LOC, WRITTEN_LOC, BUF_LOC, sz); svcSleepThread(0x400000LL); } } return 0; }
Result httpcDownloadData(httpcContext *context, u8* buffer, u32 size, u32 *downloadedsize) { Result ret=0; u32 contentsize=0; u32 pos=0, sz=0; if(downloadedsize)*downloadedsize = 0; ret=httpcGetDownloadSizeState(context, NULL, &contentsize); if(ret!=0)return ret; while(pos < size) { sz = size - pos; ret=httpcReceiveData(context, &buffer[pos], sz); if(ret==HTTPC_RESULTCODE_DOWNLOADPENDING) { ret=httpcGetDownloadSizeState(context, &pos, NULL); if(ret!=0)return ret; } else if(ret!=0) { return ret; } else { pos+= sz; } if(downloadedsize)*downloadedsize = pos; } return 0; }