if (file.open(pszFileName)) { pby = (char*)file.getBufferPointer(); #if FOR_LAB DWORD dwSize = file.getFileSize(); DWORD dwMinFileSize = sizeof(CVTableCfgFileHeader) + sizeof(CVTableCfgFileFracHdr) + sizeof(CVTableCfgFileSigDesc); if (dwSize < dwMinFileSize) { Error.Log(__FILE__, "CVT config file %s is too short.", pszFileName); return false; // need at least one signal description to be useful } #endif pFileHdr = (CVTableCfgFileHeader*)pby; pby += sizeof(CVTableCfgFileHeader); #if FOR_LAB if (strcmp(pFileHdr->szSignature, "CVT-CFG") != 0) { Error.Log(__FILE__, "CVT cfg file %s has wrong signature.", pszFileName); return false; } if (pFileHdr->version != iCVTCFGVERSION) { Error.Log(__FILE__, "Wrong version of CVT cfg. Found %d expecting %d in %s", pFileHdr->version, iCVTCFGVERSION, pszFileName); return false; } if (pFileHdr->iNumFrac > CVTableIndex::iMAX_FRACTIONS) { Error.Log(__FILE__, "CVT cfg file %s has too many fractions", pszFileName); return false; } #endif // --- ok... ready to build the whole table --- CVTableIndex *pIdx = m_hTblIdx.Init(CVTableIndex::pszTBLIDXNAME, SharedMemObjHandle::omCREATE_RO); #if FOR_LAB if (pIdx == NULL) { Error.Log(__FILE__, "Unable to create CVT table index."); return false; } #endif int iTotalSignalCt = 0; for (int iFrac=0; iFrac < pFileHdr->iNumFrac; ++iFrac) { pFracHdr = (CVTableCfgFileFracHdr*)pby; pby += sizeof(CVTableCfgFileFracHdr); #if FOR_LAB if (*pFracHdr->szFracName == 0 || pFracHdr->iNumSigs > 5000 ) { Error.Log(__FILE__, "CVT cfg file '%s' fraction header %d malformed.", pszFileName, iFrac); break; } #endif