mirror of
https://github.com/reactos/reactos.git
synced 2024-07-02 18:54:25 +00:00
[VERSION]
* Sync with Wine 1.7.17. CORE-8080 svn path=/trunk/; revision=63002
This commit is contained in:
parent
283f51f64b
commit
4c8d114899
|
@ -84,9 +84,9 @@ static const IMAGE_RESOURCE_DIRECTORY *find_entry_by_id( const IMAGE_RESOURCE_DI
|
||||||
while (min <= max)
|
while (min <= max)
|
||||||
{
|
{
|
||||||
pos = (min + max) / 2;
|
pos = (min + max) / 2;
|
||||||
if (entry[pos].u1.Id == id)
|
if (entry[pos].u.Id == id)
|
||||||
return (const IMAGE_RESOURCE_DIRECTORY *)((const char *)root + entry[pos].u2.s2.OffsetToDirectory);
|
return (const IMAGE_RESOURCE_DIRECTORY *)((const char *)root + entry[pos].u2.s2.OffsetToDirectory);
|
||||||
if (entry[pos].u1.Id > id) max = pos - 1;
|
if (entry[pos].u.Id > id) max = pos - 1;
|
||||||
else min = pos + 1;
|
else min = pos + 1;
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -109,6 +109,46 @@ static const IMAGE_RESOURCE_DIRECTORY *find_entry_default( const IMAGE_RESOURCE_
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**********************************************************************
|
||||||
|
* push_language
|
||||||
|
*
|
||||||
|
* push a language onto the list of languages to try
|
||||||
|
*/
|
||||||
|
static inline int push_language( WORD *list, int pos, WORD lang )
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
for (i = 0; i < pos; i++) if (list[i] == lang) return pos;
|
||||||
|
list[pos++] = lang;
|
||||||
|
return pos;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**********************************************************************
|
||||||
|
* find_entry_language
|
||||||
|
*/
|
||||||
|
static const IMAGE_RESOURCE_DIRECTORY *find_entry_language( const IMAGE_RESOURCE_DIRECTORY *dir,
|
||||||
|
const void *root )
|
||||||
|
{
|
||||||
|
const IMAGE_RESOURCE_DIRECTORY *ret;
|
||||||
|
WORD list[9];
|
||||||
|
int i, pos = 0;
|
||||||
|
|
||||||
|
/* cf. LdrFindResource_U */
|
||||||
|
pos = push_language( list, pos, MAKELANGID( LANG_NEUTRAL, SUBLANG_NEUTRAL ) );
|
||||||
|
pos = push_language( list, pos, LANGIDFROMLCID( NtCurrentTeb()->CurrentLocale ) );
|
||||||
|
pos = push_language( list, pos, GetUserDefaultLangID() );
|
||||||
|
pos = push_language( list, pos, MAKELANGID( PRIMARYLANGID(GetUserDefaultLangID()), SUBLANG_NEUTRAL ));
|
||||||
|
pos = push_language( list, pos, MAKELANGID( PRIMARYLANGID(GetUserDefaultLangID()), SUBLANG_DEFAULT ));
|
||||||
|
pos = push_language( list, pos, GetSystemDefaultLangID() );
|
||||||
|
pos = push_language( list, pos, MAKELANGID( PRIMARYLANGID(GetSystemDefaultLangID()), SUBLANG_NEUTRAL ));
|
||||||
|
pos = push_language( list, pos, MAKELANGID( PRIMARYLANGID(GetSystemDefaultLangID()), SUBLANG_DEFAULT ));
|
||||||
|
pos = push_language( list, pos, MAKELANGID( LANG_ENGLISH, SUBLANG_DEFAULT ) );
|
||||||
|
|
||||||
|
for (i = 0; i < pos; i++) if ((ret = find_entry_by_id( dir, list[i], root ))) return ret;
|
||||||
|
return find_entry_default( dir, root );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* read_xx_header [internal]
|
* read_xx_header [internal]
|
||||||
*/
|
*/
|
||||||
|
@ -160,7 +200,7 @@ static BOOL find_ne_resource( HFILE lzfd, DWORD *resLen, DWORD *resOff )
|
||||||
|
|
||||||
/* Read in NE header */
|
/* Read in NE header */
|
||||||
nehdoffset = LZSeek( lzfd, 0, SEEK_CUR );
|
nehdoffset = LZSeek( lzfd, 0, SEEK_CUR );
|
||||||
if ( sizeof(nehd) != LZRead( lzfd, (LPSTR)&nehd, sizeof(nehd) ) ) return 0;
|
if ( sizeof(nehd) != LZRead( lzfd, (LPSTR)&nehd, sizeof(nehd) ) ) return FALSE;
|
||||||
|
|
||||||
resTabSize = nehd.ne_restab - nehd.ne_rsrctab;
|
resTabSize = nehd.ne_restab - nehd.ne_rsrctab;
|
||||||
if ( !resTabSize )
|
if ( !resTabSize )
|
||||||
|
@ -235,7 +275,7 @@ static BOOL find_pe_resource( HFILE lzfd, DWORD *resLen, DWORD *resOff )
|
||||||
/* Read in PE header */
|
/* Read in PE header */
|
||||||
pehdoffset = LZSeek( lzfd, 0, SEEK_CUR );
|
pehdoffset = LZSeek( lzfd, 0, SEEK_CUR );
|
||||||
len = LZRead( lzfd, (LPSTR)&pehd, sizeof(pehd) );
|
len = LZRead( lzfd, (LPSTR)&pehd, sizeof(pehd) );
|
||||||
if (len < sizeof(pehd.nt32.FileHeader)) return 0;
|
if (len < sizeof(pehd.nt32.FileHeader)) return FALSE;
|
||||||
if (len < sizeof(pehd)) memset( (char *)&pehd + len, 0, sizeof(pehd) - len );
|
if (len < sizeof(pehd)) memset( (char *)&pehd + len, 0, sizeof(pehd) - len );
|
||||||
|
|
||||||
switch (pehd.nt32.OptionalHeader.Magic)
|
switch (pehd.nt32.OptionalHeader.Magic)
|
||||||
|
@ -247,7 +287,7 @@ static BOOL find_pe_resource( HFILE lzfd, DWORD *resLen, DWORD *resOff )
|
||||||
resDataDir = pehd.nt64.OptionalHeader.DataDirectory + IMAGE_DIRECTORY_ENTRY_RESOURCE;
|
resDataDir = pehd.nt64.OptionalHeader.DataDirectory + IMAGE_DIRECTORY_ENTRY_RESOURCE;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return 0;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !resDataDir->Size )
|
if ( !resDataDir->Size )
|
||||||
|
@ -316,7 +356,7 @@ static BOOL find_pe_resource( HFILE lzfd, DWORD *resLen, DWORD *resOff )
|
||||||
TRACE("No resid entry found\n" );
|
TRACE("No resid entry found\n" );
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
resPtr = find_entry_default( resPtr, resDir );
|
resPtr = find_entry_language( resPtr, resDir );
|
||||||
if ( !resPtr )
|
if ( !resPtr )
|
||||||
{
|
{
|
||||||
TRACE("No default language entry found\n" );
|
TRACE("No default language entry found\n" );
|
||||||
|
@ -527,7 +567,7 @@ typedef struct
|
||||||
{
|
{
|
||||||
WORD wLength;
|
WORD wLength;
|
||||||
WORD wValueLength;
|
WORD wValueLength;
|
||||||
WORD wType;
|
WORD wType; /* 1:Text, 0:Binary */
|
||||||
WCHAR szKey[1];
|
WCHAR szKey[1];
|
||||||
#if 0 /* variable length structure */
|
#if 0 /* variable length structure */
|
||||||
/* DWORD aligned */
|
/* DWORD aligned */
|
||||||
|
@ -847,7 +887,7 @@ static BOOL VersionInfo16_QueryValue( const VS_VERSION_INFO_STRUCT16 *info, LPCS
|
||||||
* Gets a value from a 32-bit PE resource
|
* Gets a value from a 32-bit PE resource
|
||||||
*/
|
*/
|
||||||
static BOOL VersionInfo32_QueryValue( const VS_VERSION_INFO_STRUCT32 *info, LPCWSTR lpSubBlock,
|
static BOOL VersionInfo32_QueryValue( const VS_VERSION_INFO_STRUCT32 *info, LPCWSTR lpSubBlock,
|
||||||
LPVOID *lplpBuffer, UINT *puLen )
|
LPVOID *lplpBuffer, UINT *puLen, BOOL *pbText )
|
||||||
{
|
{
|
||||||
TRACE("lpSubBlock : (%s)\n", debugstr_w(lpSubBlock));
|
TRACE("lpSubBlock : (%s)\n", debugstr_w(lpSubBlock));
|
||||||
|
|
||||||
|
@ -883,6 +923,8 @@ static BOOL VersionInfo32_QueryValue( const VS_VERSION_INFO_STRUCT32 *info, LPCW
|
||||||
*lplpBuffer = VersionInfo32_Value( info );
|
*lplpBuffer = VersionInfo32_Value( info );
|
||||||
if (puLen)
|
if (puLen)
|
||||||
*puLen = info->wValueLength;
|
*puLen = info->wValueLength;
|
||||||
|
if (pbText)
|
||||||
|
*pbText = info->wType;
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
@ -894,7 +936,6 @@ BOOL WINAPI VerQueryValueA( LPCVOID pBlock, LPCSTR lpSubBlock,
|
||||||
LPVOID *lplpBuffer, PUINT puLen )
|
LPVOID *lplpBuffer, PUINT puLen )
|
||||||
{
|
{
|
||||||
static const char rootA[] = "\\";
|
static const char rootA[] = "\\";
|
||||||
static const char varfileinfoA[] = "\\VarFileInfo\\Translation";
|
|
||||||
const VS_VERSION_INFO_STRUCT16 *info = pBlock;
|
const VS_VERSION_INFO_STRUCT16 *info = pBlock;
|
||||||
|
|
||||||
TRACE("(%p,%s,%p,%p)\n",
|
TRACE("(%p,%s,%p,%p)\n",
|
||||||
|
@ -908,7 +949,7 @@ BOOL WINAPI VerQueryValueA( LPCVOID pBlock, LPCSTR lpSubBlock,
|
||||||
|
|
||||||
if ( !VersionInfoIs16( info ) )
|
if ( !VersionInfoIs16( info ) )
|
||||||
{
|
{
|
||||||
BOOL ret;
|
BOOL ret, isText;
|
||||||
INT len;
|
INT len;
|
||||||
LPWSTR lpSubBlockW;
|
LPWSTR lpSubBlockW;
|
||||||
|
|
||||||
|
@ -920,11 +961,11 @@ BOOL WINAPI VerQueryValueA( LPCVOID pBlock, LPCSTR lpSubBlock,
|
||||||
|
|
||||||
MultiByteToWideChar(CP_ACP, 0, lpSubBlock, -1, lpSubBlockW, len);
|
MultiByteToWideChar(CP_ACP, 0, lpSubBlock, -1, lpSubBlockW, len);
|
||||||
|
|
||||||
ret = VersionInfo32_QueryValue(pBlock, lpSubBlockW, lplpBuffer, puLen);
|
ret = VersionInfo32_QueryValue(pBlock, lpSubBlockW, lplpBuffer, puLen, &isText);
|
||||||
|
|
||||||
HeapFree(GetProcessHeap(), 0, lpSubBlockW);
|
HeapFree(GetProcessHeap(), 0, lpSubBlockW);
|
||||||
|
|
||||||
if (ret && strcasecmp( lpSubBlock, rootA ) && strcasecmp( lpSubBlock, varfileinfoA ))
|
if (ret && isText)
|
||||||
{
|
{
|
||||||
/* Set lpBuffer so it points to the 'empty' area where we store
|
/* Set lpBuffer so it points to the 'empty' area where we store
|
||||||
* the converted strings
|
* the converted strings
|
||||||
|
@ -1000,7 +1041,7 @@ BOOL WINAPI VerQueryValueW( LPCVOID pBlock, LPCWSTR lpSubBlock,
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
return VersionInfo32_QueryValue(info, lpSubBlock, lplpBuffer, puLen);
|
return VersionInfo32_QueryValue(info, lpSubBlock, lplpBuffer, puLen, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -4672,10 +4672,10 @@ typedef struct _IMAGE_RESOURCE_DIRECTORY_ENTRY {
|
||||||
_ANONYMOUS_STRUCT struct {
|
_ANONYMOUS_STRUCT struct {
|
||||||
DWORD NameOffset:31;
|
DWORD NameOffset:31;
|
||||||
DWORD NameIsString:1;
|
DWORD NameIsString:1;
|
||||||
} DUMMYSTRUCTNAME1;
|
} DUMMYSTRUCTNAME;
|
||||||
DWORD Name;
|
DWORD Name;
|
||||||
WORD Id;
|
WORD Id;
|
||||||
} DUMMYUNIONNAME1;
|
} DUMMYUNIONNAME;
|
||||||
_ANONYMOUS_UNION union {
|
_ANONYMOUS_UNION union {
|
||||||
DWORD OffsetToData;
|
DWORD OffsetToData;
|
||||||
_ANONYMOUS_STRUCT struct {
|
_ANONYMOUS_STRUCT struct {
|
||||||
|
|
|
@ -199,7 +199,7 @@ reactos/dll/win32/urlmon # Synced to Wine-1.7.17
|
||||||
reactos/dll/win32/usp10 # Synced to Wine-1.7.17
|
reactos/dll/win32/usp10 # Synced to Wine-1.7.17
|
||||||
reactos/dll/win32/uxtheme # Forked
|
reactos/dll/win32/uxtheme # Forked
|
||||||
reactos/dll/win32/vbscript # Synced to Wine-1.7.17
|
reactos/dll/win32/vbscript # Synced to Wine-1.7.17
|
||||||
reactos/dll/win32/version # Synced to Wine-1.7.1
|
reactos/dll/win32/version # Synced to Wine-1.7.17
|
||||||
reactos/dll/win32/wbemdisp # Synced to Wine-1.7.17
|
reactos/dll/win32/wbemdisp # Synced to Wine-1.7.17
|
||||||
reactos/dll/win32/wbemprox # Synced to Wine-1.7.17
|
reactos/dll/win32/wbemprox # Synced to Wine-1.7.17
|
||||||
reactos/dll/win32/wer # Autosync
|
reactos/dll/win32/wer # Autosync
|
||||||
|
|
Loading…
Reference in a new issue