Framework for glueing BIO layer and Win32 compiler run-time. Goal is to
[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 #define APPLINK_MAX     10      /* always same as last macro */
12
13 #ifndef APPMACROS_ONLY
14 #include <stdio.h>
15 #include <io.h>
16 #include <fcntl.h>
17
18 static void *app_stdin()        { return stdin;  }
19 static void *app_stdout()       { return stdout; }
20 static void *app_stderr()       { return stderr; }
21 static int   app_feof(FILE *fp) { return feof(fp); }
22 static int   app_fsetmod(FILE *fp,char mod)
23 { return _setmode (_fileno(fp),mod=='b'?_O_BINARY:_O_TEXT); }
24
25 __declspec(dllexport) void **OPENSSL_Applink()
26 { static int once=1;
27   static void *OPENSSL_ApplinkTable[APPLINK_MAX+1]={(void *)APPLINK_MAX};
28
29     if (once)
30     {   OPENSSL_ApplinkTable[APPLINK_STDIN]     = app_stdin;
31         OPENSSL_ApplinkTable[APPLINK_STDOUT]    = app_stdout;
32         OPENSSL_ApplinkTable[APPLINK_STDERR]    = app_stderr;
33         OPENSSL_ApplinkTable[APPLINK_FPRINTF]   = fprintf;
34         OPENSSL_ApplinkTable[APPLINK_FGETS]     = fgets;
35         OPENSSL_ApplinkTable[APPLINK_FREAD]     = fread;
36         OPENSSL_ApplinkTable[APPLINK_FWRITE]    = fwrite;
37         OPENSSL_ApplinkTable[APPLINK_FSETMOD]   = app_fsetmod;
38         OPENSSL_ApplinkTable[APPLINK_FEOF]      = app_feof;
39         OPENSSL_ApplinkTable[APPLINK_FCLOSE]    = fclose;
40         once = 0;
41     }
42
43   return OPENSSL_ApplinkTable;
44 }
45 #endif