X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=wrappergen%2Fwrite_jna.c;h=09ef6aa85f2c6a250771bd7ebfe21b7defd41f2a;hb=ac1cd4a72f73f7906ab1b38bc85cd1758a2f3ab3;hp=e99761b981ba98f9853c5cfbdbc2a4c0c96f2834;hpb=2ef7b77e92bd93fa2e3d487b91a24f55d299cdd7;p=cparser diff --git a/wrappergen/write_jna.c b/wrappergen/write_jna.c index e99761b..09ef6aa 100644 --- a/wrappergen/write_jna.c +++ b/wrappergen/write_jna.c @@ -22,6 +22,7 @@ #include #include +#include "adt/strutil.h" #include "write_jna.h" #include "symbol_t.h" #include "ast_t.h" @@ -44,11 +45,9 @@ static pset_new_t avoid_symbols; static output_limit *output_limits; static const char *libname; -static void write_type(type_t *type); - static bool is_system_header(const char *fname) { - if (strncmp(fname, "/usr/include", 12) == 0) + if (strstart(fname, "/usr/include")) return true; if (fname == builtin_source_position.input_name) return true; @@ -57,17 +56,17 @@ static bool is_system_header(const char *fname) static const char *fix_builtin_names(const char *name) { - if (strcmp(name, "class") == 0) { + if (streq(name, "class")) { return "_class"; - } else if(strcmp(name, "this") == 0) { + } else if (streq(name, "this")) { return "_this"; - } else if(strcmp(name, "public") == 0) { + } else if (streq(name, "public")) { return "_public"; - } else if(strcmp(name, "protected") == 0) { + } else if (streq(name, "protected")) { return "_protected"; - } else if(strcmp(name, "private") == 0) { + } else if (streq(name, "private")) { return "_private"; - } else if(strcmp(name, "final") == 0) { + } else if (streq(name, "final")) { return "_final"; } /* TODO put all reserved names here */ @@ -225,12 +224,10 @@ static void write_type(type_t *type) write_enum_type(&type->enumt); return; case TYPE_ERROR: - case TYPE_INVALID: case TYPE_TYPEOF: case TYPE_TYPEDEF: panic("invalid type found"); case TYPE_ARRAY: - case TYPE_BITFIELD: case TYPE_REFERENCE: case TYPE_FUNCTION: case TYPE_COMPLEX: @@ -274,7 +271,7 @@ static void write_unary_expression(const unary_expression_t *expression) case EXPR_UNARY_NOT: fputc('!', out); break; - case EXPR_UNARY_CAST_IMPLICIT: + case EXPR_UNARY_CAST: write_expression(expression->value); return; default: @@ -324,10 +321,10 @@ static void write_expression(const expression_t *expression) fprintf(out, ".%s.val", entity->base.symbol->string); break; } - EXPR_UNARY_CASES + case EXPR_UNARY_CASES: write_unary_expression(&expression->unary); break; - EXPR_BINARY_CASES + case EXPR_BINARY_CASES: write_binary_expression(&expression->binary); break; default: @@ -538,11 +535,13 @@ void write_jna_decls(FILE *output, const translation_unit_t *unit) const char *input_name = entity->base.source_position.input_name; if (is_system_header(input_name)) continue; + if (entity->function.elf_visibility != ELF_VISIBILITY_DEFAULT) + continue; if (output_limits != NULL) { bool in_limits = false; for (output_limit *limit = output_limits; limit != NULL; limit = limit->next) { - if (strcmp(limit->filename, input_name) == 0) { + if (streq(limit->filename, input_name)) { in_limits = true; break; }