X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=tools%2Fprotoparse.h;h=6ea638795ecca1616f71d5b773386c221933e8c8;hb=383dff16087df778d678eeab30066dbfe431509b;hp=897171e86197b0c7e236e4fd75dd4e3a9785780a;hpb=2c31fb4cf1427f5a24c4eed0a08dbd3f3a2dacce;p=ia32rtools.git diff --git a/tools/protoparse.h b/tools/protoparse.h index 897171e..6ea6387 100644 --- a/tools/protoparse.h +++ b/tools/protoparse.h @@ -16,6 +16,7 @@ struct parsed_type { unsigned int is_retreg:1; // register to return to caller unsigned int is_va_list:1; unsigned int is_64bit:1; + unsigned int is_float:1; // float, double }; struct parsed_proto_arg { @@ -41,8 +42,10 @@ struct parsed_proto { unsigned int is_fastcall:1; unsigned int is_vararg:1; // vararg func unsigned int is_fptr:1; + unsigned int is_import:1; // data import unsigned int is_noreturn:1; unsigned int is_unresolved:1; + unsigned int is_guessed:1; // for extra checking unsigned int is_userstack:1; unsigned int is_include:1; // not from top-level header unsigned int is_osinc:1; // OS/system library func @@ -213,10 +216,13 @@ static const char *known_ptr_types[] = { "HRSRC", "HKEY", "HMENU", + "HMONITOR", "HWAVEOUT", "HWND", + "PAPPBARDATA", "PBYTE", "PCRITICAL_SECTION", + "PDEVMODEA", "PDWORD", "PFILETIME", "PLARGE_INTEGER", @@ -231,6 +237,7 @@ static const char *known_ptr_types[] = { "PCVOID", "PWORD", "REFCLSID", + "REFGUID", "REFIID", "HOOKPROC", "DLGPROC", @@ -398,6 +405,9 @@ static int parse_arg(char **p_, struct parsed_proto_arg *arg, int xarg) if (ret < 0) return -1; + if (IS_START(arg->pp->name, "guess")) + arg->pp->is_guessed = 1; + // we don't use actual names right now... snprintf(arg->pp->name, sizeof(arg->pp->name), "a%d", xarg); @@ -458,6 +468,11 @@ static int parse_protostr(char *protostr, struct parsed_proto *pp) p = sskip(p + l + 1); } + if (IS_START(p, "DECL_IMPORT ")) { + pp->is_import = 1; + p = sskip(p + 12); + } + ret = check_type(p, &pp->ret_type); if (ret <= 0) { printf("%s:%d:%zd: unhandled return in '%s'\n", @@ -668,6 +683,12 @@ static int parse_protostr(char *protostr, struct parsed_proto *pp) pp->has_retreg |= is_retreg; } + if (IS(arg->type.name, "float") + || IS(arg->type.name, "double")) + { + arg->type.is_float = 1; + } + if (!arg->type.is_ptr && (strstr(arg->type.name, "int64") || IS(arg->type.name, "double"))) {