#include <stdlib.h>
#include <openssl/opensslv.h>
+/* The test is only currently implemented for DSO_DLFCN and DSO_WIN32 */
+#if defined(DSO_DLFCN) || defined(DSO_WIN32)
+
#define SSL_CTX_NEW "SSL_CTX_new"
#define SSL_CTX_FREE "SSL_CTX_free"
#define TLS_METHOD "TLS_method"
typedef unsigned long (*ERR_get_error_t)(void);
typedef unsigned long (*OpenSSL_version_num_t)(void);
-TLS_method_t TLS_method;
-SSL_CTX_new_t SSL_CTX_new;
-SSL_CTX_free_t SSL_CTX_free;
-
-ERR_get_error_t ERR_get_error;
-OpenSSL_version_num_t OpenSSL_version_num;
+static TLS_method_t TLS_method;
+static SSL_CTX_new_t SSL_CTX_new;
+static SSL_CTX_free_t SSL_CTX_free;
+static ERR_get_error_t ERR_get_error;
+static OpenSSL_version_num_t OpenSSL_version_num;
#ifdef DSO_DLFCN
typedef void * SHLIB;
typedef void * SHLIB_SYM;
+# define SHLIB_INIT NULL
-# define SHARED_LIBRARY_SUFFIX ".so"
-
-static int shlib_load(char *filename, SHLIB *lib)
+static int shlib_load(const char *filename, SHLIB *lib)
{
- char *tmpfile;
- size_t filenamelen = strlen(filename);
-
- /* Total length = base filename len + suffix len + 1 for NULL terminator */
- tmpfile = malloc(filenamelen + sizeof(SHARED_LIBRARY_SUFFIX) + 1);
- if (tmpfile == NULL)
- return 0;
- strcpy(tmpfile, filename);
- strcpy(tmpfile + filenamelen, SHARED_LIBRARY_SUFFIX);
-
- *lib = dlopen(tmpfile, RTLD_GLOBAL | RTLD_LAZY);
- free(tmpfile);
+ *lib = dlopen(filename, RTLD_GLOBAL | RTLD_LAZY);
if (*lib == NULL)
return 0;
typedef HINSTANCE SHLIB;
typedef void * SHLIB_SYM;
+# define SHLIB_INIT 0
-static int shlib_load(char *filename, SHLIB *lib)
+static int shlib_load(const char *filename, SHLIB *lib)
{
*lib = LoadLibraryA(filename);
if (*lib == NULL)
#endif
-/* The test is only currently implemented for DSO_DLFCN and DSO_WIN32 */
-#if defined(DSO_DLFCN) || defined(DSO_WIN32)
-
# define CRYPTO_FIRST_OPT "-crypto_first"
# define SSL_FIRST_OPT "-ssl_first"
# define JUST_CRYPTO_OPT "-just_crypto"
int main(int argc, char **argv)
{
- SHLIB ssllib, cryptolib;
+ SHLIB ssllib = SHLIB_INIT, cryptolib = SHLIB_INIT;
SSL_CTX *ctx;
union {
void (*func) (void);