More useful ASN1 macros for static allocation functions.
[openssl.git] / crypto / asn1 / asn1t.h
index 65bacecdb9f5d408f0692722b2ccc08ae10cc0c9..c7e394bfe34101175918f6e0b03b609136cc6190 100644 (file)
@@ -99,7 +99,7 @@ extern "C" {
 #define ASN1_ITEM_start(itname) \
        const ASN1_ITEM * itname##_it(void) \
        { \
-               static const ASN1_ITEM local_it = { \
+               static const ASN1_ITEM local_it = { 
 
 #define ASN1_ITEM_end(itname) \
                }; \
@@ -368,6 +368,10 @@ extern "C" {
 #define ASN1_EXP_SEQUENCE_OF_OPT(stname, field, type, tag) \
                        ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_SEQUENCE_OF|ASN1_TFLG_OPTIONAL)
 
+/* EXPLICIT using indefinite length constructed form */
+#define ASN1_NDEF_EXP(stname, field, type, tag) \
+                       ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_NDEF)
+
 /* EXPLICIT OPTIONAL using indefinite length constructed form */
 #define ASN1_NDEF_EXP_OPT(stname, field, type, tag) \
                        ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL|ASN1_TFLG_NDEF)
@@ -790,19 +794,25 @@ typedef struct ASN1_PRINT_ARG_st {
 #define IMPLEMENT_ASN1_FUNCTIONS_ENCODE_name(stname, itname) \
                        IMPLEMENT_ASN1_FUNCTIONS_ENCODE_fname(stname, itname, itname)
 
+#define IMPLEMENT_STATIC_ASN1_ALLOC_FUNCTIONS(stname) \
+               IMPLEMENT_ASN1_ALLOC_FUNCTIONS_pfname(static, stname, stname, stname)
+
 #define IMPLEMENT_ASN1_ALLOC_FUNCTIONS(stname) \
                IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, stname, stname)
 
-#define IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, itname, fname) \
-       stname *fname##_new(void) \
+#define IMPLEMENT_ASN1_ALLOC_FUNCTIONS_pfname(pre, stname, itname, fname) \
+       pre stname *fname##_new(void) \
        { \
                return (stname *)ASN1_item_new(ASN1_ITEM_rptr(itname)); \
        } \
-       void fname##_free(stname *a) \
+       pre void fname##_free(stname *a) \
        { \
                ASN1_item_free((ASN1_VALUE *)a, ASN1_ITEM_rptr(itname)); \
        }
 
+#define IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, itname, fname) \
+               IMPLEMENT_ASN1_ALLOC_FUNCTIONS_pfname(/**/, stname, itname, fname)
+
 #define IMPLEMENT_ASN1_FUNCTIONS_fname(stname, itname, fname) \
        IMPLEMENT_ASN1_ENCODE_FUNCTIONS_fname(stname, itname, fname) \
        IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, itname, fname)
@@ -846,7 +856,7 @@ typedef struct ASN1_PRINT_ARG_st {
        IMPLEMENT_ASN1_PRINT_FUNCTION_fname(stname, stname, stname)
 
 #define IMPLEMENT_ASN1_PRINT_FUNCTION_fname(stname, itname, fname) \
-       int fname##_print(BIO *out, stname *x, int indent, \
+       int fname##_print_ctx(BIO *out, stname *x, int indent, \
                                                const ASN1_PCTX *pctx) \
        { \
                return ASN1_item_print(out, (ASN1_VALUE *)x, indent, \