When enumerating resource, only use the lower 31 bit of the name as
the offset (for the highest bit is '1'). Should fix wine-net/257.
diff --git a/loader/pe_resource.c b/loader/pe_resource.c
index e415b48..ed80a7d 100644
--- a/loader/pe_resource.c
+++ b/loader/pe_resource.c
@@ -185,10 +185,10 @@
for (i=0;i<resdir->NumberOfNamedEntries+resdir->NumberOfIdEntries;i++) {
LPSTR name;
- if (HIWORD(et[i].u1.Name))
- name = HEAP_strdupWtoA(heap,0,(LPWSTR)((LPBYTE)pem->pe_resource+et[i].u1.Name));
+ if (et[i].u1.s.NameIsString)
+ name = HEAP_strdupWtoA(heap,0,(LPWSTR)((LPBYTE)pem->pe_resource+et[i].u1.s.NameOffset));
else
- name = (LPSTR)et[i].u1.Name;
+ name = (LPSTR)(int)et[i].u1.Id;
ret = lpfun(hmod,name,lparam);
if (HIWORD(name))
HeapFree(heap,0,name);
@@ -217,10 +217,10 @@
ret = FALSE;
for (i=0;i<resdir->NumberOfNamedEntries+resdir->NumberOfIdEntries;i++) {
LPWSTR type;
- if (HIWORD(et[i].u1.Name))
- type = (LPWSTR)((LPBYTE)pem->pe_resource+et[i].u1.Name);
+ if (et[i].u1.s.NameIsString)
+ type = (LPWSTR)((LPBYTE)pem->pe_resource+et[i].u1.s.NameOffset);
else
- type = (LPWSTR)et[i].u1.Name;
+ type = (LPWSTR)(int)et[i].u1.Id;
ret = lpfun(hmod,type,lparam);
if (!ret)
@@ -261,10 +261,10 @@
for (i=0;i<resdir->NumberOfNamedEntries+resdir->NumberOfIdEntries;i++) {
LPSTR name;
- if (HIWORD(et[i].u1.Name))
- name = HEAP_strdupWtoA(heap,0,(LPWSTR)((LPBYTE)pem->pe_resource+et[i].u1.Name));
+ if (et[i].u1.s.NameIsString)
+ name = HEAP_strdupWtoA(heap,0,(LPWSTR)((LPBYTE)pem->pe_resource+et[i].u1.s.NameOffset));
else
- name = (LPSTR)et[i].u1.Name;
+ name = (LPSTR)(int)et[i].u1.Id;
ret = lpfun(hmod,type,name,lparam);
if (HIWORD(name)) HeapFree(heap,0,name);
if (!ret)
@@ -297,10 +297,10 @@
ret = FALSE;
for (i=0;i<resdir->NumberOfNamedEntries+resdir->NumberOfIdEntries;i++) {
LPWSTR name;
- if (HIWORD(et[i].u1.Name))
- name = (LPWSTR)((LPBYTE)pem->pe_resource+et[i].u1.Name);
+ if (et[i].u1.s.NameIsString)
+ name = (LPWSTR)((LPBYTE)pem->pe_resource+et[i].u1.s.NameOffset);
else
- name = (LPWSTR)et[i].u1.Name;
+ name = (LPWSTR)(int)et[i].u1.Id;
ret = lpfun(hmod,type,name,lparam);
if (!ret)
break;