wbemprox: Store the result index in the class enumerator instead of the view.
This commit is contained in:
parent
211469dd06
commit
f1f4f1d9d7
|
@ -36,6 +36,7 @@ struct enum_class_object
|
||||||
IEnumWbemClassObject IEnumWbemClassObject_iface;
|
IEnumWbemClassObject IEnumWbemClassObject_iface;
|
||||||
LONG refs;
|
LONG refs;
|
||||||
struct query *query;
|
struct query *query;
|
||||||
|
UINT index;
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline struct enum_class_object *impl_from_IEnumWbemClassObject(
|
static inline struct enum_class_object *impl_from_IEnumWbemClassObject(
|
||||||
|
@ -92,11 +93,10 @@ static HRESULT WINAPI enum_class_object_Reset(
|
||||||
IEnumWbemClassObject *iface )
|
IEnumWbemClassObject *iface )
|
||||||
{
|
{
|
||||||
struct enum_class_object *ec = impl_from_IEnumWbemClassObject( iface );
|
struct enum_class_object *ec = impl_from_IEnumWbemClassObject( iface );
|
||||||
struct view *view = ec->query->view;
|
|
||||||
|
|
||||||
TRACE("%p\n", iface);
|
TRACE("%p\n", iface);
|
||||||
|
|
||||||
view->index = 0;
|
ec->index = 0;
|
||||||
return WBEM_S_NO_ERROR;
|
return WBEM_S_NO_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -118,14 +118,14 @@ static HRESULT WINAPI enum_class_object_Next(
|
||||||
if (lTimeout != WBEM_INFINITE) FIXME("timeout not supported\n");
|
if (lTimeout != WBEM_INFINITE) FIXME("timeout not supported\n");
|
||||||
|
|
||||||
*puReturned = 0;
|
*puReturned = 0;
|
||||||
if (view->index + uCount > view->count) return WBEM_S_FALSE;
|
if (ec->index + uCount > view->count) return WBEM_S_FALSE;
|
||||||
|
|
||||||
hr = WbemClassObject_create( NULL, iface, view->index, (void **)apObjects );
|
hr = WbemClassObject_create( NULL, iface, ec->index, (void **)apObjects );
|
||||||
if (hr != S_OK) return hr;
|
if (hr != S_OK) return hr;
|
||||||
|
|
||||||
view->index++;
|
ec->index++;
|
||||||
*puReturned = 1;
|
*puReturned = 1;
|
||||||
if (view->index == view->count) return WBEM_S_FALSE;
|
if (ec->index == view->count) return WBEM_S_FALSE;
|
||||||
if (uCount > 1) return WBEM_S_TIMEDOUT;
|
if (uCount > 1) return WBEM_S_TIMEDOUT;
|
||||||
return WBEM_S_NO_ERROR;
|
return WBEM_S_NO_ERROR;
|
||||||
}
|
}
|
||||||
|
@ -159,12 +159,12 @@ static HRESULT WINAPI enum_class_object_Skip(
|
||||||
|
|
||||||
if (lTimeout != WBEM_INFINITE) FIXME("timeout not supported\n");
|
if (lTimeout != WBEM_INFINITE) FIXME("timeout not supported\n");
|
||||||
|
|
||||||
if (view->index + nCount >= view->count)
|
if (ec->index + nCount >= view->count)
|
||||||
{
|
{
|
||||||
view->index = view->count - 1;
|
ec->index = view->count - 1;
|
||||||
return WBEM_S_FALSE;
|
return WBEM_S_FALSE;
|
||||||
}
|
}
|
||||||
view->index += nCount;
|
ec->index += nCount;
|
||||||
return WBEM_S_NO_ERROR;
|
return WBEM_S_NO_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -193,6 +193,7 @@ HRESULT EnumWbemClassObject_create(
|
||||||
ec->IEnumWbemClassObject_iface.lpVtbl = &enum_class_object_vtbl;
|
ec->IEnumWbemClassObject_iface.lpVtbl = &enum_class_object_vtbl;
|
||||||
ec->refs = 1;
|
ec->refs = 1;
|
||||||
ec->query = query;
|
ec->query = query;
|
||||||
|
ec->index = 0;
|
||||||
|
|
||||||
*ppObj = &ec->IEnumWbemClassObject_iface;
|
*ppObj = &ec->IEnumWbemClassObject_iface;
|
||||||
|
|
||||||
|
|
|
@ -172,7 +172,6 @@ HRESULT create_view( const struct property *proplist, const WCHAR *class,
|
||||||
view->cond = cond;
|
view->cond = cond;
|
||||||
view->result = NULL;
|
view->result = NULL;
|
||||||
view->count = 0;
|
view->count = 0;
|
||||||
view->index = 0;
|
|
||||||
*ret = view;
|
*ret = view;
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
|
@ -100,7 +100,6 @@ struct view
|
||||||
const struct expr *cond;
|
const struct expr *cond;
|
||||||
UINT *result;
|
UINT *result;
|
||||||
UINT count;
|
UINT count;
|
||||||
UINT index;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct query
|
struct query
|
||||||
|
|
Loading…
Reference in New Issue