> So the behavior for signed types is undefined--which fits in with the rest of standard.

This was my intuition for why I tried the `uintmax_t`-way. Good to know it's cleared up.

> Hmmm... consider it's an abstraction that interacts with the file system, I wonder if fpos and friends really should be something else (off_t or int64_t)?

There was a big discussion about that. `off_t` is kind of finicky as it has 32/64-bits issues, and #defines are necessary and don't get me started on windows. For a sample, look at the [recent large file patch](https://github.com/neovim/neovim/issues/614), where they changed `off_t` to a self-defined `off_T`. If we're going to switch to a signed type, it should be something like `off64_t` and we should take care that it's defined everywhere. Or just whatever libuv uses (`int64_t`), they've obviously been interacting with the same problem and decided that `int64_t` was a good deal.