March 25th, 2008

Внимательность прежде всего.

Что-то сдаётся мне, я стал терять внимательность. Багу искал очень долго и, наконец, мегазавихляцким методом нашёл её. А ошибка была такая дурная, что аж обидно. Итак, вопрос на засыпку: какая ошибка в этом коде:

bool TATADirectory::ReadPIO(void *buffer, size_t count)
{
    if (WaitInterrupt(ATA_PIO_TIMEOUT))
    {
        if (WaitDevice(ATA_PIO_TIMEOUT, ATA_SR_DRQ))
        {
            TIntHandler::ClearInterrupts();
            inportwv(FPort.GetAddress()+ATA_REG_DR, buffer, count);
            TIntHandler::SetupInterrupts();
            return true;
        }
    }
    return false;
}

Collapse )