tech-userlevel archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

RE: [patch] usbdevs(8) use strtol(3) instead of atoi(3) for more predictable result

> usbdevs(8) uses atoi(3) to convert a device address given from a
> command line argument.
> But atoi(3) will return - zero in a case of non-integer value and such
> device will be used.
> This is kind of unpredictable behaviour to use a device by 0 addr in a
> case when wrong
> address was given to usbdevs.

For what it's worth.

Zero is never a legal address for an operating USB device. (It can appear transiently during enumeration, but there's no way to operate a device in that state; so it make no sense for address zero to be used in usermode). A device at address zero is always under the administration of the hub driver and is about to be moved to a non-zero address.

Valid USB  device addresses are always in the range [1..127].

So (independent of the advisability of using atoi()), it's completely reasonable to use 0 as an illegal USB device address, and reject any attempt to specify that.  If looking into `usbdevs`, it would make sense to check this kind of thing.

The man page for usbdevs is not clear on what is meant by "address"; if there are multiple host controllers, there may be many devices with the same numerical address, each on a different host controller/bus. Generally an address should include a host controller (or bus ID) in order to be useful. I'm not sure what `usbdevs` is trying to do.  For better or worse, `lsusb` on a typical Linux userland does take all this into account, and is the way most people think of this these days; if selecting device by address you also include the bus.

Best regards,

Home | Main Index | Thread Index | Old Index