So. C is a low-level systems programming language. The earliest versions of the unix kernel were written in assembler. They wanted to port unix to other architectures, so they designed C as a language to re-write the unix kernel in, with the design goal of leaving as little of the machine-specific assembler within the kernel as possible. Once they had re-written the kernel in C, unix became readily portable to other machine types, and that is a major reason why it was succesful. See this paper
https://www.bell-labs.com/usr/dmr/www/chist.html .
At the time the whole unix kernel was only of the order of thousands or maybe 10's of thousands of lines of code. The John Lions "commentary on unix kernel" book contains the source of the version 6 kernel and is less than half an inch thick. Unix was a small portable system, created by a small team.
C has been successful over the years because the language has remained small and stable, consider the contrast with C++. If you want hashtables, exceptions etc as first-class language features, you need a higher level language, not C. If you want to do those kind of things in C, you write actual C code to do them. The ansi C standard doesn't mention hashtables or exceptions, as far as I am aware.
Add more features to C at your peril, for that is the path towards C++. C has remained successful because the specification has remained concise and feature creep has been resisted by the wise heads of the C standards comittee.
As for errno, that was a major fcuk-up in the unix system call library design. C itself can't be blamed for that.
Torvalds was asked in a recent interview why rust has been added to the linux kernel; he said it was because they didn't want to become stale and just keep doing the same old thing, they wanted to add something new. I suppose that's one reason. I'm sure there are commercial reasons behind the scenes, including the availability of rust developers. C isn't being taught so much in comp. sci. courses nowadays. It remains to be seen how successful the addition of rust will be. Personally I hope that freebsd doesn't go down the same path, certainly not at the current state of development of rust.
View: https://www.youtube.com/watch?v=YyRVOGxRKLg