Ejemplo n.º 1
0
/*****************************************************************************
DWORD GetFileSizeQW(CONST TCHAR * szFilename, QWORD * qwSize)
szFilename	: (IN) filename of the file whose filesize we want
qwSize		: (OUT) filesize as QWORD

Return Value:
returns NOERROR if everything went fine. Otherwise GetLastError() is returned

Notes:
- gets size as QWORD from a string
- is also used to validate the string as a legal, openable file (f.e. if
szFilename is some blabla GetLastError() will return 2 => file not found)
*****************************************************************************/
DWORD GetFileSizeQW(CONST TCHAR * szFilename, QWORD * qwSize)
{
	DWORD dwErrorCode;
	HANDLE hFile;
	DWORD dwLo = 0, dwHi = 0;

	hFile = CreateFile(szFilename, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0 , 0);
	if(hFile == INVALID_HANDLE_VALUE)
		return GetLastError();

	dwLo = GetFileSize(hFile, &dwHi);
	dwErrorCode = GetLastError();

	CloseHandle(hFile);

	if(dwLo == INVALID_FILE_SIZE){
		if(dwErrorCode != NOERROR){
			(*qwSize) = 0;
			return dwErrorCode;
		}
	}

	(*qwSize) = MAKEQWORD(dwHi, dwLo);

	return NO_ERROR;
}
Ejemplo n.º 2
0
bool   IncludesFile(const String& parent_path, const String& header_path)
{
	LTIMING("IncludesFile");
	int pi = sSrcFile.Find(parent_path);
	int i = sSrcFile.Find(header_path);
	return pi >= 0 && i >= 0 && sIncludes.Find(MAKEQWORD(pi, i)) >= 0;
}
Ejemplo n.º 3
0
void *MMapFile::get(__int64 offset, int *sizep) const
{
  if (!sizep)
    return NULL;

  assert(!m_pView);

  int size = *sizep;

  if (!m_iSize || offset + size > m_iSize)
  {
    extern void quit(); extern int g_display_errors;
    if (g_display_errors) 
    {
      PrintColorFmtMsg_ERR(_T("\nInternal compiler error #12345: error mmapping file (%I64d, %d) is out of range.\n"), offset, size);
    }
    quit();
  }

  // fix offset
  __int64 alignedoffset = offset - (offset % m_iAllocationGranularity);
  size += offset - alignedoffset;

#ifdef _WIN32
  assert(MAKEQWORD(LODWORD(alignedoffset),HIDWORD(alignedoffset)) == alignedoffset);
  m_pView = MapViewOfFile(m_hFileMap, m_bReadOnly ? FILE_MAP_READ : FILE_MAP_WRITE, HIDWORD(alignedoffset), LODWORD(alignedoffset), size);
#else
  m_pView = mmap(0, size, m_bReadOnly ? PROT_READ : PROT_READ | PROT_WRITE, MAP_SHARED, m_hFileDesc, alignedoffset);
  m_iMappedSize = *sizep = size;
#endif

#ifdef _WIN32
  if (!m_pView)
#else
  if (m_pView == MAP_FAILED)
#endif
  {
    extern void quit(); extern int g_display_errors;
    if (g_display_errors) 
    {
      PrintColorFmtMsg_ERR(_T("\nInternal compiler error #12345: error mmapping datablock to %d.\n"), size);
    }
    quit();
  }

  return (void *)((char *)m_pView + offset - alignedoffset);
}
Ejemplo n.º 4
0
bool Ctrl::IsWaitingEvent()
{
	GuiLock __;
	if(quit) {
		WhenDisconnect();
		EndSession();
		Exit(0);
	}
	while(socket.Timeout(0).WaitRead()) {
		socket.Timeout(20000);
		String s = websocket.Recieve();
		if(s.IsVoid()) { // No data returned -> means EOF was reached
			WhenDisconnect();
			EndSession();
			Exit(0);
		}
		LLOG("Recieved data " << s);
		StringStream ss(s);
		while(!ss.IsEof()) {
			String s = ss.GetLine();
			CParser p(s);
			try {
				if(p.Id("S")) {
					uint32 l = p.ReadNumber();
					uint32 h = p.ReadNumber();
					recieved_update_serial = MAKEQWORD(l, h);
					stat_client_ms = p.ReadNumber();
				}
				else
					event_queue.AddTail(s);
			}
			catch(CParser::Error) {}
		}
		if(recieved_update_serial == serial_0) {
			serial_0 = 0;
			stat_roundtrip_ms = msecs() - serial_time0;
			serial_time0 = Null;
		}
	}
	socket.Timeout(20000);
	if(socket.IsError())
		LLOG("ERROR: " << socket.GetErrorDesc());
	return event_queue.GetCount();
}
Ejemplo n.º 5
0
void GatherSources(const String& master_path, const String& path_, Vector<int>& parents)
{
	RHITCOUNT("GatherSources");
	String path = NormalizeSourcePath(path_);
	if(sSrcFile.Find(path) >= 0)
		return;
	int ii = sSrcFile.GetCount();
	for(int i = 0; i < parents.GetCount(); i++)
		sIncludes.Add(MAKEQWORD(parents[i], ii));
	sSrcFile.Add(path, master_path);
	parents.Add(ii);
	const PPFile& f = GetPPFile(path);
	for(int i = 0; i < f.includes.GetCount(); i++) {
		String p = GetIncludePath(f.includes[i], GetFileFolder(path));
		if(p.GetCount())
			GatherSources(master_path, p, parents);
	}
	parents.Drop();
}
Ejemplo n.º 6
0
int MMapFile::setfile(int hFile, __int64 dwSize)
#endif
{
  clear();

#ifdef _WIN32
  m_hFile = hFile;
#else
  m_hFileDesc = hFile;
#endif
  m_bTempHandle = FALSE;

#ifdef _WIN32
  if (m_hFile == INVALID_HANDLE_VALUE)
#else
  if (m_hFileDesc == -1)
#endif
    return 0;

  m_iSize = dwSize;

  if (m_iSize <= 0)
    return 0;

#ifdef _WIN32
  assert(MAKEQWORD(LODWORD(m_iSize),HIDWORD(m_iSize)) == m_iSize);
  m_hFileMap = CreateFileMapping(m_hFile, NULL, PAGE_READONLY, HIDWORD(m_iSize), LODWORD(m_iSize) , NULL);

  if (!m_hFileMap)
    return 0;
#endif

  m_bReadOnly = TRUE;

  return 1;
}
Ejemplo n.º 7
0
  DWORD FileDetailsReadMap(const TCHAR* filePath, QWORD&  qwSize, FILETIME& fileTime, DWORD& dwCheckSum
		, HANDLE evAbort) // bool volatile * pisAbort)
	{
		_ASSERTE(filePath);
		_ASSERTE(lstrlen(filePath));
		DWORD dwCrc32;
		DWORD dwErrorCode = NO_ERROR;
		HANDLE hFile = NULL, hFilemap = NULL;

		dwCrc32 = 0x0;
		LPBYTE pCrc = (LPBYTE)&dwCrc32; 
		FILETIME fileTime0;

		QWORD qwFileSize, qwFileSize0;
		try
		{
			// Open the file
			hFile = CreateFile(filePath,
				GENERIC_READ,
				FILE_SHARE_READ,
				NULL,
				OPEN_EXISTING,
				FILE_ATTRIBUTE_ARCHIVE | FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_SYSTEM | FILE_FLAG_SEQUENTIAL_SCAN,				NULL);
			if(hFile == INVALID_HANDLE_VALUE)
				throw GetLastErrorEx;

		  QWORD qwFileOffset = 0;
			DWORD dwByteCount, dwViewSize;
			LPVOID dwBaseAddress;

			{
				DWORD dwLo = 0, dwHi = 0;
				dwLo = GetFileSize(hFile, &dwHi);
				if(dwLo == INVALID_FILE_SIZE 
					&& (dwErrorCode = GetLastError()) != NO_ERROR)
					throw ExitEx;
				qwFileSize = qwFileSize0 = MAKEQWORD(dwHi, dwLo);
			}

			if (!GetFileTime(hFile, &fileTime0, NULL, NULL)) 
				throw GetLastErrorEx;
			// Get the file size
			//if(!GetFileSizeQW(hFile, qwFileSize))
			//	dwErrorCode = ERROR_BAD_LENGTH;
			//else 
			if(0 != qwFileSize)	// We cannot CRC zero byte files
			{
				// Create the file mapping
				hFilemap = CreateFileMapping(hFile,
					NULL,
					PAGE_READONLY,
					0,
					0,
					NULL);

				if(NULL == hFilemap)
					throw GetLastErrorEx;

				LPBYTE pByte;
				//LPDWORD pDWord;

				// Loop while we map a section of the file and CRC it
				while(0 < qwFileSize)
				{
					//if (*pisAbort)
					if (WaitForSingleObject(evAbort, 0) != WAIT_TIMEOUT)
					{
						dwErrorCode = ERROR_CANCELLED;
						throw ExitEx;
					}
					if(qwFileSize < MAX_VIEW_SIZE)
						dwViewSize = LODWORD(qwFileSize);
					else
						dwViewSize = MAX_VIEW_SIZE;

					dwBaseAddress = MapViewOfFile(hFilemap,
						FILE_MAP_READ,
						HIDWORD(qwFileOffset),
						LODWORD(qwFileOffset),
						dwViewSize);

					dwByteCount = dwViewSize;
					pByte = (LPBYTE)dwBaseAddress;
					BYTE checkSumOffset = 0;
					while(0 < dwByteCount--)
					{
						*(pCrc + checkSumOffset) ^= *pByte;
						pByte++;
						checkSumOffset++;
						if (4 <= checkSumOffset)
							checkSumOffset = 0;
					}

					UnmapViewOfFile((LPVOID)dwBaseAddress);
					qwFileOffset += dwViewSize;
					qwFileSize -= dwViewSize;
				}  // while(qwFileSize > 0)
			} // if(qwFileSize != 0)
		}
		catch(char c)
		{
			if (GetLastErrorEx == c)
				dwErrorCode = GetLastError();
		}
		catch(...)
		{
			// An unknown exception happened
			dwErrorCode = ERROR_CRC;
		}

		if(hFile != NULL) CloseHandle(hFile);
		if(hFilemap != NULL) CloseHandle(hFilemap);

		if (NO_ERROR == dwErrorCode)
		{
			qwSize = qwFileSize0;
			dwCheckSum = dwCrc32;
			fileTime = fileTime0;
		}
		return dwErrorCode;
	}
