diff options
Diffstat (limited to 'src/lib/libssl/src/ms/uplink.c')
-rw-r--r-- | src/lib/libssl/src/ms/uplink.c | 117 |
1 files changed, 0 insertions, 117 deletions
diff --git a/src/lib/libssl/src/ms/uplink.c b/src/lib/libssl/src/ms/uplink.c deleted file mode 100644 index 6d59cb1f87..0000000000 --- a/src/lib/libssl/src/ms/uplink.c +++ /dev/null | |||
@@ -1,117 +0,0 @@ | |||
1 | #if (defined(_WIN64) || defined(_WIN32_WCE)) && !defined(UNICODE) | ||
2 | #define UNICODE | ||
3 | #endif | ||
4 | #if defined(UNICODE) && !defined(_UNICODE) | ||
5 | #define _UNICODE | ||
6 | #endif | ||
7 | #if defined(_UNICODE) && !defined(UNICODE) | ||
8 | #define UNICODE | ||
9 | #endif | ||
10 | |||
11 | #include <windows.h> | ||
12 | #include <tchar.h> | ||
13 | #include <stdio.h> | ||
14 | #include "uplink.h" | ||
15 | void OPENSSL_showfatal(const char *,...); | ||
16 | |||
17 | static TCHAR msg[128]; | ||
18 | |||
19 | static void unimplemented (void) | ||
20 | { OPENSSL_showfatal (sizeof(TCHAR)==sizeof(char)?"%s\n":"%S\n",msg); | ||
21 | ExitProcess (1); | ||
22 | } | ||
23 | |||
24 | void OPENSSL_Uplink (volatile void **table, int index) | ||
25 | { static HMODULE volatile apphandle=NULL; | ||
26 | static void ** volatile applinktable=NULL; | ||
27 | int len; | ||
28 | void (*func)(void)=unimplemented; | ||
29 | HANDLE h; | ||
30 | void **p; | ||
31 | |||
32 | /* Note that the below code is not MT-safe in respect to msg | ||
33 | * buffer, but what's the worst thing that can happen? Error | ||
34 | * message might be misleading or corrupted. As error condition | ||
35 | * is fatal and should never be risen, I accept the risk... */ | ||
36 | /* One can argue that I should have used InterlockedExchangePointer | ||
37 | * or something to update static variables and table[]. Well, | ||
38 | * store instructions are as atomic as they can get and assigned | ||
39 | * values are effectively constant... So that volatile qualifier | ||
40 | * should be sufficient [it prohibits compiler to reorder memory | ||
41 | * access instructions]. */ | ||
42 | do { | ||
43 | len = _sntprintf (msg,sizeof(msg)/sizeof(TCHAR), | ||
44 | _T("OPENSSL_Uplink(%p,%02X): "),table,index); | ||
45 | _tcscpy (msg+len,_T("unimplemented function")); | ||
46 | |||
47 | if ((h=apphandle)==NULL) | ||
48 | { if ((h=GetModuleHandle(NULL))==NULL) | ||
49 | { apphandle=(HMODULE)-1; | ||
50 | _tcscpy (msg+len,_T("no host application")); | ||
51 | break; | ||
52 | } | ||
53 | apphandle = h; | ||
54 | } | ||
55 | if ((h=apphandle)==(HMODULE)-1) /* revalidate */ | ||
56 | break; | ||
57 | |||
58 | if (applinktable==NULL) | ||
59 | { void**(*applink)(); | ||
60 | |||
61 | applink=(void**(*)())GetProcAddress(h,"OPENSSL_Applink"); | ||
62 | if (applink==NULL) | ||
63 | { apphandle=(HMODULE)-1; | ||
64 | _tcscpy (msg+len,_T("no OPENSSL_Applink")); | ||
65 | break; | ||
66 | } | ||
67 | p = (*applink)(); | ||
68 | if (p==NULL) | ||
69 | { apphandle=(HMODULE)-1; | ||
70 | _tcscpy (msg+len,_T("no ApplinkTable")); | ||
71 | break; | ||
72 | } | ||
73 | applinktable = p; | ||
74 | } | ||
75 | else | ||
76 | p = applinktable; | ||
77 | |||
78 | if (index > (int)p[0]) | ||
79 | break; | ||
80 | |||
81 | if (p[index]) func = p[index]; | ||
82 | } while (0); | ||
83 | |||
84 | table[index] = func; | ||
85 | } | ||
86 | |||
87 | #if defined(_MSC_VER) && defined(_M_IX86) && !defined(OPENSSL_NO_INLINE_ASM) | ||
88 | #define LAZY(i) \ | ||
89 | __declspec(naked) static void lazy##i (void) { \ | ||
90 | _asm push i \ | ||
91 | _asm push OFFSET OPENSSL_UplinkTable \ | ||
92 | _asm call OPENSSL_Uplink \ | ||
93 | _asm add esp,8 \ | ||
94 | _asm jmp OPENSSL_UplinkTable+4*i } | ||
95 | |||
96 | #if APPLINK_MAX>25 | ||
97 | #error "Add more stubs..." | ||
98 | #endif | ||
99 | /* make some in advance... */ | ||
100 | LAZY(1) LAZY(2) LAZY(3) LAZY(4) LAZY(5) | ||
101 | LAZY(6) LAZY(7) LAZY(8) LAZY(9) LAZY(10) | ||
102 | LAZY(11) LAZY(12) LAZY(13) LAZY(14) LAZY(15) | ||
103 | LAZY(16) LAZY(17) LAZY(18) LAZY(19) LAZY(20) | ||
104 | LAZY(21) LAZY(22) LAZY(23) LAZY(24) LAZY(25) | ||
105 | void *OPENSSL_UplinkTable[] = { | ||
106 | (void *)APPLINK_MAX, | ||
107 | lazy1, lazy2, lazy3, lazy4, lazy5, | ||
108 | lazy6, lazy7, lazy8, lazy9, lazy10, | ||
109 | lazy11,lazy12,lazy13,lazy14,lazy15, | ||
110 | lazy16,lazy17,lazy18,lazy19,lazy20, | ||
111 | lazy21,lazy22,lazy23,lazy24,lazy25, | ||
112 | }; | ||
113 | #endif | ||
114 | |||
115 | #ifdef SELFTEST | ||
116 | main() { UP_fprintf(UP_stdout,"hello, world!\n"); } | ||
117 | #endif | ||