At the code level, you don't have many good options. If you can use C++11 there are some functional-style error-handling techniques available to you, like option chainingoption chaining.
However, generally low-level code like that uses other means to handle fatal errors in system calls, like memory allocation, segmentation faults, and so forth. This usually involves setting up interrupt registers, and is available even in super-cheap microcontrollers. You should really avail yourself of those facilities, and leave the annoying C-style boolean checking for errors in user-space code.