Ejemplo n.º 8
0
DWORD FileDetailsReadStd(const TCHAR* filePath, QWORD&  qwSize, FILETIME& fileTime, DWORD& dwCheckSum
		, HANDLE evAbort) // bool volatile * pisAbort
{
	_ASSERTE(filePath);
	_ASSERTE(lstrlen(filePath));

	DWORD dwErrorCode = NO_ERROR;
	HANDLE hFile = NULL;

	DWORD dwCrc32 = 0x0;
	LPBYTE pCrc = (LPBYTE)&dwCrc32; 
	QWORD qwFileSize;
	FILETIME fileTime0;

	try
	{
		// Open the file
		hFile = CreateFile(filePath,
			GENERIC_READ,
			FILE_SHARE_READ,
			NULL,
			OPEN_EXISTING,
			FILE_ATTRIBUTE_ARCHIVE | FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_SYSTEM | FILE_FLAG_SEQUENTIAL_SCAN
			//| FILE_FLAG_NO_BUFFERING
			,
			NULL);
		if(hFile == INVALID_HANDLE_VALUE)
			dwErrorCode = GetLastError();
		else
		{
			{
				DWORD dwLo = 0, dwHi = 0;
				dwLo = GetFileSize(hFile, &dwHi);
				if(dwLo == INVALID_FILE_SIZE 
					&& (dwErrorCode = GetLastError()) != NO_ERROR)
					throw ExitEx;
				qwFileSize = MAKEQWORD(dwHi, dwLo);
			}
			if (!GetFileTime(hFile, &fileTime0, NULL, NULL)) 
				throw GetLastErrorEx;

			BYTE buf[MAX_BUFFER_SIZE];
//BYTE buf_max[2 * MAX_BUFFER_SIZE - 1], *buf;
//
//  buf = (BYTE *) ((DWORD) (buf_max + MAX_BUFFER_SIZE - 1) & ~(MAX_BUFFER_SIZE - 1));

			DWORD dwBytesRead, dwLoop;
			while(true)
			{

				//if (*pisAbort)
				if (WaitForSingleObject(evAbort, 0) != WAIT_TIMEOUT)
				{
					dwErrorCode = ERROR_CANCELLED;
					break;
				}
			BOOL bSuccess = ReadFile(hFile, buf, MAX_BUFFER_SIZE, &dwBytesRead, NULL);
				if (!dwBytesRead)
					break;
				if (!bSuccess)
				{
					dwErrorCode = GetLastError();
					break;
				}
				BYTE checkSumOffset = 0;
				for(dwLoop = 0; dwLoop < dwBytesRead; dwLoop++)
				{
						*(pCrc + checkSumOffset) ^= buf[dwLoop];
						checkSumOffset++;
						if (4 <= checkSumOffset)
							checkSumOffset = 0;
					//CalcCrc32(buffer[dwLoop], dwCrc32);
				}
				//bSuccess = ReadFile(hFile, buffer, sizeof(buffer), &dwBytesRead, NULL);
			}
		}
	}
	catch(...)
	{
		// An unknown exception happened
		dwErrorCode = ERROR_CRC;
	}

	if(hFile != NULL) CloseHandle(hFile);


		if (NO_ERROR == dwErrorCode)
		{
			qwSize = qwFileSize;
			dwCheckSum = dwCrc32;
			fileTime = fileTime0;
		}	return dwErrorCode;
}
Ejemplo n.º 9
0
BOOL CThumbCache::Load(LPCTSTR pszPath, CImageFile* pImage)
{
	ASSERT( pszPath );
	ASSERT( pImage );

	// Load file info from disk
	WIN32_FIND_DATA fd = { 0 };
	if ( ! GetFileAttributesEx( pszPath, GetFileExInfoStandard, &fd ) )
	{
		// Deleted (or Ghost) file
		TRACE( "CThumbCache::Load : Can't load info for %s\n", (LPCSTR)CT2A( pszPath ) );
		return FALSE;
	}

	// Load file info from database
	auto_ptr< CDatabase > db( theApp.GetDatabase( DB_THUMBS ) );
	if ( ! *db )
	{
		TRACE( "CThumbCache::InitDatabase : Database error: %s\n", (LPCSTR)CT2A( db->GetLastErrorMessage() ) );
		return FALSE;
	}

	CString strPath( pszPath );
	strPath.MakeLower();

	if ( ! db->Prepare( _T("SELECT FileSize, LastWriteTime, Image FROM Files WHERE Filename == ?;") ) ||
		 ! db->Bind( 1, strPath ) ||
		 ! db->Step() ||
		 ! ( db->GetCount() == 0 || db->GetCount() == 3 ) )
	{
		TRACE( "CThumbCache::Load : Database error: %s\n", (LPCSTR)CT2A( db->GetLastErrorMessage() ) );
		return FALSE;
	}

	if ( db->GetCount() == 0 )
	{
		TRACE( "CThumbCache::Load : No thumbnail for %s\n", (LPCSTR)CT2A( pszPath ) );
		return FALSE;
	}

	QWORD nFileSize = (QWORD)db->GetInt64( _T("FileSize") );
	QWORD nLastWriteTime = (QWORD)db->GetInt64( _T("LastWriteTime") );
	int data_len;
	LPCVOID data = db->GetBlob( _T("Image"), &data_len );
	if ( ! data )
	{
		TRACE( "CThumbCache::Load : Database error: %s\n", (LPCSTR)CT2A( db->GetLastErrorMessage() ) );
		return FALSE;
	}

	// Compare it
	BOOL loaded = FALSE;
	if ( nFileSize == MAKEQWORD( fd.nFileSizeLow, fd.nFileSizeHigh ) &&
		nLastWriteTime == MAKEQWORD( fd.ftLastWriteTime.dwLowDateTime, fd.ftLastWriteTime.dwHighDateTime ) )
	{
		// Load image
		loaded = pImage->LoadFromMemory( _T(".jpg"), data, data_len );
	}

	if ( ! loaded )
		Delete( pszPath );		// Remove outdated or bad thumbnail

	return loaded;
}
Ejemplo n.º 10
0
BOOL CThumbCache::Store(LPCTSTR pszPath, CImageFile* pImage)
{
	ASSERT( pszPath );
	ASSERT( pImage );
	ASSERT( pImage->m_nWidth >= 0 && pImage->m_nHeight >= 0 );

	// Load file info from disk
	WIN32_FIND_DATA fd = { 0 };
	if ( ! GetFileAttributesEx( pszPath, GetFileExInfoStandard, &fd ) )
	{
		TRACE( "CThumbCache::Store : Can't load info for %s\n", (LPCSTR)CT2A( pszPath ) );
		return FALSE;
	}

	auto_ptr< CDatabase > db( theApp.GetDatabase( DB_THUMBS ) );
	if ( ! *db )
	{
		TRACE( "CThumbCache::InitDatabase : Database error: %s\n", (LPCSTR)CT2A( db->GetLastErrorMessage() ) );
		return FALSE;
	}

	CString strPath( pszPath );
	strPath.MakeLower();

	// Save to memory as JPEG image
	BYTE* buf = NULL;
	DWORD data_len = 0;
	if ( ! pImage->SaveToMemory( _T(".jpg"), Settings.Library.ThumbQuality, &buf, &data_len ) )		// ~75% JPEG
	{
		TRACE( "CThumbCache::Store : Can't save thumbnail to JPEG for %s\n", (LPCSTR)CT2A( pszPath ) );
		return FALSE;
	}
	auto_array< BYTE > data( buf );

	// Remove old image
	if ( ! db->Prepare( _T("DELETE FROM Files WHERE Filename == ?;") ) ||
		 ! db->Bind( 1, strPath ) )
	{
		TRACE( "CThumbCache::Store : Database error: %s\n", (LPCSTR)CT2A( db->GetLastErrorMessage() ) );
		return FALSE;
	}
	db->Step();

	// Store new one
	if ( ! db->Prepare( _T("INSERT INTO Files ( Filename, FileSize, LastWriteTime, Image ) VALUES ( ?, ?, ?, ? );") ) ||
		 ! db->Bind( 1, strPath ) ||
		 ! db->Bind( 2, (__int64)MAKEQWORD( fd.nFileSizeLow, fd.nFileSizeHigh ) ) ||
		 ! db->Bind( 3, (__int64)MAKEQWORD( fd.ftLastWriteTime.dwLowDateTime, fd.ftLastWriteTime.dwHighDateTime ) ) ||
		 ! db->Bind( 4, data.get(), data_len ) ||
		 ! db->Step() )
	{
		TRACE( "CThumbCache::Store : Database error: %s\n", (LPCSTR)CT2A( db->GetLastErrorMessage() ) );
		return FALSE;
	}

	TRACE( "CThumbCache::Store : Thumbnail saved for %s\n", (LPCSTR)CT2A( pszPath ) );

	CSingleLock oLock( &Library.m_pSection, FALSE );
	if ( ! oLock.Lock( 300 ) ) return TRUE;

	if ( CLibraryFile* pFile = LibraryMaps.LookupFileByPath( pszPath ) )
	{
		ASSERT( pFile->GetPath().MakeLower() == strPath );
		pFile->m_bCachedPreview = TRUE;
		Library.Update();
	}

	return TRUE;
}