X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=tools%2Fprotoparse.h;h=d9f6ef8b2c7cfae3b41392e5474bc6eacc565ca3;hb=75ad037850090a6a76959a6be10182e8d0135131;hp=c560d50a1eae41bf4ad802f89210490d57258f51;hpb=cdfaeed73d8ca19b644a96767471fdfa00e430b1;p=ia32rtools.git diff --git a/tools/protoparse.h b/tools/protoparse.h index c560d50..d9f6ef8 100644 --- a/tools/protoparse.h +++ b/tools/protoparse.h @@ -46,6 +46,8 @@ static int do_protostrs(FILE *fhdr, const char *fname) const char *finc_name; const char *hdrfn_saved; char protostr[256]; + char path[256]; + char fname_inc[256]; FILE *finc; int line = 0; int ret; @@ -63,10 +65,19 @@ static int do_protostrs(FILE *fhdr, const char *fname) if (p != NULL) *p = 0; - finc = fopen(finc_name, "r"); + path[0] = 0; + p = strrchr(hdrfn_saved, '/'); + if (p) { + memcpy(path, hdrfn_saved, + p - hdrfn_saved + 1); + path[p - hdrfn_saved + 1] = 0; + } + snprintf(fname_inc, sizeof(fname_inc), "%s%s", + path, finc_name); + finc = fopen(fname_inc, "r"); if (finc == NULL) { printf("%s:%d: can't open '%s'\n", - fname, line, finc_name); + fname_inc, line, finc_name); continue; } ret = do_protostrs(finc, finc_name); @@ -137,14 +148,19 @@ static const char *known_ptr_types[] = { "HGDIOBJ", "HGLOBAL", "HINSTANCE", + "HIMC", "HMODULE", "HRGN", "HRSRC", "HKEY", "HMENU", "HWND", - "PLONG", + "PCRITICAL_SECTION", "PDWORD", + "PHKEY", + "PLONG", + "PMEMORY_BASIC_INFORMATION", + "PUINT", "PVOID", "PCVOID", "DLGPROC", @@ -235,6 +251,9 @@ static int check_type(const char *name, struct parsed_type *type) ret = n1 - name; type->name = strndup(name, ret); + if (IS(type->name, "VOID")) + memcpy(type->name, "void", 4); + return ret; } @@ -593,7 +612,8 @@ static void build_pp_cache(FILE *fhdr) qsort(pp_cache, pp_cache_size, sizeof(pp_cache[0]), pp_name_cmp); } -static const struct parsed_proto *proto_parse(FILE *fhdr, const char *sym) +static const struct parsed_proto *proto_parse(FILE *fhdr, const char *sym, + int quiet) { const struct parsed_proto *pp_ret; struct parsed_proto pp_search; @@ -607,7 +627,7 @@ static const struct parsed_proto *proto_parse(FILE *fhdr, const char *sym) strcpy(pp_search.name, sym); pp_ret = bsearch(&pp_search, pp_cache, pp_cache_size, sizeof(pp_cache[0]), pp_name_cmp); - if (pp_ret == NULL) + if (pp_ret == NULL && !quiet) printf("%s: sym '%s' is missing\n", hdrfn, sym); return pp_ret;