OLD | NEW |
1 /* dso_lib.c -*- mode:C; c-file-style: "eay" -*- */ | 1 /* dso_lib.c -*- mode:C; c-file-style: "eay" -*- */ |
2 /* Written by Geoff Thorpe (geoff@geoffthorpe.net) for the OpenSSL | 2 /* Written by Geoff Thorpe (geoff@geoffthorpe.net) for the OpenSSL |
3 * project 2000. | 3 * project 2000. |
4 */ | 4 */ |
5 /* ==================================================================== | 5 /* ==================================================================== |
6 * Copyright (c) 2000 The OpenSSL Project. All rights reserved. | 6 * Copyright (c) 2000 The OpenSSL Project. All rights reserved. |
7 * | 7 * |
8 * Redistribution and use in source and binary forms, with or without | 8 * Redistribution and use in source and binary forms, with or without |
9 * modification, are permitted provided that the following conditions | 9 * modification, are permitted provided that the following conditions |
10 * are met: | 10 * are met: |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
100 * to stealing the "best available" method. Will fallback | 100 * to stealing the "best available" method. Will fallback |
101 * to DSO_METH_null() in the worst case. */ | 101 * to DSO_METH_null() in the worst case. */ |
102 default_DSO_meth = DSO_METHOD_openssl(); | 102 default_DSO_meth = DSO_METHOD_openssl(); |
103 ret = (DSO *)OPENSSL_malloc(sizeof(DSO)); | 103 ret = (DSO *)OPENSSL_malloc(sizeof(DSO)); |
104 if(ret == NULL) | 104 if(ret == NULL) |
105 { | 105 { |
106 DSOerr(DSO_F_DSO_NEW_METHOD,ERR_R_MALLOC_FAILURE); | 106 DSOerr(DSO_F_DSO_NEW_METHOD,ERR_R_MALLOC_FAILURE); |
107 return(NULL); | 107 return(NULL); |
108 } | 108 } |
109 memset(ret, 0, sizeof(DSO)); | 109 memset(ret, 0, sizeof(DSO)); |
110 » ret->meth_data = sk_new_null(); | 110 » ret->meth_data = sk_void_new_null(); |
111 if(ret->meth_data == NULL) | 111 if(ret->meth_data == NULL) |
112 { | 112 { |
113 /* sk_new doesn't generate any errors so we do */ | 113 /* sk_new doesn't generate any errors so we do */ |
114 DSOerr(DSO_F_DSO_NEW_METHOD,ERR_R_MALLOC_FAILURE); | 114 DSOerr(DSO_F_DSO_NEW_METHOD,ERR_R_MALLOC_FAILURE); |
115 OPENSSL_free(ret); | 115 OPENSSL_free(ret); |
116 return(NULL); | 116 return(NULL); |
117 } | 117 } |
118 if(meth == NULL) | 118 if(meth == NULL) |
119 ret->meth = default_DSO_meth; | 119 ret->meth = default_DSO_meth; |
120 else | 120 else |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
156 DSOerr(DSO_F_DSO_FREE,DSO_R_UNLOAD_FAILED); | 156 DSOerr(DSO_F_DSO_FREE,DSO_R_UNLOAD_FAILED); |
157 return(0); | 157 return(0); |
158 } | 158 } |
159 | 159 |
160 if((dso->meth->finish != NULL) && !dso->meth->finish(dso)) | 160 if((dso->meth->finish != NULL) && !dso->meth->finish(dso)) |
161 { | 161 { |
162 DSOerr(DSO_F_DSO_FREE,DSO_R_FINISH_FAILED); | 162 DSOerr(DSO_F_DSO_FREE,DSO_R_FINISH_FAILED); |
163 return(0); | 163 return(0); |
164 } | 164 } |
165 | 165 |
166 » sk_free(dso->meth_data); | 166 » sk_void_free(dso->meth_data); |
167 if(dso->filename != NULL) | 167 if(dso->filename != NULL) |
168 OPENSSL_free(dso->filename); | 168 OPENSSL_free(dso->filename); |
169 if(dso->loaded_filename != NULL) | 169 if(dso->loaded_filename != NULL) |
170 OPENSSL_free(dso->loaded_filename); | 170 OPENSSL_free(dso->loaded_filename); |
171 | 171 |
172 OPENSSL_free(dso); | 172 OPENSSL_free(dso); |
173 return(1); | 173 return(1); |
174 } | 174 } |
175 | 175 |
176 int DSO_flags(DSO *dso) | 176 int DSO_flags(DSO *dso) |
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
392 | 392 |
393 char *DSO_merge(DSO *dso, const char *filespec1, const char *filespec2) | 393 char *DSO_merge(DSO *dso, const char *filespec1, const char *filespec2) |
394 { | 394 { |
395 char *result = NULL; | 395 char *result = NULL; |
396 | 396 |
397 if(dso == NULL || filespec1 == NULL) | 397 if(dso == NULL || filespec1 == NULL) |
398 { | 398 { |
399 DSOerr(DSO_F_DSO_MERGE,ERR_R_PASSED_NULL_PARAMETER); | 399 DSOerr(DSO_F_DSO_MERGE,ERR_R_PASSED_NULL_PARAMETER); |
400 return(NULL); | 400 return(NULL); |
401 } | 401 } |
402 if(filespec1 == NULL) | |
403 filespec1 = dso->filename; | |
404 if(filespec1 == NULL) | |
405 { | |
406 DSOerr(DSO_F_DSO_MERGE,DSO_R_NO_FILE_SPECIFICATION); | |
407 return(NULL); | |
408 } | |
409 if((dso->flags & DSO_FLAG_NO_NAME_TRANSLATION) == 0) | 402 if((dso->flags & DSO_FLAG_NO_NAME_TRANSLATION) == 0) |
410 { | 403 { |
411 if(dso->merger != NULL) | 404 if(dso->merger != NULL) |
412 result = dso->merger(dso, filespec1, filespec2); | 405 result = dso->merger(dso, filespec1, filespec2); |
413 else if(dso->meth->dso_merger != NULL) | 406 else if(dso->meth->dso_merger != NULL) |
414 result = dso->meth->dso_merger(dso, | 407 result = dso->meth->dso_merger(dso, |
415 filespec1, filespec2); | 408 filespec1, filespec2); |
416 } | 409 } |
417 return(result); | 410 return(result); |
418 } | 411 } |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
457 const char *DSO_get_loaded_filename(DSO *dso) | 450 const char *DSO_get_loaded_filename(DSO *dso) |
458 { | 451 { |
459 if(dso == NULL) | 452 if(dso == NULL) |
460 { | 453 { |
461 DSOerr(DSO_F_DSO_GET_LOADED_FILENAME, | 454 DSOerr(DSO_F_DSO_GET_LOADED_FILENAME, |
462 ERR_R_PASSED_NULL_PARAMETER); | 455 ERR_R_PASSED_NULL_PARAMETER); |
463 return(NULL); | 456 return(NULL); |
464 } | 457 } |
465 return(dso->loaded_filename); | 458 return(dso->loaded_filename); |
466 } | 459 } |
| 460 |
| 461 int DSO_pathbyaddr(void *addr,char *path,int sz) |
| 462 { |
| 463 DSO_METHOD *meth = default_DSO_meth; |
| 464 if (meth == NULL) meth = DSO_METHOD_openssl(); |
| 465 if (meth->pathbyaddr == NULL) |
| 466 { |
| 467 DSOerr(DSO_F_DSO_PATHBYADDR,DSO_R_UNSUPPORTED); |
| 468 return -1; |
| 469 } |
| 470 return (*meth->pathbyaddr)(addr,path,sz); |
| 471 } |
| 472 |
| 473 void *DSO_global_lookup(const char *name) |
| 474 { |
| 475 DSO_METHOD *meth = default_DSO_meth; |
| 476 if (meth == NULL) meth = DSO_METHOD_openssl(); |
| 477 if (meth->globallookup == NULL) |
| 478 { |
| 479 DSOerr(DSO_F_DSO_GLOBAL_LOOKUP,DSO_R_UNSUPPORTED); |
| 480 return NULL; |
| 481 } |
| 482 return (*meth->globallookup)(name); |
| 483 } |
OLD | NEW |