return deferred;
}
-static void set_deferred_action_props(MSIPACKAGE *package, LPWSTR deferred_data)
+static void set_deferred_action_props( MSIPACKAGE *package, const WCHAR *deferred_data )
{
- LPWSTR end, beg = deferred_data + 1;
-
static const WCHAR sep[] = {'<','=','>',0};
+ const WCHAR *end, *beg = deferred_data + 1;
end = strstrW(beg, sep);
- *end = '\0';
- msi_set_property(package->db, szCustomActionData, beg);
+ msi_set_property( package->db, szCustomActionData, beg, end - beg );
beg = end + 3;
end = strstrW(beg, sep);
- *end = '\0';
- msi_set_property(package->db, szUserSID, beg);
+ msi_set_property( package->db, szUserSID, beg, end - beg );
beg = end + 3;
end = strchrW(beg, ']');
- *end = '\0';
- msi_set_property(package->db, szProductCode, beg);
+ msi_set_property( package->db, szProductCode, beg, end - beg );
}
static MSIBINARY *create_temp_binary( MSIPACKAGE *package, LPCWSTR source, BOOL dll )
UINT rc = ERROR_SUCCESS;
MSIRECORD *row;
UINT type;
- LPCWSTR source, target;
- LPWSTR ptr, deferred_data = NULL;
- LPWSTR deformated = NULL, action_copy = strdupW(action);
+ const WCHAR *source, *target, *ptr, *deferred_data = NULL;
+ WCHAR *deformated = NULL;
+ int len;
/* deferred action: [properties]Action */
- if ((ptr = strrchrW(action_copy, ']')))
+ if ((ptr = strrchrW(action, ']')))
{
- deferred_data = action_copy;
+ deferred_data = action;
action = ptr + 1;
}
row = MSI_QueryGetRecord( package->db, query, action );
if (!row)
- {
- msi_free(action_copy);
return ERROR_CALL_NOT_IMPLEMENTED;
- }
type = MSI_RecordGetInteger(row,2);
source = MSI_RecordGetString(row,3);
if (deferred_data)
set_deferred_action_props(package, deferred_data);
else if (actiondata)
- msi_set_property(package->db, szCustomActionData, actiondata);
+ msi_set_property( package->db, szCustomActionData, actiondata, -1 );
else
- msi_set_property(package->db, szCustomActionData, szEmpty);
+ msi_set_property( package->db, szCustomActionData, szEmpty, -1 );
msi_free(actiondata);
}
if (!source)
break;
- deformat_string(package,target,&deformated);
- rc = msi_set_property( package->db, source, deformated );
+ len = deformat_string( package, target, &deformated );
+ rc = msi_set_property( package->db, source, deformated, len );
if (rc == ERROR_SUCCESS && !strcmpW( source, szSourceDir ))
msi_reset_folders( package, TRUE );
msi_free(deformated);
package->scheduled_action_running = FALSE;
package->commit_action_running = FALSE;
package->rollback_action_running = FALSE;
- msi_free(action_copy);
msiobj_release(&row->hdr);
return rc;
}