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