Can you elaborate on how "errno"'s design is rooted in the fact that there was no multithreading at the time? I am not understanding the connection. Thanks.
Multithreading usually means that threads share the address space and so can (inadvertently) stomp on each other's "errno". (Hence making it Thread-Local Storage to solve that issue. Doesn't solve the reentrancy issue, though.)
If multithreading were pervasive nobody in their right mind would choose to use a global variable for error status codes.
And non-reentrant.
errno is usually defined as TLS (thread local storage).
It's a mess.