( gopher | 2012. 12. 12., sze – 14:38 )

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);
}