Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
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-winehq
Commits
f84fa0ce
Commit
f84fa0ce
authored
Aug 07, 2006
by
James Hawkins
Committed by
Alexandre Julliard
Aug 08, 2006
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
msi: Fix the compressed files logic.
If the compressed file attribute is not set, use the Word Count property to determine if files are compressed.
parent
8f6de4af
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
59 additions
and
3 deletions
+59
-3
action.c
dlls/msi/action.c
+16
-0
action.h
dlls/msi/action.h
+1
-0
files.c
dlls/msi/files.c
+3
-3
msipriv.h
dlls/msi/msipriv.h
+8
-0
package.c
dlls/msi/package.c
+31
-0
No files found.
dlls/msi/action.c
View file @
f84fa0ce
...
...
@@ -1326,8 +1326,24 @@ static UINT load_file(MSIRECORD *row, LPVOID param)
file
->
state
=
msifs_invalid
;
/* if the compressed bits are not set in the file attributes,
* then read the information from the package word count property
*/
if
(
file
->
Attributes
&
msidbFileAttributesCompressed
)
{
file
->
IsCompressed
=
TRUE
;
}
else
if
(
file
->
Attributes
&
msidbFileAttributesNoncompressed
)
{
file
->
IsCompressed
=
FALSE
;
}
else
{
file
->
IsCompressed
=
package
->
WordCount
&
MSIWORDCOUNT_COMPRESSED
;
}
if
(
file
->
IsCompressed
)
{
file
->
Component
->
ForceLocalState
=
TRUE
;
file
->
Component
->
Action
=
INSTALLSTATE_LOCAL
;
file
->
Component
->
ActionRequest
=
INSTALLSTATE_LOCAL
;
...
...
dlls/msi/action.h
View file @
f84fa0ce
...
...
@@ -120,6 +120,7 @@ typedef struct tagMSIFILE
msi_file_state
state
;
LPWSTR
SourcePath
;
LPWSTR
TargetPath
;
BOOL
IsCompressed
;
}
MSIFILE
;
typedef
struct
tagMSITEMPFILE
...
...
dlls/msi/files.c
View file @
f84fa0ce
...
...
@@ -330,7 +330,7 @@ static BOOL extract_cabinet_file(MSIPACKAGE* package, LPCWSTR source,
static
VOID
set_file_source
(
MSIPACKAGE
*
package
,
MSIFILE
*
file
,
MSICOMPONENT
*
comp
,
LPCWSTR
path
)
{
if
(
!
(
file
->
Attributes
&
msidbFileAttributesCompressed
)
)
if
(
!
file
->
IsCompressed
)
{
LPWSTR
p
,
path
;
p
=
resolve_folder
(
package
,
comp
->
Directory
,
TRUE
,
FALSE
,
NULL
);
...
...
@@ -419,7 +419,7 @@ static UINT ready_media_for_file( MSIPACKAGE *package, struct media_info *mi,
msi_free
(
mi
->
last_path
);
mi
->
last_path
=
NULL
;
if
(
!
(
file
->
Attributes
&
msidbFileAttributesCompressed
)
)
if
(
!
file
->
IsCompressed
)
{
mi
->
last_path
=
resolve_folder
(
package
,
comp
->
Directory
,
TRUE
,
FALSE
,
NULL
);
set_file_source
(
package
,
file
,
comp
,
mi
->
last_path
);
...
...
@@ -605,7 +605,7 @@ UINT ACTION_InstallFiles(MSIPACKAGE *package)
continue
;
/* compressed files are extracted in ready_media_for_file */
if
(
file
->
Attributes
&
msidbFileAttribute
sCompressed
)
if
(
file
->
I
sCompressed
)
{
if
(
INVALID_FILE_ATTRIBUTES
==
GetFileAttributesW
(
file
->
TargetPath
))
ERR
(
"compressed file wasn't extracted (%s)
\n
"
,
...
...
dlls/msi/msipriv.h
View file @
f84fa0ce
...
...
@@ -39,6 +39,12 @@
#define MSITYPE_NULLABLE 0x1000
#define MSITYPE_KEY 0x2000
/* Word Count masks */
#define MSIWORDCOUNT_SHORTFILENAMES 0x0001
#define MSIWORDCOUNT_COMPRESSED 0x0002
#define MSIWORDCOUNT_ADMINISTRATIVE 0x0004
#define MSIWORDCOUNT_PRIVILEGES 0x0008
#define MSITYPE_IS_BINARY(type) (((type) & ~MSITYPE_NULLABLE) == (MSITYPE_STRING|MSITYPE_VALID))
struct
tagMSITABLE
;
...
...
@@ -223,6 +229,8 @@ typedef struct tagMSIPACKAGE
UINT
CurrentInstallState
;
msi_dialog
*
dialog
;
LPWSTR
next_dialog
;
UINT
WordCount
;
struct
list
subscriptions
;
}
MSIPACKAGE
;
...
...
dlls/msi/package.c
View file @
f84fa0ce
...
...
@@ -40,6 +40,7 @@
#include "shlobj.h"
#include "wine/unicode.h"
#include "objbase.h"
#include "msidefs.h"
#include "msipriv.h"
#include "action.h"
...
...
@@ -376,6 +377,34 @@ static VOID set_installer_properties(MSIPACKAGE *package)
ReleaseDC
(
0
,
dc
);
}
static
UINT
msi_get_word_count
(
MSIPACKAGE
*
package
)
{
UINT
rc
;
INT
word_count
;
MSIHANDLE
suminfo
;
MSIHANDLE
hdb
=
alloc_msihandle
(
&
package
->
db
->
hdr
);
rc
=
MsiGetSummaryInformationW
(
hdb
,
NULL
,
0
,
&
suminfo
);
MsiCloseHandle
(
hdb
);
if
(
rc
!=
ERROR_SUCCESS
)
{
ERR
(
"Unable to open Summary Information
\n
"
);
return
0
;
}
rc
=
MsiSummaryInfoGetPropertyW
(
suminfo
,
PID_WORDCOUNT
,
NULL
,
&
word_count
,
NULL
,
NULL
,
NULL
);
if
(
rc
!=
ERROR_SUCCESS
)
{
ERR
(
"Unable to query word count
\n
"
);
MsiCloseHandle
(
suminfo
);
return
0
;
}
MsiCloseHandle
(
suminfo
);
return
word_count
;
}
MSIPACKAGE
*
MSI_CreatePackage
(
MSIDATABASE
*
db
)
{
static
const
WCHAR
szLevel
[]
=
{
'U'
,
'I'
,
'L'
,
'e'
,
'v'
,
'e'
,
'l'
,
0
};
...
...
@@ -411,6 +440,8 @@ MSIPACKAGE *MSI_CreatePackage( MSIDATABASE *db )
list_init
(
&
package
->
progids
);
list_init
(
&
package
->
RunningActions
);
package
->
WordCount
=
msi_get_word_count
(
package
);
/* OK, here is where we do a slew of things to the database to
* prep for all that is to come as a package */
...
...
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