One of the other problems resulting from early Unix implementation is the return code of -1 for failed system calls, with errno set as a side affect. If I remember correctly, this was a side effect of the PDP-11 instruction set, with the actual interface being a condition code and a single register return. If the condition code was set, the return register was errno, otherwise, it was the return value of the system call. Because of the limited data on the function return, it was impossible to give partial results when a system call failed. This has led to such things as failed writes not being able to report how many bytes were written before the failure, as well as the signal/select/poll problems described in the article. While the condition code was a good idea allowing fast failure checking, the translation into the C library interface and the single return code was a problem.