Implement poor man's exception handling to prevent errors from killling recovery

make_ext4fs was originally designed to be a standalone program, and the
error() macro calls exit() after printing a diagnostic.  However, when
it was turned into a library that recovery links against, calling exit()
kills the entire recovery process, which the kernel starts back up,
which dies, and the cycle continues.

This changes make_ext4fs to use setjmp() early, and changes error to
use longjmp to return to that point.  When longjmp is called, the
error handler just returns an error.  If it was invoked as a standalone
program, this causes the program to exit with an error.  If it was
invoked as a library function, the error return is gracefully handled
by recovery.

Change-Id: Iad50f46cac0ac399b5cdfd083d5712f88a10e48e
3 files changed