Changeset f331c3c3903d…
Parent ef6ea1af6f56…
by
Changes to 6 files · Browse files at f331c3c3903d Showing diff from parent ef6ea1af6f56 Diff from another changeset...
@@ -57,8 +57,9 @@
CString strStatusPath = strHgRoot + "\\.hg\\thgstatus";
- FILE *pFile = fopenReadRenameAllowed(strStatusPath);
- if (!pFile)
+ CAtlFile file;
+ if (FAILED(file.Create(strStatusPath, GENERIC_READ,
+ FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE, OPEN_EXISTING)))
{
ATLTRACE("CDirectoryStatus::read: can't open '%s'\n", (LPCTSTR)strStatusPath);
CString p = (strCwd.GetLength() < strHgRoot.GetLength() ? strHgRoot : strCwd);
@@ -80,7 +81,7 @@
for (;;)
{
- if (fread(&chStatus, sizeof(char), 1, pFile) != 1) goto close;
+ if (FAILED(file.Read(&chStatus, sizeof(char)))) goto close;
if (chStatus == '\n') break;
strLine.AppendChar(chStatus);
if (strLine.GetLength() > 1000)
@@ -112,7 +113,7 @@ }
close:
- fclose(pFile);
+ file.Close();
ATLTRACE("DirectoryStatus::read(%d): done. %d entries read. noicons_ = %d\n",
m_listEntries.GetCount(), m_bNoIcons);
|
@@ -20,16 +20,16 @@ #include "Direntry.h"
#include "Winstat.h"
-int CDirentry::Read(FILE* pFile, CString& strRelPath)
+bool CDirentry::Read(CAtlFile& rFile, CString& strRelPath)
{
- if (fread(&m_chState, sizeof(char), 1, pFile) != 1) return 0;
+ if (FAILED(rFile.Read(&m_chState, sizeof(char)))) return false;
unsigned nLength = 0;
- fread(&m_uMode, sizeof(unsigned), 1, pFile);
- fread(&m_uSize, sizeof(unsigned), 1, pFile);
- fread(&m_uMTime, sizeof(unsigned), 1, pFile);
- fread(&nLength, sizeof(unsigned), 1, pFile);
+ rFile.Read(&m_uMode, sizeof(unsigned));
+ rFile.Read(&m_uSize, sizeof(unsigned));
+ rFile.Read(&m_uMTime, sizeof(unsigned));
+ rFile.Read(&nLength, sizeof(unsigned));
m_uMode = ntohl(m_uMode);
m_uSize = ntohl(m_uSize);
@@ -37,12 +37,12 @@ nLength = ntohl(nLength);
LPSTR lpszBuf = strRelPath.GetBuffer(nLength);
- fread(lpszBuf, sizeof(char), nLength, pFile);
+ rFile.Read(lpszBuf, nLength * sizeof(char));
strRelPath.ReleaseBuffer(nLength);
strRelPath = strRelPath.MakeLower();
- return 1;
+ return true;
}
char CDirentry::Status(const CWinstat& stat) const
|
@@ -30,7 +30,7 @@
CString m_strName;
- int Read(FILE* pFile, CString& strRelPath);
+ bool Read(CAtlFile& rFile, CString& strRelPath);
char Status(const CWinstat& stat) const;
bool Unset() const
|
@@ -24,8 +24,9 @@ {
bUnset = false;
- FILE *pFile = fopenReadRenameAllowed(strPath);
- if (!pFile)
+ CAtlFile file;
+ if (FAILED(file.Create(strPath, GENERIC_READ,
+ FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE, OPEN_EXISTING)))
{
ATLTRACE("Dirstate::read: can't open '%s'\n", (LPCTSTR)strPath);
return CAutoPtr<CDirstate>(NULL);
@@ -33,12 +34,12 @@
CAutoPtr<CDirstate> pd(new CDirstate());
- fread(&pd->m_szParent1, sizeof(char), HASH_LENGTH, pFile);
- fread(&pd->m_szParent2, sizeof(char), HASH_LENGTH, pFile);
+ file.Read(&pd->m_szParent1, HASH_LENGTH * sizeof(char));
+ file.Read(&pd->m_szParent2, HASH_LENGTH * sizeof(char));
CDirentry e;
CString strRelPath;
- while (e.Read(pFile, strRelPath))
+ while (e.Read(file, strRelPath))
{
if (e.Unset()) bUnset = true;
if (e.m_chState == 'a') ++pd->m_nNumAdded;
@@ -46,8 +47,7 @@ pd->Add(strRelPath, e);
}
- fclose(pFile);
-
+ file.Close();
return pd;
}
|
@@ -191,37 +191,6 @@ return !GetHgRepoRoot(lpszPath).IsEmpty();
}
-// open a file for reading, allowing renames and deletes by other
-// processes while we have it open
-FILE* fopenReadRenameAllowed(LPCTSTR lpszPath)
-{
- HANDLE hFile = ::CreateFile(lpszPath, GENERIC_READ,
- FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE,
- 0, OPEN_EXISTING, 0, 0);
-
- if (hFile == INVALID_HANDLE_VALUE) return 0;
-
- // get C runtime file descriptor from file handle
- int fd = _open_osfhandle((intptr_t)hFile, _O_RDONLY);
- if (fd == -1)
- {
- ATLTRACE("fopenReadRenameAllowed: _open_osfhandle failed\n");
- ::CloseHandle(hFile);
- return 0;
- }
-
- // get C runtime FILE from file descriptor
- FILE* pFile = _fdopen(fd, "r");
- if (pFile == 0)
- {
- ATLTRACE("fopenReadRenameAllowed: _fdopen failed\n");
- _close(fd);
- return 0;
- }
-
- return pFile;
-}
-
// read string value from registry, wide version
bool GetRegSZValueW(HKEY hKey, LPCWSTR lpszName, CStringW& strRes)
{
|
@@ -23,7 +23,6 @@ HICON GetTortoiseIcon(const CString& strIconName);
CString GetHgRepoRoot(LPCTSTR lpszPath);
bool IsHgRepo(const CString& lpszPath);
-FILE* fopenReadRenameAllowed(LPCTSTR lpszPath);
bool GetRegSZValueW(HKEY hKey, LPCWSTR lpszName, CStringW& strRes);
bool StartsWith(const CString& strWhole, const CString& strPrefix);
void Tokenize(CString str, CAtlList<CString>& rTokens, LPCTSTR lpszDelimiters = " ");
|
Loading...