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
0405e9d2
Commit
0405e9d2
authored
Sep 03, 2006
by
James Hawkins
Committed by
Alexandre Julliard
Sep 07, 2006
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
msi: Store the CustomActionData for deferred custom actions.
parent
4969ccf3
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
45 additions
and
3 deletions
+45
-3
custom.c
dlls/msi/custom.c
+45
-3
No files found.
dlls/msi/custom.c
View file @
0405e9d2
...
...
@@ -117,6 +117,31 @@ static BOOL check_execution_scheduling_options(MSIPACKAGE *package, LPCWSTR acti
return
TRUE
;
}
/* stores the CustomActionData before the action:
* [CustomActionData]Action
*/
LPWSTR
msi_get_deferred_action
(
LPCWSTR
action
,
LPWSTR
actiondata
)
{
LPWSTR
deferred
;
DWORD
len
;
static
const
WCHAR
begin
[]
=
{
'['
,
0
};
static
const
WCHAR
end
[]
=
{
']'
,
0
};
if
(
!
actiondata
)
return
strdupW
(
action
);
len
=
lstrlenW
(
action
)
+
lstrlenW
(
actiondata
)
+
3
;
deferred
=
msi_alloc
(
len
*
sizeof
(
WCHAR
));
lstrcpyW
(
deferred
,
begin
);
lstrcatW
(
deferred
,
actiondata
);
lstrcatW
(
deferred
,
end
);
lstrcatW
(
deferred
,
action
);
return
deferred
;
}
UINT
ACTION_CustomAction
(
MSIPACKAGE
*
package
,
LPCWSTR
action
,
BOOL
execute
)
{
UINT
rc
=
ERROR_SUCCESS
;
...
...
@@ -128,8 +153,18 @@ UINT ACTION_CustomAction(MSIPACKAGE *package,LPCWSTR action, BOOL execute)
'='
,
' '
,
'\''
,
'%'
,
's'
,
'\''
,
0
};
UINT
type
;
LPCWSTR
source
,
target
;
LPWSTR
ptr
,
deferred_data
=
NULL
;
LPWSTR
action_copy
=
strdupW
(
action
);
WCHAR
*
deformated
=
NULL
;
/* deferred action: [CustomActionData]Action */
if
((
ptr
=
strchrW
(
action_copy
,
']'
)))
{
deferred_data
=
action_copy
+
1
;
*
ptr
=
'\0'
;
action
=
ptr
+
1
;
}
row
=
MSI_QueryGetRecord
(
package
->
db
,
ExecSeqQuery
,
action
);
if
(
!
row
)
return
ERROR_CALL_NOT_IMPLEMENTED
;
...
...
@@ -160,18 +195,22 @@ UINT ACTION_CustomAction(MSIPACKAGE *package,LPCWSTR action, BOOL execute)
}
if
(
!
execute
)
{
LPWSTR
actiondata
=
msi_dup_property
(
package
,
action
);
LPWSTR
deferred
=
msi_get_deferred_action
(
action
,
actiondata
);
if
(
type
&
msidbCustomActionTypeCommit
)
{
TRACE
(
"Deferring Commit Action!
\n
"
);
schedule_action
(
package
,
COMMIT_SCRIPT
,
action
);
schedule_action
(
package
,
COMMIT_SCRIPT
,
deferred
);
}
else
{
TRACE
(
"Deferring Action!
\n
"
);
schedule_action
(
package
,
INSTALL_SCRIPT
,
action
);
schedule_action
(
package
,
INSTALL_SCRIPT
,
deferred
);
}
rc
=
ERROR_SUCCESS
;
msi_free
(
deferred
);
goto
end
;
}
else
...
...
@@ -182,7 +221,9 @@ UINT ACTION_CustomAction(MSIPACKAGE *package,LPCWSTR action, BOOL execute)
'C'
,
'u'
,
's'
,
't'
,
'o'
,
'm'
,
'A'
,
'c'
,
't'
,
'i'
,
'o'
,
'n'
,
'D'
,
'a'
,
't'
,
'a'
,
0
};
static
const
WCHAR
szBlank
[]
=
{
0
};
LPWSTR
actiondata
=
msi_dup_property
(
package
,
action
);
if
(
actiondata
)
if
(
deferred_data
)
MSI_SetPropertyW
(
package
,
szActionData
,
deferred_data
);
else
if
(
actiondata
)
MSI_SetPropertyW
(
package
,
szActionData
,
actiondata
);
else
MSI_SetPropertyW
(
package
,
szActionData
,
szBlank
);
...
...
@@ -235,6 +276,7 @@ UINT ACTION_CustomAction(MSIPACKAGE *package,LPCWSTR action, BOOL execute)
}
end:
msi_free
(
action_copy
);
msiobj_release
(
&
row
->
hdr
);
return
rc
;
}
...
...
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