openssl/crypto/dllmain.c
Richard Levitte 84af71a916 Break out DllMain from crypto/cryptlib.c and use it in shared libs only
Reviewed-by: Andy Polyakov <appro@openssl.org>
2016-03-30 11:22:42 +02:00

52 lines
1.4 KiB
C

#include "internal/cryptlib_int.h"
#if defined(_WIN32) || defined(__CYGWIN__)
# ifdef __CYGWIN__
/* pick DLL_[PROCESS|THREAD]_[ATTACH|DETACH] definitions */
# include <windows.h>
/*
* this has side-effect of _WIN32 getting defined, which otherwise is
* mutually exclusive with __CYGWIN__...
*/
# endif
/*
* All we really need to do is remove the 'error' state when a thread
* detaches
*/
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved);
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
switch (fdwReason) {
case DLL_PROCESS_ATTACH:
OPENSSL_cpuid_setup();
# if defined(_WIN32_WINNT)
{
IMAGE_DOS_HEADER *dos_header = (IMAGE_DOS_HEADER *) hinstDLL;
IMAGE_NT_HEADERS *nt_headers;
if (dos_header->e_magic == IMAGE_DOS_SIGNATURE) {
nt_headers = (IMAGE_NT_HEADERS *) ((char *)dos_header
+ dos_header->e_lfanew);
if (nt_headers->Signature == IMAGE_NT_SIGNATURE &&
hinstDLL !=
(HINSTANCE) (nt_headers->OptionalHeader.ImageBase))
OPENSSL_NONPIC_relocated = 1;
}
}
# endif
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
OPENSSL_thread_stop();
break;
case DLL_PROCESS_DETACH:
break;
}
return (TRUE);
}
#endif