##特に、o が負の場合は常にこちらの then 節に落ちてくると思いますが、seek で戻るのは regular file ならそう特殊な操作でもないかと。
#あーここのチェックではなぜかoを先頭からの絶対値と思い込んでたみたいだなあ。
#やりたかったのは先読み分が本当に先読みになってなくて(コード的にはUNGETCで読んでない文字を戻せちゃうので)、先読み分考慮したら絶対オフセットがマイナスになっちゃった、ってケースを予防したかったんだけど、先読み分の考慮が必要なのはSEEK_CURだけだし、その場合オフセットがアンダーフローしたかどうかはすぐにはわからないので、チェックは諦めた方がいいかも(どうせ下位のコールでエラーが上がるし)
#あー、なるほど。そういうことですか。ungetc/b は確かに厄介ですね。