The errno gets saved on an instantiate of the berrno class so
we should instantiate the class after the actual errno is set
and not as we used to do at the start of the function. Then
errno is always 0 and that also explains that on error it
was always printing Unknown error 0 in the error printed.
Moved all berrno into either an if block or an block within
a switch (including additional brackets so it a local code
block in which we can instantiate a new berrno class.