|
|
|
|
|
by sebcat
3411 days ago
|
|
in 'goto fail', the problem looked like: if (foo() != 0)
goto fail;
goto fail;
That extra line of code could just as likely have been a return statement or anything else. The problem was not with the goto statement itself.Edited to add: 'goto fail' is a valid construct and can be used to handle finalization in C functions. Consider: int
foo(char *bar, int baz) {
sometype_t *obj = NULL;
int fd = -1;
if ((obj = sometype_new(bar, baz)) == NULL) {
goto fail;
}
if ((fd = open(sometype_path(obj), O_RDONLY)) < 0) {
goto fail;
}
/* ... */
return 0;
fail:
if (fd < 0) {
close(fd);
}
if (obj != NULL) {
sometype_free(obj);
}
return -1;
}
There's nothing inherently wrong about that. |
|