From: Mikko L. <laz...@us...> - 2004-06-13 10:28:33
|
Update of /cvsroot/rtk/rtk/src/core/platform/win32 In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14291/platform/win32 Modified Files: File.cpp Log Message: - Some IO changes - Use ERROR things in File - Buffer is now IO Index: File.cpp =================================================================== RCS file: /cvsroot/rtk/rtk/src/core/platform/win32/File.cpp,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** File.cpp 21 Feb 2004 19:18:11 -0000 1.2 --- File.cpp 13 Jun 2004 10:27:58 -0000 1.3 *************** *** 52,58 **** { - // Dejan@T0D0: We don't maybe need this, because this file is for Win32 only anyway! :) #include <windows.h> #include <io.h> #ifndef INVALID_SET_FILE_POINTER # define INVALID_SET_FILE_POINTER 0xFFFFFFFF --- 52,58 ---- { #include <windows.h> #include <io.h> + #ifndef INVALID_SET_FILE_POINTER # define INVALID_SET_FILE_POINTER 0xFFFFFFFF *************** *** 97,101 **** } ! void File::SetMode(int mode) { ClearFlag(CAN_READ | CAN_WRITE, _flags); --- 97,101 ---- } ! void File::SetMode(uint mode) { ClearFlag(CAN_READ | CAN_WRITE, _flags); *************** *** 110,119 **** } ! bool File::Open() { ! const RCHAR *file = _filename.c_str(); ! if (_handle!=INVALID_HANDLE_VALUE) ! return false; DWORD access_rights = 0; DWORD disposition = OPEN_EXISTING; --- 110,119 ---- } ! int File::Open() { ! if(IsOpen()) ! ERROR_RETURN(ALREADY_OPEN); + const RCHAR *file = _filename.c_str(); DWORD access_rights = 0; DWORD disposition = OPEN_EXISTING; *************** *** 160,222 **** NULL); // If in append mode, seek to end ! if(_mode & APPEND) ! Seek(0, END); ! return IsOpen(); } ! bool File::Close() { // Do not close external handle! ! if (_flags & EXTERN_HANDLE) return false; ! if (_handle==INVALID_HANDLE_VALUE) return false; BOOL ret = CloseHandle((HANDLE)_handle); _handle = INVALID_HANDLE_VALUE; ! return (ret==TRUE); ! } ! bool File::IsOpen() const ! { ! return (_handle!=INVALID_HANDLE_VALUE); } ! int File::Read(void *buffer, int buffer_len) { ! if(!CanRead()) return false; ! if(_handle==INVALID_HANDLE_VALUE) return -1; DWORD read_bytes = 0; ! if(ReadFile(_handle, buffer, buffer_len, &read_bytes, NULL)) ! { _eos = (read_bytes == 0); return read_bytes; ! } _eos = true;//(GetLastError()==ERROR_HANDLE_EOF); ! return -1; } ! int File::Write(void *buffer, int buffer_len) { ! if(!CanWrite()) return false; ! if(_handle==INVALID_HANDLE_VALUE) return -1; DWORD written_bytes = 0; ! _eos = false; ! if(WriteFile(_handle, buffer, buffer_len, &written_bytes, NULL)) ! { return written_bytes; } ! return -1; } long File::Seek(long pos, IO::SeekMethod method) { ! if(_handle==INVALID_HANDLE_VALUE) return -1; DWORD W32method = FILE_BEGIN; --- 160,247 ---- NULL); + if(GetLastError() == ERROR_ACCESS_DENIED) + { + ERROR_RETURN(ACCESS_DENIED); + } + else if(GetLastError() == ERROR_FILE_NOT_FOUND) + { + ERROR_RETURN(FILE_NOT_FOUND); + } + // If in append mode, seek to end ! if(_mode & APPEND) { ! long ret = Seek(0, END); ! if(!SUCCESS(ret)) ! return ret; ! } ! SetOpen(); ! ! RETURN_SUCCESS; } ! int File::Close() { // Do not close external handle! ! if (_flags & EXTERN_HANDLE) ERROR_RETURN(CANNOT_CLOSE_EXTERNAL); ! if(!IsOpen()) ERROR_RETURN(DEVICE_NOT_OPEN); ! ! Lock(); BOOL ret = CloseHandle((HANDLE)_handle); _handle = INVALID_HANDLE_VALUE; ! ClearOpen(); ! Unlock(); ! ! if(ret==TRUE) ! RETURN_SUCCESS; ! ! ERROR_RETURN(OPERATION_FAILED); } ! long File::Read(void *buffer, long buffer_len) { ! if(!CanRead()) ERROR_RETURN(DEVICE_READ_PROTECTED); ! if(!IsOpen()) ERROR_RETURN(DEVICE_NOT_OPEN); DWORD read_bytes = 0; ! Lock(); ! ! if(ReadFile(_handle, buffer, buffer_len, &read_bytes, NULL)) { _eos = (read_bytes == 0); + Unlock(); return read_bytes; ! } _eos = true;//(GetLastError()==ERROR_HANDLE_EOF); ! Unlock(); ! ! ERROR_RETURN(OPERATION_FAILED); } ! long File::Write(void *buffer, long buffer_len) { ! if(!CanWrite()) ERROR_RETURN(DEVICE_WRITE_PROTECTED); ! if(!IsOpen()) ERROR_RETURN(DEVICE_NOT_OPEN); ! DWORD written_bytes = 0; ! Lock(); ! _eos = false; ! if(WriteFile(_handle, buffer, buffer_len, &written_bytes, NULL)) { ! Unlock(); return written_bytes; } ! Unlock(); ! ERROR_RETURN(OPERATION_FAILED); } long File::Seek(long pos, IO::SeekMethod method) { ! if(!IsOpen()) ERROR_RETURN(DEVICE_NOT_OPEN); DWORD W32method = FILE_BEGIN; *************** *** 227,235 **** }; DWORD ret = SetFilePointer(_handle, pos, NULL, W32method); if(ret == INVALID_SET_FILE_POINTER) { _eos = (GetLastError()==ERROR_HANDLE_EOF); ! return -1; } return (long)ret; } --- 252,265 ---- }; + Lock(); + DWORD ret = SetFilePointer(_handle, pos, NULL, W32method); if(ret == INVALID_SET_FILE_POINTER) { _eos = (GetLastError()==ERROR_HANDLE_EOF); ! Unlock(); ! ERROR_RETURN(OPERATION_FAILED); } + + Unlock(); return (long)ret; } *************** *** 237,256 **** long File::Tell() { ! if(_handle==INVALID_HANDLE_VALUE) return -1; DWORD ret = SetFilePointer(_handle, 0, NULL, FILE_CURRENT); if(ret == INVALID_SET_FILE_POINTER) { _eos = (GetLastError()==ERROR_HANDLE_EOF); ! return -1; } return (long)ret; } ! bool File::Flush() { ! if(_handle==INVALID_HANDLE_VALUE) return false; ! bool ret = (FlushFileBuffers(_handle)==TRUE); ! return ret; } --- 267,303 ---- long File::Tell() { ! if(!IsOpen()) ERROR_RETURN(DEVICE_NOT_OPEN); ! ! Lock(); DWORD ret = SetFilePointer(_handle, 0, NULL, FILE_CURRENT); if(ret == INVALID_SET_FILE_POINTER) { _eos = (GetLastError()==ERROR_HANDLE_EOF); ! ERROR_RETURN(OPERATION_FAILED); } + + Unlock(); return (long)ret; } ! int File::Flush() { ! if(!IsOpen()) ERROR_RETURN(DEVICE_NOT_OPEN); ! Lock(); ! bool success = (FlushFileBuffers(_handle)!=0); ! Unlock(); ! ! if(success) { ! RETURN_SUCCESS; ! } ! ! ERROR_RETURN(OPERATION_FAILED); ! } ! ! long File::GetSize() ! { ! if(!IsOpen()) ERROR_RETURN(DEVICE_NOT_OPEN); ! return GetFileSize(_handle, NULL); } |