notaz.gp2x.de
/
ia32rtools.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fixes, something compiles
[ia32rtools.git]
/
tools
/
protoparse.h
diff --git
a/tools/protoparse.h
b/tools/protoparse.h
index
c560d50
..
c585306
100644
(file)
--- a/
tools/protoparse.h
+++ b/
tools/protoparse.h
@@
-30,6
+30,7
@@
struct parsed_proto {
unsigned int is_vararg:1;
unsigned int is_fptr:1;
unsigned int is_noreturn:1;
unsigned int is_vararg:1;
unsigned int is_fptr:1;
unsigned int is_noreturn:1;
+ unsigned int is_unresolved:1;
unsigned int has_structarg:1;
};
unsigned int has_structarg:1;
};
@@
-46,6
+47,8
@@
static int do_protostrs(FILE *fhdr, const char *fname)
const char *finc_name;
const char *hdrfn_saved;
char protostr[256];
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;
FILE *finc;
int line = 0;
int ret;
@@
-63,10
+66,19
@@
static int do_protostrs(FILE *fhdr, const char *fname)
if (p != NULL)
*p = 0;
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",
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);
continue;
}
ret = do_protostrs(finc, finc_name);
@@
-128,6
+140,7
@@
static const char *known_type_mod[] = {
};
static const char *known_ptr_types[] = {
};
static const char *known_ptr_types[] = {
+ "FARPROC",
"HACCEL",
"HANDLE",
"HBITMAP",
"HACCEL",
"HANDLE",
"HBITMAP",
@@
-136,15
+149,22
@@
static const char *known_ptr_types[] = {
"HFONT",
"HGDIOBJ",
"HGLOBAL",
"HFONT",
"HGDIOBJ",
"HGLOBAL",
+ "HICON",
"HINSTANCE",
"HINSTANCE",
+ //"HIMC", // DWORD
"HMODULE",
"HMODULE",
+ "HPALETTE",
"HRGN",
"HRSRC",
"HKEY",
"HMENU",
"HWND",
"HRGN",
"HRSRC",
"HKEY",
"HMENU",
"HWND",
- "P
LONG
",
+ "P
CRITICAL_SECTION
",
"PDWORD",
"PDWORD",
+ "PHKEY",
+ "PLONG",
+ "PMEMORY_BASIC_INFORMATION",
+ "PUINT",
"PVOID",
"PCVOID",
"DLGPROC",
"PVOID",
"PCVOID",
"DLGPROC",
@@
-235,6
+255,9
@@
static int check_type(const char *name, struct parsed_type *type)
ret = n1 - name;
type->name = strndup(name, ret);
ret = n1 - name;
type->name = strndup(name, ret);
+ if (IS(type->name, "VOID"))
+ memcpy(type->name, "void", 4);
+
return ret;
}
return ret;
}
@@
-308,6
+331,11
@@
static int parse_protostr(char *protostr, struct parsed_proto *pp)
}
p = sskip(p + ret);
}
p = sskip(p + ret);
+ if (!strncmp(p, "noreturn ", 9)) {
+ pp->is_noreturn = 1;
+ p = sskip(p + 9);
+ }
+
if (!strchr(p, ')')) {
p = next_idt(buf, sizeof(buf), p);
p = sskip(p);
if (!strchr(p, ')')) {
p = next_idt(buf, sizeof(buf), p);
p = sskip(p);
@@
-593,7
+621,8
@@
static void build_pp_cache(FILE *fhdr)
qsort(pp_cache, pp_cache_size, sizeof(pp_cache[0]), pp_name_cmp);
}
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;
{
const struct parsed_proto *pp_ret;
struct parsed_proto pp_search;
@@
-607,7
+636,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);
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;
printf("%s: sym '%s' is missing\n", hdrfn, sym);
return pp_ret;