It's worth noting that ssize_t is a POSIX type, and is only guaranteed to have the range [-1, SSIZE_MAX] (basically a size type with one error value) [1]. If you need negative sizes, then ptrdiff_t is perhaps better.
[1]: http://pubs.opengroup.org/onlinepubs/009696699/basedefs/sys/...