diff options
author | Reinhard Tartler <siretart@tauware.de> | 2008-01-19 15:08:54 +0100 |
---|---|---|
committer | Reinhard Tartler <siretart@tauware.de> | 2008-01-19 15:08:54 +0100 |
commit | 2733267954e91e394fbb512ea3abb4c497c0752f (patch) | |
tree | d6cdebd8776bceba06a2fb5e4ed06a4744bc1b57 /lib/common/FileStream.cpp | |
parent | 1d56581c644c53f1b9a182c6574bc2fc5243d4d1 (diff) |
import version 0.11rc1
This commit has been made by 'bzr import'. I used the upstream tarball
of Version 0.11rc1 for creating it. It has the md5sum:
75608d8bb72dff9a556850ccd0ae8cb9
Diffstat (limited to 'lib/common/FileStream.cpp')
-rw-r--r-- | lib/common/FileStream.cpp | 55 |
1 files changed, 41 insertions, 14 deletions
diff --git a/lib/common/FileStream.cpp b/lib/common/FileStream.cpp index 57da9be8..9548ca72 100644 --- a/lib/common/FileStream.cpp +++ b/lib/common/FileStream.cpp @@ -1,4 +1,4 @@ -// distribution boxbackup-0.10 (svn version: 494) +// distribution boxbackup-0.11rc1 (svn version: 2023_2024) // // Copyright (c) 2003 - 2006 // Ben Summers and contributors. All rights reserved. @@ -48,6 +48,9 @@ #include "Box.h" #include "FileStream.h" #include "CommonException.h" +#include "Logging.h" + +#include <errno.h> #include "MemLeakFindOn.h" @@ -68,13 +71,21 @@ FileStream::FileStream(const char *Filename, int flags, int mode) mIsEOF(false) { #ifdef WIN32 - if(mOSFileHandle == 0) + if(mOSFileHandle == INVALID_HANDLE_VALUE) #else if(mOSFileHandle < 0) #endif { MEMLEAKFINDER_NOT_A_LEAK(this); - THROW_EXCEPTION(CommonException, OSFileOpenError) + + if(errno == EACCES) + { + THROW_EXCEPTION(CommonException, AccessDenied) + } + else + { + THROW_EXCEPTION(CommonException, OSFileOpenError) + } } #ifdef WIN32 this->fileName = Filename; @@ -85,7 +96,7 @@ FileStream::FileStream(const char *Filename, int flags, int mode) // -------------------------------------------------------------------------- // // Function -// Name: FileStream::FileStream(int) +// Name: FileStream::FileStream(tOSFileHandle) // Purpose: Constructor, using existing file descriptor // Created: 2003/08/28 // @@ -94,11 +105,19 @@ FileStream::FileStream(tOSFileHandle FileDescriptor) : mOSFileHandle(FileDescriptor), mIsEOF(false) { +#ifdef WIN32 + if(mOSFileHandle == INVALID_HANDLE_VALUE) +#else if(mOSFileHandle < 0) +#endif { MEMLEAKFINDER_NOT_A_LEAK(this); + BOX_ERROR("FileStream: called with invalid file handle"); THROW_EXCEPTION(CommonException, OSFileOpenError) } +#ifdef WIN32 + this->fileName = "HANDLE"; +#endif } #if 0 @@ -114,9 +133,14 @@ FileStream::FileStream(const FileStream &rToCopy) : mOSFileHandle(::dup(rToCopy.mOSFileHandle)), mIsEOF(rToCopy.mIsEOF) { +#ifdef WIN32 + if(mOSFileHandle == INVALID_HANDLE_VALUE) +#else if(mOSFileHandle < 0) +#endif { MEMLEAKFINDER_NOT_A_LEAK(this); + BOX_ERROR("FileStream: copying unopened file"); THROW_EXCEPTION(CommonException, OSFileOpenError) } } @@ -168,8 +192,14 @@ int FileStream::Read(void *pBuffer, int NBytes, int Timeout) { r = numBytesRead; } + else if (GetLastError() == ERROR_BROKEN_PIPE) + { + r = 0; + } else { + BOX_ERROR("Failed to read from file: " << + GetErrorMessage(GetLastError())); r = -1; } #else @@ -233,7 +263,7 @@ void FileStream::Write(const void *pBuffer, int NBytes) NULL ); - if ( (res == 0) || (numBytesWritten != NBytes)) + if ((res == 0) || (numBytesWritten != (DWORD)NBytes)) { // DWORD err = GetLastError(); THROW_EXCEPTION(CommonException, OSFileWriteError) @@ -304,7 +334,7 @@ void FileStream::Seek(IOStream::pos_type Offset, int SeekType) conv.QuadPart = Offset; DWORD retVal = SetFilePointer(this->mOSFileHandle, conv.LowPart, &conv.HighPart, ConvertSeekTypeToOSWhence(SeekType)); - if ( retVal == INVALID_SET_FILE_POINTER && (GetLastError() != NO_ERROR) ) + if(retVal == INVALID_SET_FILE_POINTER && GetLastError() != NO_ERROR) { THROW_EXCEPTION(CommonException, OSFileError) } @@ -330,25 +360,22 @@ void FileStream::Seek(IOStream::pos_type Offset, int SeekType) // -------------------------------------------------------------------------- void FileStream::Close() { - if(mOSFileHandle < 0) + if(mOSFileHandle == INVALID_FILE) { THROW_EXCEPTION(CommonException, FileAlreadyClosed) } + #ifdef WIN32 if(::CloseHandle(mOSFileHandle) == 0) - { - THROW_EXCEPTION(CommonException, OSFileCloseError) - } - mOSFileHandle = NULL; - mIsEOF = true; #else if(::close(mOSFileHandle) != 0) +#endif { THROW_EXCEPTION(CommonException, OSFileCloseError) } - mOSFileHandle = -1; + + mOSFileHandle = INVALID_FILE; mIsEOF = true; -#endif } |