Ejemplo n.º 1
0
BOOL DBI1::QueryModFromAddr(ISECT isect, OFF off, OUT Mod** ppmod,
    OUT ISECT* pisect, OUT OFF* poff, OUT CB* pcb)
{
    SC* pscLo = (SC*) bufSC.Start();
    SC* pscHi = pscEnd;
    SC* psc;

    // binary search for containing SC
    while (pscLo < pscHi) {
        psc = pscLo + ((pscHi - pscLo) / 2);
        int iResult = psc->IsAddrInSC(isect, off);
        if (iResult < 0 )
            pscHi = psc;
        else if (iResult > 0)
            pscLo = psc + 1;
        else {
            // we found it
            BOOL fOK = TRUE;
            if (ppmod)
                fOK = openModByImod(psc->imod, ppmod);
            if (pisect) *pisect = psc->isect;
            if (poff) *poff = psc->off;
            if (pcb) *pcb = psc->cb;
            return fOK;
        }

    }

    return FALSE;
}