msi [1/2]: Make msi_dialog_dup_property return a copy of the
property if the property is empty
James Hawkins
truiken at gmail.com
Thu Oct 5 21:41:13 CDT 2006
Hi,
Changelog:
* Make msi_dialog_dup_property return a copy of the property if the
property is empty.
* Use the modified msi_dialog_dup_property where necessary to avoid
freeing the same pointer twice.
dlls/msi/dialog.c | 34 ++++++++++++----------------------
1 files changed, 12 insertions(+), 22 deletions(-)
--
James Hawkins
-------------- next part --------------
diff --git a/dlls/msi/dialog.c b/dlls/msi/dialog.c
index ef685e0..11890ac 100644
--- a/dlls/msi/dialog.c
+++ b/dlls/msi/dialog.c
@@ -217,13 +217,18 @@ static LPWSTR msi_get_deformatted_field(
static LPWSTR msi_dialog_dup_property( msi_dialog *dialog, LPCWSTR property, BOOL indirect )
{
+ LPWSTR prop = NULL;
+
if (!property)
return NULL;
if (indirect)
- return msi_dup_property( dialog->package, property );
+ prop = msi_dup_property( dialog->package, property );
+
+ if (!prop)
+ prop = strdupW( property );
- return strdupW( property );
+ return prop;
}
msi_dialog *msi_dialog_get_parent( msi_dialog *dialog )
@@ -1469,10 +1474,7 @@ static void msi_dialog_update_pathedit(
indirect = control->attributes & msidbControlAttributesIndirect;
prop = msi_dialog_dup_property( dialog, control->property, indirect );
-
- path = msi_dup_property( dialog->package, prop );
- if (!path)
- path = prop;
+ path = msi_dialog_dup_property( dialog, prop, TRUE );
SetWindowTextW( control->hwnd, path );
SendMessageW( control->hwnd, EM_SETSEL, 0, -1 );
@@ -2171,10 +2173,7 @@ static void msi_dialog_update_directory_
indirect = control->attributes & msidbControlAttributesIndirect;
prop = msi_dialog_dup_property( dialog, control->property, indirect );
-
- path = msi_dup_property( dialog->package, prop );
- if (!path)
- path = prop;
+ path = msi_dialog_dup_property( dialog, prop, TRUE );
PathStripPathW( path );
PathRemoveBackslashW( path );
@@ -2231,10 +2230,7 @@ static void msi_dialog_update_directory_
indirect = control->attributes & msidbControlAttributesIndirect;
prop = msi_dialog_dup_property( dialog, control->property, indirect );
-
- path = msi_dup_property( dialog->package, prop );
- if (!path)
- path = prop;
+ path = msi_dialog_dup_property( dialog, prop, TRUE );
lstrcpyW( dir_spec, path );
lstrcatW( dir_spec, asterisk );
@@ -2274,10 +2270,7 @@ UINT msi_dialog_directorylist_up( msi_di
control = msi_dialog_find_control_by_type( dialog, szDirectoryList );
indirect = control->attributes & msidbControlAttributesIndirect;
prop = msi_dialog_dup_property( dialog, control->property, indirect );
-
- path = msi_dup_property( dialog->package, prop );
- if (!path)
- path = prop;
+ path = msi_dialog_dup_property( dialog, prop, TRUE );
/* strip off the last directory */
ptr = PathFindFileNameW( path );
@@ -2326,10 +2319,7 @@ static UINT msi_dialog_dirlist_handler(
indirect = control->attributes & msidbControlAttributesIndirect;
prop = msi_dialog_dup_property( dialog, control->property, indirect );
-
- path = msi_dup_property( dialog->package, prop );
- if (!path)
- path = prop;
+ path = msi_dialog_dup_property( dialog, prop, TRUE );
lstrcpyW( new_path, path );
lstrcatW( new_path, text );
--
1.4.2.1
More information about the wine-patches
mailing list