HRESULT FileReader::GetStartPosition(__int64 *lpllpos) { //Do not get file size if static file unless first time if (m_bReadOnly || !m_fileStartPos) { if (m_hInfoFile != INVALID_HANDLE_VALUE) { // BoostThread Boost; __int64 size = 0; GetInfoFileSize(&size); //Check if timeshift info file if (size > sizeof(__int64)) { //Get the file start pointer __int64 length = -1; DWORD read = 0; LARGE_INTEGER li; li.QuadPart = sizeof(__int64); ::SetFilePointer(m_hInfoFile, li.LowPart, &li.HighPart, FILE_BEGIN); ::ReadFile(m_hInfoFile, (PVOID)&length, (DWORD)sizeof(__int64), &read, NULL); if(length > -1) { m_fileStartPos = length; *lpllpos = length; return S_OK; } } } m_fileStartPos = 0; } *lpllpos = m_fileStartPos; return S_OK; }
long FileReader::GetStartPosition(int64_t *lpllpos) { //Do not get file size if static file unless first time if (m_bReadOnly || !m_fileStartPos) { if (m_hInfoFile != INVALID_HANDLE_VALUE) { int64_t size = 0; GetInfoFileSize(&size); //Check if timeshift info file if (size > sizeof(int64_t)) { //Get the file start pointer int64_t length = -1; #ifdef _WIN32 DWORD read = 0; LARGE_INTEGER li; li.QuadPart = sizeof(int64_t); ::SetFilePointer(m_hInfoFile, li.LowPart, &li.HighPart, FILE_BEGIN); ::ReadFile(m_hInfoFile, (void*)&length, (DWORD)sizeof(int64_t), &read, NULL); #else //TODO: lseek (or fseek for fopen) #error FIXME: Add a GetStartPosition() implementation for your OS #endif if(length > -1) { m_fileStartPos = length; *lpllpos = length; return S_OK; } } } m_fileStartPos = 0; } *lpllpos = m_fileStartPos; return S_OK; }