Hi Luca,
thanks for the review!
good, but I think there's a problem in this function. A "normal" master_xfer function issues a repeated start between one msg and the next one, at least in the typical case where all msgs have the same slave address. Your implementation breaks repeated start. At first sight we might need more complex code here to coalesce all consecutive msgs with the same address into a single i2c_transfer() call.
Note that it is by far the standard case that all messages in a transfer have the same client address (99,999%?). But technically, this is not a requirement and the repeated start on the bus is totally independent of the addresses used. It is just a master wanting to send without being interrupted by another master.
Wolfram