Nekem így valahogy jobban tetszene.
Szerk: és ez így mondjuk nem is túl logikus, jobb lenne rögtön a struktúrának lefoglalni a memóriát, azt ellenőrizni, majd a fájl megnyitást is.
typedef struct {
handle_t* handle
FILE* file;
header_t* header;
lofasz_t* lofasz;
char* filename;
} ARCHIVE_FILE;
int archive_open(ARCHIVE_FILE* afile)
{
afile->handle = NULL;
afile->file = NULL;
afile->header = NULL;
afile->lofasz = NULL;
afile->handle = malloc(sizeof(handle_t));
if (!afile->handle) return E_NOMEM;
afile->file = fopen(afile->filename, ... );
if (!afile->file) return E_FILEERROR;
afile->header = malloc(sizeof(header_t));
if (!afile->header) return E_NOMEM;
if (fread((void*)afile->header,sizeof(header_t),1,file) < sizeof(header_t))
return E_FILEERROR;
afile->lofasz = malloc(sizeof(lofasz_t));
if (!afile->lofasz) return E_NOMEM
blablabla
....
....
return E_OK;
}
void archive_close(ARCHIVE_FILE* afile)
{
if (afile->lofasz) free(afile->lofasz);
if (afile->header) free(afile->header);
if (afile->file) fclose(afile->file);
if (afile->handle) free(afile->handle);
}
...
if (archive_open(afile) != E_OK) {
archive_close(afile);
}