advpack: Forward GetVersionFromFileA/ExA to their Unicode counterparts.

This commit is contained in:
James Hawkins 2006-03-23 23:10:21 -06:00 committed by Alexandre Julliard
parent 5018d3202a
commit 7eaaa93a57
2 changed files with 59 additions and 18 deletions

View File

@ -29,10 +29,10 @@
# stdcall FileSaveRestoreOnINFW(ptr wstr wstr wstr wstr wstr long) # stdcall FileSaveRestoreOnINFW(ptr wstr wstr wstr wstr wstr long)
@ stdcall FileSaveRestoreOnINF(ptr str str str str str long) FileSaveRestoreOnINFA @ stdcall FileSaveRestoreOnINF(ptr str str str str str long) FileSaveRestoreOnINFA
@ stdcall GetVersionFromFileA(str ptr ptr long) @ stdcall GetVersionFromFileA(str ptr ptr long)
# stdcall GetVersionFromFileW(wstr ptr ptr long) @ stdcall GetVersionFromFileW(wstr ptr ptr long)
@ stdcall GetVersionFromFile(str ptr ptr long) GetVersionFromFileA @ stdcall GetVersionFromFile(str ptr ptr long) GetVersionFromFileA
@ stdcall GetVersionFromFileExA(str ptr ptr long) @ stdcall GetVersionFromFileExA(str ptr ptr long)
# stdcall GetVersionFromFileExW(wstr ptr ptr long) @ stdcall GetVersionFromFileExW(wstr ptr ptr long)
@ stdcall GetVersionFromFileEx(str ptr ptr long) GetVersionFromFileExA @ stdcall GetVersionFromFileEx(str ptr ptr long) GetVersionFromFileExA
@ stdcall IsNTAdmin(long ptr) @ stdcall IsNTAdmin(long ptr)
@ stdcall LaunchINFSectionA(ptr ptr str long) @ stdcall LaunchINFSectionA(ptr ptr str long)

View File

@ -822,7 +822,7 @@ HRESULT WINAPI FileSaveRestoreOnINFA(HWND hWnd, LPCSTR pszTitle, LPCSTR pszINF,
/*********************************************************************** /***********************************************************************
* GetVersionFromFileA (ADVPACK.@) * GetVersionFromFileA (ADVPACK.@)
* *
* See GetVersionFromFileEx. * See GetVersionFromFileExW.
*/ */
HRESULT WINAPI GetVersionFromFileA(LPCSTR Filename, LPDWORD MajorVer, HRESULT WINAPI GetVersionFromFileA(LPCSTR Filename, LPDWORD MajorVer,
LPDWORD MinorVer, BOOL Version ) LPDWORD MinorVer, BOOL Version )
@ -831,6 +831,18 @@ HRESULT WINAPI GetVersionFromFileA(LPCSTR Filename, LPDWORD MajorVer,
return GetVersionFromFileExA(Filename, MajorVer, MinorVer, Version); return GetVersionFromFileExA(Filename, MajorVer, MinorVer, Version);
} }
/***********************************************************************
* GetVersionFromFileW (ADVPACK.@)
*
* See GetVersionFromFileExW.
*/
HRESULT WINAPI GetVersionFromFileW(LPCWSTR Filename, LPDWORD MajorVer,
LPDWORD MinorVer, BOOL Version )
{
TRACE("(%s, %p, %p, %d)\n", debugstr_w(Filename), MajorVer, MinorVer, Version);
return GetVersionFromFileExW(Filename, MajorVer, MinorVer, Version);
}
/* data for GetVersionFromFileEx */ /* data for GetVersionFromFileEx */
typedef struct tagLANGANDCODEPAGE typedef struct tagLANGANDCODEPAGE
{ {
@ -841,6 +853,28 @@ typedef struct tagLANGANDCODEPAGE
/*********************************************************************** /***********************************************************************
* GetVersionFromFileExA (ADVPACK.@) * GetVersionFromFileExA (ADVPACK.@)
* *
* See GetVersionFromFileExW.
*/
HRESULT WINAPI GetVersionFromFileExA(LPCSTR lpszFilename, LPDWORD pdwMSVer,
LPDWORD pdwLSVer, BOOL bVersion )
{
UNICODE_STRING filename;
HRESULT res;
TRACE("(%s, %p, %p, %d)\n", lpszFilename, pdwMSVer, pdwLSVer, bVersion);
RtlCreateUnicodeStringFromAsciiz(&filename, lpszFilename);
res = GetVersionFromFileExW(filename.Buffer, pdwMSVer, pdwLSVer, bVersion);
RtlFreeUnicodeString(&filename);
return res;
}
/***********************************************************************
* GetVersionFromFileExW (ADVPACK.@)
*
* Gets the files version or language information. * Gets the files version or language information.
* *
* PARAMS * PARAMS
@ -856,41 +890,48 @@ typedef struct tagLANGANDCODEPAGE
* If bVersion is TRUE, version information is retrieved, else * If bVersion is TRUE, version information is retrieved, else
* pdwMSVer gets the language ID and pdwLSVer gets the codepage ID. * pdwMSVer gets the language ID and pdwLSVer gets the codepage ID.
*/ */
HRESULT WINAPI GetVersionFromFileExA(LPCSTR lpszFilename, LPDWORD pdwMSVer, HRESULT WINAPI GetVersionFromFileExW(LPCWSTR lpszFilename, LPDWORD pdwMSVer,
LPDWORD pdwLSVer, BOOL bVersion ) LPDWORD pdwLSVer, BOOL bVersion )
{ {
VS_FIXEDFILEINFO *pFixedVersionInfo; VS_FIXEDFILEINFO *pFixedVersionInfo;
LANGANDCODEPAGE *pLangAndCodePage; LANGANDCODEPAGE *pLangAndCodePage;
DWORD dwHandle, dwInfoSize; DWORD dwHandle, dwInfoSize;
CHAR szWinDir[MAX_PATH]; WCHAR szWinDir[MAX_PATH];
CHAR szFile[MAX_PATH]; WCHAR szFile[MAX_PATH];
LPVOID pVersionInfo = NULL; LPVOID pVersionInfo = NULL;
BOOL bFileCopied = FALSE; BOOL bFileCopied = FALSE;
UINT uValueLen; UINT uValueLen;
TRACE("(%s, %p, %p, %d)\n", lpszFilename, pdwMSVer, pdwLSVer, bVersion); static WCHAR backslash[] = {'\\',0};
static WCHAR translation[] = {
'\\','V','a','r','F','i','l','e','I','n','f','o',
'\\','T','r','a','n','s','l','a','t','i','o','n',0
};
TRACE("(%s, %p, %p, %d)\n", debugstr_w(lpszFilename),
pdwMSVer, pdwLSVer, bVersion);
*pdwLSVer = 0; *pdwLSVer = 0;
*pdwMSVer = 0; *pdwMSVer = 0;
lstrcpynA(szFile, lpszFilename, MAX_PATH); lstrcpynW(szFile, lpszFilename, MAX_PATH);
dwInfoSize = GetFileVersionInfoSizeA(szFile, &dwHandle); dwInfoSize = GetFileVersionInfoSizeW(szFile, &dwHandle);
if (!dwInfoSize) if (!dwInfoSize)
{ {
/* check that the file exists */ /* check that the file exists */
if (GetFileAttributesA(szFile) == INVALID_FILE_ATTRIBUTES) if (GetFileAttributesW(szFile) == INVALID_FILE_ATTRIBUTES)
return S_OK; return S_OK;
/* file exists, but won't be found by GetFileVersionInfoSize, /* file exists, but won't be found by GetFileVersionInfoSize,
* so copy it to the temp dir where it will be found. * so copy it to the temp dir where it will be found.
*/ */
GetWindowsDirectoryA(szWinDir, MAX_PATH); GetWindowsDirectoryW(szWinDir, MAX_PATH);
GetTempFileNameA(szWinDir, NULL, 0, szFile); GetTempFileNameW(szWinDir, NULL, 0, szFile);
CopyFileA(lpszFilename, szFile, FALSE); CopyFileW(lpszFilename, szFile, FALSE);
bFileCopied = TRUE; bFileCopied = TRUE;
dwInfoSize = GetFileVersionInfoSizeA(szFile, &dwHandle); dwInfoSize = GetFileVersionInfoSizeW(szFile, &dwHandle);
if (!dwInfoSize) if (!dwInfoSize)
goto done; goto done;
} }
@ -899,12 +940,12 @@ HRESULT WINAPI GetVersionFromFileExA(LPCSTR lpszFilename, LPDWORD pdwMSVer,
if (!pVersionInfo) if (!pVersionInfo)
goto done; goto done;
if (!GetFileVersionInfoA(szFile, dwHandle, dwInfoSize, pVersionInfo)) if (!GetFileVersionInfoW(szFile, dwHandle, dwInfoSize, pVersionInfo))
goto done; goto done;
if (bVersion) if (bVersion)
{ {
if (!VerQueryValueA(pVersionInfo, "\\", if (!VerQueryValueW(pVersionInfo, backslash,
(LPVOID *)&pFixedVersionInfo, &uValueLen)) (LPVOID *)&pFixedVersionInfo, &uValueLen))
goto done; goto done;
@ -916,7 +957,7 @@ HRESULT WINAPI GetVersionFromFileExA(LPCSTR lpszFilename, LPDWORD pdwMSVer,
} }
else else
{ {
if (!VerQueryValueA(pVersionInfo, "\\VarFileInfo\\Translation", if (!VerQueryValueW(pVersionInfo, translation,
(LPVOID *)&pLangAndCodePage, &uValueLen)) (LPVOID *)&pLangAndCodePage, &uValueLen))
goto done; goto done;
@ -931,7 +972,7 @@ done:
HeapFree(GetProcessHeap(), 0, pVersionInfo); HeapFree(GetProcessHeap(), 0, pVersionInfo);
if (bFileCopied) if (bFileCopied)
DeleteFileA(szFile); DeleteFileW(szFile);
return S_OK; return S_OK;
} }