// input-file given: check what it is // (for information to caller) bool CLibMaster::setInputFile(QString &szFile) { if (m_pInput != nullptr) { delete m_pInput; } m_pInput = new CMemoryMappedIO(szFile); if (m_pProgress != nullptr) { delete m_pProgress; } // setup info for decrunch later m_pProgress = new XpkProgress(this); m_pProgress->xp_WholePackedFileSize = m_pInput->getFullSize(); // info to decruncher // check if file is supported bool isSupported = archiveInfo(m_info); if (isSupported == false) { // cleanup? } return isSupported; }
void DisplayArchive(wchar_t* szFile, ULONG DumpFilter, wchar_t* szObjName, strPassBackFn pDisplayString) { PBYTE pbMapAddress; PBYTE pbStartAddress; PBYTE pbLongNameAddress; PIMAGE_ARCHIVE_MEMBER_HEADER pMemHdr; DWORD dwFileSize; PVOID pvMetaData; char *szName; wchar_t wzName[1024]; char szBuf[17]; long cbMetaData; int i; HRESULT hr; char szString[1024]; GetMapViewOfFile(szFile, &pbMapAddress, &dwFileSize); pbStartAddress = pbMapAddress; // Verify and skip archive signature. if (dwFileSize < IMAGE_ARCHIVE_START_SIZE || strncmp((char *)pbMapAddress, IMAGE_ARCHIVE_START, IMAGE_ARCHIVE_START_SIZE)) { MDInfo::Error("Bad file format - archive signature mis-match!"); } pbMapAddress += IMAGE_ARCHIVE_START_SIZE; // Skip linker member 1, linker member 2. for (i = 0; i < 2; i++) pbMapAddress = SkipMember(pbMapAddress); // Save address of the long name member and skip it if there exists one. pMemHdr = (PIMAGE_ARCHIVE_MEMBER_HEADER)pbMapAddress; if (pMemHdr->Name[0] == '/' && pMemHdr->Name[1] == '/') { pbLongNameAddress = pbMapAddress + IMAGE_SIZEOF_ARCHIVE_MEMBER_HDR; pbMapAddress = SkipMember(pbMapAddress); } else pbLongNameAddress = 0; pDisplayString ("\n"); // Get the MetaData for each object file and display it. while (DWORD(pbMapAddress - pbStartAddress) < dwFileSize) { szName = GetNameOfObj(pbLongNameAddress, (PIMAGE_ARCHIVE_MEMBER_HEADER)pbMapAddress, szBuf); if (Wsz_mbstowcs(wzName, szName, 1024) == -1) MDInfo::Error("Conversion from Multi-Byte to Wide-Char failed."); // Display metadata only for object files. // If szObjName is specified, display metadata only for that one object file. if (!_stricmp(&szName[strlen(szName) - OBJ_EXT_LEN], OBJ_EXT) && (!szObjName || !_wcsicmp(szObjName, wzName))) { // Try to find the MetaData section in the current object file. hr = FindObjMetaData(pbMapAddress+IMAGE_SIZEOF_ARCHIVE_MEMBER_HDR, &pvMetaData, &cbMetaData); if (SUCCEEDED(hr)) { sprintf (szString,"MetaData for object file %s:\n", szName); pDisplayString(szString); MDInfo archiveInfo(g_pDisp, (PBYTE)pvMetaData, cbMetaData, pDisplayString, DumpFilter); archiveInfo.DisplayMD(); } else { sprintf(szString,"MetaData not found for object file %s!\n\n", szName); pDisplayString(szString); } } // Skip past the object file. pbMapAddress = SkipMember(pbMapAddress); } UnmapViewOfFile(pbStartAddress); } // void DisplayArchive()
virtual bool archiveCreateBeginEvent() { std::cout << "Creating " << archiveInfo().name() << "..." << std::endl; return true; }
void FmBkupEnginePrivate::GetRestoreInfoArray( QList<FmBkupDrivesAndOperation* > drivesAndOperationList, QList< FmRestoreInfo > &restoreInfoList, const QString& aDrive ) { int targetDrive = DriverNameToNumber( aDrive ); restoreInfoList.clear(); /////// iDrvAndOpList->Reset(); iBkupCategoryList->ResetAndDestroy(); for( QList<FmBkupDrivesAndOperation* >::iterator it = drivesAndOperationList.begin(); it != drivesAndOperationList.end(); ++it ) { FmBkupDrivesAndOperation* fmDrvAndOp = *it; TBkupDrivesAndOperation drvAndOp; drvAndOp.setOwnerDataType( fmDrvAndOp->ownerDataType() ); drvAndOp.setDrvCategories( fmDrvAndOp->drvCategories() ); iDrvAndOpList->AppendL( drvAndOp ); } //////// CMMCScBkupOpParamsRestoreFull* params = CMMCScBkupOpParamsRestoreFull::NewL( iDrvAndOpList, FmBkupEngine::EBUCatAllSeparately ); CleanupStack::PushL( params ); // Get list of all archives RPointerArray< CMMCScBkupArchiveInfo > archives; TCleanupItem cleanupItem( ResetAndDestroyArchives, &archives ); CleanupStack::PushL( cleanupItem ); iBkupEngine->ListArchivesL( archives, params, AllowedDriveAttMatchMask(), targetDrive ); // Fill restore info TInt count( archives.Count() ); // restoreInfoList.ReserveL( count ); for( TInt i( 0 ); i < count; ++i ) { // Content CMMCScBkupArchiveInfo& archiveInfo( *archives[ i ] ); TUint32 iContent = BkupToFmgrMask( archiveInfo.Category().iFlags ); TTime iTime = archiveInfo.DateTime(); TInt iDrive = archiveInfo.Drive(); TDateTime iDateTime = iTime.DateTime(); int h = iDateTime.Hour(); int m = iDateTime.Minute(); int s = iDateTime.Second(); int year = iDateTime.Year(); int month = iDateTime.Month() + 1; int day = iDateTime.Day()+1; QTime time( h, m, s); QDate date( year, month, day ); QDateTime dateTime( date, time ); dateTime = dateTime.toLocalTime(); FmRestoreInfo restoreInfo( iContent, dateTime, NumberToDriverName( iDrive ) ); restoreInfoList.append( restoreInfo ); } CleanupStack::PopAndDestroy( &archives ); CleanupStack::PopAndDestroy( params ); }