aboutsummaryrefslogtreecommitdiffstats
path: root/libasn1print
diff options
context:
space:
mode:
authorLev Walkin <vlm@lionet.info>2006-03-14 16:31:37 +0000
committerLev Walkin <vlm@lionet.info>2006-03-14 16:31:37 +0000
commit9d542d223252ea642347330dcc1acd337e49c0e2 (patch)
tree516c3c202cb1a763f5e7c6dd8d34cfef08930a8c /libasn1print
parent5a405b25c99e7ceb470bcd349a32584f92c2ddfa (diff)
new WITH SYNTAX clause parsing
Diffstat (limited to 'libasn1print')
-rw-r--r--libasn1print/asn1print.c25
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(" ");