include: Make IMAGE_RESOURCE_DIRECTORY_ENTRY match PSDK definition.

oldstable
Dmitry Timoshkov 2013-04-29 16:19:17 +09:00 committed by Alexandre Julliard
parent 397c2200a6
commit e2791cdfb1
8 changed files with 81 additions and 84 deletions

View File

@ -219,9 +219,9 @@ BOOL WINAPI EnumResourceTypesA( HMODULE hmod, ENUMRESTYPEPROCA lpfun, LONG_PTR l
et = (const IMAGE_RESOURCE_DIRECTORY_ENTRY *)(resdir + 1);
for (i = 0; i < resdir->NumberOfNamedEntries+resdir->NumberOfIdEntries; i++)
{
if (et[i].u1.s1.NameIsString)
if (et[i].u.s.NameIsString)
{
str = (const IMAGE_RESOURCE_DIR_STRING_U *)((const BYTE *)resdir + et[i].u1.s1.NameOffset);
str = (const IMAGE_RESOURCE_DIR_STRING_U *)((const BYTE *)resdir + et[i].u.s.NameOffset);
newlen = WideCharToMultiByte( CP_ACP, 0, str->NameString, str->Length, NULL, 0, NULL, NULL);
if (newlen + 1 > len)
{
@ -235,7 +235,7 @@ BOOL WINAPI EnumResourceTypesA( HMODULE hmod, ENUMRESTYPEPROCA lpfun, LONG_PTR l
}
else
{
ret = lpfun( hmod, UIntToPtr(et[i].u1.s2.Id), lparam );
ret = lpfun( hmod, UIntToPtr(et[i].u.Id), lparam );
}
if (!ret) break;
}
@ -269,9 +269,9 @@ BOOL WINAPI EnumResourceTypesW( HMODULE hmod, ENUMRESTYPEPROCW lpfun, LONG_PTR l
et = (const IMAGE_RESOURCE_DIRECTORY_ENTRY *)(resdir + 1);
for (i = 0; i < resdir->NumberOfNamedEntries + resdir->NumberOfIdEntries; i++)
{
if (et[i].u1.s1.NameIsString)
if (et[i].u.s.NameIsString)
{
str = (const IMAGE_RESOURCE_DIR_STRING_U *)((const BYTE *)resdir + et[i].u1.s1.NameOffset);
str = (const IMAGE_RESOURCE_DIR_STRING_U *)((const BYTE *)resdir + et[i].u.s.NameOffset);
if (str->Length + 1 > len)
{
len = str->Length + 1;
@ -284,7 +284,7 @@ BOOL WINAPI EnumResourceTypesW( HMODULE hmod, ENUMRESTYPEPROCW lpfun, LONG_PTR l
}
else
{
ret = lpfun( hmod, UIntToPtr(et[i].u1.s2.Id), lparam );
ret = lpfun( hmod, UIntToPtr(et[i].u.Id), lparam );
}
if (!ret) break;
}
@ -326,9 +326,9 @@ BOOL WINAPI EnumResourceNamesA( HMODULE hmod, LPCSTR type, ENUMRESNAMEPROCA lpfu
{
for (i = 0; i < resdir->NumberOfNamedEntries+resdir->NumberOfIdEntries; i++)
{
if (et[i].u1.s1.NameIsString)
if (et[i].u.s.NameIsString)
{
str = (const IMAGE_RESOURCE_DIR_STRING_U *)((const BYTE *)basedir + et[i].u1.s1.NameOffset);
str = (const IMAGE_RESOURCE_DIR_STRING_U *)((const BYTE *)basedir + et[i].u.s.NameOffset);
newlen = WideCharToMultiByte(CP_ACP, 0, str->NameString, str->Length, NULL, 0, NULL, NULL);
if (newlen + 1 > len)
{
@ -346,7 +346,7 @@ BOOL WINAPI EnumResourceNamesA( HMODULE hmod, LPCSTR type, ENUMRESNAMEPROCA lpfu
}
else
{
ret = lpfun( hmod, type, UIntToPtr(et[i].u1.s2.Id), lparam );
ret = lpfun( hmod, type, UIntToPtr(et[i].u.Id), lparam );
}
if (!ret) break;
}
@ -398,9 +398,9 @@ BOOL WINAPI EnumResourceNamesW( HMODULE hmod, LPCWSTR type, ENUMRESNAMEPROCW lpf
{
for (i = 0; i < resdir->NumberOfNamedEntries+resdir->NumberOfIdEntries; i++)
{
if (et[i].u1.s1.NameIsString)
if (et[i].u.s.NameIsString)
{
str = (const IMAGE_RESOURCE_DIR_STRING_U *)((const BYTE *)basedir + et[i].u1.s1.NameOffset);
str = (const IMAGE_RESOURCE_DIR_STRING_U *)((const BYTE *)basedir + et[i].u.s.NameOffset);
if (str->Length + 1 > len)
{
len = str->Length + 1;
@ -417,7 +417,7 @@ BOOL WINAPI EnumResourceNamesW( HMODULE hmod, LPCWSTR type, ENUMRESNAMEPROCW lpf
}
else
{
ret = lpfun( hmod, type, UIntToPtr(et[i].u1.s2.Id), lparam );
ret = lpfun( hmod, type, UIntToPtr(et[i].u.Id), lparam );
}
if (!ret) break;
}
@ -470,7 +470,7 @@ BOOL WINAPI EnumResourceLanguagesA( HMODULE hmod, LPCSTR type, LPCSTR name,
{
for (i = 0; i < resdir->NumberOfNamedEntries + resdir->NumberOfIdEntries; i++)
{
ret = lpfun( hmod, type, name, et[i].u1.s2.Id, lparam );
ret = lpfun( hmod, type, name, et[i].u.Id, lparam );
if (!ret) break;
}
}
@ -522,7 +522,7 @@ BOOL WINAPI EnumResourceLanguagesW( HMODULE hmod, LPCWSTR type, LPCWSTR name,
{
for (i = 0; i < resdir->NumberOfNamedEntries + resdir->NumberOfIdEntries; i++)
{
ret = lpfun( hmod, type, name, et[i].u1.s2.Id, lparam );
ret = lpfun( hmod, type, name, et[i].u.Id, lparam );
if (!ret) break;
}
}
@ -948,10 +948,10 @@ static LPWSTR resource_dup_string( const IMAGE_RESOURCE_DIRECTORY *root, const I
const IMAGE_RESOURCE_DIR_STRING_U* string;
LPWSTR s;
if (!entry->u1.s1.NameIsString)
return UIntToPtr(entry->u1.s2.Id);
if (!entry->u.s.NameIsString)
return UIntToPtr(entry->u.Id);
string = (const IMAGE_RESOURCE_DIR_STRING_U*) (((const char *)root) + entry->u1.s1.NameOffset);
string = (const IMAGE_RESOURCE_DIR_STRING_U*) (((const char *)root) + entry->u.s.NameOffset);
s = HeapAlloc(GetProcessHeap(), 0, (string->Length + 1)*sizeof (WCHAR) );
memcpy( s, string->NameString, (string->Length + 1)*sizeof (WCHAR) );
s[string->Length] = 0;
@ -980,7 +980,7 @@ static BOOL enumerate_mapped_resources( QUEUEDUPDATES *updates,
Type = resource_dup_string( root, e1 );
namedir = (const IMAGE_RESOURCE_DIRECTORY *)((const char *)root + e1->u2.s3.OffsetToDirectory);
namedir = (const IMAGE_RESOURCE_DIRECTORY *)((const char *)root + e1->u2.s2.OffsetToDirectory);
for (j = 0; j < namedir->NumberOfNamedEntries + namedir->NumberOfIdEntries; j++)
{
LPWSTR Name;
@ -989,7 +989,7 @@ static BOOL enumerate_mapped_resources( QUEUEDUPDATES *updates,
Name = resource_dup_string( root, e2 );
langdir = (const IMAGE_RESOURCE_DIRECTORY *)((const char *)root + e2->u2.s3.OffsetToDirectory);
langdir = (const IMAGE_RESOURCE_DIRECTORY *)((const char *)root + e2->u2.s2.OffsetToDirectory);
for (k = 0; k < langdir->NumberOfNamedEntries + langdir->NumberOfIdEntries; k++)
{
LANGID Lang;
@ -998,7 +998,7 @@ static BOOL enumerate_mapped_resources( QUEUEDUPDATES *updates,
e3 = (const IMAGE_RESOURCE_DIRECTORY_ENTRY*)(langdir + 1) + k;
Lang = e3->u1.s2.Id;
Lang = e3->u.Id;
data = (const IMAGE_RESOURCE_DATA_ENTRY *)((const char *)root + e3->u2.OffsetToData);
@ -1235,8 +1235,8 @@ static BOOL write_resources( QUEUEDUPDATES *updates, LPBYTE base, struct resourc
DWORD len;
root->NumberOfNamedEntries++;
e1->u1.s1.NameIsString = 1;
e1->u1.s1.NameOffset = si->strings_ofs;
e1->u.s.NameIsString = 1;
e1->u.s.NameOffset = si->strings_ofs;
strings = (WCHAR*) &base[si->strings_ofs];
len = lstrlenW( types->id );
@ -1247,10 +1247,10 @@ static BOOL write_resources( QUEUEDUPDATES *updates, LPBYTE base, struct resourc
else
{
root->NumberOfIdEntries++;
e1->u1.s2.Id = LOWORD( types->id );
e1->u.Id = LOWORD( types->id );
}
e1->u2.s3.OffsetToDirectory = si->names_ofs;
e1->u2.s3.DataIsDirectory = TRUE;
e1->u2.s2.OffsetToDirectory = si->names_ofs;
e1->u2.s2.DataIsDirectory = TRUE;
si->types_ofs += sizeof (IMAGE_RESOURCE_DIRECTORY_ENTRY);
namedir = (IMAGE_RESOURCE_DIRECTORY*) &base[si->names_ofs];
@ -1271,8 +1271,8 @@ static BOOL write_resources( QUEUEDUPDATES *updates, LPBYTE base, struct resourc
DWORD len;
namedir->NumberOfNamedEntries++;
e2->u1.s1.NameIsString = 1;
e2->u1.s1.NameOffset = si->strings_ofs;
e2->u.s.NameIsString = 1;
e2->u.s.NameOffset = si->strings_ofs;
strings = (WCHAR*) &base[si->strings_ofs];
len = lstrlenW( names->id );
@ -1283,10 +1283,10 @@ static BOOL write_resources( QUEUEDUPDATES *updates, LPBYTE base, struct resourc
else
{
namedir->NumberOfIdEntries++;
e2->u1.s2.Id = LOWORD( names->id );
e2->u.Id = LOWORD( names->id );
}
e2->u2.s3.OffsetToDirectory = si->langs_ofs;
e2->u2.s3.DataIsDirectory = TRUE;
e2->u2.s2.OffsetToDirectory = si->langs_ofs;
e2->u2.s2.DataIsDirectory = TRUE;
si->names_ofs += sizeof (IMAGE_RESOURCE_DIRECTORY_ENTRY);
langdir = (IMAGE_RESOURCE_DIRECTORY*) &base[si->langs_ofs];
@ -1303,7 +1303,7 @@ static BOOL write_resources( QUEUEDUPDATES *updates, LPBYTE base, struct resourc
e3 = (IMAGE_RESOURCE_DIRECTORY_ENTRY*) &base[si->langs_ofs];
memset( e3, 0, sizeof *e3 );
langdir->NumberOfIdEntries++;
e3->u1.s2.Id = LOWORD( data->lang );
e3->u.Id = LOWORD( data->lang );
e3->u2.OffsetToData = si->data_entry_ofs;
si->langs_ofs += sizeof (IMAGE_RESOURCE_DIRECTORY_ENTRY);

View File

@ -89,8 +89,8 @@ static const IMAGE_RESOURCE_DIRECTORY *find_first_entry( const IMAGE_RESOURCE_DI
for (pos = 0; pos < dir->NumberOfNamedEntries + dir->NumberOfIdEntries; pos++)
{
if (!entry[pos].u2.s3.DataIsDirectory == !want_dir)
return (const IMAGE_RESOURCE_DIRECTORY *)((const char *)root + entry[pos].u2.s3.OffsetToDirectory);
if (!entry[pos].u2.s2.DataIsDirectory == !want_dir)
return (const IMAGE_RESOURCE_DIRECTORY *)((const char *)root + entry[pos].u2.s2.OffsetToDirectory);
}
return NULL;
}
@ -113,17 +113,17 @@ static const IMAGE_RESOURCE_DIRECTORY *find_entry_by_id( const IMAGE_RESOURCE_DI
while (min <= max)
{
pos = (min + max) / 2;
if (entry[pos].u1.s2.Id == id)
if (entry[pos].u.Id == id)
{
if (!entry[pos].u2.s3.DataIsDirectory == !want_dir)
if (!entry[pos].u2.s2.DataIsDirectory == !want_dir)
{
TRACE("root %p dir %p id %04x ret %p\n",
root, dir, id, (const char*)root + entry[pos].u2.s3.OffsetToDirectory);
return (const IMAGE_RESOURCE_DIRECTORY *)((const char *)root + entry[pos].u2.s3.OffsetToDirectory);
root, dir, id, (const char*)root + entry[pos].u2.s2.OffsetToDirectory);
return (const IMAGE_RESOURCE_DIRECTORY *)((const char *)root + entry[pos].u2.s2.OffsetToDirectory);
}
break;
}
if (entry[pos].u1.s2.Id > id) max = pos - 1;
if (entry[pos].u.Id > id) max = pos - 1;
else min = pos + 1;
}
TRACE("root %p dir %p id %04x not found\n", root, dir, id );
@ -152,15 +152,15 @@ static const IMAGE_RESOURCE_DIRECTORY *find_entry_by_name( const IMAGE_RESOURCE_
while (min <= max)
{
pos = (min + max) / 2;
str = (const IMAGE_RESOURCE_DIR_STRING_U *)((const char *)root + entry[pos].u1.s1.NameOffset);
str = (const IMAGE_RESOURCE_DIR_STRING_U *)((const char *)root + entry[pos].u.s.NameOffset);
res = strncmpW( name, str->NameString, str->Length );
if (!res && namelen == str->Length)
{
if (!entry[pos].u2.s3.DataIsDirectory == !want_dir)
if (!entry[pos].u2.s2.DataIsDirectory == !want_dir)
{
TRACE("root %p dir %p name %s ret %p\n",
root, dir, debugstr_w(name), (const char*)root + entry[pos].u2.s3.OffsetToDirectory);
return (const IMAGE_RESOURCE_DIRECTORY *)((const char *)root + entry[pos].u2.s3.OffsetToDirectory);
root, dir, debugstr_w(name), (const char*)root + entry[pos].u2.s2.OffsetToDirectory);
return (const IMAGE_RESOURCE_DIRECTORY *)((const char *)root + entry[pos].u2.s2.OffsetToDirectory);
}
break;
}

View File

@ -120,9 +120,9 @@ static const IMAGE_RESOURCE_DIRECTORY *find_entry_by_id( const IMAGE_RESOURCE_DI
while (min <= max)
{
pos = (min + max) / 2;
if (entry[pos].u1.s2.Id == id)
return (const IMAGE_RESOURCE_DIRECTORY *)((const char *)root + entry[pos].u2.s3.OffsetToDirectory);
if (entry[pos].u1.s2.Id > id) max = pos - 1;
if (entry[pos].u.Id == id)
return (const IMAGE_RESOURCE_DIRECTORY *)((const char *)root + entry[pos].u2.s2.OffsetToDirectory);
if (entry[pos].u.Id > id) max = pos - 1;
else min = pos + 1;
}
return NULL;
@ -139,7 +139,7 @@ static const IMAGE_RESOURCE_DIRECTORY *find_entry_default( const IMAGE_RESOURCE_
{
const IMAGE_RESOURCE_DIRECTORY_ENTRY *entry;
entry = (const IMAGE_RESOURCE_DIRECTORY_ENTRY *)(dir + 1);
return (const IMAGE_RESOURCE_DIRECTORY *)((const char *)root + entry->u2.s3.OffsetToDirectory);
return (const IMAGE_RESOURCE_DIRECTORY *)((const char *)root + entry->u2.s2.OffsetToDirectory);
}
/*************************************************************************
@ -486,7 +486,7 @@ static UINT ICO_ExtractIconExW(
while(n<iconDirCount && xprdeTmp)
{
if(xprdeTmp->u1.s2.Id == iId)
if(xprdeTmp->u.Id == iId)
{
nIconIndex = n;
break;
@ -522,7 +522,7 @@ static UINT ICO_ExtractIconExW(
const IMAGE_RESOURCE_DIRECTORY *resdir;
/* go down this resource entry, name */
resdir = (const IMAGE_RESOURCE_DIRECTORY *)((const char *)rootresdir + xresent->u2.s3.OffsetToDirectory);
resdir = (const IMAGE_RESOURCE_DIRECTORY *)((const char *)rootresdir + xresent->u2.s2.OffsetToDirectory);
/* default language (0) */
resdir = find_entry_default(resdir,rootresdir);

View File

@ -60,9 +60,9 @@ static const IMAGE_RESOURCE_DIRECTORY *find_entry_by_id( const IMAGE_RESOURCE_DI
while (min <= max)
{
pos = (min + max) / 2;
if (entry[pos].u1.s2.Id == id)
return (const IMAGE_RESOURCE_DIRECTORY *)((const char *)root + entry[pos].u2.s3.OffsetToDirectory);
if (entry[pos].u1.s2.Id > id) max = pos - 1;
if (entry[pos].u.Id == id)
return (const IMAGE_RESOURCE_DIRECTORY *)((const char *)root + entry[pos].u2.s2.OffsetToDirectory);
if (entry[pos].u.Id > id) max = pos - 1;
else min = pos + 1;
}
return NULL;
@ -81,7 +81,7 @@ static const IMAGE_RESOURCE_DIRECTORY *find_entry_default( const IMAGE_RESOURCE_
const IMAGE_RESOURCE_DIRECTORY_ENTRY *entry;
entry = (const IMAGE_RESOURCE_DIRECTORY_ENTRY *)(dir + 1);
return (const IMAGE_RESOURCE_DIRECTORY *)((const char *)root + entry->u2.s3.OffsetToDirectory);
return (const IMAGE_RESOURCE_DIRECTORY *)((const char *)root + entry->u2.s2.OffsetToDirectory);
}
@ -119,11 +119,11 @@ static const IMAGE_RESOURCE_DIRECTORY *find_entry_by_name( const IMAGE_RESOURCE_
while (min <= max)
{
pos = (min + max) / 2;
str = (const IMAGE_RESOURCE_DIR_STRING_U *)((const char *)root + entry[pos].u1.s1.NameOffset);
str = (const IMAGE_RESOURCE_DIR_STRING_U *)((const char *)root + entry[pos].u.s.NameOffset);
res = strncmpiW( nameW, str->NameString, str->Length );
if (!res && namelen == str->Length)
{
ret = (const IMAGE_RESOURCE_DIRECTORY *)((const char *)root + entry[pos].u2.s3.OffsetToDirectory);
ret = (const IMAGE_RESOURCE_DIRECTORY *)((const char *)root + entry[pos].u2.s2.OffsetToDirectory);
break;
}
if (res < 0) max = pos - 1;

View File

@ -84,9 +84,9 @@ static const IMAGE_RESOURCE_DIRECTORY *find_entry_by_id( const IMAGE_RESOURCE_DI
while (min <= max)
{
pos = (min + max) / 2;
if (entry[pos].u1.s2.Id == id)
return (const IMAGE_RESOURCE_DIRECTORY *)((const char *)root + entry[pos].u2.s3.OffsetToDirectory);
if (entry[pos].u1.s2.Id > id) max = pos - 1;
if (entry[pos].u.Id == id)
return (const IMAGE_RESOURCE_DIRECTORY *)((const char *)root + entry[pos].u2.s2.OffsetToDirectory);
if (entry[pos].u.Id > id) max = pos - 1;
else min = pos + 1;
}
return NULL;
@ -105,7 +105,7 @@ static const IMAGE_RESOURCE_DIRECTORY *find_entry_default( const IMAGE_RESOURCE_
const IMAGE_RESOURCE_DIRECTORY_ENTRY *entry;
entry = (const IMAGE_RESOURCE_DIRECTORY_ENTRY *)(dir + 1);
return (const IMAGE_RESOURCE_DIRECTORY *)((const char *)root + entry->u2.s3.OffsetToDirectory);
return (const IMAGE_RESOURCE_DIRECTORY *)((const char *)root + entry->u2.s2.OffsetToDirectory);
}

View File

@ -3343,18 +3343,16 @@ typedef struct _IMAGE_RESOURCE_DIRECTORY_ENTRY {
unsigned NameOffset:31;
unsigned NameIsString:1;
#endif
} DUMMYSTRUCTNAME1;
} DUMMYSTRUCTNAME;
DWORD Name;
struct {
#ifdef WORDS_BIGENDIAN
WORD __pad;
WORD Id;
WORD __pad;
WORD Id;
#else
WORD Id;
WORD __pad;
WORD Id;
WORD __pad;
#endif
} DUMMYSTRUCTNAME2;
} DUMMYUNIONNAME1;
} DUMMYUNIONNAME;
union {
DWORD OffsetToData;
struct {
@ -3365,7 +3363,7 @@ typedef struct _IMAGE_RESOURCE_DIRECTORY_ENTRY {
unsigned OffsetToDirectory:31;
unsigned DataIsDirectory:1;
#endif
} DUMMYSTRUCTNAME3;
} DUMMYSTRUCTNAME2;
} DUMMYUNIONNAME2;
} IMAGE_RESOURCE_DIRECTORY_ENTRY,*PIMAGE_RESOURCE_DIRECTORY_ENTRY;

View File

@ -359,8 +359,8 @@ static void fixup_resources( IMAGE_RESOURCE_DIRECTORY *dir, BYTE *root, int delt
entry = (IMAGE_RESOURCE_DIRECTORY_ENTRY *)(dir + 1);
for (i = 0; i < dir->NumberOfNamedEntries + dir->NumberOfIdEntries; i++, entry++)
{
void *ptr = root + entry->u2.s3.OffsetToDirectory;
if (entry->u2.s3.DataIsDirectory) fixup_resources( ptr, root, delta );
void *ptr = root + entry->u2.s2.OffsetToDirectory;
if (entry->u2.s2.DataIsDirectory) fixup_resources( ptr, root, delta );
else
{
IMAGE_RESOURCE_DATA_ENTRY *data = ptr;

View File

@ -1384,52 +1384,51 @@ static void dump_dir_resource(void)
for (i = 0; i< root->NumberOfNamedEntries + root->NumberOfIdEntries; i++)
{
e1 = (const IMAGE_RESOURCE_DIRECTORY_ENTRY*)(root + 1) + i;
namedir = (const IMAGE_RESOURCE_DIRECTORY *)((const char *)root + e1->u2.s3.OffsetToDirectory);
namedir = (const IMAGE_RESOURCE_DIRECTORY *)((const char *)root + e1->u2.s2.OffsetToDirectory);
for (j = 0; j < namedir->NumberOfNamedEntries + namedir->NumberOfIdEntries; j++)
{
e2 = (const IMAGE_RESOURCE_DIRECTORY_ENTRY*)(namedir + 1) + j;
langdir = (const IMAGE_RESOURCE_DIRECTORY *)((const char *)root + e2->u2.s3.OffsetToDirectory);
langdir = (const IMAGE_RESOURCE_DIRECTORY *)((const char *)root + e2->u2.s2.OffsetToDirectory);
for (k = 0; k < langdir->NumberOfNamedEntries + langdir->NumberOfIdEntries; k++)
{
e3 = (const IMAGE_RESOURCE_DIRECTORY_ENTRY*)(langdir + 1) + k;
printf( "\n " );
if (e1->u1.s1.NameIsString)
if (e1->u.s.NameIsString)
{
string = (const IMAGE_RESOURCE_DIR_STRING_U*)((const char *)root + e1->u1.s1.NameOffset);
string = (const IMAGE_RESOURCE_DIR_STRING_U*)((const char *)root + e1->u.s.NameOffset);
dump_unicode_str( string->NameString, string->Length );
}
else
{
const char *type = get_resource_type( e1->u1.s2.Id );
const char *type = get_resource_type( e1->u.Id );
if (type) printf( "%s", type );
else printf( "%04x", e1->u1.s2.Id );
else printf( "%04x", e1->u.Id );
}
printf( " Name=" );
if (e2->u1.s1.NameIsString)
if (e2->u.s.NameIsString)
{
string = (const IMAGE_RESOURCE_DIR_STRING_U*) ((const char *)root + e2->u1.s1.NameOffset);
string = (const IMAGE_RESOURCE_DIR_STRING_U*) ((const char *)root + e2->u.s.NameOffset);
dump_unicode_str( string->NameString, string->Length );
}
else
printf( "%04x", e2->u1.s2.Id );
printf( "%04x", e2->u.Id );
printf( " Language=%04x:\n", e3->u1.s2.Id );
printf( " Language=%04x:\n", e3->u.Id );
data = (const IMAGE_RESOURCE_DATA_ENTRY *)((const char *)root + e3->u2.OffsetToData);
if (e1->u1.s1.NameIsString)
if (e1->u.s.NameIsString)
{
dump_data( RVA( data->OffsetToData, data->Size ), data->Size, " " );
}
else switch(e1->u1.s2.Id)
else switch(e1->u.Id)
{
case 6:
dump_string_data( RVA( data->OffsetToData, data->Size ), data->Size,
e2->u1.s2.Id, " " );
dump_string_data( RVA( data->OffsetToData, data->Size ), data->Size, e2->u.Id, " " );
break;
case 11:
dump_msgtable_data( RVA( data->OffsetToData, data->Size ), data->Size,
e2->u1.s2.Id, " " );
e2->u.Id, " " );
break;
default:
dump_data( RVA( data->OffsetToData, data->Size ), data->Size, " " );