HEADSUP usb2 (usb4bsd) to become default in 2 weeks.
Hans Petter Selasky
hselasky at c2i.net
Mon Dec 29 10:23:12 UTC 2008
On Monday 29 December 2008, Dag-Erling Smørgrav wrote:
> Hans Petter Selasky <hselasky at c2i.net> writes:
> > LIBUSB20_ADD_BYTES() is a hack to circumvent things like un-constifying
> > and making a byte increment to any pointer type. USB descriptors are
> > byte-packed. I have tested the macro with several kinds of compilers and
> > none have complained yet.
> 1) if you need to de-constify, your API is broken.
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)
Deconstifying is not illegal in C using standard pointer arithmetics.
(void *)((const uint8_t *)(ptr) - (const uint8_t *)0)
> 2) just because the compiler doesn't know it's wrong doesn't mean it
> 3) the pointer magic you do in (for instance) libusb20_me_encode() and
> libusb20_me_decode() won't work on strict-alignment platforms.
Yes, it will, because all addresses are aligned before they get casted.
More information about the freebsd-current