I would probably pass the file descriptor from mb_disc_unix_open() instead of the device string here. This will avoid multiple calls to mb_disc_unix_open() in the mb_disc_read_unportable() implementations. It will require those implementations to do the call but they will do that anyway when providing additional features (ISRC, MCN etc.)