I think this code fails on some UTf-8 strings that can be converted to Latin1: those using combining characters to encode accented characters such as ‘é’.<p>And nitpick: using zero as the error return value means callers will think empty strings cannot be converted to latin1. I would use minus one as the error value, or, maybe, the negated byte offset of the first failure found minus one (can be helpful, but easily misinterpreted by the caller)