I want to get the information downloaded from a file (a BMP image) into a char array. I have this function
#define _countof(x) (sizeof(x) / sizeof(x[0]))
char* DownloadBytes(char* szUrl) {
HINTERNET hOpen = NULL;
HINTERNET hFile = NULL;
char* data = (char*)"";
DWORD dataSize = 0;
DWORD dwBytesRead = 0;
hOpen = InternetOpen("MyAgent", NULL, NULL, NULL, NULL);
if(!hOpen) return (char*)"";
hFile = InternetOpenUrl(hOpen, szUrl, NULL, NULL, INTERNET_FLAG_RELOAD | INTERNET_FLAG_DONT_CACHE, NULL);
if(!hFile) {
InternetCloseHandle(hOpen);
return (char*)"";
}
do {
char buffer[2000];
InternetReadFile(hFile, (LPVOID)buffer, _countof(buffer), &dwBytesRead);
char* tempData = new char[dataSize + dwBytesRead];
memcpy(tempData, data, dataSize);
memcpy(tempData + dataSize, buffer, dwBytesRead);
delete[] data;
data = tempData;
dataSize += dwBytesRead;
} while (dwBytesRead);
InternetCloseHandle(hFile);
InternetCloseHandle(hOpen);
return data;
}
The problem is that I only get the first three bytes of the file and I really don't have any idea of what could be wrong. I am using CodeBlocs + MinGW, on Windows 7. This function is exported into a DLL, but I don't think it does matter. The only thing I can verify is that buffer gets the downloaded data correctly. Something goes wrong with memcpy()