diff options
Diffstat (limited to 'openssl/vendor/0.9.8d/ms/uplink.c')
-rw-r--r-- | openssl/vendor/0.9.8d/ms/uplink.c | 116 |
1 files changed, 0 insertions, 116 deletions
diff --git a/openssl/vendor/0.9.8d/ms/uplink.c b/openssl/vendor/0.9.8d/ms/uplink.c deleted file mode 100644 index 7b7da08d..00000000 --- a/openssl/vendor/0.9.8d/ms/uplink.c +++ /dev/null @@ -1,116 +0,0 @@ -#if (defined(_WIN64) || defined(_WIN32_WCE)) && !defined(UNICODE) -#define UNICODE -#endif -#if defined(UNICODE) && !defined(_UNICODE) -#define _UNICODE -#endif -#if defined(_UNICODE) && !defined(UNICODE) -#define UNICODE -#endif - -#include <windows.h> -#include <tchar.h> -#include <stdio.h> -#include "uplink.h" -void OPENSSL_showfatal(const char *,...); - -static TCHAR msg[128]; - -static void unimplemented (void) -{ OPENSSL_showfatal (sizeof(TCHAR)==sizeof(char)?"%s\n":"%S\n",msg); - ExitProcess (1); -} - -void OPENSSL_Uplink (volatile void **table, int index) -{ static HMODULE volatile apphandle=NULL; - static void ** volatile applinktable=NULL; - int len; - void (*func)(void)=unimplemented; - HANDLE h; - void **p; - - /* Note that the below code is not MT-safe in respect to msg - * buffer, but what's the worst thing that can happen? Error - * message might be misleading or corrupted. As error condition - * is fatal and should never be risen, I accept the risk... */ - /* One can argue that I should have used InterlockedExchangePointer - * or something to update static variables and table[]. Well, - * store instructions are as atomic as they can get and assigned - * values are effectively constant... So that volatile qualifier - * should be sufficient [it prohibits compiler to reorder memory - * access instructions]. */ - do { - len = _stprintf (msg,_T("OPENSSL_Uplink(%p,%02X): "),table,index); - _tcscpy (msg+len,_T("unimplemented function")); - - if ((h=apphandle)==NULL) - { if ((h=GetModuleHandle(NULL))==NULL) - { apphandle=(HMODULE)-1; - _tcscpy (msg+len,_T("no host application")); - break; - } - apphandle = h; - } - if ((h=apphandle)==(HMODULE)-1) /* revalidate */ - break; - - if (applinktable==NULL) - { void**(*applink)(); - - applink=(void**(*)())GetProcAddress(h,"OPENSSL_Applink"); - if (applink==NULL) - { apphandle=(HMODULE)-1; - _tcscpy (msg+len,_T("no OPENSSL_Applink")); - break; - } - p = (*applink)(); - if (p==NULL) - { apphandle=(HMODULE)-1; - _tcscpy (msg+len,_T("no ApplinkTable")); - break; - } - applinktable = p; - } - else - p = applinktable; - - if (index > (int)p[0]) - break; - - if (p[index]) func = p[index]; - } while (0); - - table[index] = func; -} - -#if defined(_MSC_VER) && defined(_M_IX86) && !defined(OPENSSL_NO_INLINE_ASM) -#define LAZY(i) \ -__declspec(naked) static void lazy##i (void) { \ - _asm push i \ - _asm push OFFSET OPENSSL_UplinkTable \ - _asm call OPENSSL_Uplink \ - _asm add esp,8 \ - _asm jmp OPENSSL_UplinkTable+4*i } - -#if APPLINK_MAX>25 -#error "Add more stubs..." -#endif -/* make some in advance... */ -LAZY(1) LAZY(2) LAZY(3) LAZY(4) LAZY(5) -LAZY(6) LAZY(7) LAZY(8) LAZY(9) LAZY(10) -LAZY(11) LAZY(12) LAZY(13) LAZY(14) LAZY(15) -LAZY(16) LAZY(17) LAZY(18) LAZY(19) LAZY(20) -LAZY(21) LAZY(22) LAZY(23) LAZY(24) LAZY(25) -void *OPENSSL_UplinkTable[] = { - (void *)APPLINK_MAX, - lazy1, lazy2, lazy3, lazy4, lazy5, - lazy6, lazy7, lazy8, lazy9, lazy10, - lazy11,lazy12,lazy13,lazy14,lazy15, - lazy16,lazy17,lazy18,lazy19,lazy20, - lazy21,lazy22,lazy23,lazy24,lazy25, -}; -#endif - -#ifdef SELFTEST -main() { UP_fprintf(UP_stdout,"hello, world!\n"); } -#endif |