aboutsummaryrefslogtreecommitdiffstats
path: root/libasn1parser
diff options
context:
space:
mode:
authorvlm <vlm@59561ff5-6e30-0410-9f3c-9617f08c8826>2005-06-02 05:21:53 +0000
committervlm <vlm@59561ff5-6e30-0410-9f3c-9617f08c8826>2005-06-02 05:21:53 +0000
commit5b1030361c2100febd63bba5c0178543d37e19cc (patch)
tree220d7dc2123065e5c6f9af5bec49f16ec1d456fc /libasn1parser
parentfbd6d9e9d47c6d8d0a9c39078c839fe5f782b36e (diff)
Compiler support for tagged parametrized members.
git-svn-id: https://asn1c.svn.sourceforge.net/svnroot/asn1c/trunk@894 59561ff5-6e30-0410-9f3c-9617f08c8826
Diffstat (limited to 'libasn1parser')
-rw-r--r--libasn1parser/asn1p_expr.c38
-rw-r--r--libasn1parser/asn1p_expr.h3
2 files changed, 41 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;
+}
diff --git a/libasn1parser/asn1p_expr.h b/libasn1parser/asn1p_expr.h
index 34a9e7aa..18692c17 100644
--- a/libasn1parser/asn1p_expr.h
+++ b/libasn1parser/asn1p_expr.h
@@ -242,4 +242,7 @@ asn1p_expr_t *asn1p_expr_clone(asn1p_expr_t *, int skip_extensions);
void asn1p_expr_add(asn1p_expr_t *to, asn1p_expr_t *what);
void asn1p_expr_free(asn1p_expr_t *expr);
+#define TAG2STRING_BUFFER_SIZE 64 /* buf should be at least this big */
+char *asn1p_tag2string(struct asn1p_type_tag_s *tag, char *opt_buf);
+
#endif /* ASN1_PARSER_EXPR_H */