Usando ssize_t vs int

Código

Tengo una función en la que puedo escribiruno De las cuatro formas posibles:

int do_or_die(int retval);
int do_or_die(ssize_t retval);
ssize_t do_or_die(int t retval);   
ssize_t do_or_die(ssize_t retval);   

Y entonces se llamará conambos De estas formas para las funciones de la biblioteca:

written = do_or_die(write(...)); // POSIX write returns ssize_t
printed = do_or_die(printf(...)); // printf returns int
Preguntas¿Qué prototipo debo usar?¿Qué tipos debo dar awritten yprinted?

Quiero tener el código más robusto y estándar, mientras sigo teniendo solo unodo_or_die función.

Estoy usando C99 en este caso, pero si la respuesta es diferente para C11, también me gustaría saberlo para el futuro.

Respuestas a la pregunta(2)

Su respuesta a la pregunta