[Bug 21872] Webload fails to install dll properly (Version.dll VerInstallFile with VIFF_DONTDELETEOLD)

wine-bugs at winehq.org wine-bugs at winehq.org
Mon Jan 30 18:09:54 CST 2012


http://bugs.winehq.org/show_bug.cgi?id=21872

Anastasius Focht <focht at gmx.net> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
            Summary|Webload fails to install    |Webload fails to install
                   |dll properly (Version.dll   |dll properly (Version.dll
                   |VerInstallFile 8.3 short    |VerInstallFile with
                   |vs. existing long file      |VIFF_DONTDELETEOLD)
                   |name)                       |

--- Comment #10 from Anastasius Focht <focht at gmx.net> 2012-01-30 18:09:54 CST ---
Hello again,

well it's late so ... ;-)

VerInstallFile() flags -> VIFF_DONTDELETEOLD

MSDN says for VIFF_DONTDELETEOLD: "Installs the file without deleting the
previously installed file, if the previously installed file is not in the
destination directory."

http://source.winehq.org/git/wine.git/blob/6a8ba3616c7eebd2ea42deba2ce087d583d83320:/dlls/version/version.c#l1331

--- snip ---
1334 DWORD WINAPI VerInstallFileA(
1335         DWORD flags,LPCSTR srcfilename,LPCSTR destfilename,LPCSTR srcdir,
1336         LPCSTR destdir,LPCSTR curdir,LPSTR tmpfile,PUINT tmpfilelen )
1337 {
...
1424     if (!(flags & VIFF_FORCEINSTALL)) {
1425         VS_FIXEDFILEINFO *destvffi,*tmpvffi;
1426         buf1 = _fetch_versioninfo(destfn,&destvffi);
...
1455                 HeapFree(GetProcessHeap(), 0, buf2);
1456             } else
1457                 xret=VIF_MISMATCH|VIF_SRCOLD;
1458             HeapFree(GetProcessHeap(), 0, buf1);
1459         }
1460     }
...
1470     } else {
1471         if (INVALID_FILE_ATTRIBUTES!=GetFileAttributesA(destfn))
1472             if (!DeleteFileA(destfn)) {
1473                 xret|=_error2vif(GetLastError())|VIF_CANNOTDELETE;
1474                 DeleteFileA(tmpfn);
1475                 LZClose(hfsrc);
1476                 return xret;
1477             }
1478         if ((!(flags & VIFF_DONTDELETEOLD))        &&
1479             curdir                              &&
1480             *curdir                         &&
1481             lstrcmpiA(curdir,pdest)
1482         ) {
1483             char curfn[260];
1484 
1485             sprintf(curfn,"%s\\%s",curdir,destfilename);
1486             if (INVALID_FILE_ATTRIBUTES != GetFileAttributesA(curfn)) {
1487                 /* FIXME: check if in use ... if it is,
VIF_CANNOTDELETECUR */
1488                 if (!DeleteFileA(curfn))
1489                     xret|=_error2vif(GetLastError())|VIF_CANNOTDELETECUR;
1490             }
1491         }
1492         if (!MoveFileA(tmpfn,destfn)) {
1493             xret|=_error2vif(GetLastError())|VIF_CANNOTRENAME;
1494             DeleteFileA(tmpfn);
1495         }
1496     }
1497     LZClose(hfsrc);
1498     return xret;
1499 }
--- snip ---

Existing file prior calling VerInstallFileA(): "RWUXThemeS60.dll"

Winedbg session:

--- snip ---
Wine-dbg>bt
Backtrace:
=>0 0x7effc5ef VerInstallFileA+0x6c3(flags=0x2, srcfilename="~GLH0718.TMP",
destfilename="RWUX~OPY.DLL", srcdir="C:\Program Files\RadView\WebLOAD\bin",
destdir="C:\PROG~FBU\RadView\WebLOAD\bin",
curdir="C:\PROG~FBU\RadView\WebLOAD\bin", tmpfile="", tmpfilelen=0x33d4c4)
[/home/focht/projects/wine/wine-git/dlls/version/version.c:1472] in version
(0x0033d168)
  1 0x10014fd3 in glc3cb9.tmp (+0x14fd2) (0x0033d49c)
  2 0x10006dbd in glc3cb9.tmp (+0x6dbc) (0x0033e6a4)
  3 0x10005abb in glc3cb9.tmp (+0x5aba) (0x0033e7ac)
  4 0x10004314 in glc3cb9.tmp (+0x4313) (0x0033f4c4)
...
Wine-dbg>n
1471        if (INVALID_FILE_ATTRIBUTES!=GetFileAttributesA(destfn))
Wine-dbg>n
1472            if (!DeleteFileA(destfn)) {
--- snip ---

The source and destination file are binary identical.
Maybe VerInstallFile() isn't supposed to delete the destination in this case?
Another method might be overwriting the destination file (instead of
delete/move), keeping the original long file name.

Regards

-- 
Configure bugmail: http://bugs.winehq.org/userprefs.cgi?tab=email
Do not reply to this email, post in Bugzilla using the
above URL to reply.
------- You are receiving this mail because: -------
You are watching all bug changes.



More information about the wine-bugs mailing list