[sane-devel] sane_get_devices and sanei_usb_init

m. allan noah kitno455 at gmail.com
Thu Dec 11 21:06:24 UTC 2008

On Mon, Dec 1, 2008 at 10:23 PM, ABC <abc at telekom.ru> wrote:
> First of all sanei_usb_init() is not designed to be used for rescanning
> after any other sanei_usb functions is called. It is just initialization
> and rescanning ability is not documented side effect. As stated in
> documentation: "Call this before any other sanei_usb function". So don't
> call it after. (This doesn't state it should be called just once, so we
> could rescan before first device is opened.)

sanei_usb_init() will blast the existing info, and assign all new
device indexes to whatever it finds. However, sanei_usb_init() is only
called by backends in sane_init() and sane_get_devices(). A frontend
will only call sane_init() once, so that is not a problem, and the
sane standard says this about sane_get_devices():

The returned list is guaranteed to remain unchanged and valid until
(a) another call to this function is performed or (b) a call to
sane_exit() is performed.

So, if you call sane_get_devices() twice, you cannot complain that any
devices you have open don't work anymore.

However, you have a valid point that most backends only call
sanei_usb_init() in sane_init(), and I think that should change.

"The truth is an offense, but not a sin"

More information about the sane-devel mailing list