提交 9e5df8e4 编写于 作者: D Dr. Stephen Henson

Support custom primitive type printing routines and add one to LONG type.

上级 96d13fe6
...@@ -654,6 +654,7 @@ typedef int ASN1_ex_print_func(BIO *out, ASN1_VALUE **pval, ...@@ -654,6 +654,7 @@ typedef int ASN1_ex_print_func(BIO *out, ASN1_VALUE **pval,
typedef int ASN1_primitive_i2c(ASN1_VALUE **pval, unsigned char *cont, int *putype, const ASN1_ITEM *it); typedef int ASN1_primitive_i2c(ASN1_VALUE **pval, unsigned char *cont, int *putype, const ASN1_ITEM *it);
typedef int ASN1_primitive_c2i(ASN1_VALUE **pval, const unsigned char *cont, int len, int utype, char *free_cont, const ASN1_ITEM *it); typedef int ASN1_primitive_c2i(ASN1_VALUE **pval, const unsigned char *cont, int len, int utype, char *free_cont, const ASN1_ITEM *it);
typedef int ASN1_primitive_print(BIO *out, ASN1_VALUE **pval, const ASN1_ITEM *it, int indent, const ASN1_PCTX *pctx);
typedef struct ASN1_COMPAT_FUNCS_st { typedef struct ASN1_COMPAT_FUNCS_st {
ASN1_new_func *asn1_new; ASN1_new_func *asn1_new;
...@@ -680,6 +681,7 @@ typedef struct ASN1_PRIMITIVE_FUNCS_st { ...@@ -680,6 +681,7 @@ typedef struct ASN1_PRIMITIVE_FUNCS_st {
ASN1_ex_free_func *prim_clear; ASN1_ex_free_func *prim_clear;
ASN1_primitive_c2i *prim_c2i; ASN1_primitive_c2i *prim_c2i;
ASN1_primitive_i2c *prim_i2c; ASN1_primitive_i2c *prim_i2c;
ASN1_primitive_print *prim_print;
} ASN1_PRIMITIVE_FUNCS; } ASN1_PRIMITIVE_FUNCS;
/* This is the ASN1_AUX structure: it handles various /* This is the ASN1_AUX structure: it handles various
......
...@@ -522,8 +522,12 @@ static int asn1_primitive_print(BIO *out, ASN1_VALUE **fld, ...@@ -522,8 +522,12 @@ static int asn1_primitive_print(BIO *out, ASN1_VALUE **fld,
ASN1_STRING *str; ASN1_STRING *str;
int ret = 1, needlf = 1; int ret = 1, needlf = 1;
const char *pname; const char *pname;
const ASN1_PRIMITIVE_FUNCS *pf;
pf = it->funcs;
if (!asn1_print_fsname(out, indent, fname, sname, pctx)) if (!asn1_print_fsname(out, indent, fname, sname, pctx))
return 0; return 0;
if (pf && pf->prim_print)
return pf->prim_print(out, fld, it, indent, pctx);
str = (ASN1_STRING *)*fld; str = (ASN1_STRING *)*fld;
if (it->itype == ASN1_ITYPE_MSTRING) if (it->itype == ASN1_ITYPE_MSTRING)
utype = str->type & ~V_ASN1_NEG; utype = str->type & ~V_ASN1_NEG;
......
...@@ -71,6 +71,7 @@ static void long_free(ASN1_VALUE **pval, const ASN1_ITEM *it); ...@@ -71,6 +71,7 @@ static void long_free(ASN1_VALUE **pval, const ASN1_ITEM *it);
static int long_i2c(ASN1_VALUE **pval, unsigned char *cont, int *putype, const ASN1_ITEM *it); static int long_i2c(ASN1_VALUE **pval, unsigned char *cont, int *putype, const ASN1_ITEM *it);
static int long_c2i(ASN1_VALUE **pval, const unsigned char *cont, int len, int utype, char *free_cont, const ASN1_ITEM *it); static int long_c2i(ASN1_VALUE **pval, const unsigned char *cont, int len, int utype, char *free_cont, const ASN1_ITEM *it);
static int long_print(BIO *out, ASN1_VALUE **pval, const ASN1_ITEM *it, int indent, const ASN1_PCTX *pctx);
static ASN1_PRIMITIVE_FUNCS long_pf = { static ASN1_PRIMITIVE_FUNCS long_pf = {
NULL, 0, NULL, 0,
...@@ -78,7 +79,8 @@ static ASN1_PRIMITIVE_FUNCS long_pf = { ...@@ -78,7 +79,8 @@ static ASN1_PRIMITIVE_FUNCS long_pf = {
long_free, long_free,
long_free, /* Clear should set to initial value */ long_free, /* Clear should set to initial value */
long_c2i, long_c2i,
long_i2c long_i2c,
long_print
}; };
ASN1_ITEM_start(LONG) ASN1_ITEM_start(LONG)
...@@ -169,3 +171,9 @@ static int long_c2i(ASN1_VALUE **pval, const unsigned char *cont, int len, ...@@ -169,3 +171,9 @@ static int long_c2i(ASN1_VALUE **pval, const unsigned char *cont, int len,
memcpy(cp, &ltmp, sizeof(long)); memcpy(cp, &ltmp, sizeof(long));
return 1; return 1;
} }
static int long_print(BIO *out, ASN1_VALUE **pval, const ASN1_ITEM *it,
int indent, const ASN1_PCTX *pctx)
{
return BIO_printf(out, "%ld\n", *(long *)pval);
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册