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 > isn't. > > 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. --HPSReceived on Mon Dec 29 2008 - 09:23:11 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:39:39 UTC