memset(&(ctx->ex_data),0,sizeof(CRYPTO_EX_DATA));
if(!CRYPTO_new_ex_data(CRYPTO_EX_INDEX_X509_STORE_CTX, ctx, &(ctx->ex_data))) { OPENSSL_free(ctx); X509err(X509_F_X509_STORE_CTX_INIT,ERR_R_MALLOC_FAILURE); return 0; } return 1;
void X509_STORE_CTX_init(X509_STORE_CTX *ctx, X509_STORE *store, X509 *x509,	     STACK_OF(X509) *chain)	{	ctx->ctx=store;	ctx->current_method=0;	ctx->cert=x509;	ctx->untrusted=chain;	ctx->last_untrusted=0;	ctx->purpose=store->purpose;	ctx->trust=store->trust;	ctx->check_time=0;	ctx->flags=0;	ctx->other_ctx=NULL;	ctx->valid=0;	ctx->chain=NULL;	ctx->depth=9;	ctx->error=0;	ctx->error_depth=0;	ctx->current_cert=NULL;	ctx->current_issuer=NULL;	/* Inherit callbacks and flags from X509_STORE if not set	 * use defaults.	 */	ctx->flags = store->flags;	if (store->check_issued)		ctx->check_issued = store->check_issued;	else		ctx->check_issued = check_issued;	if (store->get_issuer)		ctx->get_issuer = store->get_issuer;	else		ctx->get_issuer = X509_STORE_CTX_get1_issuer;	if (store->verify_cb)		ctx->verify_cb = store->verify_cb;	else		ctx->verify_cb = null_callback;	if (store->verify)		ctx->verify = store->verify;	else		ctx->verify = internal_verify;	if (store->check_revocation)		ctx->check_revocation = store->check_revocation;	else		ctx->check_revocation = check_revocation;	if (store->get_crl)		ctx->get_crl = store->get_crl;	else		ctx->get_crl = get_crl;	if (store->check_crl)		ctx->check_crl = store->check_crl;	else		ctx->check_crl = check_crl;	if (store->cert_crl)		ctx->cert_crl = store->cert_crl;	else		ctx->cert_crl = cert_crl;	ctx->cleanup = store->cleanup;	memset(&(ctx->ex_data),0,sizeof(CRYPTO_EX_DATA));	}