Example #1
0
static HRESULT selection_next(IUnknown *iface)
{
    IXMLDOMNode *node;
    HRESULT hr = IXMLDOMSelection_nextNode((IXMLDOMSelection*)iface, &node);
    if (hr == S_OK) IXMLDOMNode_Release(node);
    return hr;
}
Example #2
0
static HRESULT WINAPI enumvariant_Next(
    IEnumVARIANT *iface,
    ULONG celt,
    VARIANT *var,
    ULONG *fetched)
{
    enumvariant *This = impl_from_IEnumVARIANT( iface );
    IXMLDOMNode *node;
    ULONG ret_count = 0;

    TRACE("(%p)->(%u %p %p)\n", This, celt, var, fetched);

    if (fetched) *fetched = 0;

    if (celt && !var) return E_INVALIDARG;

    for (; celt > 0; celt--, var++, This->pos++)
    {
        IDispatch *disp = NULL;
        HRESULT hr;

        node = NULL;
        hr = IXMLDOMSelection_get_item(This->selection, This->pos, &node);
        if (hr != S_OK) break;

        IXMLDOMNode_QueryInterface(node, &IID_IDispatch, (void**)&disp);
        IXMLDOMNode_Release(node);

        V_VT(var) = VT_DISPATCH;
        V_DISPATCH(var) = disp;

        ret_count++;
    }

    if (fetched) (*fetched)++;

    /* we need to advance one step more for some reason */
    if (ret_count)
        IXMLDOMSelection_nextNode(This->selection, &node);

    return celt == 0 ? S_OK : S_FALSE;
}