Export and calling convention annotation for lib/asn1

This commit is contained in:
Asanka Herath
2010-07-07 20:34:58 -04:00
parent 5dcc605f6b
commit 3d83131be8
8 changed files with 50 additions and 17 deletions

View File

@@ -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

View File

@@ -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 <stdio.h>\n"
"#include <stdlib.h>\n"
"#include <time.h>\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) {

View File

@@ -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",

View File

@@ -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",

View File

@@ -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",

View File

@@ -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);

View File

@@ -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",

View File

@@ -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);