Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-cw
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-cw
Commits
1ae4ab6e
Commit
1ae4ab6e
authored
Nov 07, 2006
by
James Hawkins
Committed by
Alexandre Julliard
Nov 08, 2006
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
msi: Factor out download_remote_cabinet and reuse extract_cabinet_file to extract a remote cabinet.
parent
ae18c2dc
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
36 additions
and
51 deletions
+36
-51
files.c
dlls/msi/files.c
+36
-51
No files found.
dlls/msi/files.c
View file @
1ae4ab6e
...
...
@@ -354,52 +354,6 @@ static void free_media_info( struct media_info *mi )
msi_free
(
mi
);
}
/* downloads a remote cabinet and extracts it if it exists */
static
UINT
msi_extract_remote_cabinet
(
MSIPACKAGE
*
package
,
struct
media_info
*
mi
)
{
FDICABINETINFO
cabinfo
;
WCHAR
temppath
[
MAX_PATH
];
WCHAR
src
[
MAX_PATH
];
LPSTR
cabpath
;
LPCWSTR
file
;
LPWSTR
ptr
;
HFDI
hfdi
;
ERF
erf
;
int
hf
;
/* the URL is the path prefix of the package URL and the filename
* of the file to download
*/
ptr
=
strrchrW
(
package
->
PackagePath
,
'/'
);
lstrcpynW
(
src
,
package
->
PackagePath
,
ptr
-
package
->
PackagePath
+
2
);
ptr
=
strrchrW
(
mi
->
source
,
'\\'
);
lstrcatW
(
src
,
ptr
+
1
);
file
=
msi_download_file
(
src
,
temppath
);
lstrcpyW
(
mi
->
source
,
file
);
/* check if the remote cabinet still exists, ignore if it doesn't */
hfdi
=
FDICreate
(
cabinet_alloc
,
cabinet_free
,
cabinet_open
,
cabinet_read
,
cabinet_write
,
cabinet_close
,
cabinet_seek
,
0
,
&
erf
);
if
(
!
hfdi
)
{
ERR
(
"FDICreate failed
\n
"
);
return
ERROR_FUNCTION_FAILED
;
}
cabpath
=
strdupWtoA
(
mi
->
source
);
hf
=
cabinet_open
(
cabpath
,
_O_RDONLY
,
0
);
if
(
!
FDIIsCabinet
(
hfdi
,
hf
,
&
cabinfo
))
{
WARN
(
"Remote cabinet %s does not exist.
\n
"
,
debugstr_w
(
mi
->
source
));
msi_free
(
cabpath
);
return
ERROR_SUCCESS
;
}
msi_free
(
cabpath
);
return
!
extract_cabinet_file
(
package
,
mi
);
}
static
UINT
msi_change_media
(
MSIPACKAGE
*
package
,
struct
media_info
*
mi
,
LPCWSTR
prompt
)
{
LPWSTR
error
,
error_dialog
;
...
...
@@ -423,6 +377,34 @@ static UINT msi_change_media( MSIPACKAGE *package, struct media_info *mi, LPCWST
return
r
;
}
static
UINT
download_remote_cabinet
(
MSIPACKAGE
*
package
,
struct
media_info
*
mi
)
{
WCHAR
temppath
[
MAX_PATH
];
LPWSTR
src
,
ptr
;
LPCWSTR
cab
;
src
=
strdupW
(
package
->
BaseURL
);
if
(
!
src
)
return
ERROR_OUTOFMEMORY
;
ptr
=
strrchrW
(
src
,
'/'
);
if
(
!
ptr
)
{
msi_free
(
src
);
return
ERROR_FUNCTION_FAILED
;
}
*
(
ptr
+
1
)
=
'\0'
;
ptr
=
strrchrW
(
mi
->
source
,
'\\'
);
lstrcatW
(
src
,
ptr
+
1
);
cab
=
msi_download_file
(
src
,
temppath
);
lstrcpyW
(
mi
->
source
,
cab
);
msi_free
(
src
);
return
ERROR_SUCCESS
;
}
static
UINT
ready_media_for_file
(
MSIPACKAGE
*
package
,
struct
media_info
*
mi
,
MSIFILE
*
file
)
{
...
...
@@ -534,12 +516,15 @@ static UINT ready_media_for_file( MSIPACKAGE *package, struct media_info *mi,
if
(
GetFileAttributesW
(
mi
->
source
)
==
INVALID_FILE_ATTRIBUTES
&&
UrlIsW
(
package
->
BaseURL
,
URLIS_URL
))
{
rc
=
msi_extract_remote_cabinet
(
package
,
mi
);
}
else
{
rc
=
!
extract_cabinet_file
(
package
,
mi
);
rc
=
download_remote_cabinet
(
package
,
mi
);
if
(
rc
!=
ERROR_SUCCESS
||
GetFileAttributesW
(
mi
->
source
)
==
INVALID_FILE_ATTRIBUTES
)
{
goto
done
;
}
}
rc
=
!
extract_cabinet_file
(
package
,
mi
);
}
else
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment