X-Git-Url: https://git.reactos.org/?p=reactos.git;a=blobdiff_plain;f=reactos%2Fdll%2Fwin32%2Fwbemdisp%2Flocator.c;h=2f3c3ae2af279dc3c47a0d36eef124271e2e78e8;hp=eb50adebd4ef043ed7c5afbae4c9ef40da26f3c8;hb=9ff47835c1948d24ff7750cd42d8c4e853e04f1d;hpb=7f6cf10dd9b36542e09d857ab83b8f62834675ac diff --git a/reactos/dll/win32/wbemdisp/locator.c b/reactos/dll/win32/wbemdisp/locator.c index eb50adebd4e..2f3c3ae2af2 100644 --- a/reactos/dll/win32/wbemdisp/locator.c +++ b/reactos/dll/win32/wbemdisp/locator.c @@ -343,6 +343,7 @@ struct objectset ISWbemObjectSet ISWbemObjectSet_iface; LONG refs; IEnumWbemClassObject *objectenum; + LONG count; }; static inline struct objectset *impl_from_ISWbemObjectSet( @@ -504,20 +505,10 @@ static HRESULT WINAPI objectset_get_Count( LONG *iCount ) { struct objectset *objectset = impl_from_ISWbemObjectSet( iface ); - LONG count = 0, total = 0; TRACE( "%p, %p\n", objectset, iCount ); - while (IEnumWbemClassObject_Skip( objectset->objectenum, WBEM_INFINITE, 1 ) == S_OK) count++; - - IEnumWbemClassObject_Reset( objectset->objectenum ); - while (IEnumWbemClassObject_Skip( objectset->objectenum, WBEM_INFINITE, 1 ) == S_OK) total++; - - count = total - count; - IEnumWbemClassObject_Reset( objectset->objectenum ); - while (count--) IEnumWbemClassObject_Skip( objectset->objectenum, WBEM_INFINITE, 1 ); - - *iCount = total; + *iCount = objectset->count; return S_OK; } @@ -554,6 +545,14 @@ static const ISWbemObjectSetVtbl objectset_vtbl = objectset_ItemIndex }; +static LONG get_object_count( IEnumWbemClassObject *iter ) +{ + LONG count = 0; + while (IEnumWbemClassObject_Skip( iter, WBEM_INFINITE, 1 ) == S_OK) count++; + IEnumWbemClassObject_Reset( iter ); + return count; +} + static HRESULT SWbemObjectSet_create( IEnumWbemClassObject *wbem_objectenum, ISWbemObjectSet **obj ) { struct objectset *objectset; @@ -565,6 +564,7 @@ static HRESULT SWbemObjectSet_create( IEnumWbemClassObject *wbem_objectenum, ISW objectset->refs = 1; objectset->objectenum = wbem_objectenum; IEnumWbemClassObject_AddRef( objectset->objectenum ); + objectset->count = get_object_count( objectset->objectenum ); *obj = &objectset->ISWbemObjectSet_iface; TRACE( "returning iface %p\n", *obj );