From bc38a6b01d578a638f5a3a75452859e80f6ddb79 Mon Sep 17 00:00:00 2001 From: Joan Karadimov Date: Fri, 12 Feb 2016 11:41:34 +0200 Subject: [PATCH] Extract a `ReadLibrary` function in DllLoader.cpp --- example/DllLoader/DllLoader.cpp | 59 +++++++++++++++++++++++---------- 1 file changed, 42 insertions(+), 17 deletions(-) diff --git a/example/DllLoader/DllLoader.cpp b/example/DllLoader/DllLoader.cpp index 4ff1a20..dc22ac4 100644 --- a/example/DllLoader/DllLoader.cpp +++ b/example/DllLoader/DllLoader.cpp @@ -46,12 +46,48 @@ void LoadFromFile(void) FreeLibrary(handle); } +void* ReadLibrary(long* pSize) { + long read; + void* result; + FILE* fp; + + fp = _tfopen(DLL_FILE, _T("rb")); + if (fp == NULL) + { + _tprintf(_T("Can't open DLL file \"%s\"."), DLL_FILE); + return NULL; + } + + fseek(fp, 0, SEEK_END); + *pSize = ftell(fp); + if (*pSize < 0) + { + fclose(fp); + return NULL; + } + + result = (unsigned char *)malloc(*pSize); + if (result == NULL) + { + return NULL; + } + + fseek(fp, 0, SEEK_SET); + read = fread(result, 1, *pSize, fp); + fclose(fp); + if (read != static_cast(*pSize)) + { + free(result); + return NULL; + } + + return result; +} + void LoadFromMemory(void) { - FILE *fp; - unsigned char *data=NULL; + void *data; long size; - size_t read; HMEMORYMODULE handle; addNumberProc addNumber; HMEMORYRSRC resourceInfo; @@ -59,23 +95,12 @@ void LoadFromMemory(void) LPVOID resourceData; TCHAR buffer[100]; - fp = _tfopen(DLL_FILE, _T("rb")); - if (fp == NULL) + data = ReadLibrary(&size); + if (data == NULL) { - _tprintf(_T("Can't open DLL file \"%s\"."), DLL_FILE); - goto exit; + return; } - fseek(fp, 0, SEEK_END); - size = ftell(fp); - assert(size >= 0); - data = (unsigned char *)malloc(size); - assert(data != NULL); - fseek(fp, 0, SEEK_SET); - read = fread(data, 1, size, fp); - assert(read == static_cast(size)); - fclose(fp); - handle = MemoryLoadLibrary(data, size); if (handle == NULL) {