aboutsummaryrefslogtreecommitdiffstats
path: root/libasn1print
diff options
context:
space:
mode:
authorLev Walkin <vlm@lionet.info>2005-03-28 15:01:27 +0000
committerLev Walkin <vlm@lionet.info>2005-03-28 15:01:27 +0000
commite596bf0543f176f52829b1ea158456f091ae36c9 (patch)
tree147912944d9a6e39f805d43eb1e539d6f9b6921a /libasn1print
parent8638f0d6f17717b8f4d9e0ba55b2384817f51e42 (diff)
WITH COMPONENT[S] pretty-printing
Diffstat (limited to 'libasn1print')
-rw-r--r--libasn1print/asn1print.c32
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 ");