Здравствуйте, ansi, Вы писали:
А если так:
static dl_record_t *
alloc_record(int url_len, int tag_len, int last_modified_len, int tmp_name_len)
{
int cnt = 0;
dl_record_t *record;
while (1)
{
if ( !(record = (dl_record_t *)malloc(sizeof(*record))) )
{
cnt = 1;
break;
}
memset(record, 0, sizeof(*record));
if ( !(record->url = (char *)malloc(url_len + 1)) )
{
cnt = 2;
break;
}
if ( !(record->tag = (char *)malloc(tag_len + 1)) )
{
cnt = 3;
break;
}
if ( !(record->last_modified = (char *)malloc(last_modified_len + 1)) )
{
cnt = 4;
break;
}
if ( !(record->tmp_name = (wchar_t *)malloc( (tmp_name_len + 1) * sizeof(wchar_t) )) )
{
cnt = 5;
break;
}
break;
}
switch(cnt)
{
case 5: free(record->last_modified);
case 4: free(record->tag);
case 3: free(record->url);
case 2: free(record); record = NULL;
}
return record;
}