gotos in C are OK. Don't be afraid to use any C language feature that may be useful to you. There are situations, especially in exception handling, in which goto is the only easy way out. One rule-of-thumb to be sure your not using goto where another construct would work better is, "Never goto backwards" or "Always goto forward" in the code. This rule will keep you from using goto for loop-control, where for or while are more appropriate.
For example:
BOOLEAN do_stuff(void)
{
if (!do_something()) goto error_label;
if (!do_something_else()) goto error_label;
if (!do_something_also())
{
error_label:
clean_up_everything();
return FALSE;
}
return TRUE;
}