Improve cross-compiler portability of applink.c module and mention
CRYPTO_malloc_init in FAQ.
This commit is contained in:
parent
df8dae1df4
commit
2c730f6fc2
11
FAQ
11
FAQ
@ -710,16 +710,19 @@ Note that debug and release libraries are NOT interchangeable. If you
|
|||||||
built OpenSSL with /MD your application must use /MD and cannot use /MDd.
|
built OpenSSL with /MD your application must use /MD and cannot use /MDd.
|
||||||
|
|
||||||
As per 0.9.8 the above limitation is eliminated for .DLLs. OpenSSL
|
As per 0.9.8 the above limitation is eliminated for .DLLs. OpenSSL
|
||||||
.DLLs compiled with some specific run-time option [we recommend the
|
.DLLs compiled with some specific run-time option [we insist on the
|
||||||
default /MD] can be deployed with application compiled with different
|
default /MD] can be deployed with application compiled with different
|
||||||
option or even different compiler. But there is a catch! Instead of
|
option or even different compiler. But there is a catch! Instead of
|
||||||
re-compiling OpenSSL toolkit, as you would have to with prior versions,
|
re-compiling OpenSSL toolkit, as you would have to with prior versions,
|
||||||
you have to compile small C snippet with compiler and/or options of
|
you have to compile small C snippet with compiler and/or options of
|
||||||
your choice. The snippet gets installed as
|
your choice. The snippet gets installed as
|
||||||
<install-root>/include/openssl/applink.c and should be either added to
|
<install-root>/include/openssl/applink.c and should be either added to
|
||||||
your project or simply #include-d in one [and only one] of your source
|
your application project or simply #include-d in one [and only one]
|
||||||
files. Failure to do either manifests itself as fatal "no
|
of your application source files. Failure to link this shim module
|
||||||
OPENSSL_Applink" error.
|
into your application manifests itself as fatal "no OPENSSL_Applink"
|
||||||
|
run-time error. An explicit reminder is due that in this situation
|
||||||
|
[mixing compiler options] it is as important to add CRYPTO_malloc_init
|
||||||
|
prior first call to OpenSSL.
|
||||||
|
|
||||||
* How do I read or write a DER encoded buffer using the ASN1 functions?
|
* How do I read or write a DER encoded buffer using the ASN1 functions?
|
||||||
|
|
||||||
|
19
ms/applink.c
19
ms/applink.c
@ -39,7 +39,20 @@ static int app_fileno(FILE *fp) { return _fileno(fp); }
|
|||||||
static int app_fsetmod(FILE *fp,char mod)
|
static int app_fsetmod(FILE *fp,char mod)
|
||||||
{ return _setmode (_fileno(fp),mod=='b'?_O_BINARY:_O_TEXT); }
|
{ return _setmode (_fileno(fp),mod=='b'?_O_BINARY:_O_TEXT); }
|
||||||
|
|
||||||
__declspec(dllexport) void **OPENSSL_Applink(void)
|
#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 int once=1;
|
||||||
static void *OPENSSL_ApplinkTable[APPLINK_MAX+1]={(void *)APPLINK_MAX};
|
static void *OPENSSL_ApplinkTable[APPLINK_MAX+1]={(void *)APPLINK_MAX};
|
||||||
|
|
||||||
@ -74,4 +87,8 @@ __declspec(dllexport) void **OPENSSL_Applink(void)
|
|||||||
|
|
||||||
return OPENSSL_ApplinkTable;
|
return OPENSSL_ApplinkTable;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user