diff options
author | Lev Walkin <vlm@lionet.info> | 2005-06-02 05:21:53 +0000 |
---|---|---|
committer | Lev Walkin <vlm@lionet.info> | 2005-06-02 05:21:53 +0000 |
commit | 7116096839f8c5597086f43a47d67a52a34027e0 (patch) | |
tree | 220d7dc2123065e5c6f9af5bec49f16ec1d456fc /libasn1parser/asn1p_expr.c | |
parent | f3b29b1fa888a83260fe1b23f0a07bdbe0040c3e (diff) |
Compiler support for tagged parametrized members.
Diffstat (limited to 'libasn1parser/asn1p_expr.c')
-rw-r--r-- | libasn1parser/asn1p_expr.c | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/libasn1parser/asn1p_expr.c b/libasn1parser/asn1p_expr.c index c3c31f2c..5e2aa34e 100644 --- a/libasn1parser/asn1p_expr.c +++ b/libasn1parser/asn1p_expr.c @@ -142,3 +142,41 @@ asn1p_expr_free(asn1p_expr_t *expr) { } } + +char *asn1p_tag2string(struct asn1p_type_tag_s *tag, char *buf) { + static buf_stat[TAG2STRING_BUFFER_SIZE]; + char *start; + char *end; + + if(!buf) buf = buf_stat; + start = buf; + end = buf + TAG2STRING_BUFFER_SIZE; + + if(tag->tag_class == TC_NOCLASS) { + *buf = 0; + return buf; + } + + strcpy(buf, "["); + switch(tag->tag_class) { + case TC_NOCLASS: + assert(tag->tag_class != TC_NOCLASS); + break; + case TC_UNIVERSAL: strcat(buf, "UNIVERSAL "); break; + case TC_PRIVATE: strcat(buf, "PRIVATE "); break; + case TC_APPLICATION: strcat(buf, "APPLICATION "); break; + case TC_CONTEXT_SPECIFIC: + break; + } + buf += snprintf(buf + strlen(buf), end - buf, + "%" PRIdASN "]", tag->tag_value); + assert((buf - end) > sizeof(" IMPLICIT ")); + + switch(tag->tag_mode) { + case TM_DEFAULT: break; + case TM_IMPLICIT: strcat(buf, " IMPLICIT"); break; + case TM_EXPLICIT: strcat(buf, " EXPLICIT"); break; + } + + return start; +} |