DWORD CZipStorage::Read(void *pBuf, DWORD iSize, bool bAtOnce) { DWORD iRead = 0; while (!iRead) { iRead = m_file.Read(pBuf, iSize); if (!iRead) if (IsSpanMode()) ChangeDisk(m_iCurrentDisk + 1); else ThrowError(ZIP_BADZIPFILE); } if (iRead == iSize) return iRead; else if (bAtOnce || !IsSpanMode()) ThrowError(ZIP_BADZIPFILE); while (iRead < iSize) { ChangeDisk(m_iCurrentDisk + 1); iRead += m_file.Read((char*)pBuf + iRead, iSize - iRead); } return iRead; }
/* $ 14.01.2002 IS ! Убрал установку переменных окружения, потому что она производится в FarChDir, которая теперь используется у нас для установления текущего каталога. */ bool Panel::SetCurPath() { if (GetMode() == panel_mode::PLUGIN_PANEL) return true; const auto AnotherPanel = Parent()->GetAnotherPanel(this); if (AnotherPanel->GetMode() != panel_mode::PLUGIN_PANEL) { if (AnotherPanel->m_CurDir.size() > 1 && AnotherPanel->m_CurDir[1]==L':' && (m_CurDir.empty() || upper(AnotherPanel->m_CurDir[0])!=upper(m_CurDir[0]))) { // сначала установим переменные окружения для пассивной панели // (без реальной смены пути, чтобы лишний раз пассивный каталог // не перечитывать) FarChDir(AnotherPanel->m_CurDir, false); } } if (!FarChDir(m_CurDir)) { while (!FarChDir(m_CurDir)) { const auto strRoot = GetPathRoot(m_CurDir); if (FAR_GetDriveType(strRoot) != DRIVE_REMOVABLE || os::fs::IsDiskInDrive(strRoot)) { if (!os::fs::is_directory(m_CurDir)) { if (CheckShortcutFolder(m_CurDir, true, true) && FarChDir(m_CurDir)) { SetCurDir(m_CurDir,true); return true; } } else break; } if (Global->WindowManager->ManagerStarted()) // сначала проверим - а запущен ли менеджер { SetCurDir(Global->g_strFarPath,true); // если запущен - выставим путь который мы точно знаем что существует ChangeDisk(shared_from_this()); // и вызовем меню выбора дисков } else // оппа... { string strTemp(m_CurDir); CutToParent(m_CurDir); // подымаемся вверх, для очередной порции ChDir if (strTemp.size()==m_CurDir.size()) // здесь проблема - видимо диск недоступен { SetCurDir(Global->g_strFarPath,true); // тогда просто сваливаем в каталог, откуда стартанул FAR. break; } else { if (FarChDir(m_CurDir)) { SetCurDir(m_CurDir,true); break; } } } } return false; } return true; }