( Pontscho | 2012. 12. 12., sze – 12:41 )


handle_t *archive_open(char* filename)
{
   handle_t *handle = NULL;
   FILE* file = NULL;
   header_t *header = NULL;
   lofasz_t *lofasz = NULL;

   global_error = E_NOMEM;
   if ((handle = malloc(sizeof(handle_t))) == NULL)
      return NULL;
   if ((header = malloc(sizeof(header_t))) == NULL)
      goto error1;
   if ((lofasz = malloc(sizeof(lofasz_t))) == NULL)
      goto error2;

   global_error = E_FILEERROR;
   if ((file = fopen(filename, ... )) == NULL)
      goto error3;
   if (fread((void*)header,sizeof(header_t),1,file) < sizeof(header_t))
      goto error4;

   blablabla
   ....
   ....

   global_error = E_OK;
   return handle;

error4:  fclose(file);
error3:  free(lofasz);
error2:  free(header);
error1:  free(handle);
         return NULL;
}

---
pontscho / fresh!mindworkz