diff options
author | Lev Walkin <vlm@lionet.info> | 2006-03-14 16:31:37 +0000 |
---|---|---|
committer | Lev Walkin <vlm@lionet.info> | 2006-03-14 16:31:37 +0000 |
commit | 9d542d223252ea642347330dcc1acd337e49c0e2 (patch) | |
tree | 516c3c202cb1a763f5e7c6dd8d34cfef08930a8c /libasn1print | |
parent | 5a405b25c99e7ceb470bcd349a32584f92c2ddfa (diff) |
new WITH SYNTAX clause parsing
Diffstat (limited to 'libasn1print')
-rw-r--r-- | libasn1print/asn1print.c | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/libasn1print/asn1print.c b/libasn1print/asn1print.c index 992a344b..423a5fa4 100644 --- a/libasn1print/asn1print.c +++ b/libasn1print/asn1print.c @@ -412,15 +412,21 @@ static int asn1print_with_syntax(asn1p_wsyntx_t *wx, enum asn1print_flags flags) { if(wx) { asn1p_wsyntx_chunk_t *wc; - printf(" WITH SYNTAX {"); TQ_FOR(wc, &(wx->chunks), next) { - if(wc->ref) { - asn1print_ref(wc->ref, flags); - } else { - fwrite(wc->buf, 1, wc->len, stdout); - } + switch(wc->type) { + case WC_LITERAL: + printf("%s", wc->content.token); + break; + case WC_REFERENCE: + asn1print_ref(wc->content.ref, flags); + break; + case WC_OPTIONALGROUP: + printf("["); + asn1print_with_syntax(wc->content.syntax,flags); + printf("]"); + break; + } } - printf("}\n"); } return 0; @@ -651,8 +657,11 @@ asn1print_expr(asn1p_t *asn, asn1p_module_t *mod, asn1p_expr_t *tc, enum asn1pri } } - if(tc->with_syntax) + if(tc->with_syntax) { + printf(" WITH SYNTAX {"); asn1print_with_syntax(tc->with_syntax, flags); + printf("}\n"); + } if(!SEQ_OF && tc->constraints) { printf(" "); |