X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=tools%2Fprotoparse.h;h=d58bf83a8ab229bec20f8f3bcc8123351563274c;hb=037f497165415efc1a74e13fa5adead3138f3d58;hp=ab16632ab57896d684484c2b86696d4a499ca184;hpb=7e50b291d8680ae4dc5c442e45276bf98517e9a4;p=ia32rtools.git diff --git a/tools/protoparse.h b/tools/protoparse.h index ab16632..d58bf83 100644 --- a/tools/protoparse.h +++ b/tools/protoparse.h @@ -28,10 +28,11 @@ struct parsed_proto { unsigned int is_func:1; unsigned int is_stdcall:1; unsigned int is_fastcall:1; - unsigned int is_vararg:1; + unsigned int is_vararg:1; // vararg func unsigned int is_fptr:1; unsigned int is_noreturn:1; unsigned int is_unresolved:1; + unsigned int is_arg:1; // decl in func arg unsigned int has_structarg:1; }; @@ -161,7 +162,9 @@ static const char *known_ptr_types[] = { "HRSRC", "HKEY", "HMENU", + "HWAVEOUT", "HWND", + "PBYTE", "PCRITICAL_SECTION", "PDWORD", "PFILETIME", @@ -171,6 +174,7 @@ static const char *known_ptr_types[] = { "PUINT", "PVOID", "PCVOID", + "PWORD", "DLGPROC", "TIMERPROC", "WNDENUMPROC", @@ -510,6 +514,10 @@ static int parse_protostr(char *protostr, struct parsed_proto *pp) hdrfn, hdrfline, p1 - protostr); return -1; } + arg->fptr->is_arg = 1; + // we don't use actual names right now.. + snprintf(arg->fptr->name, + sizeof(arg->fptr->name), "a%d", xarg); // we'll treat it as void * for non-calls arg->type.name = strdup("void *"); arg->type.is_ptr = 1; @@ -657,6 +665,7 @@ static const struct parsed_proto *proto_parse(FILE *fhdr, const char *sym, { const struct parsed_proto *pp_ret; struct parsed_proto pp_search; + char *p; if (pp_cache == NULL) build_pp_cache(fhdr); @@ -665,6 +674,10 @@ static const struct parsed_proto *proto_parse(FILE *fhdr, const char *sym, sym++; strcpy(pp_search.name, sym); + p = strchr(pp_search.name, '@'); + if (p != NULL) + *p = 0; + pp_ret = bsearch(&pp_search, pp_cache, pp_cache_size, sizeof(pp_cache[0]), pp_name_cmp); if (pp_ret == NULL && !quiet)