[PATCH 2/2] msi: let MSI_ViewFetch roll over to first record on ERROR_NO_MORE_ITEMS

Jinoh Kang jinoh.kang.kr at gmail.com
Sat Nov 27 23:13:57 CST 2021


On 11/28/21 10:51, Jinoh Kang wrote:
> Signed-off-by: Jinoh Kang <jinoh.kang.kr at 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();
> 

-- 
Sincerely,
Jinoh Kang



More information about the wine-devel mailing list