Hans Leidekker : wbemdisp: Calculate the object count returned from ISWbemObjectSet:: get_Count just once.
Alexandre Julliard
julliard at wine.codeweavers.com
Wed Dec 23 18:22:07 CST 2015
Module: wine
Branch: master
Commit: 4cce8cbd5f300edc59bc0d79fea5ee1f662b13df
URL: http://source.winehq.org/git/wine.git/?a=commit;h=4cce8cbd5f300edc59bc0d79fea5ee1f662b13df
Author: Hans Leidekker <hans at codeweavers.com>
Date: Wed Dec 23 11:06:57 2015 +0100
wbemdisp: Calculate the object count returned from ISWbemObjectSet::get_Count just once.
Signed-off-by: Hans Leidekker <hans at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/wbemdisp/locator.c | 22 +++++++++++-----------
1 file changed, 11 insertions(+), 11 deletions(-)
diff --git a/dlls/wbemdisp/locator.c b/dlls/wbemdisp/locator.c
index 3465eb1..d1f2609 100644
--- a/dlls/wbemdisp/locator.c
+++ b/dlls/wbemdisp/locator.c
@@ -356,6 +356,7 @@ struct objectset
ISWbemObjectSet ISWbemObjectSet_iface;
LONG refs;
IEnumWbemClassObject *objectenum;
+ LONG count;
};
static inline struct objectset *impl_from_ISWbemObjectSet(
@@ -517,20 +518,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;
}
@@ -567,6 +558,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;
@@ -578,6 +577,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 );
More information about the wine-cvs
mailing list