-
Notifications
You must be signed in to change notification settings - Fork 40
Windows OPENSSL_Applink error patch #29
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Changes from 3 commits
4904558
641ebc0
30f5a4c
3bfac4b
e57bba7
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,94 @@ | ||
#define APPLINK_STDIN 1 | ||
#define APPLINK_STDOUT 2 | ||
#define APPLINK_STDERR 3 | ||
#define APPLINK_FPRINTF 4 | ||
#define APPLINK_FGETS 5 | ||
#define APPLINK_FREAD 6 | ||
#define APPLINK_FWRITE 7 | ||
#define APPLINK_FSETMOD 8 | ||
#define APPLINK_FEOF 9 | ||
#define APPLINK_FCLOSE 10 /* should not be used */ | ||
|
||
#define APPLINK_FOPEN 11 /* solely for completeness */ | ||
#define APPLINK_FSEEK 12 | ||
#define APPLINK_FTELL 13 | ||
#define APPLINK_FFLUSH 14 | ||
#define APPLINK_FERROR 15 | ||
#define APPLINK_CLEARERR 16 | ||
#define APPLINK_FILENO 17 /* to be used with below */ | ||
|
||
#define APPLINK_OPEN 18 /* formally can't be used, as flags can vary */ | ||
#define APPLINK_READ 19 | ||
#define APPLINK_WRITE 20 | ||
#define APPLINK_LSEEK 21 | ||
#define APPLINK_CLOSE 22 | ||
#define APPLINK_MAX 22 /* always same as last macro */ | ||
|
||
#ifndef APPMACROS_ONLY | ||
#include <stdio.h> | ||
#include <io.h> | ||
#include <fcntl.h> | ||
|
||
static void *app_stdin(void) { return stdin; } | ||
static void *app_stdout(void) { return stdout; } | ||
static void *app_stderr(void) { return stderr; } | ||
static int app_feof(FILE *fp) { return feof(fp); } | ||
static int app_ferror(FILE *fp) { return ferror(fp); } | ||
static void app_clearerr(FILE *fp) { clearerr(fp); } | ||
static int app_fileno(FILE *fp) { return _fileno(fp); } | ||
static int app_fsetmod(FILE *fp,char mod) | ||
{ return _setmode (_fileno(fp),mod=='b'?_O_BINARY:_O_TEXT); } | ||
|
||
#ifdef __cplusplus | ||
extern "C" { | ||
#endif | ||
|
||
__declspec(dllexport) | ||
void ** | ||
#if defined(__BORLANDC__) | ||
__stdcall /* __stdcall appears to be the only way to get the name | ||
* decoration right with Borland C. Otherwise it works | ||
* purely incidentally, as we pass no parameters. */ | ||
#else | ||
__cdecl | ||
#endif | ||
OPENSSL_Applink(void) | ||
{ static int once=1; | ||
static void *OPENSSL_ApplinkTable[APPLINK_MAX+1]={(void *)APPLINK_MAX}; | ||
|
||
if (once) | ||
{ OPENSSL_ApplinkTable[APPLINK_STDIN] = app_stdin; | ||
OPENSSL_ApplinkTable[APPLINK_STDOUT] = app_stdout; | ||
OPENSSL_ApplinkTable[APPLINK_STDERR] = app_stderr; | ||
OPENSSL_ApplinkTable[APPLINK_FPRINTF] = fprintf; | ||
OPENSSL_ApplinkTable[APPLINK_FGETS] = fgets; | ||
OPENSSL_ApplinkTable[APPLINK_FREAD] = fread; | ||
OPENSSL_ApplinkTable[APPLINK_FWRITE] = fwrite; | ||
OPENSSL_ApplinkTable[APPLINK_FSETMOD] = app_fsetmod; | ||
OPENSSL_ApplinkTable[APPLINK_FEOF] = app_feof; | ||
OPENSSL_ApplinkTable[APPLINK_FCLOSE] = fclose; | ||
|
||
OPENSSL_ApplinkTable[APPLINK_FOPEN] = fopen; | ||
OPENSSL_ApplinkTable[APPLINK_FSEEK] = fseek; | ||
OPENSSL_ApplinkTable[APPLINK_FTELL] = ftell; | ||
OPENSSL_ApplinkTable[APPLINK_FFLUSH] = fflush; | ||
OPENSSL_ApplinkTable[APPLINK_FERROR] = app_ferror; | ||
OPENSSL_ApplinkTable[APPLINK_CLEARERR] = app_clearerr; | ||
OPENSSL_ApplinkTable[APPLINK_FILENO] = app_fileno; | ||
|
||
OPENSSL_ApplinkTable[APPLINK_OPEN] = _open; | ||
OPENSSL_ApplinkTable[APPLINK_READ] = _read; | ||
OPENSSL_ApplinkTable[APPLINK_WRITE] = _write; | ||
OPENSSL_ApplinkTable[APPLINK_LSEEK] = _lseek; | ||
OPENSSL_ApplinkTable[APPLINK_CLOSE] = _close; | ||
|
||
once = 0; | ||
} | ||
|
||
return OPENSSL_ApplinkTable; | ||
} | ||
|
||
#ifdef __cplusplus | ||
} | ||
#endif | ||
#endif |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,116 @@ | ||
module deimos.openssl.applink; | ||
import core.stdc.stdio; | ||
import std.stdio : _fileno, _setmode, _O_BINARY; | ||
import core.sys.posix.fcntl; | ||
import core.sys.posix.unistd; | ||
import core.stdc.stdio; | ||
|
||
enum APPLINK_STDIN =1; | ||
enum APPLINK_STDOUT =2; | ||
enum APPLINK_STDERR =3; | ||
enum APPLINK_FPRINTF =4; | ||
enum APPLINK_FGETS =5; | ||
enum APPLINK_FREAD =6; | ||
enum APPLINK_FWRITE =7; | ||
enum APPLINK_FSETMOD =8; | ||
enum APPLINK_FEOF =9; | ||
enum APPLINK_FCLOSE =10; /* should not be used */ | ||
|
||
enum APPLINK_FOPEN =11; /* solely for completeness */ | ||
enum APPLINK_FSEEK =12; | ||
enum APPLINK_FTELL =13; | ||
enum APPLINK_FFLUSH =14; | ||
enum APPLINK_FERROR =15; | ||
enum APPLINK_CLEARERR =16; | ||
enum APPLINK_FILENO =17; /* to be used with below */ | ||
|
||
enum APPLINK_OPEN =18; /* formally can't be used, as flags can vary */ | ||
enum APPLINK_READ =19; | ||
enum APPLINK_WRITE =20; | ||
enum APPLINK_LSEEK =21; | ||
enum APPLINK_CLOSE =22; | ||
enum APPLINK_MAX =22; /* always same as last macro */ | ||
|
||
enum _O_TEXT = 0x4000; | ||
|
||
export extern(C) | ||
{ | ||
void *app_stdin() | ||
{ | ||
return cast(void*)stdin; | ||
} | ||
|
||
void *app_stdout() | ||
{ | ||
return cast(void*)stdout; | ||
} | ||
|
||
void *app_stderr() | ||
{ | ||
return cast(void*)stderr; | ||
} | ||
|
||
int app_feof(FILE *fp) | ||
{ | ||
return feof(fp); | ||
} | ||
|
||
int app_ferror(FILE *fp) | ||
{ | ||
return ferror(fp); | ||
} | ||
|
||
void app_clearerr(FILE *fp) | ||
{ | ||
clearerr(fp); | ||
} | ||
|
||
int app_fileno(FILE *fp) | ||
{ | ||
return _fileno(fp); | ||
} | ||
|
||
int app_fsetmod(FILE *fp, char mod) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. You don't want to export the implementations, only |
||
{ | ||
return _setmode (_fileno(fp),mod=='b'?_O_BINARY:_O_TEXT); | ||
} | ||
|
||
int once = 1; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Needs to be |
||
void*[APPLINK_MAX+1] OPENSSL_ApplinkTable; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Same here, use There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. You should also initialize this with |
||
|
||
void** OPENSSL_Applink() | ||
{ | ||
if (once) | ||
{ | ||
OPENSSL_ApplinkTable[0] = cast(void*)APPLINK_MAX; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Should be default, see above. |
||
OPENSSL_ApplinkTable[APPLINK_STDIN] = &app_stdin; | ||
OPENSSL_ApplinkTable[APPLINK_STDOUT] = &app_stdout; | ||
OPENSSL_ApplinkTable[APPLINK_STDERR] = &app_stderr; | ||
OPENSSL_ApplinkTable[APPLINK_FPRINTF] = &fprintf; | ||
OPENSSL_ApplinkTable[APPLINK_FGETS] = &fgets; | ||
OPENSSL_ApplinkTable[APPLINK_FREAD] = &fread; | ||
OPENSSL_ApplinkTable[APPLINK_FWRITE] = &fwrite; | ||
OPENSSL_ApplinkTable[APPLINK_FSETMOD] = &app_fsetmod; | ||
OPENSSL_ApplinkTable[APPLINK_FEOF] = &app_feof; | ||
OPENSSL_ApplinkTable[APPLINK_FCLOSE] = &fclose; | ||
|
||
OPENSSL_ApplinkTable[APPLINK_FOPEN] = &fopen; | ||
OPENSSL_ApplinkTable[APPLINK_FSEEK] = &fseek; | ||
OPENSSL_ApplinkTable[APPLINK_FTELL] = &ftell; | ||
OPENSSL_ApplinkTable[APPLINK_FFLUSH] = &fflush; | ||
OPENSSL_ApplinkTable[APPLINK_FERROR] = &app_ferror; | ||
OPENSSL_ApplinkTable[APPLINK_CLEARERR] = &app_clearerr; | ||
OPENSSL_ApplinkTable[APPLINK_FILENO] = &app_fileno; | ||
|
||
OPENSSL_ApplinkTable[APPLINK_OPEN] = &fopen; | ||
OPENSSL_ApplinkTable[APPLINK_READ] = &fread; | ||
OPENSSL_ApplinkTable[APPLINK_WRITE] = &fwrite; | ||
OPENSSL_ApplinkTable[APPLINK_LSEEK] = &fseek; | ||
OPENSSL_ApplinkTable[APPLINK_CLOSE] = &fclose; | ||
|
||
once = 0; | ||
} | ||
|
||
return OPENSSL_ApplinkTable.ptr; | ||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We want a
version (Windows)
here.