diff options
author | Lev Walkin <vlm@lionet.info> | 2005-03-28 15:01:27 +0000 |
---|---|---|
committer | Lev Walkin <vlm@lionet.info> | 2005-03-28 15:01:27 +0000 |
commit | e596bf0543f176f52829b1ea158456f091ae36c9 (patch) | |
tree | 147912944d9a6e39f805d43eb1e539d6f9b6921a /libasn1print | |
parent | 8638f0d6f17717b8f4d9e0ba55b2384817f51e42 (diff) |
WITH COMPONENT[S] pretty-printing
Diffstat (limited to 'libasn1print')
-rw-r--r-- | libasn1print/asn1print.c | 32 |
1 files changed, 29 insertions, 3 deletions
diff --git a/libasn1print/asn1print.c b/libasn1print/asn1print.c index addfd9cc..fc0e7b35 100644 --- a/libasn1print/asn1print.c +++ b/libasn1print/asn1print.c @@ -333,10 +333,36 @@ asn1print_constraint(asn1p_constraint_t *ct, enum asn1print_flags flags) { printf(")"); break; case ACT_CT_WCOMP: - printf("WITH COMPONENT ???"); + assert(ct->el_count != 0); + assert(ct->el_count == 1); + printf("WITH COMPONENT ("); + asn1print_constraint(ct->elements[0], flags); + printf(")"); break; - case ACT_CT_WCOMPS: - printf("WITH COMPONENTS { ??? }"); + case ACT_CT_WCOMPS: { + unsigned int i; + printf("WITH COMPONENTS { "); + for(i = 0; i < ct->el_count; i++) { + asn1p_constraint_t *cel = ct->elements[i]; + if(i) printf(", "); + fwrite(cel->value->value.string.buf, + 1, cel->value->value.string.size, + stdout); + if(cel->el_count) { + assert(cel->el_count == 1); + printf(" "); + asn1print_constraint(cel->elements[0], + flags); + } + switch(cel->presence) { + case ACPRES_DEFAULT: break; + case ACPRES_PRESENT: printf(" PRESENT"); break; + case ACPRES_ABSENT: printf(" ABSENT"); break; + case ACPRES_OPTIONAL: printf(" OPTIONAL");break; + } + } + printf(" }"); + } break; case ACT_CT_CTDBY: printf("CONSTRAINED BY "); |