Beispiel #1
0
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;
}
Beispiel #2
0
int
ASN1_item_ex_new(ASN1_VALUE **pval, const ASN1_ITEM *it)
{
	return asn1_item_ex_combine_new(pval, it, 0);
}