Re: Опять goto :)
От: Vovka_R Россия  
Дата: 14.01.06 19:27
Оценка: :))
Здравствуйте, 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;
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.