-
Notifications
You must be signed in to change notification settings - Fork 40
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
Windows OPENSSL_Applink error patch #29
Open
aruthane
wants to merge
5
commits into
D-Programming-Deimos:master
Choose a base branch
from
aruthane:applink
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
5 commits
Select commit
Hold shift + click to select a range
4904558
Added converted version of applink.c to be compatiable with D for use…
aruthane 641ebc0
Added original C file for reference
aruthane 30f5a4c
Added newline to the end of the file
aruthane 3bfac4b
Removed unnecessary exports, added __gshared, 'once' is now boolean
aruthane e57bba7
Corrected module name
aruthane File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,115 @@ | ||
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; | ||
|
||
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); | ||
} | ||
|
||
__gshared bool once = true; | ||
__gshared void*[APPLINK_MAX+1] OPENSSL_ApplinkTable = cast(void*)APPLINK_MAX; | ||
|
||
export void** OPENSSL_Applink() | ||
{ | ||
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] = &fopen; | ||
OPENSSL_ApplinkTable[APPLINK_READ] = &fread; | ||
OPENSSL_ApplinkTable[APPLINK_WRITE] = &fwrite; | ||
OPENSSL_ApplinkTable[APPLINK_LSEEK] = &fseek; | ||
OPENSSL_ApplinkTable[APPLINK_CLOSE] = &fclose; | ||
|
||
once = false; | ||
} | ||
|
||
return OPENSSL_ApplinkTable.ptr; | ||
} | ||
} |
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
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.