1: #define APPLINK_STDIN 1
2: #define APPLINK_STDOUT 2
3: #define APPLINK_STDERR 3
4: #define APPLINK_FPRINTF 4
5: #define APPLINK_FGETS 5
6: #define APPLINK_FREAD 6
7: #define APPLINK_FWRITE 7
8: #define APPLINK_FSETMOD 8
9: #define APPLINK_FEOF 9
10: #define APPLINK_FCLOSE 10
11:
12: #define APPLINK_FOPEN 11
13: #define APPLINK_FSEEK 12
14: #define APPLINK_FTELL 13
15: #define APPLINK_FFLUSH 14
16: #define APPLINK_FERROR 15
17: #define APPLINK_CLEARERR 16
18: #define APPLINK_FILENO 17
19:
20: #define APPLINK_OPEN 18
21: #define APPLINK_READ 19
22: #define APPLINK_WRITE 20
23: #define APPLINK_LSEEK 21
24: #define APPLINK_CLOSE 22
25: #define APPLINK_MAX 22
26:
27: #ifndef APPMACROS_ONLY
28: #include <stdio.h>
29: #include <io.h>
30: #include <fcntl.h>
31:
32: static void *app_stdin(void) { return stdin; }
33: static void *app_stdout(void) { return stdout; }
34: static void *app_stderr(void) { return stderr; }
35: static int app_feof(FILE *fp) { return feof(fp); }
36: static int app_ferror(FILE *fp) { return ferror(fp); }
37: static void app_clearerr(FILE *fp) { clearerr(fp); }
38: static int app_fileno(FILE *fp) { return _fileno(fp); }
39: static int app_fsetmod(FILE *fp,char mod)
40: { return _setmode (_fileno(fp),mod=='b'?_O_BINARY:_O_TEXT); }
41:
42: #ifdef __cplusplus
43: extern "C" {
44: #endif
45:
46: __declspec(dllexport)
47: void **
48: #if defined(__BORLANDC__)
49: __stdcall
50:
51:
52: #else
53: __cdecl
54: #endif
55: OPENSSL_Applink(void)
56: { static int once=1;
57: static void *OPENSSL_ApplinkTable[APPLINK_MAX+1]={(void *)APPLINK_MAX};
58:
59: if (once)
60: { OPENSSL_ApplinkTable[APPLINK_STDIN] = app_stdin;
61: OPENSSL_ApplinkTable[APPLINK_STDOUT] = app_stdout;
62: OPENSSL_ApplinkTable[APPLINK_STDERR] = app_stderr;
63: OPENSSL_ApplinkTable[APPLINK_FPRINTF] = fprintf;
64: OPENSSL_ApplinkTable[APPLINK_FGETS] = fgets;
65: OPENSSL_ApplinkTable[APPLINK_FREAD] = fread;
66: OPENSSL_ApplinkTable[APPLINK_FWRITE] = fwrite;
67: OPENSSL_ApplinkTable[APPLINK_FSETMOD] = app_fsetmod;
68: OPENSSL_ApplinkTable[APPLINK_FEOF] = app_feof;
69: OPENSSL_ApplinkTable[APPLINK_FCLOSE] = fclose;
70:
71: OPENSSL_ApplinkTable[APPLINK_FOPEN] = fopen;
72: OPENSSL_ApplinkTable[APPLINK_FSEEK] = fseek;
73: OPENSSL_ApplinkTable[APPLINK_FTELL] = ftell;
74: OPENSSL_ApplinkTable[APPLINK_FFLUSH] = fflush;
75: OPENSSL_ApplinkTable[APPLINK_FERROR] = app_ferror;
76: OPENSSL_ApplinkTable[APPLINK_CLEARERR] = app_clearerr;
77: OPENSSL_ApplinkTable[APPLINK_FILENO] = app_fileno;
78:
79: OPENSSL_ApplinkTable[APPLINK_OPEN] = _open;
80: OPENSSL_ApplinkTable[APPLINK_READ] = _read;
81: OPENSSL_ApplinkTable[APPLINK_WRITE] = _write;
82: OPENSSL_ApplinkTable[APPLINK_LSEEK] = _lseek;
83: OPENSSL_ApplinkTable[APPLINK_CLOSE] = _close;
84:
85: once = 0;
86: }
87:
88: return OPENSSL_ApplinkTable;
89: }
90:
91: #ifdef __cplusplus
92: }
93: #endif
94: #endif