あと話には聞いていたけど libpng がエラーからの脱出に longjmp 使ってるのを目の当たりにしてマッジデ!? つってた
libpng は setjmp / longjmp の使い方自体はかなりマトモ (に見える) なのでまあ……という感じで、これをもし longjmp なしで真っ当にエラー処理しようとすると
int e = getLastError(ctxptr);
if(e) {
return maybe_error_t { NULL, e };
}
みたいな感じの †いいコード† がそこかしこに散らばるようになります
某lang が post C++ ではなく post C なのはそういうところですよマジで