Author: cwittich
Date: Mon Aug 10 10:52:21 2015
New Revision: 68659
URL:
http://svn.reactos.org/svn/reactos?rev=68659&view=rev
Log:
[SETUPAPI] add support for LZ compressed files. fixes ATI Radeon driver installation by
inf CORE-10000
Modified:
trunk/reactos/dll/win32/setupapi/queue.c
trunk/reactos/dll/win32/setupapi/setupapi_private.h
Modified: trunk/reactos/dll/win32/setupapi/queue.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/setupapi/queue.c…
==============================================================================
--- trunk/reactos/dll/win32/setupapi/queue.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/setupapi/queue.c [iso-8859-1] Mon Aug 10 10:52:21 2015
@@ -984,8 +984,26 @@
{
BOOL rc = FALSE;
BOOL docopy = TRUE;
+ WCHAR TempFile[MAX_PATH];
+ INT hSource, hTemp;
+ OFSTRUCT OfStruct;
+ WCHAR TempPath[MAX_PATH];
TRACE("copy %s to %s style
0x%x\n",debugstr_w(source),debugstr_w(target),style);
+
+ hSource = LZOpenFileW((LPWSTR)source, &OfStruct, OF_READ);
+ if (hSource < 0)
+ return FALSE;
+
+ /* Get a temp file name */
+ GetTempPathW(sizeof(TempPath) / sizeof(WCHAR), TempPath);
+ GetTempFileNameW(TempPath, L"", 0, TempFile);
+
+ /* Extract the compressed file to a temp location */
+ hTemp = LZOpenFileW(TempFile, &OfStruct, OF_CREATE);
+ LZCopy(hSource, hTemp);
+ LZClose(hSource);
+ LZClose(hTemp);
/* before copy processing */
if (style & SP_COPY_REPLACEONLY)
@@ -1010,9 +1028,9 @@
* we just basically unconditionally replace the builtin versions.
*/
if ((GetFileAttributesW(target) != INVALID_FILE_ATTRIBUTES) &&
- (GetFileAttributesW(source) != INVALID_FILE_ATTRIBUTES))
- {
- VersionSizeSource = GetFileVersionInfoSizeW((LPWSTR)source,&zero);
+ (GetFileAttributesW(TempFile) != INVALID_FILE_ATTRIBUTES))
+ {
+ VersionSizeSource = GetFileVersionInfoSizeW(TempFile,&zero);
VersionSizeTarget = GetFileVersionInfoSizeW((LPWSTR)target,&zero);
}
@@ -1032,7 +1050,7 @@
VersionSource = HeapAlloc(GetProcessHeap(),0,VersionSizeSource);
VersionTarget = HeapAlloc(GetProcessHeap(),0,VersionSizeTarget);
- ret = GetFileVersionInfoW((LPWSTR)source,0,VersionSizeSource,VersionSource);
+ ret = GetFileVersionInfoW(TempFile,0,VersionSizeSource,VersionSource);
if (ret)
ret = GetFileVersionInfoW((LPWSTR)target, 0, VersionSizeTarget,
VersionTarget);
@@ -1107,7 +1125,7 @@
if (docopy)
{
- rc = CopyFileW(source,target,FALSE);
+ rc = MoveFileExW(TempFile,target,MOVEFILE_REPLACE_EXISTING);
TRACE("Did copy... rc was %i\n",rc);
}
Modified: trunk/reactos/dll/win32/setupapi/setupapi_private.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/setupapi/setupap…
==============================================================================
--- trunk/reactos/dll/win32/setupapi/setupapi_private.h [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/setupapi/setupapi_private.h [iso-8859-1] Mon Aug 10 10:52:21
2015
@@ -41,6 +41,7 @@
#include <setupapi.h>
#include <softpub.h>
#include <mscat.h>
+#include <lzexpand.h>
#include <shlobj.h>
#include <wine/unicode.h>
#define NTOS_MODE_USER