mirror of https://github.com/openssl/openssl.git
				
				
				
			
		
			
	
	
		
			52 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
		
		
			
		
	
	
			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
							 | 
						||
| 
								 | 
							
								
							 |