version: Fix the VerQueryValueA/W() prototypes.
Francois Gouget
fgouget at free.fr
Thu May 31 06:59:05 CDT 2007
---
In the current PSDK versions the first parameter to VerQueryValueA/W()
is const, although they do write to the 'empty' part of that buffer.
dlls/version/info.c | 36 +++++++++++++++++++++---------------
include/winver.h | 4 ++--
2 files changed, 23 insertions(+), 17 deletions(-)
diff --git a/dlls/version/info.c b/dlls/version/info.c
index 40dfcec..9c24668 100644
--- a/dlls/version/info.c
+++ b/dlls/version/info.c
@@ -206,7 +206,7 @@ typedef struct
} VS_VERSION_INFO_STRUCT32;
#define VersionInfoIs16( ver ) \
- ( ((VS_VERSION_INFO_STRUCT16 *)ver)->szKey[0] >= ' ' )
+ ( ((const VS_VERSION_INFO_STRUCT16 *)ver)->szKey[0] >= ' ' )
#define DWORD_ALIGN( base, ptr ) \
( (LPBYTE)(base) + ((((LPBYTE)(ptr) - (LPBYTE)(base)) + 3) & ~3) )
@@ -217,10 +217,10 @@ typedef struct
DWORD_ALIGN( (ver), (ver)->szKey + strlenW((ver)->szKey) + 1 )
#define VersionInfo16_Children( ver ) \
- (VS_VERSION_INFO_STRUCT16 *)( VersionInfo16_Value( ver ) + \
+ (const VS_VERSION_INFO_STRUCT16 *)( VersionInfo16_Value( ver ) + \
( ( (ver)->wValueLength + 3 ) & ~3 ) )
#define VersionInfo32_Children( ver ) \
- (VS_VERSION_INFO_STRUCT32 *)( VersionInfo32_Value( ver ) + \
+ (const VS_VERSION_INFO_STRUCT32 *)( VersionInfo32_Value( ver ) + \
( ( (ver)->wValueLength * \
((ver)->wType? 2 : 1) + 3 ) & ~3 ) )
@@ -632,10 +632,10 @@ BOOL WINAPI GetFileVersionInfoA( LPCSTR filename, DWORD handle,
/***********************************************************************
* VersionInfo16_FindChild [internal]
*/
-static VS_VERSION_INFO_STRUCT16 *VersionInfo16_FindChild( VS_VERSION_INFO_STRUCT16 *info,
+static const VS_VERSION_INFO_STRUCT16 *VersionInfo16_FindChild( const VS_VERSION_INFO_STRUCT16 *info,
LPCSTR szKey, UINT cbKey )
{
- VS_VERSION_INFO_STRUCT16 *child = VersionInfo16_Children( info );
+ const VS_VERSION_INFO_STRUCT16 *child = VersionInfo16_Children( info );
while ((char *)child < (char *)info + info->wLength )
{
@@ -652,10 +652,10 @@ static VS_VERSION_INFO_STRUCT16 *VersionInfo16_FindChild( VS_VERSION_INFO_STRUCT
/***********************************************************************
* VersionInfo32_FindChild [internal]
*/
-static VS_VERSION_INFO_STRUCT32 *VersionInfo32_FindChild( VS_VERSION_INFO_STRUCT32 *info,
+static const VS_VERSION_INFO_STRUCT32 *VersionInfo32_FindChild( const VS_VERSION_INFO_STRUCT32 *info,
LPCWSTR szKey, UINT cbKey )
{
- VS_VERSION_INFO_STRUCT32 *child = VersionInfo32_Children( info );
+ const VS_VERSION_INFO_STRUCT32 *child = VersionInfo32_Children( info );
while ((char *)child < (char *)info + info->wLength )
{
@@ -673,7 +673,7 @@ static VS_VERSION_INFO_STRUCT32 *VersionInfo32_FindChild( VS_VERSION_INFO_STRUCT
*
* Gets a value from a 16-bit NE resource
*/
-static BOOL WINAPI VersionInfo16_QueryValue( VS_VERSION_INFO_STRUCT16 *info, LPCSTR lpSubBlock,
+static BOOL WINAPI VersionInfo16_QueryValue( const VS_VERSION_INFO_STRUCT16 *info, LPCSTR lpSubBlock,
LPVOID *lplpBuffer, UINT *puLen )
{
while ( *lpSubBlock )
@@ -717,7 +717,7 @@ static BOOL WINAPI VersionInfo16_QueryValue( VS_VERSION_INFO_STRUCT16 *info, LPC
*
* Gets a value from a 32-bit PE resource
*/
-static BOOL WINAPI VersionInfo32_QueryValue( VS_VERSION_INFO_STRUCT32 *info, LPCWSTR lpSubBlock,
+static BOOL WINAPI VersionInfo32_QueryValue( const VS_VERSION_INFO_STRUCT32 *info, LPCWSTR lpSubBlock,
LPVOID *lplpBuffer, UINT *puLen )
{
TRACE("lpSubBlock : (%s)\n", debugstr_w(lpSubBlock));
@@ -761,12 +761,12 @@ static BOOL WINAPI VersionInfo32_QueryValue( VS_VERSION_INFO_STRUCT32 *info, LPC
/***********************************************************************
* VerQueryValueA [VERSION.@]
*/
-BOOL WINAPI VerQueryValueA( LPVOID pBlock, LPCSTR lpSubBlock,
+BOOL WINAPI VerQueryValueA( LPCVOID pBlock, LPCSTR lpSubBlock,
LPVOID *lplpBuffer, UINT *puLen )
{
static const char rootA[] = "\\";
static const char varfileinfoA[] = "\\VarFileInfo\\Translation";
- VS_VERSION_INFO_STRUCT16 *info = (VS_VERSION_INFO_STRUCT16 *)pBlock;
+ const VS_VERSION_INFO_STRUCT16 *info = (const VS_VERSION_INFO_STRUCT16 *)pBlock;
TRACE("(%p,%s,%p,%p)\n",
pBlock, debugstr_a(lpSubBlock), lplpBuffer, puLen );
@@ -791,8 +791,11 @@ BOOL WINAPI VerQueryValueA( LPVOID pBlock, LPCSTR lpSubBlock,
if (ret && strcasecmp( lpSubBlock, rootA ) && strcasecmp( lpSubBlock, varfileinfoA ))
{
+ /* Set lpBuffer so it points to the 'empty' area where we store
+ * the converted strings
+ */
LPSTR lpBufferA = (LPSTR)pBlock + info->wLength + 4;
- DWORD pos = (LPSTR)*lplpBuffer - (LPSTR)pBlock;
+ DWORD pos = (LPCSTR)*lplpBuffer - (LPCSTR)pBlock;
len = WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)*lplpBuffer, -1,
lpBufferA + pos, info->wLength - pos, NULL, NULL);
@@ -808,14 +811,14 @@ BOOL WINAPI VerQueryValueA( LPVOID pBlock, LPCSTR lpSubBlock,
/***********************************************************************
* VerQueryValueW [VERSION.@]
*/
-BOOL WINAPI VerQueryValueW( LPVOID pBlock, LPCWSTR lpSubBlock,
+BOOL WINAPI VerQueryValueW( LPCVOID pBlock, LPCWSTR lpSubBlock,
LPVOID *lplpBuffer, UINT *puLen )
{
static const WCHAR rootW[] = { '\\', 0 };
static const WCHAR varfileinfoW[] = { '\\','V','a','r','F','i','l','e','I','n','f','o',
'\\','T','r','a','n','s','l','a','t','i','o','n', 0 };
- VS_VERSION_INFO_STRUCT32 *info = (VS_VERSION_INFO_STRUCT32 *)pBlock;
+ const VS_VERSION_INFO_STRUCT32 *info = (const VS_VERSION_INFO_STRUCT32 *)pBlock;
TRACE("(%p,%s,%p,%p)\n",
pBlock, debugstr_w(lpSubBlock), lplpBuffer, puLen );
@@ -840,8 +843,11 @@ BOOL WINAPI VerQueryValueW( LPVOID pBlock, LPCWSTR lpSubBlock,
if (ret && strcmpiW( lpSubBlock, rootW ) && strcmpiW( lpSubBlock, varfileinfoW ))
{
+ /* Set lpBuffer so it points to the 'empty' area where we store
+ * the converted strings
+ */
LPWSTR lpBufferW = (LPWSTR)((LPSTR)pBlock + info->wLength);
- DWORD pos = (LPSTR)*lplpBuffer - (LPSTR)pBlock;
+ DWORD pos = (LPCSTR)*lplpBuffer - (LPCSTR)pBlock;
DWORD max = (info->wLength - sizeof(VS_FIXEDFILEINFO)) * 4 - info->wLength;
len = MultiByteToWideChar(CP_ACP, 0, (LPCSTR)*lplpBuffer, -1,
diff --git a/include/winver.h b/include/winver.h
index ff4233a..c38ad38 100644
--- a/include/winver.h
+++ b/include/winver.h
@@ -159,8 +159,8 @@ DWORD WINAPI VerInstallFileW(UINT,LPWSTR,LPWSTR,LPWSTR,LPWSTR,LPWSTR,LPWST
DWORD WINAPI VerLanguageNameA(UINT,LPSTR,UINT);
DWORD WINAPI VerLanguageNameW(UINT,LPWSTR,UINT);
#define VerLanguageName WINELIB_NAME_AW(VerLanguageName)
-BOOL WINAPI VerQueryValueA(LPVOID,LPCSTR,LPVOID*,UINT*);
-BOOL WINAPI VerQueryValueW(LPVOID,LPCWSTR,LPVOID*,UINT*);
+BOOL WINAPI VerQueryValueA(LPCVOID,LPCSTR,LPVOID*,UINT*);
+BOOL WINAPI VerQueryValueW(LPCVOID,LPCWSTR,LPVOID*,UINT*);
#define VerQueryValue WINELIB_NAME_AW(VerQueryValue)
DWORD WINAPI GetFileVersionInfoSizeA(LPCSTR,LPDWORD);
DWORD WINAPI GetFileVersionInfoSizeW(LPCWSTR,LPDWORD);
--
1.4.4.4
More information about the wine-patches
mailing list