mdc2test is not built by default anymore.
[openssl.git] / ms / applink.c
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      /* should not be used */
11
12 #define APPLINK_FOPEN   11      /* solely for completeness */
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      /* to be used with below */
19
20 #define APPLINK_OPEN    18      /* formally can't be used, as flags can vary */
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      /* always same as last macro */
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 __declspec(dllexport) void **OPENSSL_Applink(void)
43 { static int once=1;
44   static void *OPENSSL_ApplinkTable[APPLINK_MAX+1]={(void *)APPLINK_MAX};
45
46     if (once)
47     {   OPENSSL_ApplinkTable[APPLINK_STDIN]     = app_stdin;
48         OPENSSL_ApplinkTable[APPLINK_STDOUT]    = app_stdout;
49         OPENSSL_ApplinkTable[APPLINK_STDERR]    = app_stderr;
50         OPENSSL_ApplinkTable[APPLINK_FPRINTF]   = fprintf;
51         OPENSSL_ApplinkTable[APPLINK_FGETS]     = fgets;
52         OPENSSL_ApplinkTable[APPLINK_FREAD]     = fread;
53         OPENSSL_ApplinkTable[APPLINK_FWRITE]    = fwrite;
54         OPENSSL_ApplinkTable[APPLINK_FSETMOD]   = app_fsetmod;
55         OPENSSL_ApplinkTable[APPLINK_FEOF]      = app_feof;
56         OPENSSL_ApplinkTable[APPLINK_FCLOSE]    = fclose;
57
58         OPENSSL_ApplinkTable[APPLINK_FOPEN]     = fopen;
59         OPENSSL_ApplinkTable[APPLINK_FSEEK]     = fseek;
60         OPENSSL_ApplinkTable[APPLINK_FTELL]     = ftell;
61         OPENSSL_ApplinkTable[APPLINK_FFLUSH]    = fflush;
62         OPENSSL_ApplinkTable[APPLINK_FERROR]    = app_ferror;
63         OPENSSL_ApplinkTable[APPLINK_CLEARERR]  = app_clearerr;
64         OPENSSL_ApplinkTable[APPLINK_FILENO]    = app_fileno;
65
66         OPENSSL_ApplinkTable[APPLINK_OPEN]      = _open;
67         OPENSSL_ApplinkTable[APPLINK_READ]      = _read;
68         OPENSSL_ApplinkTable[APPLINK_WRITE]     = _write;
69         OPENSSL_ApplinkTable[APPLINK_LSEEK]     = _lseek;
70         OPENSSL_ApplinkTable[APPLINK_CLOSE]     = _close;
71
72         once = 0;
73     }
74
75   return OPENSSL_ApplinkTable;
76 }
77 #endif