fix to NormFile::Open() where 'flags' were not properly saved and affected NormFile::Rename()
parent
6188965887
commit
2ae69e6e96
|
|
@ -136,6 +136,7 @@ bool NormFile::Open(const char* thePath, int theFlags)
|
||||||
if((fd = open(thePath, theFlags, 0640)) >= 0)
|
if((fd = open(thePath, theFlags, 0640)) >= 0)
|
||||||
{
|
{
|
||||||
offset = 0;
|
offset = 0;
|
||||||
|
flags = theFlags;
|
||||||
return true; // no error
|
return true; // no error
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
@ -246,9 +247,11 @@ bool NormFile::Rename(const char* oldName, const char* newName)
|
||||||
#endif // WIN32
|
#endif // WIN32
|
||||||
// In Win32, the old file can't be open and on Unix (Linux at least), it's better
|
// In Win32, the old file can't be open and on Unix (Linux at least), it's better
|
||||||
// performance to close/reopen a file being renamed
|
// performance to close/reopen a file being renamed
|
||||||
|
bool wasOpen = false;
|
||||||
int oldFlags = 0;
|
int oldFlags = 0;
|
||||||
if (IsOpen())
|
if (IsOpen())
|
||||||
{
|
{
|
||||||
|
wasOpen = true;
|
||||||
oldFlags = flags;
|
oldFlags = flags;
|
||||||
oldFlags &= ~(O_CREAT | O_TRUNC); // unset these
|
oldFlags &= ~(O_CREAT | O_TRUNC); // unset these
|
||||||
Close();
|
Close();
|
||||||
|
|
@ -321,22 +324,19 @@ bool NormFile::Rename(const char* oldName, const char* newName)
|
||||||
{
|
{
|
||||||
PLOG(PL_ERROR, "NormFile::Rename() rename() error: %s\n", GetErrorString());
|
PLOG(PL_ERROR, "NormFile::Rename() rename() error: %s\n", GetErrorString());
|
||||||
#endif // if/else _WIN32_WCE / WIN32|UNIX
|
#endif // if/else _WIN32_WCE / WIN32|UNIX
|
||||||
if (oldFlags)
|
if (wasOpen && !Open(oldName, oldFlags))
|
||||||
{
|
PLOG(PL_ERROR, "NormFile::Rename() error re-opening file w/ old name\n");
|
||||||
if (!Open(oldName, oldFlags))
|
|
||||||
PLOG(PL_ERROR, "NormFile::Rename() error re-opening file w/ old name\n");
|
|
||||||
}
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (oldFlags)
|
if (wasOpen && !Open(newName, oldFlags))
|
||||||
{
|
{
|
||||||
if (!Open(newName, oldFlags))
|
PLOG(PL_ERROR, "NormFile::Rename() error opening file w/ new name\n");
|
||||||
PLOG(PL_ERROR, "NormFile::Rename() error opening file w/ new name\n");
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
} // end NormFile::Rename()
|
} // end NormFile::Rename()
|
||||||
|
|
||||||
size_t NormFile::Read(char* buffer, size_t len)
|
size_t NormFile::Read(char* buffer, size_t len)
|
||||||
|
|
@ -388,10 +388,11 @@ size_t NormFile::Write(const char* buffer, size_t len)
|
||||||
#endif // if/else _WIN32_WCE
|
#endif // if/else _WIN32_WCE
|
||||||
#else
|
#else
|
||||||
size_t result = write(fd, buffer+put, len-put);
|
size_t result = write(fd, buffer+put, len-put);
|
||||||
|
if (result <= 0) perror("NormFile::Write() write() error");
|
||||||
#endif // if/else WIN32
|
#endif // if/else WIN32
|
||||||
if (result <= 0)
|
if (result <= 0)
|
||||||
{
|
{
|
||||||
#ifndef _WIN32_WCE
|
#ifndef _WIN32_WCE
|
||||||
if (EINTR != errno)
|
if (EINTR != errno)
|
||||||
#endif // !_WIN32_WCE
|
#endif // !_WIN32_WCE
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue