James Hawkins : advpack: Forward GetVersionFromFileA/ ExA to their Unicode counterparts.

Alexandre Julliard julliard at wine.codeweavers.com
Fri Mar 24 07:13:10 CST 2006


Module: wine
Branch: refs/heads/master
Commit: 7eaaa93a577d2cb35c01c2a8e801060e6e8b8acd
URL:    http://source.winehq.org/git/?p=wine.git;a=commit;h=7eaaa93a577d2cb35c01c2a8e801060e6e8b8acd

Author: James Hawkins <truiken at gmail.com>
Date:   Thu Mar 23 23:10:21 2006 -0600

advpack: Forward GetVersionFromFileA/ExA to their Unicode counterparts.

---

 dlls/advpack/advpack.spec |    4 +-
 dlls/advpack/files.c      |   73 +++++++++++++++++++++++++++++++++++----------
 2 files changed, 59 insertions(+), 18 deletions(-)

diff --git a/dlls/advpack/advpack.spec b/dlls/advpack/advpack.spec
index 6d4b1d1..3b54041 100644
--- a/dlls/advpack/advpack.spec
+++ b/dlls/advpack/advpack.spec
@@ -29,10 +29,10 @@
 # stdcall FileSaveRestoreOnINFW(ptr wstr wstr wstr wstr wstr long)
 @ stdcall FileSaveRestoreOnINF(ptr str str str str str long) FileSaveRestoreOnINFA
 @ 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 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 IsNTAdmin(long ptr)
 @ stdcall LaunchINFSectionA(ptr ptr str long)
diff --git a/dlls/advpack/files.c b/dlls/advpack/files.c
index 287888c..fa994e3 100644
--- a/dlls/advpack/files.c
+++ b/dlls/advpack/files.c
@@ -822,7 +822,7 @@ HRESULT WINAPI FileSaveRestoreOnINFA(HWN
 /***********************************************************************
  *             GetVersionFromFileA     (ADVPACK.@)
  *
- * See GetVersionFromFileEx.
+ * See GetVersionFromFileExW.
  */
 HRESULT WINAPI GetVersionFromFileA(LPCSTR Filename, LPDWORD MajorVer,
                                    LPDWORD MinorVer, BOOL Version )
@@ -831,6 +831,18 @@ HRESULT WINAPI GetVersionFromFileA(LPCST
     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 */
 typedef struct tagLANGANDCODEPAGE
 {
@@ -841,6 +853,28 @@ typedef struct tagLANGANDCODEPAGE
 /***********************************************************************
  *             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.
  *
  * PARAMS
@@ -856,41 +890,48 @@ typedef struct tagLANGANDCODEPAGE
  *   If bVersion is TRUE, version information is retrieved, else
  *   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 )
 {
     VS_FIXEDFILEINFO *pFixedVersionInfo;
     LANGANDCODEPAGE *pLangAndCodePage;
     DWORD dwHandle, dwInfoSize;
-    CHAR szWinDir[MAX_PATH];
-    CHAR szFile[MAX_PATH];
+    WCHAR szWinDir[MAX_PATH];
+    WCHAR szFile[MAX_PATH];
     LPVOID pVersionInfo = NULL;
     BOOL bFileCopied = FALSE;
     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;
     *pdwMSVer = 0;
 
-    lstrcpynA(szFile, lpszFilename, MAX_PATH);
+    lstrcpynW(szFile, lpszFilename, MAX_PATH);
 
-    dwInfoSize = GetFileVersionInfoSizeA(szFile, &dwHandle);
+    dwInfoSize = GetFileVersionInfoSizeW(szFile, &dwHandle);
     if (!dwInfoSize)
     {
         /* check that the file exists */
-        if (GetFileAttributesA(szFile) == INVALID_FILE_ATTRIBUTES)
+        if (GetFileAttributesW(szFile) == INVALID_FILE_ATTRIBUTES)
             return S_OK;
 
         /* file exists, but won't be found by GetFileVersionInfoSize,
         * so copy it to the temp dir where it will be found.
         */
-        GetWindowsDirectoryA(szWinDir, MAX_PATH);
-        GetTempFileNameA(szWinDir, NULL, 0, szFile);
-        CopyFileA(lpszFilename, szFile, FALSE);
+        GetWindowsDirectoryW(szWinDir, MAX_PATH);
+        GetTempFileNameW(szWinDir, NULL, 0, szFile);
+        CopyFileW(lpszFilename, szFile, FALSE);
         bFileCopied = TRUE;
 
-        dwInfoSize = GetFileVersionInfoSizeA(szFile, &dwHandle);
+        dwInfoSize = GetFileVersionInfoSizeW(szFile, &dwHandle);
         if (!dwInfoSize)
             goto done;
     }
@@ -899,12 +940,12 @@ HRESULT WINAPI GetVersionFromFileExA(LPC
     if (!pVersionInfo)
         goto done;
 
-    if (!GetFileVersionInfoA(szFile, dwHandle, dwInfoSize, pVersionInfo))
+    if (!GetFileVersionInfoW(szFile, dwHandle, dwInfoSize, pVersionInfo))
         goto done;
 
     if (bVersion)
     {
-        if (!VerQueryValueA(pVersionInfo, "\\",
+        if (!VerQueryValueW(pVersionInfo, backslash,
             (LPVOID *)&pFixedVersionInfo, &uValueLen))
             goto done;
 
@@ -916,7 +957,7 @@ HRESULT WINAPI GetVersionFromFileExA(LPC
     }
     else
     {
-        if (!VerQueryValueA(pVersionInfo, "\\VarFileInfo\\Translation",
+        if (!VerQueryValueW(pVersionInfo, translation,
              (LPVOID *)&pLangAndCodePage, &uValueLen))
             goto done;
 
@@ -931,7 +972,7 @@ done:
     HeapFree(GetProcessHeap(), 0, pVersionInfo);
 
     if (bFileCopied)
-        DeleteFileA(szFile);
+        DeleteFileW(szFile);
 
     return S_OK;
 }




More information about the wine-cvs mailing list