Module: wine Branch: master Commit: 0670ebc67b10eafba194cab418ce8637715faba7 URL: http://source.winehq.org/git/wine.git/?a=commit;h=0670ebc67b10eafba194cab418...
Author: Mike McCormack mike@codeweavers.com Date: Mon Nov 27 17:48:10 2006 +0900
msi: Use MSI_IterateRecords when cloning properties.
---
dlls/msi/package.c | 52 ++++++++++++++++++++-------------------------------- 1 files changed, 20 insertions(+), 32 deletions(-)
diff --git a/dlls/msi/package.c b/dlls/msi/package.c index 164c7f2..57bf0f6 100644 --- a/dlls/msi/package.c +++ b/dlls/msi/package.c @@ -60,45 +60,33 @@ static void MSI_FreePackage( MSIOBJECTHD msi_free_properties( package ); }
+static UINT iterate_clone_props(MSIRECORD *row, LPVOID param) +{ + MSIPACKAGE *package = param; + LPCWSTR name, value; + + name = MSI_RecordGetString( row, 1 ); + value = MSI_RecordGetString( row, 2 ); + MSI_SetPropertyW( package, name, value ); + + return ERROR_SUCCESS; +} + static UINT clone_properties( MSIPACKAGE *package ) { - MSIQUERY * view = NULL; - UINT rc; static const WCHAR Query[] = { - 'S','E','L','E','C','T',' ','*',' ', - 'F','R','O','M',' ','`','P','r','o','p','e','r','t','y','`',0}; - - /* clone the existing properties */ - rc = MSI_DatabaseOpenViewW( package->db, Query, &view ); - if (rc != ERROR_SUCCESS) - return rc; + 'S','E','L','E','C','T',' ','*',' ', + 'F','R','O','M',' ','`','P','r','o','p','e','r','t','y','`',0}; + MSIQUERY *view = NULL; + UINT r;
- rc = MSI_ViewExecute(view, 0); - if (rc != ERROR_SUCCESS) + r = MSI_OpenQuery( package->db, &view, Query ); + if (r == ERROR_SUCCESS) { - MSI_ViewClose(view); + r = MSI_IterateRecords( view, NULL, iterate_clone_props, package ); msiobj_release(&view->hdr); - return rc; - } - while (1) - { - MSIRECORD * row; - LPCWSTR name, value; - - rc = MSI_ViewFetch(view,&row); - if (rc != ERROR_SUCCESS) - break; - - name = MSI_RecordGetString( row, 1 ); - value = MSI_RecordGetString( row, 2 ); - MSI_SetPropertyW( package, name, value ); - - msiobj_release( &row->hdr ); } - MSI_ViewClose(view); - msiobj_release(&view->hdr); - - return rc; + return r; }
/*