int ASN1_template_new (ASN1_VALUE ** pval, const ASN1_TEMPLATE * tt) { const ASN1_ITEM *it = ASN1_ITEM_ptr (tt->item); int ret; if (tt->flags & ASN1_TFLG_OPTIONAL) { asn1_template_clear (pval, tt); return 1; } /* If ANY DEFINED BY nothing to do */ if (tt->flags & ASN1_TFLG_ADB_MASK) { *pval = NULL; return 1; } #ifdef CRYPTO_MDEBUG if (tt->field_name) CRYPTO_push_info (tt->field_name); #endif /* If SET OF or SEQUENCE OF, its a STACK */ if (tt->flags & ASN1_TFLG_SK_MASK) { STACK_OF (ASN1_VALUE) * skval; skval = sk_ASN1_VALUE_new_null (); if (!skval) { ASN1err (ASN1_F_ASN1_TEMPLATE_NEW, ERR_R_MALLOC_FAILURE); ret = 0; goto done; } *pval = (ASN1_VALUE *) skval; ret = 1; goto done; } /* Otherwise pass it back to the item routine */ ret = asn1_item_ex_combine_new (pval, it, tt->flags & ASN1_TFLG_COMBINE); done: #ifdef CRYPTO_MDEBUG if (it->sname) CRYPTO_pop_info (); #endif return ret; }
int ASN1_item_ex_new(ASN1_VALUE **pval, const ASN1_ITEM *it) { return asn1_item_ex_combine_new(pval, it, 0); }