[Spice-devel] [PATCH v2] server: Fix conversions between QXLPHYSICAL and pointers

Christophe Fergeau cfergeau at redhat.com
Mon Jan 11 09:12:42 PST 2016


On Mon, Jan 11, 2016 at 06:07:37PM +0100, Francois Gouget wrote:
> On Mon, 11 Jan 2016, Christophe Fergeau wrote:
> [...]
> > > +#define QXLPHYSICAL_FROM_PTR(ptr) ((QXLPHYSICAL)(intptr_t)(ptr))
> > > +#define QXLPHYSICAL_TO_PTR(ptrtype, phy) ((ptrtype)(intptr_t)(phy))
> > 
> > 'ptrtype' still does not seem to bring much compared to:
> > 
> > #define QXLPHYSICAL_TO_PTR(phy) ((void*)(intptr_t)(phy))
> 
> Without it you cannot write:
> 
>    info = QXLPHYSICAL_TO_PTR(QXLReleaseInfo*, cmd->cmd.data);
> 
> You have to write the following instead:
> 
>   info = (QXLReleaseInfo*)QXLPHYSICAL_TO_PTR(cmd->cmd.data);

I think in C, void * will be implicitly cast to any other pointer type,
ie info = QXLPHYSICAL_TO_PTR(cmd->cmd.data); should work.

If this causes a warning, then ACK to your version.

> > Is the addition of that (uintptr_t) cast mandatory here? (not really
> > important, just curious).
> 
> It is. Without it one gets the following error because cmd is a 32 bit 
> QXLCommandExt* pointer:
> 
> red-replay-qxl.c: In function 'spice_replay_next_cmd':
> red-replay-qxl.c:1162: error: cast from pointer to integer of different size [-Wpointer-to-int-cast]
> 
> Maybe it should go in separately though.

I'm fine with keeping it in this patch.

Christophe
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/spice-devel/attachments/20160111/86753508/attachment.sig>


More information about the Spice-devel mailing list