[PATCH 1/5] d3dx9_36: Implement D3DXFileCreate. (try 3)

Dmitry Timoshkov dmitry at baikal.ru
Wed Oct 24 09:33:20 CDT 2012


Christian Costa <titan.costa at gmail.com> wrote:

> > > +static HRESULT WINAPI ID3DXFileImpl_QueryInterface(ID3DXFile *iface,
> > REFIID riid, void **ret_iface)
> > > +{
> > > +    TRACE("(%p)->(%s, %p)\n", iface, debugstr_guid(riid), ret_iface);
> > > +
> > > +    if (IsEqualGUID(riid, &IID_IUnknown) ||
> > > +        IsEqualGUID(riid, &IID_ID3DXFile))
> > > +    {
> > > +        iface->lpVtbl->AddRef(iface);
> >
> > Isn't there an appropriate xxx_AddRef() macro?
> >
> 
> No.

Is there a reason why?

> > > +        *ret_iface = iface;
> > > +        return S_OK;
> > > +    }
> > > +
> > > +    ERR("(%p)->(%s, %p), not found\n", iface, debugstr_guid(riid),
> > ret_iface);
> >
> > FIXME seems more appropriate here.
> >
> 
> No. All interfaces are implemented here.

Then ERR() is even more inappropriate here.

> > > +HRESULT WINAPI D3DXFileCreate(ID3DXFile **dxfile)
> > > +{
> > > +    ID3DXFileImpl *object;
> > > +
> > > +    TRACE("(%p)\n", dxfile);
> > > +
> > > +    object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
> > sizeof(*object));
> >
> > What's the reason for HEAP_ZERO_MEMORY here?
> >
> 
> It's common to do it this way. Only non zero value are set on creation.
> Usually several members are set in methods.

There is no memebers left at 0 here.

> > > +    if (!object)
> > > +    {
> > > +        ERR("Out of memory\n");
> > > +        return E_OUTOFMEMORY;
> > > +    }
> >
> > The ERR() is useless here, just return E_OUTOFMEMORY in such situations.
> >
> >
> >
> It's done this way in many places in wine.

Then that other places need to be fixed as well. Printing an ERR() on memory
allocation errors is not helpful.

-- 
Dmitry.



More information about the wine-devel mailing list