From 3d83131be87fa079312e4821bc45cd72193ba556 Mon Sep 17 00:00:00 2001 From: Asanka Herath Date: Wed, 7 Jul 2010 20:34:58 -0400 Subject: [PATCH] Export and calling convention annotation for lib/asn1 --- lib/asn1/asn1-common.h | 12 ++++++++++++ lib/asn1/gen.c | 37 +++++++++++++++++++++++++++++-------- lib/asn1/gen_copy.c | 2 +- lib/asn1/gen_decode.c | 2 +- lib/asn1/gen_encode.c | 2 +- lib/asn1/gen_free.c | 2 +- lib/asn1/gen_length.c | 2 +- lib/asn1/gen_seq.c | 8 ++++---- 8 files changed, 50 insertions(+), 17 deletions(-) diff --git a/lib/asn1/asn1-common.h b/lib/asn1/asn1-common.h index 34bb73b10..9c8793e0c 100644 --- a/lib/asn1/asn1-common.h +++ b/lib/asn1/asn1-common.h @@ -64,4 +64,16 @@ typedef struct heim_octet_string heim_any_set; } \ } while (0) +#ifdef _WIN32 +#ifndef ASN1_LIB +#define ASN1EXP __declspec(dllimport) +#else +#define ASN1EXP +#endif +#define ASN1CALL __stdcall +#else +#define ASN1EXP +#define ASN1CALL +#endif + #endif diff --git a/lib/asn1/gen.c b/lib/asn1/gen.c index 386ee1c0a..ac3653ebc 100644 --- a/lib/asn1/gen.c +++ b/lib/asn1/gen.c @@ -228,6 +228,18 @@ init_generate (const char *filename, const char *base) " } \\\n" " } while (0)\n\n", headerfile); + fputs("#ifdef _WIN32\n" + "#ifndef ASN1_LIB\n" + "#define ASN1EXP __declspec(dllimport)\n" + "#else\n" + "#define ASN1EXP\n" + "#endif\n" + "#define ASN1CALL __stdcall\n" + "#else\n" + "#define ASN1EXP\n" + "#define ASN1CALL\n" + "#endif\n", + headerfile); fprintf (headerfile, "struct units;\n\n"); fprintf (headerfile, "#endif\n\n"); if (asprintf(&fn, "%s_files", base) < 0 || fn == NULL) @@ -340,6 +352,7 @@ generate_header_of_codefile(const char *name) fprintf (codefile, "/* Generated from %s */\n" "/* Do not edit */\n\n" + "#define ASN1_LIB\n\n" "#include \n" "#include \n" "#include \n" @@ -975,6 +988,7 @@ void generate_type (const Symbol *s) { FILE *h; + const char * exp; if (!one_code_file) generate_header_of_codefile(s->gen_name); @@ -996,30 +1010,37 @@ generate_type (const Symbol *s) /* generate prototypes */ - if (is_export(s->name)) + if (is_export(s->name)) { h = headerfile; - else + exp = "ASN1EXP "; + } else { h = privheaderfile; + exp = ""; + } fprintf (h, - "int " + "%sint ASN1CALL " "decode_%s(const unsigned char *, size_t, %s *, size_t *);\n", + exp, s->gen_name, s->gen_name); fprintf (h, - "int " + "%sint ASN1CALL " "encode_%s(unsigned char *, size_t, const %s *, size_t *);\n", + exp, s->gen_name, s->gen_name); fprintf (h, - "size_t length_%s(const %s *);\n", + "%ssize_t ASN1CALL length_%s(const %s *);\n", + exp, s->gen_name, s->gen_name); fprintf (h, - "int copy_%s (const %s *, %s *);\n", + "%sint ASN1CALL copy_%s (const %s *, %s *);\n", + exp, s->gen_name, s->gen_name, s->gen_name); fprintf (h, - "void free_%s (%s *);\n", + "%svoid ASN1CALL free_%s (%s *);\n", + exp, s->gen_name, s->gen_name); - fprintf(h, "\n\n"); if (!one_code_file) { diff --git a/lib/asn1/gen_copy.c b/lib/asn1/gen_copy.c index ee68e1942..36f68ee5d 100644 --- a/lib/asn1/gen_copy.c +++ b/lib/asn1/gen_copy.c @@ -231,7 +231,7 @@ generate_type_copy (const Symbol *s) used_fail = 0; - fprintf (codefile, "int\n" + fprintf (codefile, "int ASN1CALL\n" "copy_%s(const %s *from, %s *to)\n" "{\n" "memset(to, 0, sizeof(*to));\n", diff --git a/lib/asn1/gen_decode.c b/lib/asn1/gen_decode.c index de680173a..ad76c0725 100644 --- a/lib/asn1/gen_decode.c +++ b/lib/asn1/gen_decode.c @@ -661,7 +661,7 @@ generate_type_decode (const Symbol *s) { int preserve = preserve_type(s->name) ? TRUE : FALSE; - fprintf (codefile, "int\n" + fprintf (codefile, "int ASN1CALL\n" "decode_%s(const unsigned char *p," " size_t len, %s *data, size_t *size)\n" "{\n", diff --git a/lib/asn1/gen_encode.c b/lib/asn1/gen_encode.c index 6bceb734e..43f29c1fe 100644 --- a/lib/asn1/gen_encode.c +++ b/lib/asn1/gen_encode.c @@ -502,7 +502,7 @@ encode_type (const char *name, const Type *t, const char *tmpstr) void generate_type_encode (const Symbol *s) { - fprintf (codefile, "int\n" + fprintf (codefile, "int ASN1CALL\n" "encode_%s(unsigned char *p, size_t len," " const %s *data, size_t *size)\n" "{\n", diff --git a/lib/asn1/gen_free.c b/lib/asn1/gen_free.c index 948273b22..7c88751c3 100644 --- a/lib/asn1/gen_free.c +++ b/lib/asn1/gen_free.c @@ -180,7 +180,7 @@ generate_type_free (const Symbol *s) { int preserve = preserve_type(s->name) ? TRUE : FALSE; - fprintf (codefile, "void\n" + fprintf (codefile, "void ASN1CALL\n" "free_%s(%s *data)\n" "{\n", s->gen_name, s->gen_name); diff --git a/lib/asn1/gen_length.c b/lib/asn1/gen_length.c index e8b5c4235..20b5adfe5 100644 --- a/lib/asn1/gen_length.c +++ b/lib/asn1/gen_length.c @@ -267,7 +267,7 @@ void generate_type_length (const Symbol *s) { fprintf (codefile, - "size_t\n" + "size_t ASN1CALL\n" "length_%s(const %s *data)\n" "{\n" "size_t ret = 0;\n", diff --git a/lib/asn1/gen_seq.c b/lib/asn1/gen_seq.c index 7df82f00c..ac7b9ed0b 100644 --- a/lib/asn1/gen_seq.c +++ b/lib/asn1/gen_seq.c @@ -67,12 +67,12 @@ generate_type_seq (const Symbol *s) subname = type->subtype->symbol->gen_name; fprintf (headerfile, - "int add_%s (%s *, const %s *);\n" - "int remove_%s (%s *, unsigned int);\n", + "ASN1EXP int ASN1CALL add_%s (%s *, const %s *);\n" + "ASN1EXP int ASN1CALL remove_%s (%s *, unsigned int);\n", s->gen_name, s->gen_name, subname, s->gen_name, s->gen_name); - fprintf (codefile, "int\n" + fprintf (codefile, "int ASN1CALL\n" "add_%s(%s *data, const %s *element)\n" "{\n", s->gen_name, s->gen_name, subname); @@ -93,7 +93,7 @@ generate_type_seq (const Symbol *s) fprintf (codefile, "}\n\n"); - fprintf (codefile, "int\n" + fprintf (codefile, "int ASN1CALL\n" "remove_%s(%s *data, unsigned int element)\n" "{\n", s->gen_name, s->gen_name); -- 2.11.4.GIT