and added files
[bcm963xx.git] / userapps / opensource / openssl / crypto / engine / engine.h
index 9c3ab18..900f75c 100755 (executable)
@@ -513,7 +513,7 @@ ENGINE *ENGINE_get_digest_engine(int nid);
  * structure will have had its reference count up'd so the caller
  * should still free their own reference 'e'. */
 int ENGINE_set_default_RSA(ENGINE *e);
-int ENGINE_set_default_string(ENGINE *e, const char *list);
+int ENGINE_set_default_string(ENGINE *e, const char *def_list);
 /* Same for the other "methods" */
 int ENGINE_set_default_DSA(ENGINE *e);
 int ENGINE_set_default_DH(ENGINE *e);
@@ -616,17 +616,20 @@ typedef int (*dynamic_bind_engine)(ENGINE *e, const char *id,
                                const dynamic_fns *fns);
 #define IMPLEMENT_DYNAMIC_BIND_FN(fn) \
        int bind_engine(ENGINE *e, const char *id, const dynamic_fns *fns) { \
-               if(!CRYPTO_set_mem_functions(fns->mem_fns.malloc_cb, \
-                       fns->mem_fns.realloc_cb, fns->mem_fns.free_cb)) \
-                       return 0; \
-               CRYPTO_set_locking_callback(fns->lock_fns.lock_locking_cb); \
-               CRYPTO_set_add_lock_callback(fns->lock_fns.lock_add_lock_cb); \
-               CRYPTO_set_dynlock_create_callback(fns->lock_fns.dynlock_create_cb); \
-               CRYPTO_set_dynlock_lock_callback(fns->lock_fns.dynlock_lock_cb); \
-               CRYPTO_set_dynlock_destroy_callback(fns->lock_fns.dynlock_destroy_cb); \
-               if(!CRYPTO_set_ex_data_implementation(fns->ex_data_fns)) \
-                       return 0; \
-               if(!ERR_set_implementation(fns->err_fns)) return 0; \
+               if (ERR_get_implementation() != fns->err_fns) \
+                       { \
+                       if(!CRYPTO_set_mem_functions(fns->mem_fns.malloc_cb, \
+                               fns->mem_fns.realloc_cb, fns->mem_fns.free_cb)) \
+                               return 0; \
+                       CRYPTO_set_locking_callback(fns->lock_fns.lock_locking_cb); \
+                       CRYPTO_set_add_lock_callback(fns->lock_fns.lock_add_lock_cb); \
+                       CRYPTO_set_dynlock_create_callback(fns->lock_fns.dynlock_create_cb); \
+                       CRYPTO_set_dynlock_lock_callback(fns->lock_fns.dynlock_lock_cb); \
+                       CRYPTO_set_dynlock_destroy_callback(fns->lock_fns.dynlock_destroy_cb); \
+                       if(!CRYPTO_set_ex_data_implementation(fns->ex_data_fns)) \
+                               return 0; \
+                       if(!ERR_set_implementation(fns->err_fns)) return 0; \
+                       } \
                if(!fn(e,id)) return 0; \
                return 1; }