HEADSUP usb2 (usb4bsd) to become default in 2 weeks.

Dag-Erling Smørgrav des at des.no
Mon Dec 29 10:45:11 UTC 2008


Hans Petter Selasky <hselasky at c2i.net> writes:
> The following function is a candidate for de-constifying. You have a data 
> pointer there which is read or write, and to be able to transfer constant 
> data you need to do a deconst before passing the pointer to this function.
>
> usb2_do_request_flags(struct usb2_device *udev, struct mtx *mtx,
>     struct usb2_device_request *req, void *data, uint32_t flags,
>     uint16_t *actlen, uint32_t timeout)

In this particular case, I would create separate wrappers for read and
write requests, and have the read version assert that the direction bit
is set before deconst'ing.

> Deconstifying is not illegal in C using standard pointer arithmetics.
> (void *)((const uint8_t *)(ptr) - (const uint8_t *)0)

Undefined behaviour.  You can only compare or perform arithmetic on
pointers to elements in the same array or one element past the end of
the array.  The correct way to deconst (if you must) is to cast through
uintptr_t, or in FreeBSD, use the __DECONST() macro.

DES
-- 
Dag-Erling Smørgrav - des at des.no


More information about the freebsd-current mailing list