29 |
# define fputs(x, y) |
# define fputs(x, y) |
30 |
#endif |
#endif |
31 |
|
|
32 |
extern const lt_dlsymlist lt_preloaded_symbols[]; |
extern const mcrypt_preloaded mps[]; |
33 |
|
|
34 |
#define MAX_MOD_SIZE 1024 |
#define MAX_MOD_SIZE 1024 |
35 |
|
|
36 |
static lt_ptr search_symlist_lib(const char* _name) { |
static lt_ptr search_symlist_lib(const char* name) { |
37 |
int i=0; |
int i=0; |
|
char name[MAX_MOD_SIZE]; |
|
|
|
|
|
strcpy( name, _name); |
|
|
strcat( name, ".a"); |
|
38 |
|
|
39 |
while( lt_preloaded_symbols[i].name!=0 || lt_preloaded_symbols[i].address!=0) { |
while( mps[i].name!=0 || mps[i].address!=0) { |
40 |
if (lt_preloaded_symbols[i].name!=NULL) { |
if (mps[i].name!=NULL && mps[i].address==NULL) { |
41 |
if (strcmp(name, lt_preloaded_symbols[i].name)==0) { |
if (strcmp(name, mps[i].name)==0) { |
42 |
return (void*) -1; |
return (void*) -1; |
43 |
} |
} |
44 |
} |
} |
56 |
strcat( name, "_LTX_"); |
strcat( name, "_LTX_"); |
57 |
strcat( name, _name); |
strcat( name, _name); |
58 |
|
|
59 |
while( lt_preloaded_symbols[i].name!=0 || lt_preloaded_symbols[i].address!=0) { |
while( mps[i].name!=0 || mps[i].address!=0) { |
60 |
if (lt_preloaded_symbols[i].name!=NULL) { |
if (mps[i].name!=NULL) { |
61 |
if (strcmp(name, lt_preloaded_symbols[i].name)==0) { |
if (strcmp(name, mps[i].name)==0) { |
62 |
return lt_preloaded_symbols[i].address; |
return mps[i].address; |
63 |
} |
} |
64 |
} |
} |
65 |
i++; |
i++; |
109 |
|
|
110 |
WIN32DLL_DEFINE |
WIN32DLL_DEFINE |
111 |
void* mcrypt_dlopen ( mcrypt_dlhandle* handle, const char* a_directory, const char *m_directory, const char *filename) { |
void* mcrypt_dlopen ( mcrypt_dlhandle* handle, const char* a_directory, const char *m_directory, const char *filename) { |
|
static int loaded_symbols; |
|
112 |
|
|
113 |
char paths[1526]; |
char paths[1526]; |
114 |
|
|
|
if (loaded_symbols==0) { |
|
|
loaded_symbols=1; |
|
|
LTDL_SET_PRELOADED_SYMBOLS(); |
|
|
} |
|
|
|
|
115 |
if (strlen(filename) > sizeof( handle->name)) |
if (strlen(filename) > sizeof( handle->name)) |
116 |
return MCRYPT_FAILED; |
return MCRYPT_FAILED; |
117 |
else |
else |
118 |
strcpy( handle->name, filename); |
strcpy( handle->name, filename); |
119 |
|
|
120 |
if (search_symlist_lib(filename)!=NULL) { |
if (search_symlist_lib(filename)!=NULL) { |
|
fprintf(stderr, "USING INTERNAL HANDLER\n"); |
|
121 |
handle->handle = MCRYPT_INTERNAL_HANDLER; |
handle->handle = MCRYPT_INTERNAL_HANDLER; |
122 |
return handle->handle; |
return handle->handle; |
123 |
} |
} |