On 11/28/21 10:51, Jinoh Kang wrote:
Signed-off-by: Jinoh Kang jinoh.kang.kr@gmail.com
Change subject to
msi: Let MSI_ViewFetch roll over to first record on ERROR_NO_MORE_ITEMS.
dlls/msi/msiquery.c | 5 +++++ dlls/msi/tests/db.c | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-)
Rationale: apparantly some crappy Wix installers iterate over a MSI view *twice*, without calling MsiViewExecute before each iteration.
diff --git a/dlls/msi/msiquery.c b/dlls/msi/msiquery.c index c217ee7c8f5..b3a499a0788 100644 --- a/dlls/msi/msiquery.c +++ b/dlls/msi/msiquery.c @@ -394,6 +394,11 @@ UINT MSI_ViewFetch(MSIQUERY *query, MSIRECORD **prec) (*prec)->cookie = (UINT64)(ULONG_PTR)query; MSI_RecordSetInteger(*prec, 0, 1); }
else if (r == ERROR_NO_MORE_ITEMS)
{
/* end of view; reset cursor to first row */
query->row = 0;
}
return r;
} diff --git a/dlls/msi/tests/db.c b/dlls/msi/tests/db.c index 7999531b03e..03ad4d75651 100644 --- a/dlls/msi/tests/db.c +++ b/dlls/msi/tests/db.c @@ -9343,7 +9343,7 @@ static void test_viewfetch_rollover(void) winetest_push_context( "Record #%d", i );
r = MsiViewFetch( view, &rec );
todo_wine_if(tries > 0) ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r ); if (r != ERROR_SUCCESS) { winetest_pop_context();