<p>Am I missing a fundamental, or would it be reasonable to not necessarily expose the data structure for the parsed conversion data, but instead offer explicit parse routine (returning an opaque blob) and convert routine that takes such a blob as a parameter? Then it should be easy to make tzset(3) utterly trivial -- call the zoninfo parser on getenv(TZ) with locking, and localtime(3) likewise trivial, call the real convert routine with the datastructure cached by the latest tzset.</p>