diff options
author | Dr. Stephen Henson <steve@openssl.org> | 2005-09-03 00:40:40 +0000 |
---|---|---|
committer | Dr. Stephen Henson <steve@openssl.org> | 2005-09-03 00:40:40 +0000 |
commit | c11c64fbe0c0d3d8eb3bdbda368805dc58d55b90 (patch) | |
tree | c7666fdff760b7b942e51f0e43b87a5047e209dc /crypto/asn1/tasn_prn.c | |
parent | f022c177db230e49a4599795a6be2758f350f108 (diff) |
Update to ASN1 printing code.
Diffstat (limited to 'crypto/asn1/tasn_prn.c')
-rw-r--r-- | crypto/asn1/tasn_prn.c | 34 |
1 files changed, 31 insertions, 3 deletions
diff --git a/crypto/asn1/tasn_prn.c b/crypto/asn1/tasn_prn.c index 1c0379564a..3cc98ea7d2 100644 --- a/crypto/asn1/tasn_prn.c +++ b/crypto/asn1/tasn_prn.c @@ -58,6 +58,7 @@ #include <stddef.h> +#include "cryptlib.h" #include <openssl/asn1.h> #include <openssl/asn1t.h> #include <openssl/objects.h> @@ -66,8 +67,6 @@ #include <openssl/x509v3.h> #include "asn1_locl.h" -#include <string.h> - /* Print routines. */ @@ -196,12 +195,25 @@ static int asn1_item_print_ctx(BIO *out, ASN1_VALUE **fld, int indent, const ASN1_TEMPLATE *tt; const ASN1_EXTERN_FUNCS *ef; ASN1_VALUE **tmpfld; + const ASN1_AUX *aux = it->funcs; + ASN1_aux_cb *asn1_cb; + ASN1_PRINT_ARG parg; int i; + if (aux && aux->asn1_cb) + { + parg.out = out; + parg.indent = indent; + parg.pctx = pctx; + asn1_cb = aux->asn1_cb; + } + else asn1_cb = 0; + if(*fld == NULL) { if (pctx->flags & ASN1_PCTX_FLAGS_SHOW_ABSENT) { - if (!nohdr && !asn1_print_fsname(out, indent, fname, sname, pctx)) + if (!nohdr && !asn1_print_fsname(out, indent, + fname, sname, pctx)) return 0; if (BIO_puts(out, "<ABSENT>\n") <= 0) return 0; @@ -283,6 +295,15 @@ static int asn1_item_print_ctx(BIO *out, ASN1_VALUE **fld, int indent, } } + if (asn1_cb) + { + i = asn1_cb(ASN1_OP_PRINT_PRE, fld, it, &parg); + if (i == 0) + return 0; + if (i == 2) + return 1; + } + /* Print each field entry */ for(i = 0, tt = it->templates; i < it->tcount; i++, tt++) { @@ -298,6 +319,13 @@ static int asn1_item_print_ctx(BIO *out, ASN1_VALUE **fld, int indent, if (BIO_printf(out, "%*s}\n", indent, "") < 0) return 0; } + + if (asn1_cb) + { + i = asn1_cb(ASN1_OP_PRINT_POST, fld, it, &parg); + if (i == 0) + return 0; + } break; default: |